parent
08c7f311c4
commit
a8e6cd26dc
@ -1,6 +1,6 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
import itertools
|
import logging
|
||||||
import urlparse
|
import urlparse
|
||||||
|
|
||||||
import pykka
|
import pykka
|
||||||
@ -10,6 +10,9 @@ from mopidy.models import Playlist
|
|||||||
from mopidy.utils.deprecation import deprecated_property
|
from mopidy.utils.deprecation import deprecated_property
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class PlaylistsController(object):
|
class PlaylistsController(object):
|
||||||
pykka_traversable = True
|
pykka_traversable = True
|
||||||
|
|
||||||
@ -29,11 +32,20 @@ class PlaylistsController(object):
|
|||||||
|
|
||||||
.. versionadded:: 1.0
|
.. versionadded:: 1.0
|
||||||
"""
|
"""
|
||||||
futures = [
|
futures = {
|
||||||
b.playlists.as_list()
|
b.actor_ref.actor_class.__name__: b.playlists.as_list()
|
||||||
for b in self.backends.with_playlists.values()]
|
for b in set(self.backends.with_playlists.values())}
|
||||||
results = pykka.get_all(futures)
|
|
||||||
return list(itertools.chain(*results))
|
results = []
|
||||||
|
for backend_name, future in futures.items():
|
||||||
|
try:
|
||||||
|
results.extend(future.get())
|
||||||
|
except NotImplementedError:
|
||||||
|
logger.warning(
|
||||||
|
'%s does not implement playlists.as_list(). '
|
||||||
|
'Please upgrade it.', backend_name)
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
def get_items(self, uri):
|
def get_items(self, uri):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -31,10 +31,12 @@ class PlaylistsTest(unittest.TestCase):
|
|||||||
self.sp2.lookup.return_value.get.side_effect = [self.pl2a, self.pl2b]
|
self.sp2.lookup.return_value.get.side_effect = [self.pl2a, self.pl2b]
|
||||||
|
|
||||||
self.backend1 = mock.Mock()
|
self.backend1 = mock.Mock()
|
||||||
|
self.backend1.actor_ref.actor_class.__name__ = 'Backend1'
|
||||||
self.backend1.uri_schemes.get.return_value = ['dummy1']
|
self.backend1.uri_schemes.get.return_value = ['dummy1']
|
||||||
self.backend1.playlists = self.sp1
|
self.backend1.playlists = self.sp1
|
||||||
|
|
||||||
self.backend2 = mock.Mock()
|
self.backend2 = mock.Mock()
|
||||||
|
self.backend2.actor_ref.actor_class.__name__ = 'Backend2'
|
||||||
self.backend2.uri_schemes.get.return_value = ['dummy2']
|
self.backend2.uri_schemes.get.return_value = ['dummy2']
|
||||||
self.backend2.playlists = self.sp2
|
self.backend2.playlists = self.sp2
|
||||||
|
|
||||||
@ -55,6 +57,15 @@ class PlaylistsTest(unittest.TestCase):
|
|||||||
self.assertIn(self.plr2a, result)
|
self.assertIn(self.plr2a, result)
|
||||||
self.assertIn(self.plr2b, result)
|
self.assertIn(self.plr2b, result)
|
||||||
|
|
||||||
|
def test_as_list_ignores_backends_that_dont_support_it(self):
|
||||||
|
self.sp2.as_list.return_value.get.side_effect = NotImplementedError
|
||||||
|
|
||||||
|
result = self.core.playlists.as_list()
|
||||||
|
|
||||||
|
self.assertEqual(len(result), 2)
|
||||||
|
self.assertIn(self.plr1a, result)
|
||||||
|
self.assertIn(self.plr1b, result)
|
||||||
|
|
||||||
def test_get_items_selects_the_matching_backend(self):
|
def test_get_items_selects_the_matching_backend(self):
|
||||||
ref = Ref.track()
|
ref = Ref.track()
|
||||||
self.sp2.get_items.return_value.get.return_value = [ref]
|
self.sp2.get_items.return_value.get.return_value = [ref]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user