Make core.stored_playlists.playlists support multiple backends
This commit is contained in:
parent
a35deec050
commit
0641d2d207
@ -1,3 +1,6 @@
|
||||
import pykka
|
||||
|
||||
|
||||
class StoredPlaylistsController(object):
|
||||
pykka_traversable = True
|
||||
|
||||
@ -12,10 +15,14 @@ class StoredPlaylistsController(object):
|
||||
|
||||
Read/write. List of :class:`mopidy.models.Playlist`.
|
||||
"""
|
||||
return self.backends[0].stored_playlists.playlists.get()
|
||||
futures = [backend.stored_playlists.playlists
|
||||
for backend in self.backends]
|
||||
results = pykka.get_all(futures)
|
||||
return [playlist for result in results for playlist in result]
|
||||
|
||||
@playlists.setter # noqa
|
||||
def playlists(self, playlists):
|
||||
# TODO Support multiple backends
|
||||
self.backends[0].stored_playlists.playlists = playlists
|
||||
|
||||
def create(self, name):
|
||||
@ -26,6 +33,7 @@ class StoredPlaylistsController(object):
|
||||
:type name: string
|
||||
:rtype: :class:`mopidy.models.Playlist`
|
||||
"""
|
||||
# TODO Support multiple backends
|
||||
return self.backends[0].stored_playlists.create(name).get()
|
||||
|
||||
def delete(self, playlist):
|
||||
@ -35,6 +43,7 @@ class StoredPlaylistsController(object):
|
||||
:param playlist: the playlist to delete
|
||||
:type playlist: :class:`mopidy.models.Playlist`
|
||||
"""
|
||||
# TODO Support multiple backends
|
||||
return self.backends[0].stored_playlists.delete(playlist).get()
|
||||
|
||||
def get(self, **criteria):
|
||||
@ -76,12 +85,14 @@ class StoredPlaylistsController(object):
|
||||
:type uri: string
|
||||
:rtype: :class:`mopidy.models.Playlist`
|
||||
"""
|
||||
# TODO Support multiple backends
|
||||
return self.backends[0].stored_playlists.lookup(uri).get()
|
||||
|
||||
def refresh(self):
|
||||
"""
|
||||
Refresh the stored playlists in :attr:`playlists`.
|
||||
"""
|
||||
# TODO Support multiple backends
|
||||
return self.backends[0].stored_playlists.refresh().get()
|
||||
|
||||
def rename(self, playlist, new_name):
|
||||
@ -93,6 +104,7 @@ class StoredPlaylistsController(object):
|
||||
:param new_name: the new name
|
||||
:type new_name: string
|
||||
"""
|
||||
# TODO Support multiple backends
|
||||
return self.backends[0].stored_playlists.rename(
|
||||
playlist, new_name).get()
|
||||
|
||||
@ -103,4 +115,5 @@ class StoredPlaylistsController(object):
|
||||
:param playlist: the playlist
|
||||
:type playlist: :class:`mopidy.models.Playlist`
|
||||
"""
|
||||
# TODO Support multiple backends
|
||||
return self.backends[0].stored_playlists.save(playlist).get()
|
||||
|
||||
41
tests/core/stored_playlists_test.py
Normal file
41
tests/core/stored_playlists_test.py
Normal file
@ -0,0 +1,41 @@
|
||||
import mock
|
||||
|
||||
from mopidy.backends import base
|
||||
from mopidy.core import Core
|
||||
from mopidy.models import Playlist, Track
|
||||
|
||||
from tests import unittest
|
||||
|
||||
|
||||
class StoredPlaylistsTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.backend1 = mock.Mock()
|
||||
self.backend1.uri_schemes.get.return_value = ['dummy1']
|
||||
self.sp1 = mock.Mock(spec=base.BaseStoredPlaylistsProvider)
|
||||
self.backend1.stored_playlists = self.sp1
|
||||
|
||||
self.backend2 = mock.Mock()
|
||||
self.backend2.uri_schemes.get.return_value = ['dummy2']
|
||||
self.sp2 = mock.Mock(spec=base.BaseStoredPlaylistsProvider)
|
||||
self.backend2.stored_playlists = self.sp2
|
||||
|
||||
self.pl1a = Playlist(tracks=[Track(uri='dummy1:a')])
|
||||
self.pl1b = Playlist(tracks=[Track(uri='dummy1:b')])
|
||||
self.sp1.playlists.get.return_value = [self.pl1a, self.pl1b]
|
||||
|
||||
self.pl2a = Playlist(tracks=[Track(uri='dummy2:a')])
|
||||
self.pl2b = Playlist(tracks=[Track(uri='dummy2:b')])
|
||||
self.sp2.playlists.get.return_value = [self.pl2a, self.pl2b]
|
||||
|
||||
self.core = Core(audio=None, backends=[self.backend1, self.backend2])
|
||||
|
||||
def test_get_playlists_combines_result_from_backends(self):
|
||||
result = self.core.stored_playlists.playlists
|
||||
|
||||
self.assertIn(self.pl1a, result)
|
||||
self.assertIn(self.pl1b, result)
|
||||
self.assertIn(self.pl2a, result)
|
||||
self.assertIn(self.pl2b, result)
|
||||
|
||||
# TODO The rest of the stored playlists API is pending redesign before
|
||||
# we'll update it to support multiple backends.
|
||||
Loading…
Reference in New Issue
Block a user