backend: Remove default impl of PlaylistProvider.playlists

The default was insane. For one, because overriding e.g. just the
getter would make the property have a pair of working getter and
setter that are entirely disconnected.
This commit is contained in:
Stein Magnus Jodal 2015-03-17 23:37:31 +01:00
parent 6273247c6e
commit 65c5242b14
4 changed files with 37 additions and 6 deletions

View File

@ -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):
"""

View File

@ -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)

View File

@ -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 = []

View File

@ -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)