From 97b3325d6f47de863d847c14fc9e56668ed8958d Mon Sep 17 00:00:00 2001 From: Roy Hyunjin Han Date: Mon, 16 Feb 2015 14:12:33 -0500 Subject: [PATCH] Fix for Python 3 --- .travis.yml | 7 ++++--- setup.py | 9 ++++++--- socketIO_client/transports.py | 25 ++++++++++++++----------- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index f3dda90..c3475fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,9 +11,10 @@ before_install: - sudo apt-get install nodejs install: - npm install -G socket.io@0.9 - - pip install -U --use-mirrors requests - - pip install -U --use-mirrors six - - pip install -U --use-mirrors websocket-client + - pip install -U requests + - pip install -U six + - pip install -U websocket-client + - pip install -U coverage before_script: - node serve-tests.js & - sleep 3 diff --git a/setup.py b/setup.py index ced54e6..192eec0 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,5 @@ import os from setuptools import setup, find_packages -from socketIO_client import __version__ here = os.path.abspath(os.path.dirname(__file__)) @@ -10,7 +9,7 @@ CHANGES = open(os.path.join(here, 'CHANGES.md')).read() setup( name='socketIO-client', - version=__version__, + version='0.5.4', description='A socket.io client library', long_description=README + '\n\n' + CHANGES, license='MIT', @@ -28,6 +27,10 @@ setup( 'six', 'websocket-client', ], + tests_require=[ + 'nose', + 'coverage', + ], packages=find_packages(), include_package_data=True, - zip_safe=True) + zip_safe=False) diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index 5e47f94..ca95777 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -1,3 +1,4 @@ +import codecs import json import logging import re @@ -8,7 +9,7 @@ import sys import time import websocket -from .exceptions import SocketIOError, ConnectionError, TimeoutError +from .exceptions import ConnectionError, TimeoutError if not hasattr(websocket, 'create_connection'): @@ -21,6 +22,11 @@ TRANSPORTS = 'websocket', 'xhr-polling', 'jsonp-polling' BOUNDARY = six.u('\ufffd') TIMEOUT_IN_SECONDS = 3 _log = logging.getLogger(__name__) +escape_unicode = codecs.getdecoder('unicode_escape') +try: + encode_unicode = lambda x: unicode(x).encode('utf-8') +except NameError: + encode_unicode = lambda x: x class _AbstractTransport(object): @@ -75,10 +81,7 @@ class _AbstractTransport(object): def send_packet(self, code, path='', data='', callback=None): packet_id = self.set_ack_callback(callback) if callback else '' - try: - packet_parts = str(code), packet_id, path, unicode(data).encode('utf-8') - except NameError: # fix for p3k - packet_parts = str(code), packet_id, path, data + packet_parts = str(code), packet_id, path, encode_unicode(data) packet_text = ':'.join(packet_parts) self.send(packet_text) self._log(logging.DEBUG, '[packet sent] %s', packet_text) @@ -90,7 +93,7 @@ class _AbstractTransport(object): except IndexError: pass for packet_text in self.recv(timeout=timeout): - _log.debug('[packet received] %s', packet_text) + self._log(logging.DEBUG, '[packet received] %s', packet_text) try: packet_parts = packet_text.split(':', 3) except AttributeError: @@ -136,7 +139,7 @@ class _WebsocketTransport(_AbstractTransport): self._url = url http_session = _prepare_http_session(kw) req = http_session.prepare_request(requests.Request('GET', url)) - headers = ['%s: %s' % item for item in req.headers.iteritems()] + headers = ['%s: %s' % item for item in req.headers.items()] try: self._connection = websocket.create_connection(url, header=headers) except socket.timeout as e: @@ -229,7 +232,7 @@ class _XHR_PollingTransport(_AbstractTransport): _get_response( self._http_session.get, self._url, - params=dict(self._params.items() + [('disconnect', True)])) + params=dict(list(self._params.items()) + [('disconnect', True)])) self._connected = False @@ -282,17 +285,17 @@ class _JSONP_PollingTransport(_AbstractTransport): self._log(logging.WARNING, '[packet error] %s', response_text) return if not response_text.startswith(BOUNDARY): - yield response_text.decode('unicode_escape') + yield escape_unicode(response_text) return for packet_text in _yield_text_from_framed_data( - response_text, parse=lambda x: x.decode('unicode_escape')): + response_text, parse=lambda x: escape_unicode(x)): yield packet_text def close(self): _get_response( self._http_session.get, self._url, - params=dict(self._params.items() + [('disconnect', True)])) + params=dict(list(self._params.items()) + [('disconnect', True)])) self._connected = False