Fixes #24
This commit is contained in:
parent
1a3e1270dd
commit
13b482e075
4 changed files with 36 additions and 28 deletions
2
setup.py
2
setup.py
|
|
@ -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',
|
||||||
|
|
|
||||||
|
|
@ -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],
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue