From 86a40a9a5a668399c6ca07022b3c38251686ed1d Mon Sep 17 00:00:00 2001 From: Kaliko Jack Date: Mon, 17 Nov 2014 00:32:23 +0100 Subject: [PATCH] Add rangeid command --- CHANGES.txt | 1 + README.rst | 11 ++++++++++- doc/commands.txt | 1 + musicpd.py | 7 +++++-- test.py | 7 ++++++- 5 files changed, 23 insertions(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 66f0629..dd2bada 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -7,6 +7,7 @@ Changes in 0.4.2 UNRELEASED * Add unittest (requires mock) * Add mounts and neighbors commands (mount, unmount, listmounts and listneighbors) +* Add rangeid command * Add tag editing commands (addtagid and cleartagid) * Add missing priority commands (prio and prioid) diff --git a/README.rst b/README.rst index ca91f0e..61b305f 100644 --- a/README.rst +++ b/README.rst @@ -54,7 +54,8 @@ Command lists are also supported using `command_list_ok_begin()` and client.status() # insert the status command into the list results = client.command_list_end() # results will be a list with the results -Provide a 2-tuple as argument for command supporting ranges (cf. `MPD protocol documentation`_ for more details):: +Provide a 2-tuple as argument for command supporting ranges (cf. `MPD protocol documentation`_ for more details). +Possible ranges are: "START:END", "START:" and ":" :: # An intelligent clear # clears played track in the queue, currentsong included @@ -64,6 +65,14 @@ Provide a 2-tuple as argument for command supporting ranges (cf. `MPD protocol d # missing end interpreted as highest value possible, pay attention still need a tuple. client.delete((pos,)) # purge queue from current to the end +A notable case is the `rangeid` command allowing an empty range specified +as a single colon as argument (i.e. sending just ":"):: + + # sending "rangeid :" to clear the range, play everything + client.rangeid(()) # send an empty tuple + +Empty start in range (i.e. ":END") are not possible and will raise a CommandError. + Commands may also return iterators instead of lists if `iterate` is set to `True`:: diff --git a/doc/commands.txt b/doc/commands.txt index 92ef071..70f6cc9 100644 --- a/doc/commands.txt +++ b/doc/commands.txt @@ -46,6 +46,7 @@ plchanges -> fetch_songs plchangesposid -> fetch_changes prio | -> self._fetch_nothing, prioid -> self._fetch_nothing, +rangeid -> self._fetch_nothing, shuffle [] -> fetch_nothing swap -> fetch_nothing swapid -> fetch_nothing diff --git a/musicpd.py b/musicpd.py index 3d18bfe..4ead39a 100644 --- a/musicpd.py +++ b/musicpd.py @@ -55,6 +55,8 @@ class Range: self._check() def __str__(self): + if len(self.tpl) == 0: + return ':' if len(self.tpl) == 1: return '{0}:'.format(self.tpl[0]) return '{0[0]}:{0[1]}'.format(self.tpl) @@ -65,8 +67,8 @@ class Range: def _check(self): if not isinstance(self.tpl, tuple): raise CommandError('Wrong type, provide a tuple') - if len(self.tpl) not in [1, 2]: - raise CommandError('length not in [1, 2]') + if len(self.tpl) not in [0, 1, 2]: + raise CommandError('length not in [0, 1, 2]') for index in self.tpl: try: index = int(index) @@ -132,6 +134,7 @@ class MPDClient: "plchangesposid": self._fetch_changes, "prio": self._fetch_nothing, "prioid": self._fetch_nothing, + "rangeid": self._fetch_nothing, "shuffle": self._fetch_nothing, "swap": self._fetch_nothing, "swapid": self._fetch_nothing, diff --git a/test.py b/test.py index fccf921..9a566df 100755 --- a/test.py +++ b/test.py @@ -306,7 +306,12 @@ class TestMPDClient(unittest.TestCase): self.client.playlistinfo((10, 12)) self.assertMPDReceived('playlistinfo 10:12\n') - for arg in [(10, "t"), (10, 1, 1)]: + self.MPDWillReturn("OK\n") + self.client.rangeid(()) + self.assertMPDReceived('rangeid :\n') + + + for arg in [(10, "t"), (10, 1, 1), (None,1)]: self.MPDWillReturn("OK\n") with self.assertRaises(musicpd.CommandError): self.client.playlistinfo(arg) -- 2.39.2