aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevendra2014-11-22 02:56:39 +0530
committerDevendra2014-11-22 02:56:39 +0530
commitf97718ca0682a627857ae66f454582ec71670716 (patch)
treeb2e11c61b560b0d1440948f2ffe0e580da71df51
parentcdf0429083251dae7b6a1b472e6ead7a42f6adaf (diff)
downloadpubnub-python-f97718ca0682a627857ae66f454582ec71670716.tar.bz2
Channel groups
-rw-r--r--Pubnub.py91
-rw-r--r--python/examples/cr.py45
2 files changed, 134 insertions, 2 deletions
diff --git a/Pubnub.py b/Pubnub.py
index e952b1f..f967ff4 100644
--- a/Pubnub.py
+++ b/Pubnub.py
@@ -613,8 +613,13 @@ class PubnubBase(object):
def _new_format_callback(response):
if 'payload' in response:
if (callback is not None):
- callback({'message': response['message'],
- 'payload': response['payload']})
+ callback_data = dict()
+ callback_data['payload'] = response['payload']
+
+ if 'message' in response:
+ callback_data['message'] = response['message']
+
+ callback(callback_data)
else:
if (callback is not None):
callback(response)
@@ -873,8 +878,90 @@ class PubnubBase(object):
if ("urlparams" in request):
url = url + '?' + "&".join([x + "=" + str(y) for x, y in request[
"urlparams"].items() if y is not None])
+ print url
return url
+ def _channel_registry(self, url=None, params=None, callback=None, error=None):
+
+ if (params is None):
+ params = dict()
+
+ urlcomponents = ['v1', 'channel-registration', 'sub-key', self.subscribe_key ]
+
+ if (url is not None):
+ urlcomponents += url
+
+ params['auth'] = self.auth_key
+ params['pnsdk'] = self.pnsdk
+
+ ## Get History
+ return self._request({'urlcomponents': urlcomponents, 'urlparams': params},
+ callback=self._return_wrapped_callback(callback),
+ error=self._return_wrapped_callback(error))
+
+ def _channel_group(self, channel_group=None, channels=None, cloak=None,mode='add', callback=None, error=None):
+ params = dict()
+ url = []
+ namespace = None
+
+ if (channel_group is not None and len(channel_group) > 0):
+ ns_ch_a = channel_group.split(':')
+
+ if len(ns_ch_a) > 1:
+ namespace = None if ns_ch_a[0] == '*' else ns_ch_a[0]
+ channel_group = ns_ch_a[1]
+ else:
+ channel_group = ns_ch_a[0]
+
+ if (namespace is not None):
+ url.append('namespace')
+ url.append(self._encode(namespace))
+
+ url.append('channel-group')
+
+ if channel_group is not None and channel_group != '*':
+ url.append(channel_group)
+
+ if (channels is not None):
+ if (type(channels) is list):
+ channels = channels.join(',')
+ params[mode] = channels
+ #params['cloak'] = 'true' if CLOAK is True else 'false'
+ else:
+ if mode == 'remove':
+ url.append('remove')
+
+ return self._channel_registry(url=url, params=params, callback=callback, error=error)
+
+
+ def channel_group_list_namespaces(self, callback=None, error=None):
+ url = ['namespace']
+ return self._channel_registry(url=url)
+
+ def channel_group_remove_namespace(self, namespace, callback=None, error=None):
+ url = ['namespace', self._encode(namespace), 'remove']
+ return self._channel_registry(url=url, callback=callback, error=error)
+
+ def channel_group_list_groups(self, namespace=None, channel_group=None, callback=None, error=None):
+
+ if (namespace is not None and len(namespace) > 0):
+ channel_group = namespace + ':*'
+
+ return self._channel_group(channel_group=channel_group, callback=callback, error=error)
+
+ def channel_group_list_channels(self, channel_group, callback=None, error=None):
+ return self._channel_group(channel_group=channel_group, callback=callback, error=error)
+
+ def channel_group_add_channel(self, channel_group, channel, callback=None, error=None):
+ return self._channel_group(channel_group=channel_group, channels=channel, mode='add', callback=callback, error=error)
+
+ def channel_group_remove_channel(self, channel_group, channel, callback=None, error=None):
+ return self._channel_group(channel_group=channel_group, channels=channel, mode='remove', callback=callback, error=error)
+
+ def channel_group_remove_group(self, channel_group, callback=None, error=None):
+ return self._channel_group(channel_group=channel_group, mode='remove', callback=callback, error=error)
+
+
class EmptyLock():
def __enter__(self):
diff --git a/python/examples/cr.py b/python/examples/cr.py
new file mode 100644
index 0000000..ad8e3c9
--- /dev/null
+++ b/python/examples/cr.py
@@ -0,0 +1,45 @@
+## www.pubnub.com - PubNub Real-time push service in the cloud.
+# coding=utf8
+
+## PubNub Real-time Push APIs and Notifications Framework
+## Copyright (c) 2010 Stephen Blum
+## http://www.pubnub.com/
+
+
+import sys
+from Pubnub import Pubnub
+
+publish_key = len(sys.argv) > 1 and sys.argv[1] or 'demo'
+subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'demo'
+secret_key = len(sys.argv) > 3 and sys.argv[3] or 'demo'
+cipher_key = len(sys.argv) > 4 and sys.argv[4] or ''
+ssl_on = len(sys.argv) > 5 and bool(sys.argv[5]) or False
+
+## -----------------------------------------------------------------------
+## Initiate Pubnub State
+## -----------------------------------------------------------------------
+pubnub = Pubnub(publish_key=publish_key, subscribe_key=subscribe_key,
+ secret_key=secret_key, cipher_key=cipher_key, ssl_on=ssl_on)
+channel = 'hello_world'
+
+def callback(message):
+ print(message)
+
+print pubnub.channel_group_list_namespaces()
+print pubnub.channel_group_list_groups(namespace='aaa')
+print pubnub.channel_group_list_groups(namespace='foo')
+print pubnub.channel_group_list_channels(channel_group='dev:abcd')
+print pubnub.channel_group_add_channel(channel_group='dev:abcd', channel="hi")
+print pubnub.channel_group_list_channels(channel_group='dev:abcd')
+print pubnub.channel_group_remove_channel(channel_group='dev:abcd', channel="hi")
+print pubnub.channel_group_list_channels(channel_group='dev:abcd')
+
+
+pubnub.channel_group_list_namespaces(callback=callback, error=callback)
+pubnub.channel_group_list_groups(namespace='aaa', callback=callback, error=callback)
+pubnub.channel_group_list_groups(namespace='foo', callback=callback, error=callback)
+pubnub.channel_group_list_channels(channel_group='dev:abcd', callback=callback, error=callback)
+pubnub.channel_group_add_channel(channel_group='dev:abcd', channel="hi", callback=callback, error=callback)
+pubnub.channel_group_list_channels(channel_group='dev:abcd', callback=callback, error=callback)
+pubnub.channel_group_remove_channel(channel_group='dev:abcd', channel="hi", callback=callback, error=callback)
+pubnub.channel_group_list_channels(channel_group='dev:abcd', callback=callback, error=callback) \ No newline at end of file