X-Git-Url: http://git.kaliko.me/?p=python-musicpd.git;a=blobdiff_plain;f=mpd.py;h=846e3e4ad363eaeee4b0d76f2f26f23f20e110ea;hp=8810face31f19cc2147815d71f286fca0c0f9c14;hb=af6e84c66350a7e833cfc0c0fb3d0d5678777e21;hpb=535e659098997d301a7176e45bfc806bbc5cedb4 diff --git a/mpd.py b/mpd.py index 8810fac..846e3e4 100644 --- a/mpd.py +++ b/mpd.py @@ -269,20 +269,24 @@ class MPDClient(object): yield obj def _read_command_list(self): - for retval in self._command_list: - yield retval() - self._command_list = None + try: + for retval in self._command_list: + yield retval() + finally: + self._command_list = None self._fetch_nothing() def _iterator_wrapper(self, iterator): - self._iterating = True - for item in iterator: - yield item - self._iterating = False + try: + for item in iterator: + yield item + finally: + self._iterating = False def _wrap_iterator(self, iterator): if not self.iterate: return list(iterator) + self._iterating = True return self._iterator_wrapper(iterator) def _fetch_nothing(self): @@ -360,26 +364,26 @@ class MPDClient(object): flags = socket.AI_ADDRCONFIG except AttributeError: flags = 0 - msg = "getaddrinfo returns an empty list" + err = None for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM, socket.IPPROTO_TCP, flags): af, socktype, proto, canonname, sa = res + sock = None try: sock = socket.socket(af, socktype, proto) sock.connect(sa) - except socket.error, msg: - if sock: + return sock + except socket.error, err: + if sock is not None: sock.close() - sock = None - continue - break - if not sock: - raise socket.error(msg) - return sock + if err is not None: + raise err + else: + raise ConnectionError("getaddrinfo returns an empty list") def connect(self, host, port): - if self._sock: + if self._sock is not None: raise ConnectionError("Already connected") if host.startswith("/"): self._sock = self._connect_unix(host) @@ -400,7 +404,7 @@ class MPDClient(object): self._reset() def fileno(self): - if not self._sock: + if self._sock is None: raise ConnectionError("Not connected") return self._sock.fileno() @@ -418,6 +422,8 @@ class MPDClient(object): def command_list_end(self): if self._command_list is None: raise CommandListError("Not in command list") + if self._iterating: + raise IteratingError("Already iterating over a command list") self._write_command("command_list_end") return self._fetch_command_list()