backend: Update backend API imports

This commit is contained in:
Stein Magnus Jodal 2014-01-11 17:52:34 +01:00
parent b6b542a60f
commit 05632c3b8b
15 changed files with 48 additions and 54 deletions

View File

@ -5,8 +5,8 @@ import itertools
import pykka import pykka
from mopidy.audio import AudioListener, PlaybackState from mopidy import audio, backend
from mopidy.backends.listener import BackendListener from mopidy.audio import PlaybackState
from mopidy.utils import versioning from mopidy.utils import versioning
from .library import LibraryController from .library import LibraryController
@ -16,7 +16,7 @@ from .playlists import PlaylistsController
from .tracklist import TracklistController from .tracklist import TracklistController
class Core(pykka.ThreadingActor, AudioListener, BackendListener): class Core(pykka.ThreadingActor, audio.AudioListener, backend.BackendListener):
library = None library = None
"""The library controller. An instance of """The library controller. An instance of
:class:`mopidy.core.LibraryController`.""" :class:`mopidy.core.LibraryController`."""

View File

@ -123,7 +123,7 @@ class Extension(object):
.. deprecated:: 0.18 .. deprecated:: 0.18
Use :meth:`setup` instead. Use :meth:`setup` instead.
:returns: list of :class:`~mopidy.backends.base.Backend` subclasses :returns: list of :class:`~mopidy.backend.Backend` subclasses
""" """
return [] return []

View File

@ -5,7 +5,7 @@ import os
import pykka import pykka
from mopidy.backends import base from mopidy import backend
from mopidy.utils import encoding, path from mopidy.utils import encoding, path
from .library import LocalLibraryProvider from .library import LocalLibraryProvider
@ -15,7 +15,7 @@ from .playlists import LocalPlaylistsProvider
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class LocalBackend(pykka.ThreadingActor, base.Backend): class LocalBackend(pykka.ThreadingActor, backend.Backend):
uri_schemes = ['local'] uri_schemes = ['local']
libraries = [] libraries = []

View File

@ -2,12 +2,12 @@ from __future__ import unicode_literals
import logging import logging
from mopidy.backends import base from mopidy import backend
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class LocalLibraryProvider(base.BaseLibraryProvider): class LocalLibraryProvider(backend.LibraryProvider):
"""Proxy library that delegates work to our active local library.""" """Proxy library that delegates work to our active local library."""
root_directory_name = 'local' root_directory_name = 'local'

View File

@ -2,14 +2,14 @@ from __future__ import unicode_literals
import logging import logging
from mopidy.backends import base from mopidy import backend
from . import translator from . import translator
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class LocalPlaybackProvider(base.BasePlaybackProvider): class LocalPlaybackProvider(backend.PlaybackProvider):
def change_track(self, track): def change_track(self, track):
track = track.copy(uri=translator.local_track_uri_to_file_uri( track = track.copy(uri=translator.local_track_uri_to_file_uri(
track.uri, self.backend.config['local']['media_dir'])) track.uri, self.backend.config['local']['media_dir']))

View File

@ -5,7 +5,7 @@ import logging
import os import os
import shutil import shutil
from mopidy.backends import base, listener from mopidy import backend
from mopidy.models import Playlist from mopidy.models import Playlist
from mopidy.utils import formatting, path from mopidy.utils import formatting, path
@ -15,7 +15,7 @@ from .translator import parse_m3u
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class LocalPlaylistsProvider(base.BasePlaylistsProvider): class LocalPlaylistsProvider(backend.PlaylistsProvider):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(LocalPlaylistsProvider, self).__init__(*args, **kwargs) super(LocalPlaylistsProvider, self).__init__(*args, **kwargs)
self._media_dir = self.backend.config['local']['media_dir'] self._media_dir = self.backend.config['local']['media_dir']
@ -58,7 +58,7 @@ class LocalPlaylistsProvider(base.BasePlaylistsProvider):
self.playlists = playlists self.playlists = playlists
# TODO: send what scheme we loaded them for? # TODO: send what scheme we loaded them for?
listener.BackendListener.send('playlists_loaded') backend.BackendListener.send('playlists_loaded')
logger.info( logger.info(
'Loaded %d local playlists from %s', 'Loaded %d local playlists from %s',

View File

@ -5,28 +5,27 @@ import urlparse
import pykka import pykka
from mopidy import audio as audio_lib, exceptions from mopidy import audio as audio_lib, backend, exceptions
from mopidy.audio import scan from mopidy.audio import scan
from mopidy.backends import base
from mopidy.models import Track from mopidy.models import Track
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class StreamBackend(pykka.ThreadingActor, base.Backend): class StreamBackend(pykka.ThreadingActor, backend.Backend):
def __init__(self, config, audio): def __init__(self, config, audio):
super(StreamBackend, self).__init__() super(StreamBackend, self).__init__()
self.library = StreamLibraryProvider( self.library = StreamLibraryProvider(
backend=self, timeout=config['stream']['timeout']) backend=self, timeout=config['stream']['timeout'])
self.playback = base.BasePlaybackProvider(audio=audio, backend=self) self.playback = backend.PlaybackProvider(audio=audio, backend=self)
self.playlists = None self.playlists = None
self.uri_schemes = audio_lib.supported_uri_schemes( self.uri_schemes = audio_lib.supported_uri_schemes(
config['stream']['protocols']) config['stream']['protocols'])
class StreamLibraryProvider(base.BaseLibraryProvider): class StreamLibraryProvider(backend.LibraryProvider):
def __init__(self, backend, timeout): def __init__(self, backend, timeout):
super(StreamLibraryProvider, self).__init__(backend) super(StreamLibraryProvider, self).__init__(backend)
self._scanner = scan.Scanner(min_duration=None, timeout=timeout) self._scanner = scan.Scanner(min_duration=None, timeout=timeout)

View File

@ -3,12 +3,12 @@ from __future__ import unicode_literals
import mock import mock
import unittest import unittest
from mopidy.backends.listener import BackendListener from mopidy import backend
class BackendListenerTest(unittest.TestCase): class BackendListenerTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.listener = BackendListener() self.listener = backend.BackendListener()
def test_on_event_forwards_to_specific_handler(self): def test_on_event_forwards_to_specific_handler(self):
self.listener.playlists_loaded = mock.Mock() self.listener.playlists_loaded = mock.Mock()

View File

@ -3,8 +3,7 @@ from __future__ import unicode_literals
import mock import mock
import unittest import unittest
from mopidy.backends import base from mopidy import backend, core
from mopidy.core import Core
from mopidy.models import Ref, SearchResult, Track from mopidy.models import Ref, SearchResult, Track
@ -12,13 +11,13 @@ class CoreLibraryTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.backend1 = mock.Mock() self.backend1 = mock.Mock()
self.backend1.uri_schemes.get.return_value = ['dummy1'] self.backend1.uri_schemes.get.return_value = ['dummy1']
self.library1 = mock.Mock(spec=base.BaseLibraryProvider) self.library1 = mock.Mock(spec=backend.LibraryProvider)
self.library1.root_directory_name.get.return_value = 'dummy1' self.library1.root_directory_name.get.return_value = 'dummy1'
self.backend1.library = self.library1 self.backend1.library = self.library1
self.backend2 = mock.Mock() self.backend2 = mock.Mock()
self.backend2.uri_schemes.get.return_value = ['dummy2'] self.backend2.uri_schemes.get.return_value = ['dummy2']
self.library2 = mock.Mock(spec=base.BaseLibraryProvider) self.library2 = mock.Mock(spec=backend.LibraryProvider)
self.library2.root_directory_name.get.return_value = 'dummy2' self.library2.root_directory_name.get.return_value = 'dummy2'
self.backend2.library = self.library2 self.backend2.library = self.library2
@ -27,7 +26,7 @@ class CoreLibraryTest(unittest.TestCase):
self.backend3.uri_schemes.get.return_value = ['dummy3'] self.backend3.uri_schemes.get.return_value = ['dummy3']
self.backend3.has_library().get.return_value = False self.backend3.has_library().get.return_value = False
self.core = Core(audio=None, backends=[ self.core = core.Core(audio=None, backends=[
self.backend1, self.backend2, self.backend3]) self.backend1, self.backend2, self.backend3])
def test_browse_root_returns_dir_ref_for_each_lib_with_root_dir_name(self): def test_browse_root_returns_dir_ref_for_each_lib_with_root_dir_name(self):

View File

@ -3,8 +3,7 @@ from __future__ import unicode_literals
import mock import mock
import unittest import unittest
from mopidy.backends import base from mopidy import backend, core
from mopidy.core import Core, PlaybackState
from mopidy.models import Track from mopidy.models import Track
@ -12,12 +11,12 @@ class CorePlaybackTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.backend1 = mock.Mock() self.backend1 = mock.Mock()
self.backend1.uri_schemes.get.return_value = ['dummy1'] self.backend1.uri_schemes.get.return_value = ['dummy1']
self.playback1 = mock.Mock(spec=base.BasePlaybackProvider) self.playback1 = mock.Mock(spec=backend.PlaybackProvider)
self.backend1.playback = self.playback1 self.backend1.playback = self.playback1
self.backend2 = mock.Mock() self.backend2 = mock.Mock()
self.backend2.uri_schemes.get.return_value = ['dummy2'] self.backend2.uri_schemes.get.return_value = ['dummy2']
self.playback2 = mock.Mock(spec=base.BasePlaybackProvider) self.playback2 = mock.Mock(spec=backend.PlaybackProvider)
self.backend2.playback = self.playback2 self.backend2.playback = self.playback2
# A backend without the optional playback provider # A backend without the optional playback provider
@ -32,7 +31,7 @@ class CorePlaybackTest(unittest.TestCase):
Track(uri='dummy1:b', length=40000), Track(uri='dummy1:b', length=40000),
] ]
self.core = Core(audio=None, backends=[ self.core = core.Core(audio=None, backends=[
self.backend1, self.backend2, self.backend3]) self.backend1, self.backend2, self.backend3])
self.core.tracklist.add(self.tracks) self.core.tracklist.add(self.tracks)
@ -78,7 +77,7 @@ class CorePlaybackTest(unittest.TestCase):
self.core.playback.current_tl_track = self.unplayable_tl_track self.core.playback.current_tl_track = self.unplayable_tl_track
self.core.playback.pause() self.core.playback.pause()
self.assertEqual(self.core.playback.state, PlaybackState.PAUSED) self.assertEqual(self.core.playback.state, core.PlaybackState.PAUSED)
self.assertFalse(self.playback1.pause.called) self.assertFalse(self.playback1.pause.called)
self.assertFalse(self.playback2.pause.called) self.assertFalse(self.playback2.pause.called)
@ -100,10 +99,10 @@ class CorePlaybackTest(unittest.TestCase):
def test_resume_does_nothing_if_track_is_unplayable(self): def test_resume_does_nothing_if_track_is_unplayable(self):
self.core.playback.current_tl_track = self.unplayable_tl_track self.core.playback.current_tl_track = self.unplayable_tl_track
self.core.playback.state = PlaybackState.PAUSED self.core.playback.state = core.PlaybackState.PAUSED
self.core.playback.resume() self.core.playback.resume()
self.assertEqual(self.core.playback.state, PlaybackState.PAUSED) self.assertEqual(self.core.playback.state, core.PlaybackState.PAUSED)
self.assertFalse(self.playback1.resume.called) self.assertFalse(self.playback1.resume.called)
self.assertFalse(self.playback2.resume.called) self.assertFalse(self.playback2.resume.called)
@ -123,10 +122,10 @@ class CorePlaybackTest(unittest.TestCase):
def test_stop_changes_state_even_if_track_is_unplayable(self): def test_stop_changes_state_even_if_track_is_unplayable(self):
self.core.playback.current_tl_track = self.unplayable_tl_track self.core.playback.current_tl_track = self.unplayable_tl_track
self.core.playback.state = PlaybackState.PAUSED self.core.playback.state = core.PlaybackState.PAUSED
self.core.playback.stop() self.core.playback.stop()
self.assertEqual(self.core.playback.state, PlaybackState.STOPPED) self.assertEqual(self.core.playback.state, core.PlaybackState.STOPPED)
self.assertFalse(self.playback1.stop.called) self.assertFalse(self.playback1.stop.called)
self.assertFalse(self.playback2.stop.called) self.assertFalse(self.playback2.stop.called)
@ -146,7 +145,7 @@ class CorePlaybackTest(unittest.TestCase):
def test_seek_fails_for_unplayable_track(self): def test_seek_fails_for_unplayable_track(self):
self.core.playback.current_tl_track = self.unplayable_tl_track self.core.playback.current_tl_track = self.unplayable_tl_track
self.core.playback.state = PlaybackState.PLAYING self.core.playback.state = core.PlaybackState.PLAYING
success = self.core.playback.seek(1000) success = self.core.playback.seek(1000)
self.assertFalse(success) self.assertFalse(success)

View File

@ -3,8 +3,7 @@ from __future__ import unicode_literals
import mock import mock
import unittest import unittest
from mopidy.backends import base from mopidy import backend, core
from mopidy.core import Core
from mopidy.models import Playlist, Track from mopidy.models import Playlist, Track
@ -12,12 +11,12 @@ class PlaylistsTest(unittest.TestCase):
def setUp(self): def setUp(self):
self.backend1 = mock.Mock() self.backend1 = mock.Mock()
self.backend1.uri_schemes.get.return_value = ['dummy1'] self.backend1.uri_schemes.get.return_value = ['dummy1']
self.sp1 = mock.Mock(spec=base.BasePlaylistsProvider) self.sp1 = mock.Mock(spec=backend.PlaylistsProvider)
self.backend1.playlists = self.sp1 self.backend1.playlists = self.sp1
self.backend2 = mock.Mock() self.backend2 = mock.Mock()
self.backend2.uri_schemes.get.return_value = ['dummy2'] self.backend2.uri_schemes.get.return_value = ['dummy2']
self.sp2 = mock.Mock(spec=base.BasePlaylistsProvider) self.sp2 = mock.Mock(spec=backend.PlaylistsProvider)
self.backend2.playlists = self.sp2 self.backend2.playlists = self.sp2
# A backend without the optional playlists provider # A backend without the optional playlists provider
@ -34,7 +33,7 @@ class PlaylistsTest(unittest.TestCase):
self.pl2b = Playlist(name='B', tracks=[Track(uri='dummy2:b')]) self.pl2b = Playlist(name='B', tracks=[Track(uri='dummy2:b')])
self.sp2.playlists.get.return_value = [self.pl2a, self.pl2b] self.sp2.playlists.get.return_value = [self.pl2a, self.pl2b]
self.core = Core(audio=None, backends=[ self.core = core.Core(audio=None, backends=[
self.backend3, self.backend1, self.backend2]) self.backend3, self.backend1, self.backend2])
def test_get_playlists_combines_result_from_backends(self): def test_get_playlists_combines_result_from_backends(self):

View File

@ -3,8 +3,7 @@ from __future__ import unicode_literals
import mock import mock
import unittest import unittest
from mopidy.backends import base from mopidy import backend, core
from mopidy.core import Core
from mopidy.models import Track from mopidy.models import Track
@ -18,10 +17,10 @@ class TracklistTest(unittest.TestCase):
self.backend = mock.Mock() self.backend = mock.Mock()
self.backend.uri_schemes.get.return_value = ['dummy1'] self.backend.uri_schemes.get.return_value = ['dummy1']
self.library = mock.Mock(spec=base.BaseLibraryProvider) self.library = mock.Mock(spec=backend.LibraryProvider)
self.backend.library = self.library self.backend.library = self.library
self.core = Core(audio=None, backends=[self.backend]) self.core = core.Core(audio=None, backends=[self.backend])
self.tl_tracks = self.core.tracklist.add(self.tracks) self.tl_tracks = self.core.tracklist.add(self.tracks)
def test_add_by_uri_looks_up_uri_in_library(self): def test_add_by_uri_looks_up_uri_in_library(self):
@ -72,4 +71,4 @@ class TracklistTest(unittest.TestCase):
def test_filter_fails_if_values_is_a_string(self): def test_filter_fails_if_values_is_a_string(self):
self.assertRaises(ValueError, self.core.tracklist.filter, uri='a') self.assertRaises(ValueError, self.core.tracklist.filter, uri='a')
# TODO Extract tracklist tests from the base backend tests # TODO Extract tracklist tests from the local backend tests

View File

@ -8,7 +8,7 @@ from __future__ import unicode_literals
import pykka import pykka
from mopidy.backends import base from mopidy import backend
from mopidy.models import Playlist, SearchResult from mopidy.models import Playlist, SearchResult
@ -16,7 +16,7 @@ def create_dummy_backend_proxy(config=None, audio=None):
return DummyBackend.start(config=config, audio=audio).proxy() return DummyBackend.start(config=config, audio=audio).proxy()
class DummyBackend(pykka.ThreadingActor, base.Backend): class DummyBackend(pykka.ThreadingActor, backend.Backend):
def __init__(self, config, audio): def __init__(self, config, audio):
super(DummyBackend, self).__init__() super(DummyBackend, self).__init__()
@ -27,7 +27,7 @@ class DummyBackend(pykka.ThreadingActor, base.Backend):
self.uri_schemes = ['dummy'] self.uri_schemes = ['dummy']
class DummyLibraryProvider(base.BaseLibraryProvider): class DummyLibraryProvider(backend.LibraryProvider):
root_directory_name = 'dummy' root_directory_name = 'dummy'
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -53,7 +53,7 @@ class DummyLibraryProvider(base.BaseLibraryProvider):
return self.dummy_search_result return self.dummy_search_result
class DummyPlaybackProvider(base.BasePlaybackProvider): class DummyPlaybackProvider(backend.PlaybackProvider):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(DummyPlaybackProvider, self).__init__(*args, **kwargs) super(DummyPlaybackProvider, self).__init__(*args, **kwargs)
self._time_position = 0 self._time_position = 0
@ -80,7 +80,7 @@ class DummyPlaybackProvider(base.BasePlaybackProvider):
return self._time_position return self._time_position
class DummyPlaylistsProvider(base.BasePlaylistsProvider): class DummyPlaylistsProvider(backend.PlaylistsProvider):
def create(self, name): def create(self, name):
playlist = Playlist(name=name, uri='dummy:%s' % name) playlist = Playlist(name=name, uri='dummy:%s' % name)
self._playlists.append(playlist) self._playlists.append(playlist)

View File

@ -5,14 +5,13 @@ import unittest
import mock import mock
import pykka import pykka
from mopidy import audio, core from mopidy import audio, backend, core
from mopidy.backends import listener
from mopidy.local import actor from mopidy.local import actor
from tests import path_to_data_dir from tests import path_to_data_dir
@mock.patch.object(listener.BackendListener, 'send') @mock.patch.object(backend.BackendListener, 'send')
class LocalBackendEventsTest(unittest.TestCase): class LocalBackendEventsTest(unittest.TestCase):
config = { config = {
'local': { 'local': {