Update the library controller to support backends without a library
This commit is contained in:
parent
429e87fe6e
commit
6f32d72792
@ -15,7 +15,7 @@ class LibraryController(object):
|
||||
|
||||
def _get_backend(self, uri):
|
||||
uri_scheme = urlparse.urlparse(uri).scheme
|
||||
return self.backends.by_uri_scheme.get(uri_scheme, None)
|
||||
return self.backends.with_library_by_uri_scheme.get(uri_scheme, None)
|
||||
|
||||
def find_exact(self, **query):
|
||||
"""
|
||||
@ -34,7 +34,8 @@ class LibraryController(object):
|
||||
:type query: dict
|
||||
:rtype: :class:`mopidy.models.Playlist`
|
||||
"""
|
||||
futures = [b.library.find_exact(**query) for b in self.backends]
|
||||
futures = [b.library.find_exact(**query)
|
||||
for b in self.backends.with_library]
|
||||
results = pykka.get_all(futures)
|
||||
return Playlist(tracks=[
|
||||
track for playlist in results for track in playlist.tracks])
|
||||
@ -65,7 +66,8 @@ class LibraryController(object):
|
||||
if backend:
|
||||
backend.library.refresh(uri).get()
|
||||
else:
|
||||
futures = [b.library.refresh(uri) for b in self.backends]
|
||||
futures = [b.library.refresh(uri)
|
||||
for b in self.backends.with_library]
|
||||
pykka.get_all(futures)
|
||||
|
||||
def search(self, **query):
|
||||
@ -85,7 +87,8 @@ class LibraryController(object):
|
||||
:type query: dict
|
||||
:rtype: :class:`mopidy.models.Playlist`
|
||||
"""
|
||||
futures = [b.library.search(**query) for b in self.backends]
|
||||
futures = [b.library.search(**query)
|
||||
for b in self.backends.with_library]
|
||||
results = pykka.get_all(futures)
|
||||
track_lists = [playlist.tracks for playlist in results]
|
||||
tracks = list(itertools.chain(*track_lists))
|
||||
|
||||
@ -19,7 +19,13 @@ class CoreLibraryTest(unittest.TestCase):
|
||||
self.library2 = mock.Mock(spec=base.BaseLibraryProvider)
|
||||
self.backend2.library = self.library2
|
||||
|
||||
self.core = Core(audio=None, backends=[self.backend1, self.backend2])
|
||||
# A backend without the optional library provider
|
||||
self.backend3 = mock.Mock()
|
||||
self.backend3.uri_schemes.get.return_value = ['dummy3']
|
||||
self.backend3.has_library().get.return_value = False
|
||||
|
||||
self.core = Core(audio=None, backends=[
|
||||
self.backend1, self.backend2, self.backend3])
|
||||
|
||||
def test_lookup_selects_dummy1_backend(self):
|
||||
self.core.library.lookup('dummy1:a')
|
||||
@ -33,6 +39,13 @@ class CoreLibraryTest(unittest.TestCase):
|
||||
self.assertFalse(self.library1.lookup.called)
|
||||
self.library2.lookup.assert_called_once_with('dummy2:a')
|
||||
|
||||
def test_lookup_fails_for_dummy3_track(self):
|
||||
result = self.core.library.lookup('dummy3:a')
|
||||
|
||||
self.assertIsNone(result)
|
||||
self.assertFalse(self.library1.lookup.called)
|
||||
self.assertFalse(self.library2.lookup.called)
|
||||
|
||||
def test_refresh_with_uri_selects_dummy1_backend(self):
|
||||
self.core.library.refresh('dummy1:a')
|
||||
|
||||
@ -45,6 +58,12 @@ class CoreLibraryTest(unittest.TestCase):
|
||||
self.assertFalse(self.library1.refresh.called)
|
||||
self.library2.refresh.assert_called_once_with('dummy2:a')
|
||||
|
||||
def test_refresh_with_uri_fails_silently_for_dummy3_uri(self):
|
||||
self.core.library.refresh('dummy3:a')
|
||||
|
||||
self.assertFalse(self.library1.refresh.called)
|
||||
self.assertFalse(self.library2.refresh.called)
|
||||
|
||||
def test_refresh_without_uri_calls_all_backends(self):
|
||||
self.core.library.refresh()
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user