X-Git-Url: http://git.kaliko.me/?p=python-musicpd.git;a=blobdiff_plain;f=musicpd.py;h=9f2d910fd7626e0aca0c6d35d71ad609896a48a2;hp=f365bb021027948bf731e18dd5dc08d47a31575b;hb=422c2e94f04420aa25e73becf3ad95d27957cf0c;hpb=8d479631733614b46a786022a53c8e40a4e92a1b diff --git a/musicpd.py b/musicpd.py index f365bb0..9f2d910 100644 --- a/musicpd.py +++ b/musicpd.py @@ -15,6 +15,8 @@ # You should have received a copy of the GNU Lesser General Public License # along with python-musicpd. If not, see . +# pylint: disable=C0111 + import socket @@ -22,7 +24,7 @@ HELLO_PREFIX = "OK MPD " ERROR_PREFIX = "ACK " SUCCESS = "OK" NEXT = "list_OK" -VERSION = '0.3.1b' +VERSION = '0.4.0pr2' class MPDError(Exception): @@ -46,15 +48,40 @@ class PendingCommandError(MPDError): class IteratingError(MPDError): pass +class Range: + + def __init__(self, tpl): + self.tpl = tpl + self._check() + + def __str__(self): + if len(self.tpl) == 1: + return '{0}:'.format(self.tpl[0]) + return '{0[0]}:{0[1]}'.format(self.tpl) + + def __repr__(self): + return 'Range({0})'.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]') + for index in self.tpl: + try: + index = int(index) + except (TypeError, ValueError): + raise CommandError('Not a tuple of int') + -class _NotConnected(object): +class _NotConnected: def __getattr__(self, attr): return self._dummy def _dummy(*args): raise ConnectionError("Not connected") -class MPDClient(object): +class MPDClient: def __init__(self): self.iterate = False self._reset() @@ -233,7 +260,10 @@ class MPDClient(object): def _write_command(self, command, args=[]): parts = [command] for arg in args: - parts.append('"%s"' % escape(str(arg))) + if isinstance(arg, tuple): + parts.append('{0!s}'.format(Range(arg))) + else: + parts.append('"%s"' % escape(str(arg))) self._write_line(" ".join(parts)) def _read_line(self): @@ -382,6 +412,7 @@ class MPDClient(object): self.mpd_version = line[len(HELLO_PREFIX):].strip() def _reset(self): + # pylint: disable=w0201 self.mpd_version = None self._iterating = False self._pending = []