From b288d89c15d452a30bfeb00f38494f59f71f5a43 Mon Sep 17 00:00:00 2001 From: Roy Hyunjin Han Date: Mon, 1 Jun 2015 14:17:24 -0400 Subject: [PATCH] Backport to support requests 0.8.2; fixes #79 --- CHANGES.rst | 4 ++++ README.rst | 5 ++++- TODO.goals | 8 -------- setup.py | 2 +- socketIO_client/__init__.py | 3 ++- socketIO_client/symmetries.py | 5 +++++ socketIO_client/transports.py | 5 +++-- 7 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 socketIO_client/symmetries.py diff --git a/CHANGES.rst b/CHANGES.rst index 9fcbea8..b4dbbab 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,7 @@ +0.5.6 +----- +- Backported to support requests 0.8.2 + 0.5.5 ----- - Fixed reconnection in the event of server restart diff --git a/README.rst b/README.rst index 7bc0f48..8a46a30 100644 --- a/README.rst +++ b/README.rst @@ -6,6 +6,8 @@ socketIO-client =============== Here is a `socket.io `_ client library for Python. You can use it to write test code for your socket.io server. +Please note that this version implements `socket.io protocol 0.9 `_, which is compatible with `gevent-socketio `_. If you want to communicate using `socket.io protocol 1.x `_, please use `socketIO-client 0.6.3 `_ or higher. + Installation ------------ @@ -32,6 +34,7 @@ Activate isolated environment. :: Launch your socket.io server. :: + npm install -g socket.io@0.9 node serve-tests.js For debugging information, run these commands first. :: @@ -156,5 +159,5 @@ Credits - `Alexandre Bourget `_ wrote `gevent-socketio `_, which is a socket.io server written in Python. - `Paul Kienzle `_, `Zac Lee `_, `Josh VanderLinden `_, `Ian Fitzpatrick `_, `Lucas Klein `_, `Rui Chicoria `_, `Travis Odom `_, `Patrick Huber `_, `Brad Campbell `_, `Daniel `_, `Sean Arietta `_ submitted code to expand support of the socket.io protocol. - `Bernard Pratz `_, `Francis Bull `_ wrote prototypes to support xhr-polling and jsonp-polling. -- `Eric Chen `_, `Denis Zinevich `_, `Thiago Hersan `_, `Nayef Copty `_, `Jörgen Karlsson `_, `Branden Ghena `_ suggested ways to make the connection more robust. +- `Eric Chen `_, `Denis Zinevich `_, `Thiago Hersan `_, `Nayef Copty `_, `Jörgen Karlsson `_, `Branden Ghena `_, `Tim Landscheidt _` suggested ways to make the connection more robust. - `Merlijn van Deen `_, `Frederic Sureau `_, `Marcus Cobden `_, `Drew Hutchison `_, `wuurrd `_, `Adam Kecer `_, `Alex Monk `_, `Vishal P R `_, `John Vandenberg `_, `Thomas Grainger `_ proposed changes that make the library more friendly and practical for you! diff --git a/TODO.goals b/TODO.goals index a3b2527..e69de29 100644 --- a/TODO.goals +++ b/TODO.goals @@ -1,8 +0,0 @@ -Release 0.6.1 #41 #52 - + Update serve-tests.js - + Integrate serve-tests.js changes from sarietta - = Put tests in index.html - Update tests - Merge sarietta's pull request - Revive heartbeat as separate process -Implement rooms #65 diff --git a/setup.py b/setup.py index b98da09..7a7567b 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.5', + version='0.5.6', 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 f06b5cb..44b4444 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -10,6 +10,7 @@ except ImportError: from .exceptions import ( SocketIOError, ConnectionError, TimeoutError, PacketError) +from .symmetries import _get_text from .transports import ( _get_response, TRANSPORTS, _WebsocketTransport, _XHR_PollingTransport, _JSONP_PollingTransport) @@ -515,7 +516,7 @@ def _get_socketIO_session(is_secure, base_url, **kw): response = _get_response(requests.get, server_url, **kw) except TimeoutError as e: raise ConnectionError(e) - response_parts = response.text.split(':') + response_parts = _get_text(response).split(':') return _SocketIOSession( id=response_parts[0], heartbeat_timeout=int(response_parts[1]), diff --git a/socketIO_client/symmetries.py b/socketIO_client/symmetries.py new file mode 100644 index 0000000..eceecdc --- /dev/null +++ b/socketIO_client/symmetries.py @@ -0,0 +1,5 @@ +def _get_text(response): + try: + return response.text # requests 2.7.0 + except AttributeError: + return response.content # requests 0.8.2 diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index 2887efa..21e046e 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -10,6 +10,7 @@ import time import websocket from .exceptions import ConnectionError, TimeoutError +from .symmetries import _get_text if not hasattr(websocket, 'create_connection'): @@ -223,7 +224,7 @@ class _XHR_PollingTransport(_AbstractTransport): params=self._params, timeout=timeout or TIMEOUT_IN_SECONDS, stream=True) - response_text = response.text + response_text = _get_text(response) if not response_text.startswith(BOUNDARY): yield response_text return @@ -279,7 +280,7 @@ class _JSONP_PollingTransport(_AbstractTransport): params=self._params, headers={'content-type': 'text/javascript; charset=UTF-8'}, timeout=timeout or TIMEOUT_IN_SECONDS) - response_text = response.text + response_text = _get_text(response) try: self._id, response_text = self.RESPONSE_PATTERN.match( response_text).groups()