aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevendra2014-04-23 21:35:06 +0530
committerDevendra2014-04-23 21:35:06 +0530
commitf7b89bfafae34fa22509c1d1c59d1284ec62c5df (patch)
tree2eeaf63f906ade16c82c86844e8f76b191b9ad6c
parent1d97c69f186719fe007a4fa0033d39d9a68a4e43 (diff)
downloadpubnub-python-f7b89bfafae34fa22509c1d1c59d1284ec62c5df.tar.bz2
exception handling changes
-rw-r--r--common/PubnubBase.py13
-rw-r--r--common/PubnubCore.py20
-rw-r--r--common/PubnubCoreAsync.py24
-rw-r--r--python-tornado/Pubnub.py53
-rw-r--r--python-tornado/examples/here-now-example.py8
-rw-r--r--python-tornado/unassembled/Platform.py16
-rw-r--r--python-twisted/Pubnub.py74
-rw-r--r--python-twisted/examples/here-now-example.py13
-rw-r--r--python-twisted/unassembled/Platform.py37
-rw-r--r--python/Pubnub.py37
-rwxr-xr-xpython/examples/dev-console.py26
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):