]> kaliko git repositories - python-musicpd.git/commitdiff
Add rangeid command
authorKaliko Jack <kaliko@azylum.org>
Sun, 16 Nov 2014 23:32:23 +0000 (00:32 +0100)
committerKaliko Jack <kaliko@azylum.org>
Sun, 16 Nov 2014 23:32:23 +0000 (00:32 +0100)
CHANGES.txt
README.rst
doc/commands.txt
musicpd.py
test.py

index 66f06291769b0f28cc8afbaae9625904ca91aa97..dd2bada2e9e6a32f32611ab7be10838210f543d8 100644 (file)
@@ -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)
 
index ca91f0eaaaeb5517172b30a5246f117839ef92fb..61b305fec96b4ec1277c1bdd06ce4b266e5a0390 100644 (file)
@@ -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`::
index 92ef071da4345e3832ef1cf96e3ef6f0cea93d0d..70f6cc9b67e729a10fd5fea2b78b353a66e3589b 100644 (file)
@@ -46,6 +46,7 @@ plchanges          <int>                   -> fetch_songs
 plchangesposid     <int>                   -> fetch_changes
 prio               <int> <int>|<range>     -> self._fetch_nothing,
 prioid             <int> <int>             -> self._fetch_nothing,
+rangeid            <int> <range>           -> self._fetch_nothing,
 shuffle            [<range>]               -> fetch_nothing
 swap               <int> <int>             -> fetch_nothing
 swapid             <int> <int>             -> fetch_nothing
index 3d18bfedef1d937a8c68f17bd38d342eff5d88d9..4ead39a86ca9de7e7e98dcded1b24c222e6ae093 100644 (file)
@@ -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 fccf921f19116d4875e55313547d4b4d1643f369..9a566df1ba0953feb31426193343b43a78d94ce4 100755 (executable)
--- 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)