Make core.stored_playlists.create() support multibackend (#217)
This commit is contained in:
parent
0ddbb4e28a
commit
e2474da1ef
@ -21,16 +21,26 @@ class StoredPlaylistsController(object):
|
||||
results = pykka.get_all(futures)
|
||||
return list(itertools.chain(*results))
|
||||
|
||||
def create(self, name):
|
||||
def create(self, name, uri_scheme=None):
|
||||
"""
|
||||
Create a new playlist.
|
||||
|
||||
If ``uri_scheme`` matches an URI scheme handled by a current backend,
|
||||
that backend is asked to create the playlist. If ``uri_scheme`` is
|
||||
:class:`None` or doesn't match a current backend, the first backend is
|
||||
asked to create the playlist.
|
||||
|
||||
:param name: name of the new playlist
|
||||
:type name: string
|
||||
:param uri_scheme: use the backend matching the URI scheme
|
||||
:type uri_scheme: string
|
||||
:rtype: :class:`mopidy.models.Playlist`
|
||||
"""
|
||||
# TODO Support multiple backends
|
||||
return self.backends[0].stored_playlists.create(name).get()
|
||||
if uri_scheme in self.backends.by_uri_scheme:
|
||||
backend = self.backends.by_uri_scheme[uri_scheme]
|
||||
else:
|
||||
backend = self.backends[0]
|
||||
return backend.stored_playlists.create(name).get()
|
||||
|
||||
def delete(self, playlist):
|
||||
"""
|
||||
|
||||
@ -37,5 +37,27 @@ class StoredPlaylistsTest(unittest.TestCase):
|
||||
self.assertIn(self.pl2a, result)
|
||||
self.assertIn(self.pl2b, result)
|
||||
|
||||
def test_create_without_uri_scheme_uses_first_backend(self):
|
||||
playlist = Playlist()
|
||||
self.sp1.create().get.return_value = playlist
|
||||
self.sp1.reset_mock()
|
||||
|
||||
result = self.core.stored_playlists.create('foo')
|
||||
|
||||
self.assertEqual(playlist, result)
|
||||
self.sp1.create.assert_called_once_with('foo')
|
||||
self.assertFalse(self.sp2.create.called)
|
||||
|
||||
def test_create_with_uri_scheme_selects_the_matching_backend(self):
|
||||
playlist = Playlist()
|
||||
self.sp2.create().get.return_value = playlist
|
||||
self.sp2.reset_mock()
|
||||
|
||||
result = self.core.stored_playlists.create('foo', uri_scheme='dummy2')
|
||||
|
||||
self.assertEqual(playlist, result)
|
||||
self.assertFalse(self.sp1.create.called)
|
||||
self.sp2.create.assert_called_once_with('foo')
|
||||
|
||||
# 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