diff --git a/mopidy/handler.py b/mopidy/handler.py index 77a2e5c6..5b12b28f 100644 --- a/mopidy/handler.py +++ b/mopidy/handler.py @@ -122,7 +122,7 @@ class MpdHandler(object): else: raise MpdNotImplemented # TODO - @register(r'^count (?P\S+) (?P\S+)$') + @register(r'^count "(?P[^"]+)" "(?P[^"]+)"$') def _count(self, tag, needle): raise MpdNotImplemented # TODO @@ -135,12 +135,12 @@ class MpdHandler(object): def _currentsong(self): return self.backend.current_song() - @register(r'^delete (?P\d+)$') - @register(r'^delete (?P\d+):(?P\d+)*$') + @register(r'^delete "(?P\d+)"$') + @register(r'^delete "(?P\d+):(?P\d+)*"$') def _delete(self, songpos=None, start=None, end=None): raise MpdNotImplemented # TODO - @register(r'^deleteid (?P.*)$') + @register(r'^deleteid "(?P\d+)"$') def _deleteid(self, songid): raise MpdNotImplemented # TODO @@ -148,11 +148,11 @@ class MpdHandler(object): def _empty(self): pass - @register(r'^find (?P(album|artist|title)) (?P.*)$') + @register(r'^find "(?P(album|artist|title))" "(?P[^"]+)"$') def _find(self, type, what): raise MpdNotImplemented # TODO - @register(r'^findadd (?P(album|artist|title)) (?P.*)$') + @register(r'^findadd "(?P(album|artist|title))" "(?P[^"]+)"$') def _findadd(self, type, what): result = self._find(type, what) # TODO Add result to current playlist @@ -167,8 +167,8 @@ class MpdHandler(object): def _kill(self): self.session.do_kill() - @register(r'^list (?Partist)$') - @register(r'^list (?Palbum)( (?P.*))*$') + @register(r'^list "(?Partist)"$') + @register(r'^list "(?Palbum)"( "(?P[^"]+)")*$') def _list(self, type, artist=None): raise MpdNotImplemented # TODO @@ -180,11 +180,11 @@ class MpdHandler(object): def _listallinfo(self, uri): raise MpdNotImplemented # TODO - @register(r'^listplaylist (?P.+)$') + @register(r'^listplaylist "(?P[^"]+)"$') def _listplaylist(self, name): raise MpdNotImplemented # TODO - @register(r'^listplaylistinfo (?P.+)$') + @register(r'^listplaylistinfo "(?P[^"]+)"$') def _listplaylistinfo(self, name): raise MpdNotImplemented # TODO @@ -202,12 +202,12 @@ class MpdHandler(object): return self._listplaylists() raise MpdNotImplemented # TODO - @register(r'^move (?P\d+) (?P\d+)$') - @register(r'^move (?P\d+):(?P\d+)* (?P\d+)$') + @register(r'^move "(?P\d+)" "(?P\d+)"$') + @register(r'^move "(?P\d+):(?P\d+)*" "(?P\d+)"$') def _move(self, songpos=None, start=None, end=None, to=None): raise MpdNotImplemented # TODO - @register(r'^moveid (?P\S+) (?P\d+)$') + @register(r'^moveid "(?P\d+)" "(?P\d+)"$') def _moveid(self, songid, to): raise MpdNotImplemented # TODO @@ -246,19 +246,19 @@ class MpdHandler(object): def _playlist(self): return self._playlistinfo() - @register(r'^playlistadd (?P\S+) "(?P[^"]+)"$') + @register(r'^playlistadd "(?P[^"]+)" "(?P[^"]+)"$') def _playlistadd(self, name, uri): raise MpdNotImplemented # TODO - @register(r'^playlistclear (?P\S+)$') + @register(r'^playlistclear "(?P[^"]+)"$') def _playlistclear(self, name): raise MpdNotImplemented # TODO - @register(r'^playlistdelete (?P\S+) (?P\d+)$') + @register(r'^playlistdelete "(?P[^"]+)" "(?P\d+)"$') def _playlistdelete(self, name, songpos): raise MpdNotImplemented # TODO - @register(r'^playlistfind (?P\S+) (?P\S+)$') + @register(r'^playlistfind "(?P[^"]+)" "(?P[^"]+)"$') def _playlistfind(self, tag, needle): raise MpdNotImplemented # TODO @@ -272,11 +272,11 @@ class MpdHandler(object): def _playlistinfo(self, songpos=None, start=None, end=None): return self.backend.playlist_info(songpos, start, end) - @register(r'^playlistmove (?P\S+) (?P\S+) (?P\d+)$') + @register(r'^playlistmove "(?P[^"]+)" "(?P\d+)" "(?P\d+)"$') def _playlistdelete(self, name, songid, songpos): raise MpdNotImplemented # TODO - @register(r'^playlistsearch (?P\S+) (?P\S+)$') + @register(r'^playlistsearch "(?P[^"]+)" "(?P[^"]+)"$') def _playlistsearch(self, tag, needle): raise MpdNotImplemented # TODO @@ -284,7 +284,7 @@ class MpdHandler(object): def _plchanges(self, version): return self.backend.playlist_changes_since(version) - @register(r'^plchangesposid (?P\d+)$') + @register(r'^plchangesposid "(?P\d+)"$') def _plchangesposid(self, version): raise MpdNotImplemented # TODO @@ -292,7 +292,7 @@ class MpdHandler(object): def _previous(self): return self.backend.previous() - @register(r'^rename (?P\S+) (?P\S+)$') + @register(r'^rename "(?P[^"]+)" "(?P[^"]+)"$') def _rename(self, old_name, new_name): raise MpdNotImplemented # TODO @@ -312,7 +312,7 @@ class MpdHandler(object): else: raise MpdNotImplemented # TODO - @register(r'^replay_gain_mode (?P(off|track|album))$') + @register(r'^replay_gain_mode "(?P(off|track|album))"$') def _replay_gain_mode(self, mode): raise MpdNotImplemented # TODO @@ -324,11 +324,11 @@ class MpdHandler(object): def _update(self, uri=None): return self._update(uri, rescan_unmodified_files=True) - @register(r'^rm (?P\S+)$') + @register(r'^rm "(?P[^"]+)"$') def _rm(self, name): raise MpdNotImplemented # TODO - @register(r'^save (?P\S+)$') + @register(r'^save "(?P[^"]+)"$') def _save(self, name): raise MpdNotImplemented # TODO @@ -336,11 +336,11 @@ class MpdHandler(object): def _search(self, type, what): return self.backend.search(type, what) - @register(r'^seek (?P.+) (?P\d+)$') + @register(r'^seek "(?P\d+)" "(?P\d+)"$') def _seek(self, songpos, seconds): raise MpdNotImplemented # TODO - @register(r'^seekid (?P.+) (?P\d+)$') + @register(r'^seekid "(?P\d+)" "(?P\d+)"$') def _seekid(self, songid, seconds): raise MpdNotImplemented # TODO @@ -354,7 +354,7 @@ class MpdHandler(object): raise MpdNotImplemented # TODO @register(r'^shuffle$') - @register(r'^shuffle (?P\d+):(?P\d+)*$') + @register(r'^shuffle "(?P\d+):(?P\d+)*"$') def _shuffle(self, start=None, end=None): raise MpdNotImplemented # TODO @@ -403,11 +403,11 @@ class MpdHandler(object): result.append(('bitrate', self.backend.status_bitrate())) return result - @register(r'^swap (?P\d+) (?P\d+)$') + @register(r'^swap "(?P\d+)" "(?P\d+)"$') def _swap(self, songpos1, songpos2): raise MpdNotImplemented # TODO - @register(r'^swapid (?P\S+) (?P\S+)$') + @register(r'^swapid "(?P\d+)" "(?P\d+)"$') def _swapid(self, songid1, songid2): raise MpdNotImplemented # TODO diff --git a/tests/handlertest.py b/tests/handlertest.py index cd2ba823..d45d74b1 100644 --- a/tests/handlertest.py +++ b/tests/handlertest.py @@ -209,15 +209,15 @@ class PlaybackOptionsHandlerTest(unittest.TestCase): self.assert_(u'ACK Not implemented' in result) def test_replay_gain_mode_off(self): - result = self.h.handle_request(u'replay_gain_mode off') + result = self.h.handle_request(u'replay_gain_mode "off"') self.assert_(u'ACK Not implemented' in result) def test_replay_gain_mode_track(self): - result = self.h.handle_request(u'replay_gain_mode track') + result = self.h.handle_request(u'replay_gain_mode "track"') self.assert_(u'ACK Not implemented' in result) def test_replay_gain_mode_album(self): - result = self.h.handle_request(u'replay_gain_mode album') + result = self.h.handle_request(u'replay_gain_mode "album"') self.assert_(u'ACK Not implemented' in result) def test_replay_gain_status_default(self): @@ -287,11 +287,11 @@ class PlaybackControlHandlerTest(unittest.TestCase): self.assert_(u'OK' in result) def test_seek(self): - result = self.h.handle_request(u'seek 0 30') + result = self.h.handle_request(u'seek "0" "30"') self.assert_(u'ACK Not implemented' in result) def test_seekid(self): - result = self.h.handle_request(u'seekid 0 30') + result = self.h.handle_request(u'seekid "0" "30"') self.assert_(u'ACK Not implemented' in result) def test_stop(self): @@ -321,35 +321,35 @@ class CurrentPlaylistHandlerTest(unittest.TestCase): self.assert_(u'ACK Not implemented' in result) def test_delete_songpos(self): - result = self.h.handle_request(u'delete 5') + result = self.h.handle_request(u'delete "5"') self.assert_(u'ACK Not implemented' in result) def test_delete_open_range(self): - result = self.h.handle_request(u'delete 10:') + result = self.h.handle_request(u'delete "10:"') self.assert_(u'ACK Not implemented' in result) def test_delete_closed_range(self): - result = self.h.handle_request(u'delete 10:20') + result = self.h.handle_request(u'delete "10:20"') self.assert_(u'ACK Not implemented' in result) def test_deleteid(self): - result = self.h.handle_request(u'deleteid 0') + result = self.h.handle_request(u'deleteid "0"') self.assert_(u'ACK Not implemented' in result) def test_move_songpos(self): - result = self.h.handle_request(u'move 5 0') + result = self.h.handle_request(u'move "5" "0"') self.assert_(u'ACK Not implemented' in result) def test_move_open_range(self): - result = self.h.handle_request(u'move 10: 0') + result = self.h.handle_request(u'move "10:" "0"') self.assert_(u'ACK Not implemented' in result) def test_move_closed_range(self): - result = self.h.handle_request(u'move 10:20 0') + result = self.h.handle_request(u'move "10:20" "0"') self.assert_(u'ACK Not implemented' in result) def test_moveid(self): - result = self.h.handle_request(u'moveid 0 10') + result = self.h.handle_request(u'moveid "0" "10"') self.assert_(u'ACK Not implemented' in result) def test_playlist_returns_same_as_playlistinfo(self): @@ -358,7 +358,7 @@ class CurrentPlaylistHandlerTest(unittest.TestCase): self.assertEquals(playlist_result, playlistinfo_result) def test_playlistfind(self): - result = self.h.handle_request(u'playlistfind tag needle') + result = self.h.handle_request(u'playlistfind "tag" "needle"') self.assert_(u'ACK Not implemented' in result) def test_playlistid_without_songid(self): @@ -386,7 +386,7 @@ class CurrentPlaylistHandlerTest(unittest.TestCase): self.assert_(u'OK' in result) def test_playlistsearch(self): - result = self.h.handle_request(u'playlistsearch tag needle') + result = self.h.handle_request(u'playlistsearch "tag" "needle"') self.assert_(u'ACK Not implemented' in result) def test_plchanges(self): @@ -394,7 +394,7 @@ class CurrentPlaylistHandlerTest(unittest.TestCase): self.assert_(u'OK' in result) def test_plchangesposid(self): - result = self.h.handle_request(u'plchangesposid 0') + result = self.h.handle_request(u'plchangesposid "0"') self.assert_(u'ACK Not implemented' in result) def test_shuffle_without_range(self): @@ -402,19 +402,19 @@ class CurrentPlaylistHandlerTest(unittest.TestCase): self.assert_(u'ACK Not implemented' in result) def test_shuffle_with_open_range(self): - result = self.h.handle_request(u'shuffle 10:') + result = self.h.handle_request(u'shuffle "10:"') self.assert_(u'ACK Not implemented' in result) def test_shuffle_with_closed_range(self): - result = self.h.handle_request(u'shuffle 10:20') + result = self.h.handle_request(u'shuffle "10:20"') self.assert_(u'ACK Not implemented' in result) def test_swap(self): - result = self.h.handle_request(u'swap 10 20') + result = self.h.handle_request(u'swap "10" "20"') self.assert_(u'ACK Not implemented' in result) def test_swapid(self): - result = self.h.handle_request(u'swapid 10 20') + result = self.h.handle_request(u'swapid "10" "20"') self.assert_(u'ACK Not implemented' in result) @@ -423,11 +423,11 @@ class StoredPlaylistsHandlerTest(unittest.TestCase): self.h = handler.MpdHandler(backend=DummyBackend()) def test_listplaylist(self): - result = self.h.handle_request(u'listplaylist name') + result = self.h.handle_request(u'listplaylist "name"') self.assert_(u'ACK Not implemented' in result) def test_listplaylistinfo(self): - result = self.h.handle_request(u'listplaylistinfo name') + result = self.h.handle_request(u'listplaylistinfo "name"') self.assert_(u'ACK Not implemented' in result) def test_listplaylists(self): @@ -440,31 +440,31 @@ class StoredPlaylistsHandlerTest(unittest.TestCase): def test_playlistadd(self): result = self.h.handle_request( - u'playlistadd name "file:///dev/urandom"') + u'playlistadd "name" "file:///dev/urandom"') self.assert_(u'ACK Not implemented' in result) def test_playlistclear(self): - result = self.h.handle_request(u'playlistclear name') + result = self.h.handle_request(u'playlistclear "name"') self.assert_(u'ACK Not implemented' in result) def test_playlistdelete(self): - result = self.h.handle_request(u'playlistdelete name 5') + result = self.h.handle_request(u'playlistdelete "name" "5"') self.assert_(u'ACK Not implemented' in result) def test_playlistmove(self): - result = self.h.handle_request(u'playlistmove name 5a 10') + result = self.h.handle_request(u'playlistmove "name" "5" "10"') self.assert_(u'ACK Not implemented' in result) def test_rename(self): - result = self.h.handle_request(u'rename name new_name') + result = self.h.handle_request(u'rename "old_name" "new_name"') self.assert_(u'ACK Not implemented' in result) def test_rm(self): - result = self.h.handle_request(u'rm name') + result = self.h.handle_request(u'rm "name"') self.assert_(u'ACK Not implemented' in result) def test_save(self): - result = self.h.handle_request(u'save name') + result = self.h.handle_request(u'save "name"') self.assert_(u'ACK Not implemented' in result) @@ -473,49 +473,49 @@ class MusicDatabaseHandlerTest(unittest.TestCase): self.h = handler.MpdHandler(backend=DummyBackend()) def test_count(self): - result = self.h.handle_request(u'count tag needle') + result = self.h.handle_request(u'count "tag" "needle"') self.assert_(u'ACK Not implemented' in result) def test_find_album(self): - result = self.h.handle_request(u'find album what') + result = self.h.handle_request(u'find "album" "what"') self.assert_(u'ACK Not implemented' in result) def test_find_artist(self): - result = self.h.handle_request(u'find artist what') + result = self.h.handle_request(u'find "artist" "what"') self.assert_(u'ACK Not implemented' in result) def test_find_title(self): - result = self.h.handle_request(u'find title what') + result = self.h.handle_request(u'find "title" "what"') self.assert_(u'ACK Not implemented' in result) def test_find_else_should_fail(self): try: - result = self.h.handle_request(u'find somethingelse what') + result = self.h.handle_request(u'find "somethingelse" "what"') self.fail('Find with unknown type should fail') except MpdAckError: pass def test_findadd(self): - result = self.h.handle_request(u'findadd album what') + result = self.h.handle_request(u'findadd "album" "what"') self.assert_(u'ACK Not implemented' in result) def test_list_artist(self): - result = self.h.handle_request(u'list artist') + result = self.h.handle_request(u'list "artist"') self.assert_(u'ACK Not implemented' in result) def test_list_artist_with_artist_should_fail(self): try: - result = self.h.handle_request(u'list artist anartist') + result = self.h.handle_request(u'list "artist" "anartist"') self.fail(u'Listing artists filtered by an artist should fail') except MpdAckError: pass def test_list_album_without_artist(self): - result = self.h.handle_request(u'list album') + result = self.h.handle_request(u'list "album"') self.assert_(u'ACK Not implemented' in result) def test_list_album_with_artist(self): - result = self.h.handle_request(u'list album anartist') + result = self.h.handle_request(u'list "album" "anartist"') self.assert_(u'ACK Not implemented' in result) def test_listall(self):