diff options
Diffstat (limited to 'PubnubCoreAsync.py')
| -rw-r--r-- | PubnubCoreAsync.py | 107 | 
1 files changed, 22 insertions, 85 deletions
| diff --git a/PubnubCoreAsync.py b/PubnubCoreAsync.py index 0ea03e9..4eb62e9 100644 --- a/PubnubCoreAsync.py +++ b/PubnubCoreAsync.py @@ -49,7 +49,8 @@ class PubnubCoreAsync(object):          secret_key = False,          cipher_key = False,          ssl_on = False, -        origin = 'pubsub.pubnub.com' +        origin = 'pubsub.pubnub.com', +        uuid = None      ) :          """          #** @@ -76,6 +77,12 @@ class PubnubCoreAsync(object):          self.ssl           = ssl_on          self.subscriptions = {}          self.timetoken     = 0 +        self.uuid          = uuid or str(self.uuid())  +        self.headers       = { +            'V' : '3.1', +            'User-Agent' : 'Python-*', +            'Accept-Encoding' : 'gzip' +        }          if self.ssl :              self.origin = 'https://' + self.origin @@ -160,7 +167,7 @@ class PubnubCoreAsync(object):              signature = '0'          ## Send Message -        return self._request([ +        return self._request({ "urlcomponents" : [              'publish',              self.publish_key,              self.subscribe_key, @@ -168,7 +175,7 @@ class PubnubCoreAsync(object):              channel,              '0',              message -        ], publish_response ) +        ] }, publish_response ) @@ -234,7 +241,6 @@ class PubnubCoreAsync(object):              return "Already Connected"          self.subscriptions[channel]['connected'] = 1 -        print self.subscriptions          ## SUBSCRIPTION RECURSION           def substabizel():              ## STOP CONNECTION? @@ -242,6 +248,7 @@ class PubnubCoreAsync(object):                  return              def sub_callback(response): +                print response                  response = json.loads(response)                  ## STOP CONNECTION?                  if not self.subscriptions[channel]['connected']: @@ -292,13 +299,13 @@ class PubnubCoreAsync(object):              ## CONNECT TO PUBNUB SUBSCRIBE SERVERS              try : -                self._request( [ +                self._request( { "urlcomponents" : [                      'subscribe',                      self.subscribe_key,                      channel,                      '0',                      str(self.timetoken) -                ], sub_callback ) +                ], "urlparams" : {"uuid":self.uuid} }, sub_callback )              except :                  self.timeout( 1, substabizel )                  return @@ -347,13 +354,13 @@ class PubnubCoreAsync(object):          ## Get History          pc = PubnubCrypto() -        return self._request( [ +        return self._request( {"urlcomponents" : [              'history',              self.subscribe_key,              channel,              '0',              str(limit) -        ], args['callback'] ) +        ]}, args['callback'] )      def time( self, args ) :          """ @@ -376,10 +383,10 @@ class PubnubCoreAsync(object):              if not response: return 0              args['callback'](response[0]) -        self._request( [ +        self._request( { "urlcomponents" : [              'time',              '0' -        ], complete ) +        ]}, complete )      def uuid(self) :          """ @@ -397,86 +404,16 @@ class PubnubCoreAsync(object):          """          return uuid.uuid1() -    def _request( self, request, callback ) : -        global pnconn_pool - +    def getUrl(self,request):          ## 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]) - -        requestType = request[0] -        agent       = Agent( -            reactor, -            self.ssl and None or pnconn_pool, -            connectTimeout=30 -        ) -        request     = agent.request( 'GET', url, Headers({ -            'V'               : ['3.1'], -            'User-Agent'      : ['Python-Twisted'], -            'Accept-Encoding' : ['gzip'] -        }), None ) - -        self.resulting_is = str() -        def received(response): -            headerlist = list(response.headers.getAllRawHeaders()) -            for item in headerlist: -                if( item[0] == "Content-Encoding"): -                    if type(item[1]) == type(list()): -                        for subitem in item[1]: -                            self.resulting_is = subitem -                    elif type(item[1]) == type(str()): -                        self.resulting_is = item[1] - -            finished = Deferred() -            response.deliverBody(PubNubResponse(finished)) -            return finished - -        def complete(data): -            if ( type(data) == type(str()) ): -                if self.resulting_is: -                    d = zlib.decompressobj(16+zlib.MAX_WBITS) - -            try     :   data = d.decompress(data) # try/catch here, pass through if except -            except  :   data = data - -            try    : obj = json.loads(data) -            except : obj = None - -            pc = PubnubCrypto() -            out = [] -            if self.cipher_key : -                if requestType == "history" : -                    if type(obj) == type(list()): -                        for item in obj: -                            if type(item) == type(list()): -                                for subitem in item: -                                    encryptItem = pc.decrypt(self.cipher_key, subitem ) -                                    out.append(encryptItem) -                            elif type(item) == type(dict()): -                                outdict = {} -                                for k, subitem in item.iteritems(): -                                    encryptItem = pc.decrypt(self.cipher_key, subitem ) -                                    outdict[k] = encryptItem -                                    out.append(outdict) -                            else : -                                encryptItem = pc.decrypt(self.cipher_key, item ) -                                out.append(encryptItem) -                        callback(out) -                    elif type( obj ) == type(dict()): -                        for k, item in obj.iteritems(): -                            encryptItem = pc.decrypt(self.cipher_key, item ) -                            out.append(encryptItem) -                        callback(out) -                else : -                    callback(obj) -            else : -                callback(obj) - -        request.addCallback(received) -        request.addBoth(complete) +            ]) for bit in request["urlcomponents"]]) +        if (request.has_key("urlparams")): +            url = url + '?' + "&".join([ x + "=" + y  for x,y in request["urlparams"].items()]) +        return url      def _request( self, request, callback, timeout=30 ) :          pass | 
