aboutsummaryrefslogtreecommitdiffstats
path: root/python-twisted/unassembled/Platform.py
diff options
context:
space:
mode:
Diffstat (limited to 'python-twisted/unassembled/Platform.py')
-rw-r--r--python-twisted/unassembled/Platform.py83
1 files changed, 83 insertions, 0 deletions
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)
+