aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevendra2015-07-18 01:11:04 +0530
committerDevendra2015-07-18 01:11:04 +0530
commit03b4fb1d2cc3b781b9ddcba468c90694b7361736 (patch)
tree47d90738e0d006f527bd23414f318ec6adeed890
parent652252dbf30e9f4300eab81b083ce098a8d74cc4 (diff)
downloadpubnub-python-03b4fb1d2cc3b781b9ddcba468c90694b7361736.tar.bz2
modifications for wildcard subscribe
-rw-r--r--pubnub.py29
1 files changed, 20 insertions, 9 deletions
diff --git a/pubnub.py b/pubnub.py
index fcbf2dc..87e6460 100644
--- a/pubnub.py
+++ b/pubnub.py
@@ -21,6 +21,7 @@ import hashlib
import uuid as uuid_lib
import random
import sys
+import copy
from base64 import urlsafe_b64encode
from base64 import encodestring, decodestring
import hmac
@@ -230,7 +231,7 @@ class PubnubCrypto2():
except:
return msg
try:
- return eval(plain)
+ return json.loads(plain)
except SyntaxError:
return plain
@@ -1542,7 +1543,7 @@ class PubnubCoreAsync(PubnubBase):
func(i)
def subscribe(self, channels, callback, state=None, error=None,
- connect=None, disconnect=None, reconnect=None, sync=False):
+ connect=None, disconnect=None, reconnect=None, presence=None, sync=False):
"""Subscribe to data on a channel.
This function causes the client to create an open TCP socket to the
@@ -1580,7 +1581,7 @@ class PubnubCoreAsync(PubnubBase):
"""
return self._subscribe(channels=channels, callback=callback, state=state, error=error,
- connect=connect, disconnect=disconnect, reconnect=reconnect)
+ connect=connect, disconnect=disconnect, reconnect=reconnect, presence=presence)
def subscribe_group(self, channel_groups, callback, error=None,
connect=None, disconnect=None, reconnect=None, sync=False):
@@ -1621,7 +1622,7 @@ class PubnubCoreAsync(PubnubBase):
connect=connect, disconnect=disconnect, reconnect=reconnect)
def _subscribe(self, channels=None, channel_groups=None, state=None, callback=None, error=None,
- connect=None, disconnect=None, reconnect=None):
+ connect=None, disconnect=None, reconnect=None, presence=None):
with self._tt_lock:
self.last_timetoken = self.timetoken if self.timetoken != 0 \
@@ -1645,8 +1646,9 @@ class PubnubCoreAsync(PubnubBase):
def _invoke_connect():
if self._channel_list_lock:
with self._channel_list_lock:
- for ch in self.subscriptions:
- chobj = self.subscriptions[ch]
+ x = copy.copy(self.subscriptions)
+ for ch in x:
+ chobj = x[ch]
if chobj['connected'] is False:
chobj['connected'] = True
chobj['disconnected'] = False
@@ -1730,7 +1732,8 @@ class PubnubCoreAsync(PubnubBase):
'connect': connect,
'disconnect': disconnect,
'reconnect': reconnect,
- 'error': error
+ 'error': error,
+ 'presence': presence
}
if state is not None:
if channel in self.STATE:
@@ -1758,7 +1761,8 @@ class PubnubCoreAsync(PubnubBase):
'connect': connect,
'disconnect': disconnect,
'reconnect': reconnect,
- 'error': error
+ 'error': error,
+ 'presence': presence
}
'''
@@ -1769,6 +1773,7 @@ class PubnubCoreAsync(PubnubBase):
_invoke(error, "Already Connected")
return
'''
+
## SUBSCRIPTION RECURSION
def _connect():
@@ -1817,7 +1822,12 @@ class PubnubCoreAsync(PubnubBase):
chobj = self.subscription_groups[ch[1]]
except KeyError:
chobj = self.subscriptions[ch[1]]
- _invoke(chobj['callback'],
+
+ if ('-pnpres' in channel_list_2[ch[0]]):
+ cb = chobj['presence']
+ else:
+ cb = chobj['callback']
+ _invoke(cb,
self.decrypt(response_list[ch[0]]),
chobj['name'].split('-pnpres')[0], channel_list_2[ch[0]].split('-pnpres')[0])
elif len(response) > 2:
@@ -2056,6 +2066,7 @@ s = requests.Session()
def _requests_request(url, timeout=5):
+ #print url
try:
resp = s.get(url, timeout=timeout)
except requests.exceptions.HTTPError as http_error: