* 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)
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
# 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`::
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
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)
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)
"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,
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)