diff options
| -rw-r--r-- | common/PubnubBase.py | 13 | ||||
| -rw-r--r-- | common/PubnubCore.py | 20 | ||||
| -rw-r--r-- | common/PubnubCoreAsync.py | 24 | ||||
| -rw-r--r-- | python-tornado/Pubnub.py | 53 | ||||
| -rw-r--r-- | python-tornado/examples/here-now-example.py | 8 | ||||
| -rw-r--r-- | python-tornado/unassembled/Platform.py | 16 | ||||
| -rw-r--r-- | python-twisted/Pubnub.py | 74 | ||||
| -rw-r--r-- | python-twisted/examples/here-now-example.py | 13 | ||||
| -rw-r--r-- | python-twisted/unassembled/Platform.py | 37 | ||||
| -rw-r--r-- | python/Pubnub.py | 37 | ||||
| -rwxr-xr-x | python/examples/dev-console.py | 26 |
11 files changed, 128 insertions, 193 deletions
diff --git a/common/PubnubBase.py b/common/PubnubBase.py index 5863da9..9a20034 100644 --- a/common/PubnubBase.py +++ b/common/PubnubBase.py @@ -10,7 +10,7 @@ import sys try: from urllib.parse import quote -except: +except ImportError: from urllib2 import quote from base64 import urlsafe_b64encode @@ -221,7 +221,7 @@ class PubnubBase(object): """ - message = self.encrypt(args['message']) + message = self.encrypt(message) ## Send Message return self._request({"urlcomponents": [ @@ -282,15 +282,6 @@ class PubnubBase(object): print(here_now['uuids']) """ - channel = str(args['channel']) - - callback = args['callback'] if 'callback' in args else None - error = args['error'] if 'error' in args else None - - ## Fail if bad input. - if not channel: - raise Exception('Missing Channel') - return False ## Get Presence Here Now return self._request({"urlcomponents": [ diff --git a/common/PubnubCore.py b/common/PubnubCore.py index 1c00215..8454797 100644 --- a/common/PubnubCore.py +++ b/common/PubnubCore.py @@ -45,7 +45,7 @@ class PubnubCore(PubnubCoreAsync): self.version = '3.4' self.accept_encoding = 'gzip' - def subscribe_sync(self, args): + def subscribe_sync(self, channel, callback, timetoken=0): """ #** #* Subscribe @@ -69,25 +69,11 @@ class PubnubCore(PubnubCoreAsync): """ - ## Fail if missing channel - if not 'channel' in args: - raise Exception('Missing Channel.') - return False - - ## Fail if missing callback - if not 'callback' in args: - raise Exception('Missing Callback.') - return False - - ## Capture User Input - channel = str(args['channel']) - callback = args['callback'] - subscribe_key = args.get('subscribe_key') or self.subscribe_key + subscribe_key = self.subscribe_key ## Begin Subscribe while True: - timetoken = 'timetoken' in args and args['timetoken'] or 0 try: ## Wait for Message response = self._request({"urlcomponents": [ @@ -99,7 +85,7 @@ class PubnubCore(PubnubCoreAsync): ], "urlparams": {"uuid": self.uuid}}) messages = response[0] - args['timetoken'] = response[1] + timetoken = response[1] ## If it was a timeout if not len(messages): diff --git a/common/PubnubCoreAsync.py b/common/PubnubCoreAsync.py index de7627f..f8e9e68 100644 --- a/common/PubnubCoreAsync.py +++ b/common/PubnubCoreAsync.py @@ -248,21 +248,23 @@ class PubnubCoreAsync(PubnubBase): return ## CONNECT TO PUBNUB SUBSCRIBE SERVERS - try: - self.SUB_RECEIVER = self._request({"urlcomponents": [ - 'subscribe', - self.subscribe_key, - channel_list, - '0', - str(self.timetoken) - ], "urlparams": {"uuid": self.uuid, "auth": self.auth_key}}, - sub_callback, - sub_callback, - single=True) + #try: + self.SUB_RECEIVER = self._request({"urlcomponents": [ + 'subscribe', + self.subscribe_key, + channel_list, + '0', + str(self.timetoken) + ], "urlparams": {"uuid": self.uuid, "auth": self.auth_key}}, + sub_callback, + sub_callback, + single=True) + ''' except Exception as e: print(e) self.timeout(1, _connect) return + ''' self._connect = _connect diff --git a/python-tornado/Pubnub.py b/python-tornado/Pubnub.py index 718d74e..3d0ba1d 100644 --- a/python-tornado/Pubnub.py +++ b/python-tornado/Pubnub.py @@ -186,7 +186,7 @@ import sys try: from urllib.parse import quote -except: +except ImportError: from urllib2 import quote from base64 import urlsafe_b64encode @@ -397,7 +397,7 @@ class PubnubBase(object): """ - message = self.encrypt(args['message']) + message = self.encrypt(message) ## Send Message return self._request({"urlcomponents": [ @@ -458,15 +458,6 @@ class PubnubBase(object): print(here_now['uuids']) """ - channel = str(args['channel']) - - callback = args['callback'] if 'callback' in args else None - error = args['error'] if 'error' in args else None - - ## Fail if bad input. - if not channel: - raise Exception('Missing Channel') - return False ## Get Presence Here Now return self._request({"urlcomponents": [ @@ -807,21 +798,23 @@ class PubnubCoreAsync(PubnubBase): return ## CONNECT TO PUBNUB SUBSCRIBE SERVERS - try: - self.SUB_RECEIVER = self._request({"urlcomponents": [ - 'subscribe', - self.subscribe_key, - channel_list, - '0', - str(self.timetoken) - ], "urlparams": {"uuid": self.uuid, "auth": self.auth_key}}, - sub_callback, - sub_callback, - single=True) + #try: + self.SUB_RECEIVER = self._request({"urlcomponents": [ + 'subscribe', + self.subscribe_key, + channel_list, + '0', + str(self.timetoken) + ], "urlparams": {"uuid": self.uuid, "auth": self.auth_key}}, + sub_callback, + sub_callback, + single=True) + ''' except Exception as e: print(e) self.timeout(1, _connect) return + ''' self._connect = _connect @@ -905,7 +898,8 @@ class Pubnub(PubnubCoreAsync): self.http = tornado.httpclient.AsyncHTTPClient(max_clients=1000) self.id = None - def _request(self, request, callback=None, error=None, single=False): + def _request(self, request, callback=None, error=None, + single=False, read_timeout=5, connect_timeout=5): def _invoke(func, data): if func is not None: @@ -915,8 +909,8 @@ class Pubnub(PubnubCoreAsync): request = tornado.httpclient.HTTPRequest( url, 'GET', self.headers, - connect_timeout=10, - request_timeout=310) + connect_timeout=connect_timeout, + request_timeout=read_timeout) if single is True: id = time.time() self.id = id @@ -930,20 +924,23 @@ class Pubnub(PubnubCoreAsync): if body is None: return - #print(body) def handle_exc(*args): return True if response.error is not None: with ExceptionStackContext(handle_exc): - response.rethrow() + if response.code in [403, 401]: + response.rethrow() + else: + _invoke(error, {"message": response.reason}) return + try: data = json.loads(body) except TypeError as e: try: data = json.loads(body.decode("utf-8")) - except: + except ValueError as ve: _invoke(error, {'error': 'json decode error'}) if 'error' in data and 'status' in data and 'status' != 200: diff --git a/python-tornado/examples/here-now-example.py b/python-tornado/examples/here-now-example.py index e6e45a3..6e69d53 100644 --- a/python-tornado/examples/here-now-example.py +++ b/python-tornado/examples/here-now-example.py @@ -10,7 +10,6 @@ ## ----------------------------------- import sys -import tornado sys.path.append('..') sys.path.append('../../common') from Pubnub import Pubnub @@ -34,12 +33,11 @@ crazy = 'hello_world' def here_now_complete(messages): print(messages) + print(type(messages)) pubnub.stop() -pubnub.here_now({ - 'channel': crazy, - 'callback': here_now_complete -}) +pubnub.here_now( + channel=crazy, callback=here_now_complete, error=here_now_complete) ## ----------------------------------------------------------------------- ## IO Event Loop diff --git a/python-tornado/unassembled/Platform.py b/python-tornado/unassembled/Platform.py index 871a400..b0e0be9 100644 --- a/python-tornado/unassembled/Platform.py +++ b/python-tornado/unassembled/Platform.py @@ -51,7 +51,8 @@ class Pubnub(PubnubCoreAsync): self.http = tornado.httpclient.AsyncHTTPClient(max_clients=1000) self.id = None - def _request(self, request, callback=None, error=None, single=False): + def _request(self, request, callback=None, error=None, + single=False, read_timeout=5, connect_timeout=5): def _invoke(func, data): if func is not None: @@ -61,8 +62,8 @@ class Pubnub(PubnubCoreAsync): request = tornado.httpclient.HTTPRequest( url, 'GET', self.headers, - connect_timeout=10, - request_timeout=310) + connect_timeout=connect_timeout, + request_timeout=read_timeout) if single is True: id = time.time() self.id = id @@ -76,20 +77,23 @@ class Pubnub(PubnubCoreAsync): if body is None: return - #print(body) def handle_exc(*args): return True if response.error is not None: with ExceptionStackContext(handle_exc): - response.rethrow() + if response.code in [403, 401]: + response.rethrow() + else: + _invoke(error, {"message": response.reason}) return + try: data = json.loads(body) except TypeError as e: try: data = json.loads(body.decode("utf-8")) - except: + except ValueError as ve: _invoke(error, {'error': 'json decode error'}) if 'error' in data and 'status' in data and 'status' != 200: diff --git a/python-twisted/Pubnub.py b/python-twisted/Pubnub.py index c312033..94d2624 100644 --- a/python-twisted/Pubnub.py +++ b/python-twisted/Pubnub.py @@ -186,7 +186,7 @@ import sys try: from urllib.parse import quote -except: +except ImportError: from urllib2 import quote from base64 import urlsafe_b64encode @@ -397,7 +397,7 @@ class PubnubBase(object): """ - message = self.encrypt(args['message']) + message = self.encrypt(message) ## Send Message return self._request({"urlcomponents": [ @@ -458,15 +458,6 @@ class PubnubBase(object): print(here_now['uuids']) """ - channel = str(args['channel']) - - callback = args['callback'] if 'callback' in args else None - error = args['error'] if 'error' in args else None - - ## Fail if bad input. - if not channel: - raise Exception('Missing Channel') - return False ## Get Presence Here Now return self._request({"urlcomponents": [ @@ -807,21 +798,23 @@ class PubnubCoreAsync(PubnubBase): return ## CONNECT TO PUBNUB SUBSCRIBE SERVERS - try: - self.SUB_RECEIVER = self._request({"urlcomponents": [ - 'subscribe', - self.subscribe_key, - channel_list, - '0', - str(self.timetoken) - ], "urlparams": {"uuid": self.uuid, "auth": self.auth_key}}, - sub_callback, - sub_callback, - single=True) + #try: + self.SUB_RECEIVER = self._request({"urlcomponents": [ + 'subscribe', + self.subscribe_key, + channel_list, + '0', + str(self.timetoken) + ], "urlparams": {"uuid": self.uuid, "auth": self.auth_key}}, + sub_callback, + sub_callback, + single=True) + ''' except Exception as e: print(e) self.timeout(1, _connect) return + ''' self._connect = _connect @@ -866,6 +859,10 @@ import twisted from hashlib import sha256 import time import json + +import traceback + + from twisted.python.compat import ( _PY3, unicode, intToBytes, networkString, nativeString) @@ -918,13 +915,7 @@ class Pubnub(PubnubCoreAsync): func(data) ## Build URL - ''' - url = self.origin + '/' + "/".join([ - "".join([ ' ~`!@#$%^&*()+=[]\\{}|;\':",./<>?'.find(ch) > -1 and - hex(ord(ch)).replace( '0x', '%' ).upper() or - ch for ch in list(bit) - ]) for bit in request]) - ''' + url = self.getUrl(request) agent = ContentDecoderAgent(RedirectAgent(Agent( @@ -937,7 +928,6 @@ class Pubnub(PubnubCoreAsync): request = agent.request( 'GET', url, Headers(self.headers), None) except TypeError as te: - print(url.encode()) request = agent.request( 'GET', url.encode(), Headers(self.headers), None) @@ -946,18 +936,13 @@ class Pubnub(PubnubCoreAsync): self.id = id def received(response): - finished = Deferred() - if response.code == 403: - response.deliverBody(PubNub403Response(finished)) - else: - response.deliverBody(PubNubResponse(finished)) - - return finished + if not isinstance(response, twisted.web._newclient.Response): + _invoke(error, {"message": "Not Found"}) + return - def error_handler(response): finished = Deferred() - if response.code == 403: - response.deliverBody(PubNub403Response(finished)) + if response.code in [401, 403]: + response.deliverBody(PubNubPamResponse(finished)) else: response.deliverBody(PubNubResponse(finished)) @@ -969,10 +954,10 @@ class Pubnub(PubnubCoreAsync): return None try: data = json.loads(data) - except Exception as e: + except ValueError as e: try: data = json.loads(data.decode("utf-8")) - except: + except ValueError as e: _invoke(error, {'error': 'json decode error'}) if 'error' in data and 'status' in data and 'status' != 200: @@ -985,7 +970,6 @@ class Pubnub(PubnubCoreAsync): request.addCallback(received) request.addCallback(complete) - request.addErrback(error_handler) return abort @@ -995,12 +979,11 @@ class WebClientContextFactory(ClientContextFactory): return ClientContextFactory.getContext(self) -class PubNub403Response(Protocol): +class PubNubPamResponse(Protocol): def __init__(self, finished): self.finished = finished def dataReceived(self, bytes): - #print '403 resp ', bytes self.finished.callback(bytes) @@ -1009,5 +992,4 @@ class PubNubResponse(Protocol): self.finished = finished def dataReceived(self, bytes): - #print bytes self.finished.callback(bytes) diff --git a/python-twisted/examples/here-now-example.py b/python-twisted/examples/here-now-example.py index bba7d21..14f45c4 100644 --- a/python-twisted/examples/here-now-example.py +++ b/python-twisted/examples/here-now-example.py @@ -10,7 +10,8 @@ ## ----------------------------------- import sys -from twisted.internet import reactor +sys.path.append('..') +sys.path.append('../../common') from Pubnub import Pubnub publish_key = len(sys.argv) > 1 and sys.argv[1] or 'demo' @@ -32,14 +33,12 @@ crazy = 'hello_world' def here_now_complete(messages): print(messages) - reactor.stop() + pubnub.stop() -pubnub.here_now({ - 'channel': crazy, - 'callback': here_now_complete -}) +pubnub.here_now( + channel=crazy, callback=here_now_complete, error=here_now_complete) ## ----------------------------------------------------------------------- ## IO Event Loop ## ----------------------------------------------------------------------- -reactor.run() +pubnub.start() diff --git a/python-twisted/unassembled/Platform.py b/python-twisted/unassembled/Platform.py index d6d91ac..a9e811b 100644 --- a/python-twisted/unassembled/Platform.py +++ b/python-twisted/unassembled/Platform.py @@ -12,6 +12,10 @@ import twisted from hashlib import sha256 import time import json + +import traceback + + from twisted.python.compat import ( _PY3, unicode, intToBytes, networkString, nativeString) @@ -64,13 +68,7 @@ class Pubnub(PubnubCoreAsync): func(data) ## Build URL - ''' - url = self.origin + '/' + "/".join([ - "".join([ ' ~`!@#$%^&*()+=[]\\{}|;\':",./<>?'.find(ch) > -1 and - hex(ord(ch)).replace( '0x', '%' ).upper() or - ch for ch in list(bit) - ]) for bit in request]) - ''' + url = self.getUrl(request) agent = ContentDecoderAgent(RedirectAgent(Agent( @@ -83,7 +81,6 @@ class Pubnub(PubnubCoreAsync): request = agent.request( 'GET', url, Headers(self.headers), None) except TypeError as te: - print(url.encode()) request = agent.request( 'GET', url.encode(), Headers(self.headers), None) @@ -92,18 +89,13 @@ class Pubnub(PubnubCoreAsync): self.id = id def received(response): - finished = Deferred() - if response.code == 403: - response.deliverBody(PubNub403Response(finished)) - else: - response.deliverBody(PubNubResponse(finished)) - - return finished + if not isinstance(response, twisted.web._newclient.Response): + _invoke(error, {"message": "Not Found"}) + return - def error_handler(response): finished = Deferred() - if response.code == 403: - response.deliverBody(PubNub403Response(finished)) + if response.code in [401, 403]: + response.deliverBody(PubNubPamResponse(finished)) else: response.deliverBody(PubNubResponse(finished)) @@ -115,10 +107,10 @@ class Pubnub(PubnubCoreAsync): return None try: data = json.loads(data) - except Exception as e: + except ValueError as e: try: data = json.loads(data.decode("utf-8")) - except: + except ValueError as e: _invoke(error, {'error': 'json decode error'}) if 'error' in data and 'status' in data and 'status' != 200: @@ -131,7 +123,6 @@ class Pubnub(PubnubCoreAsync): request.addCallback(received) request.addCallback(complete) - request.addErrback(error_handler) return abort @@ -141,12 +132,11 @@ class WebClientContextFactory(ClientContextFactory): return ClientContextFactory.getContext(self) -class PubNub403Response(Protocol): +class PubNubPamResponse(Protocol): def __init__(self, finished): self.finished = finished def dataReceived(self, bytes): - #print '403 resp ', bytes self.finished.callback(bytes) @@ -155,5 +145,4 @@ class PubNubResponse(Protocol): self.finished = finished def dataReceived(self, bytes): - #print bytes self.finished.callback(bytes) diff --git a/python/Pubnub.py b/python/Pubnub.py index 93f416b..3bf02a3 100644 --- a/python/Pubnub.py +++ b/python/Pubnub.py @@ -186,7 +186,7 @@ import sys try: from urllib.parse import quote -except: +except ImportError: from urllib2 import quote from base64 import urlsafe_b64encode @@ -397,7 +397,7 @@ class PubnubBase(object): """ - message = self.encrypt(args['message']) + message = self.encrypt(message) ## Send Message return self._request({"urlcomponents": [ @@ -458,15 +458,6 @@ class PubnubBase(object): print(here_now['uuids']) """ - channel = str(args['channel']) - - callback = args['callback'] if 'callback' in args else None - error = args['error'] if 'error' in args else None - - ## Fail if bad input. - if not channel: - raise Exception('Missing Channel') - return False ## Get Presence Here Now return self._request({"urlcomponents": [ @@ -807,21 +798,23 @@ class PubnubCoreAsync(PubnubBase): return ## CONNECT TO PUBNUB SUBSCRIBE SERVERS - try: - self.SUB_RECEIVER = self._request({"urlcomponents": [ - 'subscribe', - self.subscribe_key, - channel_list, - '0', - str(self.timetoken) - ], "urlparams": {"uuid": self.uuid, "auth": self.auth_key}}, - sub_callback, - sub_callback, - single=True) + #try: + self.SUB_RECEIVER = self._request({"urlcomponents": [ + 'subscribe', + self.subscribe_key, + channel_list, + '0', + str(self.timetoken) + ], "urlparams": {"uuid": self.uuid, "auth": self.auth_key}}, + sub_callback, + sub_callback, + single=True) + ''' except Exception as e: print(e) self.timeout(1, _connect) return + ''' self._connect = _connect diff --git a/python/examples/dev-console.py b/python/examples/dev-console.py index 2e93c7e..868ba7c 100755 --- a/python/examples/dev-console.py +++ b/python/examples/dev-console.py @@ -55,13 +55,13 @@ parser.add_option("--uuid", print(options) -pubnub = Pubnub(options.publish_key, - options.subscribe_key, - options.secret_key, - options.cipher_key, - options.auth_key, - options.ssl, - options.origin, +pubnub = Pubnub(options.publish_key, + options.subscribe_key, + options.secret_key, + options.cipher_key, + options.auth_key, + options.ssl, + options.origin, options.uuid) @@ -87,7 +87,7 @@ def print_ok(msg, channel=None): "] " if channel is not None else "" + color.END try: print(chstr + color.GREEN + str(msg) + color.END) - except Exception as e: + except UnicodeEncodeError as e: print(msg) @@ -98,7 +98,7 @@ def print_error(msg, channel=None): "] " if channel is not None else "" + color.END try: print(chstr + color.RED + color.BOLD + str(msg) + color.END) - except: + except UnicodeEncodeError as e: print(msg) import threading @@ -107,13 +107,7 @@ import threading def kill_all_threads(): for thread in threading.enumerate(): if thread.isAlive(): - try: - thread._Thread__stop() - except Exception as e: - pass - #print(e) - #thread.exit() - #print(str(thread.getName()) + ' could not be terminated') + thread._Thread__stop() def get_input(message, t=None): |
