diff options
| author | Devendra | 2014-04-23 21:35:06 +0530 | 
|---|---|---|
| committer | Devendra | 2014-04-23 21:35:06 +0530 | 
| commit | f7b89bfafae34fa22509c1d1c59d1284ec62c5df (patch) | |
| tree | 2eeaf63f906ade16c82c86844e8f76b191b9ad6c | |
| parent | 1d97c69f186719fe007a4fa0033d39d9a68a4e43 (diff) | |
| download | pubnub-python-f7b89bfafae34fa22509c1d1c59d1284ec62c5df.tar.bz2 | |
exception handling changes
| -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): | 
