This commit is contained in:
Roy Hyunjin Han 2013-11-06 09:57:28 -08:00
commit 13b482e075
4 changed files with 36 additions and 28 deletions

View file

@ -9,7 +9,7 @@ CHANGES = open(os.path.join(here, 'CHANGES.rst')).read()
setup( setup(
name='socketIO-client', name='socketIO-client',
version='0.5', version='0.5.1',
description='A socket.io client library', description='A socket.io client library',
long_description=README + '\n\n' + CHANGES, long_description=README + '\n\n' + CHANGES,
license='MIT', license='MIT',

View file

@ -4,7 +4,7 @@ import requests
import time import time
from collections import namedtuple from collections import namedtuple
from .exceptions import SocketIOConnectionError, _TimeoutError, _PacketError from .exceptions import ConnectionError, TimeoutError, PacketError
from .transports import _get_response, _negotiate_transport, TRANSPORTS from .transports import _get_response, _negotiate_transport, TRANSPORTS
@ -168,12 +168,12 @@ class SocketIO(object):
for packet in self._transport.recv_packet(): for packet in self._transport.recv_packet():
try: try:
self._process_packet(packet) self._process_packet(packet)
except _PacketError as e: except PacketError as e:
_log.warn('[packet error] %s', e) _log.warn('[packet error] %s', e)
except _TimeoutError: except TimeoutError:
pass pass
self.heartbeat_pacemaker.send(elapsed_time) self.heartbeat_pacemaker.send(elapsed_time)
except SocketIOConnectionError as e: except ConnectionError as e:
try: try:
warning = Exception('[connection error] %s' % e) warning = Exception('[connection error] %s' % e)
warning_screen.throw(warning) warning_screen.throw(warning)
@ -210,7 +210,7 @@ class SocketIO(object):
try: try:
self.__transport = self._get_transport() self.__transport = self._get_transport()
break break
except SocketIOConnectionError as e: except ConnectionError as e:
if not self.wait_for_connection: if not self.wait_for_connection:
raise raise
try: try:
@ -256,7 +256,7 @@ class SocketIO(object):
try: try:
return self._namespace_by_path[path] return self._namespace_by_path[path]
except KeyError: except KeyError:
raise _PacketError('unexpected namespace path (%s)' % path) raise PacketError('unexpected namespace path (%s)' % path)
def _get_delegate(self, code): def _get_delegate(self, code):
try: try:
@ -272,7 +272,7 @@ class SocketIO(object):
'8': self._on_noop, '8': self._on_noop,
}[code] }[code]
except KeyError: except KeyError:
raise _PacketError('unexpected code (%s)' % code) raise PacketError('unexpected code (%s)' % code)
def _on_disconnect(self, packet_id, data, find_event_callback): def _on_disconnect(self, packet_id, data, find_event_callback):
find_event_callback('disconnect')() 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) server_url = '%s://%s/' % ('https' if secure else 'http', base_url)
try: try:
response = _get_response(requests.get, server_url, **kw) response = _get_response(requests.get, server_url, **kw)
except _TimeoutError as e: except TimeoutError as e:
raise SocketIOConnectionError(e) raise ConnectionError(e)
response_parts = response.text.split(':') response_parts = response.text.split(':')
return _SocketIOSession( return _SocketIOSession(
id=response_parts[0], id=response_parts[0],

View file

@ -2,13 +2,13 @@ class SocketIOError(Exception):
pass pass
class SocketIOConnectionError(SocketIOError): class ConnectionError(SocketIOError):
pass pass
class _TimeoutError(Exception): class TimeoutError(SocketIOError):
pass pass
class _PacketError(SocketIOError): class PacketError(SocketIOError):
pass pass

View file

@ -8,12 +8,12 @@ import time
import websocket import websocket
from itertools import izip from itertools import izip
from .exceptions import SocketIOError, SocketIOConnectionError, _TimeoutError from .exceptions import SocketIOError, ConnectionError, TimeoutError
TRANSPORTS = 'websocket', 'xhr-polling', 'jsonp-polling' TRANSPORTS = 'websocket', 'xhr-polling', 'jsonp-polling'
BOUNDARY = six.u('\ufffd') BOUNDARY = six.u('\ufffd')
TIMEOUT_IN_SECONDS = 2 TIMEOUT_IN_SECONDS = 3
_log = logging.getLogger(__name__) _log = logging.getLogger(__name__)
@ -112,9 +112,9 @@ class _WebsocketTransport(_AbstractTransport):
try: try:
self._connection = websocket.create_connection(url) self._connection = websocket.create_connection(url)
except socket.timeout as e: except socket.timeout as e:
raise SocketIOConnectionError(e) raise ConnectionError(e)
except socket.error as e: except socket.error as e:
raise SocketIOConnectionError(e) raise ConnectionError(e)
self._connection.settimeout(TIMEOUT_IN_SECONDS) self._connection.settimeout(TIMEOUT_IN_SECONDS)
@property @property
@ -124,18 +124,26 @@ class _WebsocketTransport(_AbstractTransport):
def send(self, packet_text): def send(self, packet_text):
try: try:
self._connection.send(packet_text) self._connection.send(packet_text)
except socket.error: except websocket.WebSocketTimeoutException as e:
raise SocketIOConnectionError('could not send %s' % packet_text) 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): def recv(self):
try: try:
yield self._connection.recv() yield self._connection.recv()
except socket.timeout: except websocket.WebSocketTimeoutException as e:
raise _TimeoutError raise TimeoutError(e)
except socket.error as e: except websocket.SSLError as e:
raise SocketIOConnectionError(e) raise ConnectionError(e)
except websocket.WebSocketConnectionClosedException as 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): def close(self):
self._connection.close() self._connection.close()
@ -288,14 +296,14 @@ def _get_response(request, *args, **kw):
try: try:
response = request(*args, **kw) response = request(*args, **kw)
except requests.exceptions.Timeout as e: except requests.exceptions.Timeout as e:
raise _TimeoutError(e) raise TimeoutError(e)
except requests.exceptions.ConnectionError as e: except requests.exceptions.ConnectionError as e:
raise SocketIOConnectionError(e) raise ConnectionError(e)
except requests.exceptions.SSLError as 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 status = response.status_code
if 200 != status: if 200 != status:
raise SocketIOConnectionError('unexpected status code (%s)' % status) raise ConnectionError('unexpected status code (%s)' % status)
return response return response