mpd: Make mpd warnings safe with respect to tracklist.add(tracks=...)
This commit is contained in:
parent
f7399c1849
commit
c85689edad
@ -26,18 +26,17 @@ def add(context, uri):
|
|||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tracks = []
|
uris = []
|
||||||
for path, lookup_future in context.browse(uri):
|
for path, ref in context.browse(uri, lookup=False):
|
||||||
if lookup_future:
|
if ref:
|
||||||
for result in lookup_future.get().values():
|
uris.append(ref.uri)
|
||||||
tracks.extend(result)
|
|
||||||
except exceptions.MpdNoExistError as e:
|
except exceptions.MpdNoExistError as e:
|
||||||
e.message = 'directory or file not found'
|
e.message = 'directory or file not found'
|
||||||
raise
|
raise
|
||||||
|
|
||||||
if not tracks:
|
if not uris:
|
||||||
raise exceptions.MpdNoExistError('directory or file not found')
|
raise exceptions.MpdNoExistError('directory or file not found')
|
||||||
context.core.tracklist.add(tracks=tracks)
|
context.core.tracklist.add(uris=uris).get()
|
||||||
|
|
||||||
|
|
||||||
@protocol.commands.add('addid', songpos=protocol.UINT)
|
@protocol.commands.add('addid', songpos=protocol.UINT)
|
||||||
@ -351,8 +350,13 @@ def swap(context, songpos1, songpos2):
|
|||||||
tracks.insert(songpos1, song2)
|
tracks.insert(songpos1, song2)
|
||||||
del tracks[songpos2]
|
del tracks[songpos2]
|
||||||
tracks.insert(songpos2, song1)
|
tracks.insert(songpos2, song1)
|
||||||
|
|
||||||
|
# TODO: do we need a tracklist.replace()
|
||||||
context.core.tracklist.clear()
|
context.core.tracklist.clear()
|
||||||
context.core.tracklist.add(tracks)
|
|
||||||
|
with warnings.catch_warnings():
|
||||||
|
warnings.filterwarnings('ignore', 'tracklist.add.*"tracks".*')
|
||||||
|
context.core.tracklist.add(tracks=tracks).get()
|
||||||
|
|
||||||
|
|
||||||
@protocol.commands.add('swapid', tlid1=protocol.UINT, tlid2=protocol.UINT)
|
@protocol.commands.add('swapid', tlid1=protocol.UINT, tlid2=protocol.UINT)
|
||||||
|
|||||||
@ -2,6 +2,7 @@ from __future__ import absolute_import, unicode_literals
|
|||||||
|
|
||||||
import functools
|
import functools
|
||||||
import itertools
|
import itertools
|
||||||
|
import warnings
|
||||||
|
|
||||||
from mopidy.models import Track
|
from mopidy.models import Track
|
||||||
from mopidy.mpd import exceptions, protocol, translator
|
from mopidy.mpd import exceptions, protocol, translator
|
||||||
@ -168,8 +169,14 @@ def findadd(context, *args):
|
|||||||
query = _query_from_mpd_search_parameters(args, _SEARCH_MAPPING)
|
query = _query_from_mpd_search_parameters(args, _SEARCH_MAPPING)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return
|
return
|
||||||
|
|
||||||
results = context.core.library.search(query=query, exact=True).get()
|
results = context.core.library.search(query=query, exact=True).get()
|
||||||
context.core.tracklist.add(_get_tracks(results))
|
|
||||||
|
with warnings.catch_warnings():
|
||||||
|
# TODO: for now just use tracks as other wise we have to lookup the
|
||||||
|
# tracks we just got from the search.
|
||||||
|
warnings.filterwarnings('ignore', 'tracklist.add.*"tracks" argument.*')
|
||||||
|
context.core.tracklist.add(tracks=_get_tracks(results)).get()
|
||||||
|
|
||||||
|
|
||||||
@protocol.commands.add('list')
|
@protocol.commands.add('list')
|
||||||
@ -437,8 +444,14 @@ def searchadd(context, *args):
|
|||||||
query = _query_from_mpd_search_parameters(args, _SEARCH_MAPPING)
|
query = _query_from_mpd_search_parameters(args, _SEARCH_MAPPING)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
return
|
return
|
||||||
|
|
||||||
results = context.core.library.search(query).get()
|
results = context.core.library.search(query).get()
|
||||||
context.core.tracklist.add(_get_tracks(results))
|
|
||||||
|
with warnings.catch_warnings():
|
||||||
|
# TODO: for now just use tracks as other wise we have to lookup the
|
||||||
|
# tracks we just got from the search.
|
||||||
|
warnings.filterwarnings('ignore', 'tracklist.add.*"tracks".*')
|
||||||
|
context.core.tracklist.add(_get_tracks(results)).get()
|
||||||
|
|
||||||
|
|
||||||
@protocol.commands.add('searchaddpl')
|
@protocol.commands.add('searchaddpl')
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
from __future__ import absolute_import, division, unicode_literals
|
from __future__ import absolute_import, division, unicode_literals
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import warnings
|
||||||
|
|
||||||
from mopidy.mpd import exceptions, protocol, translator
|
from mopidy.mpd import exceptions, protocol, translator
|
||||||
|
|
||||||
@ -127,7 +128,10 @@ def load(context, name, playlist_slice=slice(0, None)):
|
|||||||
playlist = uri is not None and context.core.playlists.lookup(uri).get()
|
playlist = uri is not None and context.core.playlists.lookup(uri).get()
|
||||||
if not playlist:
|
if not playlist:
|
||||||
raise exceptions.MpdNoExistError('No such playlist')
|
raise exceptions.MpdNoExistError('No such playlist')
|
||||||
context.core.tracklist.add(playlist.tracks[playlist_slice])
|
|
||||||
|
with warnings.catch_warnings():
|
||||||
|
warnings.filterwarnings('ignore', 'tracklist.add.*"tracks".*')
|
||||||
|
context.core.tracklist.add(playlist.tracks[playlist_slice]).get()
|
||||||
|
|
||||||
|
|
||||||
@protocol.commands.add('playlistadd')
|
@protocol.commands.add('playlistadd')
|
||||||
|
|||||||
@ -7,6 +7,8 @@ from mopidy.mpd.protocol import music_db
|
|||||||
|
|
||||||
from tests.mpd import protocol
|
from tests.mpd import protocol
|
||||||
|
|
||||||
|
# TODO: split into more modules for faster parallel tests?
|
||||||
|
|
||||||
|
|
||||||
class QueryFromMpdSearchFormatTest(unittest.TestCase):
|
class QueryFromMpdSearchFormatTest(unittest.TestCase):
|
||||||
def test_dates_are_extracted(self):
|
def test_dates_are_extracted(self):
|
||||||
@ -32,6 +34,8 @@ class QueryFromMpdListFormatTest(unittest.TestCase):
|
|||||||
pass # TODO
|
pass # TODO
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: why isn't core.playlists.filter getting deprecation warnings?
|
||||||
|
|
||||||
class MusicDatabaseHandlerTest(protocol.BaseTestCase):
|
class MusicDatabaseHandlerTest(protocol.BaseTestCase):
|
||||||
def test_count(self):
|
def test_count(self):
|
||||||
self.send_request('count "artist" "needle"')
|
self.send_request('count "artist" "needle"')
|
||||||
|
|||||||
@ -18,14 +18,17 @@ class IssueGH17RegressionTest(protocol.BaseTestCase):
|
|||||||
- Press next until you get to the unplayable track
|
- Press next until you get to the unplayable track
|
||||||
"""
|
"""
|
||||||
def test(self):
|
def test(self):
|
||||||
self.core.tracklist.add([
|
tracks = [
|
||||||
Track(uri='dummy:a'),
|
Track(uri='dummy:a'),
|
||||||
Track(uri='dummy:b'),
|
Track(uri='dummy:b'),
|
||||||
Track(uri='dummy:error'),
|
Track(uri='dummy:error'),
|
||||||
Track(uri='dummy:d'),
|
Track(uri='dummy:d'),
|
||||||
Track(uri='dummy:e'),
|
Track(uri='dummy:e'),
|
||||||
Track(uri='dummy:f'),
|
Track(uri='dummy:f'),
|
||||||
])
|
]
|
||||||
|
self.backend.library.dummy_library = tracks
|
||||||
|
self.core.tracklist.add(uris=[t.uri for t in tracks]).get()
|
||||||
|
|
||||||
random.seed(1) # Playlist order: abcfde
|
random.seed(1) # Playlist order: abcfde
|
||||||
|
|
||||||
self.send_request('play')
|
self.send_request('play')
|
||||||
@ -59,9 +62,13 @@ class IssueGH18RegressionTest(protocol.BaseTestCase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def test(self):
|
def test(self):
|
||||||
self.core.tracklist.add([
|
tracks = [
|
||||||
Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'),
|
Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'),
|
||||||
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f')])
|
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f'),
|
||||||
|
]
|
||||||
|
self.backend.library.dummy_library = tracks
|
||||||
|
self.core.tracklist.add(uris=[t.uri for t in tracks]).get()
|
||||||
|
|
||||||
random.seed(1)
|
random.seed(1)
|
||||||
|
|
||||||
self.send_request('play')
|
self.send_request('play')
|
||||||
@ -95,9 +102,13 @@ class IssueGH22RegressionTest(protocol.BaseTestCase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def test(self):
|
def test(self):
|
||||||
self.core.tracklist.add([
|
tracks = [
|
||||||
Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'),
|
Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'),
|
||||||
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f')])
|
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f'),
|
||||||
|
]
|
||||||
|
self.backend.library.dummy_library = tracks
|
||||||
|
self.core.tracklist.add(uris=[t.uri for t in tracks]).get()
|
||||||
|
|
||||||
random.seed(1)
|
random.seed(1)
|
||||||
|
|
||||||
self.send_request('play')
|
self.send_request('play')
|
||||||
@ -124,9 +135,13 @@ class IssueGH69RegressionTest(protocol.BaseTestCase):
|
|||||||
|
|
||||||
def test(self):
|
def test(self):
|
||||||
self.core.playlists.create('foo')
|
self.core.playlists.create('foo')
|
||||||
self.core.tracklist.add([
|
|
||||||
|
tracks = [
|
||||||
Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'),
|
Track(uri='dummy:a'), Track(uri='dummy:b'), Track(uri='dummy:c'),
|
||||||
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f')])
|
Track(uri='dummy:d'), Track(uri='dummy:e'), Track(uri='dummy:f'),
|
||||||
|
]
|
||||||
|
self.backend.library.dummy_library = tracks
|
||||||
|
self.core.tracklist.add(uris=[t.uri for t in tracks]).get()
|
||||||
|
|
||||||
self.send_request('play')
|
self.send_request('play')
|
||||||
self.send_request('stop')
|
self.send_request('stop')
|
||||||
|
|||||||
@ -130,54 +130,78 @@ class PlaylistsHandlerTest(protocol.BaseTestCase):
|
|||||||
self.assertInResponse('OK')
|
self.assertInResponse('OK')
|
||||||
|
|
||||||
def test_load_appends_to_tracklist(self):
|
def test_load_appends_to_tracklist(self):
|
||||||
self.core.tracklist.add([Track(uri='a'), Track(uri='b')])
|
tracks = [
|
||||||
|
Track(uri='dummy:a'),
|
||||||
|
Track(uri='dummy:b'),
|
||||||
|
Track(uri='dummy:c'),
|
||||||
|
Track(uri='dummy:d'),
|
||||||
|
Track(uri='dummy:e'),
|
||||||
|
]
|
||||||
|
self.backend.library.dummy_library = tracks
|
||||||
|
self.core.tracklist.add(uris=['dummy:a', 'dummy:b']).get()
|
||||||
|
|
||||||
self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
|
self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
|
||||||
self.backend.playlists.set_dummy_playlists([
|
self.backend.playlists.set_dummy_playlists([
|
||||||
Playlist(name='A-list', uri='dummy:A-list', tracks=[
|
Playlist(name='A-list', uri='dummy:A-list', tracks=tracks[2:])])
|
||||||
Track(uri='c'), Track(uri='d'), Track(uri='e')])])
|
|
||||||
|
|
||||||
self.send_request('load "A-list"')
|
self.send_request('load "A-list"')
|
||||||
|
|
||||||
tracks = self.core.tracklist.tracks.get()
|
tracks = self.core.tracklist.tracks.get()
|
||||||
self.assertEqual(5, len(tracks))
|
self.assertEqual(5, len(tracks))
|
||||||
self.assertEqual('a', tracks[0].uri)
|
self.assertEqual('dummy:a', tracks[0].uri)
|
||||||
self.assertEqual('b', tracks[1].uri)
|
self.assertEqual('dummy:b', tracks[1].uri)
|
||||||
self.assertEqual('c', tracks[2].uri)
|
self.assertEqual('dummy:c', tracks[2].uri)
|
||||||
self.assertEqual('d', tracks[3].uri)
|
self.assertEqual('dummy:d', tracks[3].uri)
|
||||||
self.assertEqual('e', tracks[4].uri)
|
self.assertEqual('dummy:e', tracks[4].uri)
|
||||||
self.assertInResponse('OK')
|
self.assertInResponse('OK')
|
||||||
|
|
||||||
def test_load_with_range_loads_part_of_playlist(self):
|
def test_load_with_range_loads_part_of_playlist(self):
|
||||||
self.core.tracklist.add([Track(uri='a'), Track(uri='b')])
|
tracks = [
|
||||||
|
Track(uri='dummy:a'),
|
||||||
|
Track(uri='dummy:b'),
|
||||||
|
Track(uri='dummy:c'),
|
||||||
|
Track(uri='dummy:d'),
|
||||||
|
Track(uri='dummy:e'),
|
||||||
|
]
|
||||||
|
self.backend.library.dummy_library = tracks
|
||||||
|
self.core.tracklist.add(uris=['dummy:a', 'dummy:b']).get()
|
||||||
|
|
||||||
self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
|
self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
|
||||||
self.backend.playlists.set_dummy_playlists([
|
self.backend.playlists.set_dummy_playlists([
|
||||||
Playlist(name='A-list', uri='dummy:A-list', tracks=[
|
Playlist(name='A-list', uri='dummy:A-list', tracks=tracks[2:])])
|
||||||
Track(uri='c'), Track(uri='d'), Track(uri='e')])])
|
|
||||||
|
|
||||||
self.send_request('load "A-list" "1:2"')
|
self.send_request('load "A-list" "1:2"')
|
||||||
|
|
||||||
tracks = self.core.tracklist.tracks.get()
|
tracks = self.core.tracklist.tracks.get()
|
||||||
self.assertEqual(3, len(tracks))
|
self.assertEqual(3, len(tracks))
|
||||||
self.assertEqual('a', tracks[0].uri)
|
self.assertEqual('dummy:a', tracks[0].uri)
|
||||||
self.assertEqual('b', tracks[1].uri)
|
self.assertEqual('dummy:b', tracks[1].uri)
|
||||||
self.assertEqual('d', tracks[2].uri)
|
self.assertEqual('dummy:d', tracks[2].uri)
|
||||||
self.assertInResponse('OK')
|
self.assertInResponse('OK')
|
||||||
|
|
||||||
def test_load_with_range_without_end_loads_rest_of_playlist(self):
|
def test_load_with_range_without_end_loads_rest_of_playlist(self):
|
||||||
self.core.tracklist.add([Track(uri='a'), Track(uri='b')])
|
tracks = [
|
||||||
|
Track(uri='dummy:a'),
|
||||||
|
Track(uri='dummy:b'),
|
||||||
|
Track(uri='dummy:c'),
|
||||||
|
Track(uri='dummy:d'),
|
||||||
|
Track(uri='dummy:e'),
|
||||||
|
]
|
||||||
|
self.backend.library.dummy_library = tracks
|
||||||
|
self.core.tracklist.add(uris=['dummy:a', 'dummy:b']).get()
|
||||||
|
|
||||||
self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
|
self.assertEqual(len(self.core.tracklist.tracks.get()), 2)
|
||||||
self.backend.playlists.set_dummy_playlists([
|
self.backend.playlists.set_dummy_playlists([
|
||||||
Playlist(name='A-list', uri='dummy:A-list', tracks=[
|
Playlist(name='A-list', uri='dummy:A-list', tracks=tracks[2:])])
|
||||||
Track(uri='c'), Track(uri='d'), Track(uri='e')])])
|
|
||||||
|
|
||||||
self.send_request('load "A-list" "1:"')
|
self.send_request('load "A-list" "1:"')
|
||||||
|
|
||||||
tracks = self.core.tracklist.tracks.get()
|
tracks = self.core.tracklist.tracks.get()
|
||||||
self.assertEqual(4, len(tracks))
|
self.assertEqual(4, len(tracks))
|
||||||
self.assertEqual('a', tracks[0].uri)
|
self.assertEqual('dummy:a', tracks[0].uri)
|
||||||
self.assertEqual('b', tracks[1].uri)
|
self.assertEqual('dummy:b', tracks[1].uri)
|
||||||
self.assertEqual('d', tracks[2].uri)
|
self.assertEqual('dummy:d', tracks[2].uri)
|
||||||
self.assertEqual('e', tracks[3].uri)
|
self.assertEqual('dummy:e', tracks[3].uri)
|
||||||
self.assertInResponse('OK')
|
self.assertInResponse('OK')
|
||||||
|
|
||||||
def test_load_unknown_playlist_acks(self):
|
def test_load_unknown_playlist_acks(self):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user