diff --git a/mopidy/backend.py b/mopidy/backend.py index f7808ac8..7e020b77 100644 --- a/mopidy/backend.py +++ b/mopidy/backend.py @@ -1,7 +1,5 @@ from __future__ import absolute_import, unicode_literals -import copy - from mopidy import listener, models @@ -263,7 +261,6 @@ class PlaylistsProvider(object): def __init__(self, backend): self.backend = backend - self._playlists = [] # TODO Replace playlists property with a get_playlists() method which # returns playlist Ref's instead of the gigantic data structures we @@ -277,11 +274,11 @@ class PlaylistsProvider(object): Read/write. List of :class:`mopidy.models.Playlist`. """ - return copy.copy(self._playlists) + return [] @playlists.setter # noqa def playlists(self, playlists): - self._playlists = playlists + raise NotImplementedError def create(self, name): """ diff --git a/mopidy/local/playlists.py b/mopidy/local/playlists.py index ba4dbf02..f2b712c5 100644 --- a/mopidy/local/playlists.py +++ b/mopidy/local/playlists.py @@ -1,5 +1,6 @@ from __future__ import absolute_import, division, unicode_literals +import copy import glob import logging import operator @@ -20,8 +21,17 @@ class LocalPlaylistsProvider(backend.PlaylistsProvider): super(LocalPlaylistsProvider, self).__init__(*args, **kwargs) self._media_dir = self.backend.config['local']['media_dir'] self._playlists_dir = self.backend.config['local']['playlists_dir'] + self._playlists = [] self.refresh() + @property + def playlists(self): + return copy.copy(self._playlists) + + @playlists.setter + def playlists(self, playlists): + self._playlists = playlists + def create(self, name): playlist = self._save_m3u(Playlist(name=name)) old_playlist = self.lookup(playlist.uri) diff --git a/tests/backend/test_backend.py b/tests/backend/test_backend.py index 7c6cc82b..c72633fb 100644 --- a/tests/backend/test_backend.py +++ b/tests/backend/test_backend.py @@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals import unittest -from mopidy import models +from mopidy import backend, models from tests import dummy_backend @@ -28,3 +28,13 @@ class LibraryTest(unittest.TestCase): expected = {'trackuri': []} self.assertEqual(library.get_images(['trackuri']), expected) + + +class PlaylistsTest(unittest.TestCase): + def test_playlists_default_impl(self): + playlists = backend.PlaylistsProvider(backend=None) + + self.assertEqual(playlists.playlists, []) + + with self.assertRaises(NotImplementedError): + playlists.playlists = [] diff --git a/tests/dummy_backend.py b/tests/dummy_backend.py index 9c5a8c0c..d0816096 100644 --- a/tests/dummy_backend.py +++ b/tests/dummy_backend.py @@ -6,6 +6,8 @@ used in tests of the frontends. from __future__ import absolute_import, unicode_literals +import copy + import pykka from mopidy import backend @@ -85,6 +87,18 @@ class DummyPlaybackProvider(backend.PlaybackProvider): class DummyPlaylistsProvider(backend.PlaylistsProvider): + def __init__(self, backend): + super(DummyPlaylistsProvider, self).__init__(backend) + self._playlists = [] + + @property + def playlists(self): + return copy.copy(self._playlists) + + @playlists.setter + def playlists(self, playlists): + self._playlists = playlists + def create(self, name): playlist = Playlist(name=name, uri='dummy:%s' % name) self._playlists.append(playlist)