From d05683262bbd6ac011927d43c0c9a27d9b0313b6 Mon Sep 17 00:00:00 2001 From: Marcus Cobden Date: Mon, 9 Dec 2013 10:16:22 +0000 Subject: [PATCH] Pass on wait timeout to underlying transports --- socketIO_client/__init__.py | 6 +++--- socketIO_client/transports.py | 16 +++++++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index 3bdecf1..9a7f436 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -172,7 +172,7 @@ class SocketIO(object): for elapsed_time in warning_screen: try: try: - self._process_events() + self._process_events(timeout=seconds) except TimeoutError: pass if self._stop_waiting(for_callbacks): @@ -188,8 +188,8 @@ class SocketIO(object): except KeyboardInterrupt: pass - def _process_events(self): - for packet in self._transport.recv_packet(): + def _process_events(self, timeout=None): + for packet in self._transport.recv_packet(timeout=timeout): try: self._process_packet(packet) except PacketError as e: diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index ed4e59c..e257f41 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -71,13 +71,13 @@ class _AbstractTransport(object): self.send(packet_text) _log.debug('[packet sent] %s', packet_text) - def recv_packet(self): + def recv_packet(self, timeout=None): try: while self._packets: yield self._packets.pop(0) except IndexError: pass - for packet_text in self.recv(): + for packet_text in self.recv(timeout=timeout): _log.debug('[packet received] %s', packet_text) try: packet_parts = packet_text.split(':', 3) @@ -145,7 +145,9 @@ class _WebsocketTransport(_AbstractTransport): _log.warn(message) raise ConnectionError(message) - def recv(self): + def recv(self, timeout=None): + if timeout: + self._connection.settimeout(timeout) try: yield self._connection.recv() except websocket.WebSocketTimeoutException as e: @@ -190,12 +192,12 @@ class _XHR_PollingTransport(_AbstractTransport): data=packet_text, timeout=TIMEOUT_IN_SECONDS) - def recv(self): + def recv(self, timeout=None): response = _get_response( self._http_session.get, self._url, params=self._params, - timeout=TIMEOUT_IN_SECONDS) + timeout=timeout or TIMEOUT_IN_SECONDS) response_text = response.text if not response_text.startswith(BOUNDARY): yield response_text @@ -244,14 +246,14 @@ class _JSONP_PollingTransport(_AbstractTransport): headers={'content-type': 'application/x-www-form-urlencoded'}, timeout=TIMEOUT_IN_SECONDS) - def recv(self): + def recv(self, timeout=None): 'Decode the JavaScript response so that we can parse it as JSON' response = _get_response( self._http_session.get, self._url, params=self._params, headers={'content-type': 'text/javascript; charset=UTF-8'}, - timeout=TIMEOUT_IN_SECONDS) + timeout=timeout or TIMEOUT_IN_SECONDS) response_text = response.text try: self._id, response_text = self.RESPONSE_PATTERN.match(