diff --git a/.mailmap b/.mailmap index 718d8f4b..0682f673 100644 --- a/.mailmap +++ b/.mailmap @@ -24,4 +24,6 @@ Christopher Schirner John Cass Ronald Zielaznicki +Kyle Heyne Tom Roth +Eric Jahn diff --git a/AUTHORS b/AUTHORS index 258967c3..c2baca6c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -57,5 +57,8 @@ - Camilo Nova - Dražen Lučanin - Naglis Jonaitis +- Kyle Heyne - Tom Roth - Mark Greenwood +- Stein Karlsen +- Eric Jahn diff --git a/mopidy/__main__.py b/mopidy/__main__.py index 245a03ce..ee359268 100644 --- a/mopidy/__main__.py +++ b/mopidy/__main__.py @@ -166,7 +166,7 @@ def main(): raise -def create_file_structures_and_config(args, extensions): +def create_file_structures_and_config(args, extensions_data): path.get_or_create_dir(b'$XDG_DATA_DIR/mopidy') path.get_or_create_dir(b'$XDG_CONFIG_DIR/mopidy') @@ -176,7 +176,7 @@ def create_file_structures_and_config(args, extensions): return try: - default = config_lib.format_initial(extensions) + default = config_lib.format_initial(extensions_data) path.get_or_create_file(config_file, mkdir=False, content=default) logger.info('Initialized %s with default config', config_file) except IOError as error: diff --git a/mopidy/config/__init__.py b/mopidy/config/__init__.py index 561d202a..042c20d9 100644 --- a/mopidy/config/__init__.py +++ b/mopidy/config/__init__.py @@ -90,20 +90,23 @@ def format(config, ext_schemas, comments=None, display=True): return _format(config, comments or {}, schemas, display, False) -def format_initial(extensions): +def format_initial(extensions_data): config_dir = os.path.dirname(__file__) defaults = [read(os.path.join(config_dir, 'default.conf'))] - defaults.extend(e.get_default_config() for e in extensions) + defaults.extend(d.extension.get_default_config() for d in extensions_data) raw_config = _load([], defaults, []) schemas = _schemas[:] - schemas.extend(e.get_config_schema() for e in extensions) + schemas.extend(d.extension.get_config_schema() for d in extensions_data) config, errors = _validate(raw_config, schemas) versions = ['Mopidy %s' % versioning.get_version()] - for extension in sorted(extensions, key=lambda ext: ext.dist_name): - versions.append('%s %s' % (extension.dist_name, extension.version)) + extensions_data = sorted( + extensions_data, key=lambda d: d.extension.dist_name) + for data in extensions_data: + versions.append('%s %s' % ( + data.extension.dist_name, data.extension.version)) header = _INITIAL_HELP.strip() % {'versions': '\n# '.join(versions)} formatted_config = _format( diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index f374127a..9a11066b 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -348,8 +348,11 @@ class PlaybackController(object): backend.playback.change_track(tl_track.track).get() and backend.playback.play().get()) except TypeError: - logger.error('%s needs to be updated to work with this ' - 'version of Mopidy.', backend) + logger.error( + '%s needs to be updated to work with this ' + 'version of Mopidy.', + backend.actor_ref.actor_class.__name__) + logger.debug('Backend exception', exc_info=True) if success: self.core.tracklist._mark_playing(tl_track) diff --git a/tests/config/test_config.py b/tests/config/test_config.py index 139f3a69..fa2285b8 100644 --- a/tests/config/test_config.py +++ b/tests/config/test_config.py @@ -6,7 +6,7 @@ import unittest import mock -from mopidy import config +from mopidy import config, ext from tests import path_to_data_dir @@ -292,3 +292,23 @@ class PostProcessorTest(unittest.TestCase): def test_conversion(self): result = config._postprocess(PROCESSED_CONFIG) self.assertEqual(result, INPUT_CONFIG) + + +def test_format_initial(): + extension = ext.Extension() + extension.ext_name = 'foo' + extension.get_default_config = lambda: None + extensions_data = [ + ext.ExtensionData( + extension=extension, + entry_point=None, + config_schema=None, + config_defaults=None, + command=None, + ), + ] + + result = config.format_initial(extensions_data) + + assert '# For further information' in result + assert '[foo]\n' in result diff --git a/tests/core/test_playback.py b/tests/core/test_playback.py index 0e51c4db..5a8c9649 100644 --- a/tests/core/test_playback.py +++ b/tests/core/test_playback.py @@ -724,6 +724,7 @@ class CorePlaybackWithOldBackendTest(unittest.TestCase): } b = mock.Mock() + b.actor_ref.actor_class.__name__ = 'DummyBackend' b.uri_schemes.get.return_value = ['dummy1'] b.playback = mock.Mock(spec=backend.PlaybackProvider) b.playback.play.side_effect = TypeError diff --git a/tests/file/test_browse.py b/tests/file/test_browse.py index baffc488..81021966 100644 --- a/tests/file/test_browse.py +++ b/tests/file/test_browse.py @@ -1 +1,3 @@ from __future__ import unicode_literals + +# TODO Test browse() diff --git a/tests/file/test_lookup.py b/tests/file/test_lookup.py index baffc488..19c07181 100644 --- a/tests/file/test_lookup.py +++ b/tests/file/test_lookup.py @@ -1 +1,3 @@ from __future__ import unicode_literals + +# TODO Test lookup() diff --git a/tests/m3u/test_playlists.py b/tests/m3u/test_playlists.py index f490887a..edebe65b 100644 --- a/tests/m3u/test_playlists.py +++ b/tests/m3u/test_playlists.py @@ -3,6 +3,7 @@ from __future__ import absolute_import, unicode_literals import os +import platform import shutil import tempfile import unittest @@ -156,8 +157,11 @@ class M3UPlaylistsProviderTest(unittest.TestCase): self.core.playlists.refresh() self.assertEqual(len(self.core.playlists.as_list()), 1) - result = self.core.playlists.lookup(uri) - self.assertEqual('\ufffd\ufffd\ufffd', result.name) + result = self.core.playlists.as_list() + if platform.system() == 'Darwin': + self.assertEqual('%F8%E6%E5', result[0].name) + else: + self.assertEqual('\ufffd\ufffd\ufffd', result[0].name) @unittest.SkipTest def test_playlists_dir_is_created(self):