From 765ee5db6fc39d77e55dcf4fe97fb96da2f46d30 Mon Sep 17 00:00:00 2001 From: Devendra Date: Wed, 2 Apr 2014 02:44:29 +0530 Subject: multiplexing support --- python-twisted/unassembled/Platform.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'python-twisted/unassembled/Platform.py') diff --git a/python-twisted/unassembled/Platform.py b/python-twisted/unassembled/Platform.py index 7318703..3b84b30 100644 --- a/python-twisted/unassembled/Platform.py +++ b/python-twisted/unassembled/Platform.py @@ -7,10 +7,14 @@ from twisted.web.client import HTTPConnectionPool from twisted.web.http_headers import Headers from twisted.internet.ssl import ClientContextFactory from twisted.internet.task import LoopingCall +import twisted +from hashlib import sha256 +import time pnconn_pool = HTTPConnectionPool(reactor, persistent=True) -pnconn_pool.maxPersistentPerHost = 100 +pnconn_pool.maxPersistentPerHost = 100000 pnconn_pool.cachedConnectionTimeout = 310 +pnconn_pool.retryAutomatically = True class Pubnub(PubnubCoreAsync): @@ -41,7 +45,7 @@ class Pubnub(PubnubCoreAsync): #self.headers['Accept-Encoding'] = [self.accept_encoding] self.headers['V'] = [self.version] - def _request( self, request, callback ) : + def _request( self, request, callback, single=False ) : global pnconn_pool ## Build URL @@ -53,24 +57,42 @@ class Pubnub(PubnubCoreAsync): ]) for bit in request]) ''' url = self.getUrl(request) + agent = ContentDecoderAgent(RedirectAgent(Agent( reactor, contextFactory = WebClientContextFactory(), pool = self.ssl and None or pnconn_pool )), [('gzip', GzipDecoder)]) + request = agent.request( 'GET', url, Headers(self.headers), None ) + if single is True: + id = time.time() + self.id = id + def received(response): finished = Deferred() response.deliverBody(PubNubResponse(finished)) return finished def complete(data): - callback(eval(data)) + if single is True: + if not id == self.id: + return None + try: + callback(eval(data)) + except Exception as e: + pass + #need error handling here + + def abort(): + pass request.addCallback(received) request.addBoth(complete) + return abort + class WebClientContextFactory(ClientContextFactory): def getContext(self, hostname, port): return ClientContextFactory.getContext(self) -- cgit v1.2.3 From 99096b8c11b9a541f6350639e8735495cf90091c Mon Sep 17 00:00:00 2001 From: Devendra Date: Fri, 11 Apr 2014 14:49:43 +0530 Subject: v1 MX and async code for python, twisted, tornado --- python-twisted/unassembled/Platform.py | 1 + 1 file changed, 1 insertion(+) (limited to 'python-twisted/unassembled/Platform.py') diff --git a/python-twisted/unassembled/Platform.py b/python-twisted/unassembled/Platform.py index 3b84b30..5268446 100644 --- a/python-twisted/unassembled/Platform.py +++ b/python-twisted/unassembled/Platform.py @@ -44,6 +44,7 @@ class Pubnub(PubnubCoreAsync): self.headers['User-Agent'] = ['Python-Twisted'] #self.headers['Accept-Encoding'] = [self.accept_encoding] self.headers['V'] = [self.version] + self._channel_list_lock = None def _request( self, request, callback, single=False ) : global pnconn_pool -- cgit v1.2.3 From 150ae1566d813acbb773839e919db2c0f467931c Mon Sep 17 00:00:00 2001 From: Devendra Date: Wed, 16 Apr 2014 00:00:40 +0530 Subject: adding code to support async and pam client capabilities with python v2 and v3 --- python-twisted/unassembled/Platform.py | 67 ++++++++++++++++++++++++++++------ 1 file changed, 55 insertions(+), 12 deletions(-) (limited to 'python-twisted/unassembled/Platform.py') diff --git a/python-twisted/unassembled/Platform.py b/python-twisted/unassembled/Platform.py index 5268446..c7fe5cd 100644 --- a/python-twisted/unassembled/Platform.py +++ b/python-twisted/unassembled/Platform.py @@ -10,6 +10,9 @@ from twisted.internet.task import LoopingCall import twisted from hashlib import sha256 import time +import json +from twisted.python.compat import ( + _PY3, unicode, intToBytes, networkString, nativeString) pnconn_pool = HTTPConnectionPool(reactor, persistent=True) pnconn_pool.maxPersistentPerHost = 100000 @@ -27,8 +30,9 @@ class Pubnub(PubnubCoreAsync): self, publish_key, subscribe_key, - secret_key = False, - cipher_key = False, + secret_key=False, + cipher_key=False, + auth_key=None, ssl_on = False, origin = 'pubsub.pubnub.com' ) : @@ -37,6 +41,7 @@ class Pubnub(PubnubCoreAsync): subscribe_key=subscribe_key, secret_key=secret_key, cipher_key=cipher_key, + auth_key=auth_key, ssl_on=ssl_on, origin=origin, ) @@ -44,11 +49,14 @@ class Pubnub(PubnubCoreAsync): self.headers['User-Agent'] = ['Python-Twisted'] #self.headers['Accept-Encoding'] = [self.accept_encoding] self.headers['V'] = [self.version] - self._channel_list_lock = None - def _request( self, request, callback, single=False ) : + def _request( self, request, callback=None, error=None, single=False ) : global pnconn_pool + def _invoke(func, data): + if func is not None: + func(data) + ## Build URL ''' url = self.origin + '/' + "/".join([ @@ -65,7 +73,12 @@ class Pubnub(PubnubCoreAsync): pool = self.ssl and None or pnconn_pool )), [('gzip', GzipDecoder)]) - request = agent.request( 'GET', url, Headers(self.headers), None ) + try: + 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 ) + if single is True: id = time.time() @@ -73,35 +86,65 @@ class Pubnub(PubnubCoreAsync): def received(response): finished = Deferred() - response.deliverBody(PubNubResponse(finished)) + if response.code == 403: + response.deliverBody(PubNub403Response(finished)) + else: + response.deliverBody(PubNubResponse(finished)) + + return finished + + def error_handler(response): + finished = Deferred() + if response.code == 403: + response.deliverBody(PubNub403Response(finished)) + else: + response.deliverBody(PubNubResponse(finished)) + return finished def complete(data): if single is True: - if not id == self.id: + if id != self.id: return None try: - callback(eval(data)) + data = json.loads(data) except Exception as e: - pass - #need error handling here + try: + data = json.loads(data.decode("utf-8")) + except: + _invoke(error, {'error' : 'json decode error'}) + + if 'error' in data and 'status' in data and 'status' != 200: + _invoke(error, data) + else: + _invoke(callback, data) def abort(): pass request.addCallback(received) - request.addBoth(complete) + request.addCallback(complete) + request.addErrback(error_handler) return abort class WebClientContextFactory(ClientContextFactory): def getContext(self, hostname, port): return ClientContextFactory.getContext(self) + +class PubNub403Response(Protocol): + def __init__( self, finished ): + self.finished = finished + + def dataReceived( self, bytes ): + #print '403 resp ', bytes + self.finished.callback(bytes) class PubNubResponse(Protocol): def __init__( self, finished ): self.finished = finished def dataReceived( self, bytes ): - self.finished.callback(bytes) + #print bytes + self.finished.callback(bytes) -- cgit v1.2.3 From 09cd0c015ae276aa849297a6a976065b2b3f247b Mon Sep 17 00:00:00 2001 From: Devendra Date: Wed, 23 Apr 2014 14:03:13 +0530 Subject: modifying code for pep 8 compliance --- python-twisted/unassembled/Platform.py | 57 ++++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 24 deletions(-) (limited to 'python-twisted/unassembled/Platform.py') diff --git a/python-twisted/unassembled/Platform.py b/python-twisted/unassembled/Platform.py index c7fe5cd..d6d91ac 100644 --- a/python-twisted/unassembled/Platform.py +++ b/python-twisted/unassembled/Platform.py @@ -2,7 +2,8 @@ from twisted.web.client import getPage from twisted.internet import reactor from twisted.internet.defer import Deferred from twisted.internet.protocol import Protocol -from twisted.web.client import Agent, ContentDecoderAgent, RedirectAgent, GzipDecoder +from twisted.web.client import Agent, ContentDecoderAgent +from twisted.web.client import RedirectAgent, GzipDecoder from twisted.web.client import HTTPConnectionPool from twisted.web.http_headers import Headers from twisted.internet.ssl import ClientContextFactory @@ -15,16 +16,21 @@ from twisted.python.compat import ( _PY3, unicode, intToBytes, networkString, nativeString) pnconn_pool = HTTPConnectionPool(reactor, persistent=True) -pnconn_pool.maxPersistentPerHost = 100000 +pnconn_pool.maxPersistentPerHost = 100000 pnconn_pool.cachedConnectionTimeout = 310 pnconn_pool.retryAutomatically = True + class Pubnub(PubnubCoreAsync): - def start(self): reactor.run() - def stop(self): reactor.stop() - def timeout( self, delay, callback ): - reactor.callLater( delay, callback ) + def start(self): + reactor.run() + + def stop(self): + reactor.stop() + + def timeout(self, delay, callback): + reactor.callLater(delay, callback) def __init__( self, @@ -33,9 +39,9 @@ class Pubnub(PubnubCoreAsync): secret_key=False, cipher_key=False, auth_key=None, - ssl_on = False, - origin = 'pubsub.pubnub.com' - ) : + ssl_on=False, + origin='pubsub.pubnub.com' + ): super(Pubnub, self).__init__( publish_key=publish_key, subscribe_key=subscribe_key, @@ -44,13 +50,13 @@ class Pubnub(PubnubCoreAsync): auth_key=auth_key, ssl_on=ssl_on, origin=origin, - ) + ) self.headers = {} self.headers['User-Agent'] = ['Python-Twisted'] #self.headers['Accept-Encoding'] = [self.accept_encoding] self.headers['V'] = [self.version] - def _request( self, request, callback=None, error=None, single=False ) : + def _request(self, request, callback=None, error=None, single=False): global pnconn_pool def _invoke(func, data): @@ -67,18 +73,19 @@ class Pubnub(PubnubCoreAsync): ''' url = self.getUrl(request) - agent = ContentDecoderAgent(RedirectAgent(Agent( + agent = ContentDecoderAgent(RedirectAgent(Agent( reactor, - contextFactory = WebClientContextFactory(), - pool = self.ssl and None or pnconn_pool + contextFactory=WebClientContextFactory(), + pool=self.ssl and None or pnconn_pool )), [('gzip', GzipDecoder)]) try: - request = agent.request( 'GET', url, Headers(self.headers), None ) + 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 ) - + request = agent.request( + 'GET', url.encode(), Headers(self.headers), None) if single is True: id = time.time() @@ -112,7 +119,7 @@ class Pubnub(PubnubCoreAsync): try: data = json.loads(data.decode("utf-8")) except: - _invoke(error, {'error' : 'json decode error'}) + _invoke(error, {'error': 'json decode error'}) if 'error' in data and 'status' in data and 'status' != 200: _invoke(error, data) @@ -128,23 +135,25 @@ class Pubnub(PubnubCoreAsync): return abort + class WebClientContextFactory(ClientContextFactory): def getContext(self, hostname, port): return ClientContextFactory.getContext(self) + class PubNub403Response(Protocol): - def __init__( self, finished ): + def __init__(self, finished): self.finished = finished - def dataReceived( self, bytes ): + def dataReceived(self, bytes): #print '403 resp ', bytes self.finished.callback(bytes) - + + class PubNubResponse(Protocol): - def __init__( self, finished ): + def __init__(self, finished): self.finished = finished - def dataReceived( self, bytes ): + def dataReceived(self, bytes): #print bytes self.finished.callback(bytes) - -- cgit v1.2.3 From f7b89bfafae34fa22509c1d1c59d1284ec62c5df Mon Sep 17 00:00:00 2001 From: Devendra Date: Wed, 23 Apr 2014 21:35:06 +0530 Subject: exception handling changes --- python-twisted/unassembled/Platform.py | 37 ++++++++++++---------------------- 1 file changed, 13 insertions(+), 24 deletions(-) (limited to 'python-twisted/unassembled/Platform.py') 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) -- cgit v1.2.3 From 493e29a108255eb3ae3166dc920f40e2f4e5c4c4 Mon Sep 17 00:00:00 2001 From: Devendra Date: Thu, 24 Apr 2014 00:16:57 +0530 Subject: adding single file for all platforms --- python-twisted/unassembled/Platform.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'python-twisted/unassembled/Platform.py') diff --git a/python-twisted/unassembled/Platform.py b/python-twisted/unassembled/Platform.py index a9e811b..b220257 100644 --- a/python-twisted/unassembled/Platform.py +++ b/python-twisted/unassembled/Platform.py @@ -21,10 +21,9 @@ from twisted.python.compat import ( pnconn_pool = HTTPConnectionPool(reactor, persistent=True) pnconn_pool.maxPersistentPerHost = 100000 -pnconn_pool.cachedConnectionTimeout = 310 +pnconn_pool.cachedConnectionTimeout = 15 pnconn_pool.retryAutomatically = True - class Pubnub(PubnubCoreAsync): def start(self): @@ -90,11 +89,11 @@ class Pubnub(PubnubCoreAsync): def received(response): if not isinstance(response, twisted.web._newclient.Response): - _invoke(error, {"message": "Not Found"}) + _invoke(error, {"message" : "Not Found"}) return finished = Deferred() - if response.code in [401, 403]: + if response.code in [401,403]: response.deliverBody(PubNubPamResponse(finished)) else: response.deliverBody(PubNubResponse(finished)) -- cgit v1.2.3 From c5d2fb446378e78e9e164dbea969edd57314dc4b Mon Sep 17 00:00:00 2001 From: Devendra Date: Thu, 24 Apr 2014 00:59:50 +0530 Subject: removing files --- python-twisted/unassembled/Platform.py | 147 --------------------------------- 1 file changed, 147 deletions(-) delete mode 100644 python-twisted/unassembled/Platform.py (limited to 'python-twisted/unassembled/Platform.py') diff --git a/python-twisted/unassembled/Platform.py b/python-twisted/unassembled/Platform.py deleted file mode 100644 index b220257..0000000 --- a/python-twisted/unassembled/Platform.py +++ /dev/null @@ -1,147 +0,0 @@ -from twisted.web.client import getPage -from twisted.internet import reactor -from twisted.internet.defer import Deferred -from twisted.internet.protocol import Protocol -from twisted.web.client import Agent, ContentDecoderAgent -from twisted.web.client import RedirectAgent, GzipDecoder -from twisted.web.client import HTTPConnectionPool -from twisted.web.http_headers import Headers -from twisted.internet.ssl import ClientContextFactory -from twisted.internet.task import LoopingCall -import twisted -from hashlib import sha256 -import time -import json - -import traceback - - -from twisted.python.compat import ( - _PY3, unicode, intToBytes, networkString, nativeString) - -pnconn_pool = HTTPConnectionPool(reactor, persistent=True) -pnconn_pool.maxPersistentPerHost = 100000 -pnconn_pool.cachedConnectionTimeout = 15 -pnconn_pool.retryAutomatically = True - -class Pubnub(PubnubCoreAsync): - - def start(self): - reactor.run() - - def stop(self): - reactor.stop() - - def timeout(self, delay, callback): - reactor.callLater(delay, callback) - - def __init__( - self, - publish_key, - subscribe_key, - secret_key=False, - cipher_key=False, - auth_key=None, - ssl_on=False, - origin='pubsub.pubnub.com' - ): - super(Pubnub, self).__init__( - publish_key=publish_key, - subscribe_key=subscribe_key, - secret_key=secret_key, - cipher_key=cipher_key, - auth_key=auth_key, - ssl_on=ssl_on, - origin=origin, - ) - self.headers = {} - self.headers['User-Agent'] = ['Python-Twisted'] - #self.headers['Accept-Encoding'] = [self.accept_encoding] - self.headers['V'] = [self.version] - - def _request(self, request, callback=None, error=None, single=False): - global pnconn_pool - - def _invoke(func, data): - if func is not None: - func(data) - - ## Build URL - - url = self.getUrl(request) - - agent = ContentDecoderAgent(RedirectAgent(Agent( - reactor, - contextFactory=WebClientContextFactory(), - pool=self.ssl and None or pnconn_pool - )), [('gzip', GzipDecoder)]) - - try: - request = agent.request( - 'GET', url, Headers(self.headers), None) - except TypeError as te: - request = agent.request( - 'GET', url.encode(), Headers(self.headers), None) - - if single is True: - id = time.time() - self.id = id - - def received(response): - if not isinstance(response, twisted.web._newclient.Response): - _invoke(error, {"message" : "Not Found"}) - return - - finished = Deferred() - if response.code in [401,403]: - response.deliverBody(PubNubPamResponse(finished)) - else: - response.deliverBody(PubNubResponse(finished)) - - return finished - - def complete(data): - if single is True: - if id != self.id: - return None - try: - data = json.loads(data) - except ValueError as e: - try: - data = json.loads(data.decode("utf-8")) - except ValueError as e: - _invoke(error, {'error': 'json decode error'}) - - if 'error' in data and 'status' in data and 'status' != 200: - _invoke(error, data) - else: - _invoke(callback, data) - - def abort(): - pass - - request.addCallback(received) - request.addCallback(complete) - - return abort - - -class WebClientContextFactory(ClientContextFactory): - def getContext(self, hostname, port): - return ClientContextFactory.getContext(self) - - -class PubNubPamResponse(Protocol): - def __init__(self, finished): - self.finished = finished - - def dataReceived(self, bytes): - self.finished.callback(bytes) - - -class PubNubResponse(Protocol): - def __init__(self, finished): - self.finished = finished - - def dataReceived(self, bytes): - self.finished.callback(bytes) -- cgit v1.2.3