From 09d6ea1fa20f87dc648740ffb2a70f67e7e4efa9 Mon Sep 17 00:00:00 2001 From: Devendra Date: Wed, 25 Sep 2013 13:51:19 +0530 Subject: combining into Pubnub.py, added common async unit test method --- python-twisted/unassembled/Platform.py | 83 ++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create 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 new file mode 100644 index 0000000..e4ae680 --- /dev/null +++ b/python-twisted/unassembled/Platform.py @@ -0,0 +1,83 @@ +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 HTTPConnectionPool +from twisted.web.http_headers import Headers +from twisted.internet.ssl import ClientContextFactory +from twisted.internet.task import LoopingCall + +pnconn_pool = HTTPConnectionPool(reactor, persistent=True) +pnconn_pool.maxPersistentPerHost = 100 +pnconn_pool.cachedConnectionTimeout = 310 + +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, + ssl_on = False, + origin = 'pubsub.pubnub.com' + ) : + super(Pubnub, self).__init__( + publish_key=publish_key, + subscribe_key=subscribe_key, + secret_key=secret_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 ) : + global pnconn_pool + + ## 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( + reactor, + contextFactory = WebClientContextFactory(), + pool = self.ssl and None or pnconn_pool + )), [('gzip', GzipDecoder)]) + request = agent.request( 'GET', url, Headers(self.headers), None ) + + def received(response): + finished = Deferred() + response.deliverBody(PubNubResponse(finished)) + return finished + + def complete(data): + callback(eval(data)) + + request.addCallback(received) + request.addBoth(complete) + +class WebClientContextFactory(ClientContextFactory): + def getContext(self, hostname, port): + return ClientContextFactory.getContext(self) + +class PubNubResponse(Protocol): + def __init__( self, finished ): + self.finished = finished + + def dataReceived( self, bytes ): + self.finished.callback(bytes) + -- cgit v1.2.3