From 13b482e075c116a56864efca3a38f226aa3f126f Mon Sep 17 00:00:00 2001 From: Roy Hyunjin Han Date: Wed, 6 Nov 2013 09:57:28 -0800 Subject: [PATCH] Fixes #24 --- setup.py | 2 +- socketIO_client/__init__.py | 18 ++++++++--------- socketIO_client/exceptions.py | 6 +++--- socketIO_client/transports.py | 38 +++++++++++++++++++++-------------- 4 files changed, 36 insertions(+), 28 deletions(-) diff --git a/setup.py b/setup.py index 2fb7721..9afabd2 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,7 @@ CHANGES = open(os.path.join(here, 'CHANGES.rst')).read() setup( name='socketIO-client', - version='0.5', + version='0.5.1', description='A socket.io client library', long_description=README + '\n\n' + CHANGES, license='MIT', diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index a114906..f166cc3 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -4,7 +4,7 @@ import requests import time from collections import namedtuple -from .exceptions import SocketIOConnectionError, _TimeoutError, _PacketError +from .exceptions import ConnectionError, TimeoutError, PacketError from .transports import _get_response, _negotiate_transport, TRANSPORTS @@ -168,12 +168,12 @@ class SocketIO(object): for packet in self._transport.recv_packet(): try: self._process_packet(packet) - except _PacketError as e: + except PacketError as e: _log.warn('[packet error] %s', e) - except _TimeoutError: + except TimeoutError: pass self.heartbeat_pacemaker.send(elapsed_time) - except SocketIOConnectionError as e: + except ConnectionError as e: try: warning = Exception('[connection error] %s' % e) warning_screen.throw(warning) @@ -210,7 +210,7 @@ class SocketIO(object): try: self.__transport = self._get_transport() break - except SocketIOConnectionError as e: + except ConnectionError as e: if not self.wait_for_connection: raise try: @@ -256,7 +256,7 @@ class SocketIO(object): try: return self._namespace_by_path[path] except KeyError: - raise _PacketError('unexpected namespace path (%s)' % path) + raise PacketError('unexpected namespace path (%s)' % path) def _get_delegate(self, code): try: @@ -272,7 +272,7 @@ class SocketIO(object): '8': self._on_noop, }[code] except KeyError: - raise _PacketError('unexpected code (%s)' % code) + raise PacketError('unexpected code (%s)' % code) def _on_disconnect(self, packet_id, data, find_event_callback): find_event_callback('disconnect')() @@ -361,8 +361,8 @@ def _get_socketIO_session(secure, base_url, **kw): server_url = '%s://%s/' % ('https' if secure else 'http', base_url) try: response = _get_response(requests.get, server_url, **kw) - except _TimeoutError as e: - raise SocketIOConnectionError(e) + except TimeoutError as e: + raise ConnectionError(e) response_parts = response.text.split(':') return _SocketIOSession( id=response_parts[0], diff --git a/socketIO_client/exceptions.py b/socketIO_client/exceptions.py index a614636..ed2b4d2 100644 --- a/socketIO_client/exceptions.py +++ b/socketIO_client/exceptions.py @@ -2,13 +2,13 @@ class SocketIOError(Exception): pass -class SocketIOConnectionError(SocketIOError): +class ConnectionError(SocketIOError): pass -class _TimeoutError(Exception): +class TimeoutError(SocketIOError): pass -class _PacketError(SocketIOError): +class PacketError(SocketIOError): pass diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index 79aac94..833289a 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -8,12 +8,12 @@ import time import websocket from itertools import izip -from .exceptions import SocketIOError, SocketIOConnectionError, _TimeoutError +from .exceptions import SocketIOError, ConnectionError, TimeoutError TRANSPORTS = 'websocket', 'xhr-polling', 'jsonp-polling' BOUNDARY = six.u('\ufffd') -TIMEOUT_IN_SECONDS = 2 +TIMEOUT_IN_SECONDS = 3 _log = logging.getLogger(__name__) @@ -112,9 +112,9 @@ class _WebsocketTransport(_AbstractTransport): try: self._connection = websocket.create_connection(url) except socket.timeout as e: - raise SocketIOConnectionError(e) + raise ConnectionError(e) except socket.error as e: - raise SocketIOConnectionError(e) + raise ConnectionError(e) self._connection.settimeout(TIMEOUT_IN_SECONDS) @property @@ -124,18 +124,26 @@ class _WebsocketTransport(_AbstractTransport): def send(self, packet_text): try: self._connection.send(packet_text) - except socket.error: - raise SocketIOConnectionError('could not send %s' % packet_text) + except websocket.WebSocketTimeoutException as e: + message = 'timed out while sending %s (%s)' % (packet_text, e) + _log.warn(message) + raise TimeoutError(e) + except socket.error as e: + message = 'disconnected while sending %s (%s)' % (packet_text, e) + _log.warn(message) + raise ConnectionError(message) def recv(self): try: yield self._connection.recv() - except socket.timeout: - raise _TimeoutError - except socket.error as e: - raise SocketIOConnectionError(e) + except websocket.WebSocketTimeoutException as e: + raise TimeoutError(e) + except websocket.SSLError as e: + raise ConnectionError(e) except websocket.WebSocketConnectionClosedException as e: - raise SocketIOConnectionError('connection closed (%s)' % e) + raise ConnectionError('connection closed (%s)' % e) + except socket.error as e: + raise ConnectionError(e) def close(self): self._connection.close() @@ -288,14 +296,14 @@ def _get_response(request, *args, **kw): try: response = request(*args, **kw) except requests.exceptions.Timeout as e: - raise _TimeoutError(e) + raise TimeoutError(e) except requests.exceptions.ConnectionError as e: - raise SocketIOConnectionError(e) + raise ConnectionError(e) except requests.exceptions.SSLError as e: - raise SocketIOConnectionError('could not negotiate SSL (%s)' % e) + raise ConnectionError('could not negotiate SSL (%s)' % e) status = response.status_code if 200 != status: - raise SocketIOConnectionError('unexpected status code (%s)' % status) + raise ConnectionError('unexpected status code (%s)' % status) return response