From f97718ca0682a627857ae66f454582ec71670716 Mon Sep 17 00:00:00 2001 From: Devendra Date: Sat, 22 Nov 2014 02:56:39 +0530 Subject: Channel groups --- Pubnub.py | 91 +++++++++++++++++++++++++++++++++++++++++++++++++-- python/examples/cr.py | 45 +++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 2 deletions(-) create mode 100644 python/examples/cr.py 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 -- cgit v1.2.3