First
This commit is contained in:
parent
b031a3a4a3
commit
928c7bad65
|
@ -0,0 +1,27 @@
|
||||||
|
PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
|
||||||
|
Copyright (c) 2013 PubNub Inc.
|
||||||
|
http://www.pubnub.com/
|
||||||
|
http://www.pubnub.com/terms
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
|
||||||
|
Copyright (c) 2013 PubNub Inc.
|
||||||
|
http://www.pubnub.com/
|
||||||
|
http://www.pubnub.com/terms
|
|
@ -0,0 +1,137 @@
|
||||||
|
## Contact support@pubnub.com for all questions
|
||||||
|
|
||||||
|
#### [PubNub](http://www.pubnub.com) Real-time Data Network
|
||||||
|
##### Tornado Client
|
||||||
|
|
||||||
|
## IO Event Loop
|
||||||
|
Be sure to eventually start the event loop or PubNub won't run!
|
||||||
|
|
||||||
|
```
|
||||||
|
pubnub.start()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Import
|
||||||
|
```
|
||||||
|
from pubnub import PubnubTornado as Pubnub
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Init
|
||||||
|
```
|
||||||
|
pubnub = Pubnub(publish_key="demo", subscribe_key="demo", ssl_on=False)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Publish Example
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
message = 'Hello World !!!'
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Subscribe Example
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### History Example
|
||||||
|
```
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Here Now Example
|
||||||
|
```
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.here_now(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Presence Example
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
pubnub.presence(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Unsubscribe Example
|
||||||
|
```
|
||||||
|
pubnub.unsubscribe(channel='hello_world')
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Grant Example
|
||||||
|
```
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.grant(channel, authkey, True, True, callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Audit Example
|
||||||
|
```
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.audit(channel, authkey, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Revoke Example
|
||||||
|
```
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.revoke(channel, authkey, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### IO Event Loop start
|
||||||
|
```
|
||||||
|
pubnub.start()
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contact support@pubnub.com for all questions
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 PubnubTornado as Pubnub
|
||||||
|
|
||||||
|
publish_key = len(sys.argv) > 1 and sys.argv[1] or 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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'
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.audit(channel, auth_key=authkey, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 PubnubTornado as Pubnub
|
||||||
|
|
||||||
|
publish_key = len(sys.argv) > 1 and sys.argv[1] or 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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'
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.grant(channel, authkey, True, True, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,36 @@
|
||||||
|
# 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 PubnubTornado as 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'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.here_now(channel, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,37 @@
|
||||||
|
# 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 PubnubTornado as 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 = 'a'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,67 @@
|
||||||
|
# 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 PubnubTornado as 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 'abcd'
|
||||||
|
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 = 'ab'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback_abc(message, channel, real_channel):
|
||||||
|
print(str(message) + ' , ' + channel + ', ' + real_channel)
|
||||||
|
# pubnub.unsubscribe_group(channel_group='abc')
|
||||||
|
# pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
def callback_d(message, channel):
|
||||||
|
print(str(message) + ' , ' + channel)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect_abc(message):
|
||||||
|
print("CONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect_d(message):
|
||||||
|
print("CONNECTED " + str(message))
|
||||||
|
pubnub.unsubscribe(channel='d')
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
print(pubnub.channel_group_add_channel(channel_group='abc', channel="bn"))
|
||||||
|
|
||||||
|
pubnub.presence_group(channel_group='abc', callback=callback_abc, error=error)
|
||||||
|
|
||||||
|
pubnub.presence(channel='d', callback=callback_d, error=error)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,36 @@
|
||||||
|
# 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 PubnubTornado as 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'
|
||||||
|
message = 'Hello World !!!'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 PubnubTornado as Pubnub
|
||||||
|
|
||||||
|
publish_key = len(sys.argv) > 1 and sys.argv[1] or 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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'
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.revoke(channel, authkey, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,52 @@
|
||||||
|
# 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 PubnubTornado as 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 = 'a'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,69 @@
|
||||||
|
# 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 PubnubTornado as 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 'abcd'
|
||||||
|
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 = 'ab'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback_abc(message, channel, real_channel):
|
||||||
|
print(str(message) + ' , ' + channel + ', ' + real_channel)
|
||||||
|
pubnub.unsubscribe_group(channel_group='abc')
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
def callback_d(message, channel):
|
||||||
|
print(str(message) + ' , ' + channel)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect_abc(message):
|
||||||
|
print("CONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect_d(message):
|
||||||
|
print("CONNECTED " + str(message))
|
||||||
|
pubnub.unsubscribe(channel='d')
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
print(pubnub.channel_group_add_channel(channel_group='abc', channel="b"))
|
||||||
|
|
||||||
|
pubnub.subscribe_group(channel_groups='abc', callback=callback_abc, error=error,
|
||||||
|
connect=connect_abc, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels='d', callback=callback_d, error=error,
|
||||||
|
connect=connect_d, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,205 @@
|
||||||
|
## Contact support@pubnub.com for all questions
|
||||||
|
|
||||||
|
#### [PubNub](http://www.pubnub.com) Real-time Data Network
|
||||||
|
##### Tornado Migration
|
||||||
|
|
||||||
|
#### Import
|
||||||
|
|
||||||
|
```
|
||||||
|
# Pre 3.5:
|
||||||
|
from pubnub import Pubnub
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
from pubnub import PubnubTornado as Pubnub
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Init
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
pubnub = Pubnub(
|
||||||
|
"demo", ## PUBLISH_KEY
|
||||||
|
"demo", ## SUBSCRIBE_KEY
|
||||||
|
False ## SSL_ON?
|
||||||
|
)
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
pubnub = Pubnub(publish_key="demo", subscribe_key="demo", ssl_on=False)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PUBLISH
|
||||||
|
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
message = 'Hello World !!!'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
def callback(messages):
|
||||||
|
print(messages)
|
||||||
|
|
||||||
|
pubnub.publish( {
|
||||||
|
'channel' : channel,
|
||||||
|
'message' : message,
|
||||||
|
'callback' : callback
|
||||||
|
})
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### SUBSCRIBE
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Listen for Messages
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
def connected() :
|
||||||
|
print('CONNECTED')
|
||||||
|
|
||||||
|
def message_received(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel' : channel,
|
||||||
|
'connect' : connected,
|
||||||
|
'callback' : message_received
|
||||||
|
})
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Unsubscribe
|
||||||
|
Once subscribed, you can easily, gracefully, unsubscribe:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Pre 3.5:
|
||||||
|
pubnub.unsubscribe({
|
||||||
|
'channel' : 'hello_world'
|
||||||
|
})
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
pubnub.unsubscribe(channel='hello_world')
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PRESENCE
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
#
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
# Listen for Presence Event Messages
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
pubnub.presence(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### HERE_NOW
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
def callback(messages):
|
||||||
|
print(messages)
|
||||||
|
|
||||||
|
pubnub.here_now( {
|
||||||
|
'channel' : channel,
|
||||||
|
'callback' : callback
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
# Get info on who is here right now!
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.here_now(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### HISTORY
|
||||||
|
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
def history_complete(messages):
|
||||||
|
print(messages)
|
||||||
|
|
||||||
|
pubnub.history( {
|
||||||
|
'channel' : channel,
|
||||||
|
'limit' : 2,
|
||||||
|
'callback' : history_complete
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### IO Event Loop
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
tornado.ioloop.IOLoop.instance().start()
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
pubnub.start()
|
||||||
|
```
|
||||||
|
## Contact support@pubnub.com for all questions
|
|
@ -0,0 +1,354 @@
|
||||||
|
import time
|
||||||
|
|
||||||
|
from pubnub import PubnubTornado as Pubnub
|
||||||
|
|
||||||
|
subkey = "sub-c-9aeec0d4-cdf4-11e5-bcee-0619f8945a4f"
|
||||||
|
pubkey = "pub-c-b3fdf8fc-4516-4ab2-8836-6fb22ba7870d"
|
||||||
|
secretkey = "sec-c-ZDQwNTUwMDctZDViYi00MzhlLTg2NTctYjViZDcwNTA5Zjhj"
|
||||||
|
pubnub = Pubnub(pubkey, subkey)
|
||||||
|
pubnub_pam = Pubnub(pubkey, subkey, secretkey)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read true, write true, on channel ( Async Mode )
|
||||||
|
def test_1():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'auths': {'abcd': {'r': 1, 'w': 1, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=True, write=True, ttl=1, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read false, write false, on channel ( Async Mode )
|
||||||
|
def test_2():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'auths': {'abcd': {'r': 0, 'w': 0, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
print("error")
|
||||||
|
print(response)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=False, write=False, ttl=1, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read True, write false, on channel ( Async Mode )
|
||||||
|
def test_3():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'auths': {'abcd': {'r': 1, 'w': 0, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=True, write=False, ttl=1, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write True, on channel ( Async Mode )
|
||||||
|
def test_4():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'auths': {'abcd': {'r': 0, 'w': 1, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=False, write=True, ttl=1, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write True, on channel ( Async Mode ), TTL 10
|
||||||
|
def test_5():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'auths': {'abcd': {'r': 0, 'w': 1, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=False, write=True, ttl=10, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write True, without channel ( Async Mode ), TTL 10
|
||||||
|
def test_6():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'r': 0, 'w': 1, 'm': 0,
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'subkey', 'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
print(response)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(read=False, write=True, ttl=10, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write False, without channel ( Async Mode )
|
||||||
|
def test_7():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'r': 0, 'w': 0, 'm': 0,
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'subkey', 'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(read=False, write=False, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Complete flow , try publish on forbidden channel, grant permission to subkey and try again. ( Sync Mode)
|
||||||
|
|
||||||
|
def test_8():
|
||||||
|
channel = "test_8-" + str(time.time())
|
||||||
|
message = "Hello World"
|
||||||
|
auth_key = "auth-" + channel
|
||||||
|
pubnub.set_auth_key(auth_key)
|
||||||
|
|
||||||
|
def _cb2(resp):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'auths': {auth_key: {'r': 1, 'w': 1, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': channel, 'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb3(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err3(resp):
|
||||||
|
print(resp)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
time.sleep(7)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb3, error=_err3)
|
||||||
|
|
||||||
|
def _err2():
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel=channel, read=True, write=True, auth_key=auth_key, ttl=10, callback=_cb2, error=_err2)
|
||||||
|
|
||||||
|
|
||||||
|
# Complete flow , try publish on forbidden channel, grant permission to authkey and try again.
|
||||||
|
# then revoke and try again
|
||||||
|
def test_9():
|
||||||
|
channel = "test_9-" + str(time.time())
|
||||||
|
message = "Hello World"
|
||||||
|
auth_key = "auth-" + channel
|
||||||
|
pubnub.set_auth_key(auth_key)
|
||||||
|
|
||||||
|
def _cb2(resp):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'auths': {auth_key: {'r': 1, 'w': 1, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': channel, 'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb3(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _cb4(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'auths': {auth_key: {'r': 0, 'w': 0, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': channel, 'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb5(resp, ch=None):
|
||||||
|
print(resp)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
def _err5(resp):
|
||||||
|
assert resp['message'] == 'Forbidden'
|
||||||
|
assert resp['payload'] == {'channels': [channel]}
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb5, error=_err5)
|
||||||
|
|
||||||
|
def _err4(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.revoke(channel=channel, auth_key=auth_key, callback=_cb4, error=_err4)
|
||||||
|
|
||||||
|
def _err3(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
time.sleep(7)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb3, error=_err3)
|
||||||
|
|
||||||
|
def _err2(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel=channel, read=True, write=True, auth_key=auth_key, ttl=10, callback=_cb2, error=_err2)
|
||||||
|
|
||||||
|
|
||||||
|
# Complete flow , try publish on forbidden channel, grant permission channel level for subkey and try again.
|
||||||
|
# then revoke and try again
|
||||||
|
def test_10():
|
||||||
|
channel = "test_10-" + str(time.time())
|
||||||
|
message = "Hello World"
|
||||||
|
auth_key = "auth-" + channel
|
||||||
|
pubnub_pam.set_auth_key(auth_key)
|
||||||
|
|
||||||
|
def _cb2(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'channels': {channel: {'r': 1, 'w': 1, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'channel', 'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb3(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _cb4(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'channels': {channel: {'r': 0, 'w': 0, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'channel', 'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb5(resp, ch=None):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
def _err5(resp):
|
||||||
|
assert resp['message'] == 'Forbidden'
|
||||||
|
assert resp['payload'] == {'channels': [channel]}
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb5, error=_err5)
|
||||||
|
|
||||||
|
def _err4(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.revoke(channel=channel, callback=_cb4, error=_err4)
|
||||||
|
|
||||||
|
def _err3(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb3, error=_err3)
|
||||||
|
|
||||||
|
def _err2(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel=channel, read=True, write=True, ttl=10, callback=_cb2, error=_err2)
|
||||||
|
|
||||||
|
|
||||||
|
# Complete flow , try publish on forbidden channel, grant permission subkey level for subkey and try again.
|
||||||
|
# then revoke and try again
|
||||||
|
def test_11():
|
||||||
|
channel = "test_11-" + str(time.time())
|
||||||
|
message = "Hello World"
|
||||||
|
auth_key = "auth-" + channel
|
||||||
|
pubnub.set_auth_key(auth_key)
|
||||||
|
|
||||||
|
def _cb2(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'r': 1, 'w': 1, 'm': 0,
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'subkey', 'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb3(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _cb4(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'r': 0, 'w': 0, 'm': 0,
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'subkey', 'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb5(resp, ch=None):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
def _err5(resp):
|
||||||
|
assert resp['message'] == 'Forbidden'
|
||||||
|
assert resp['payload'] == {'channels': [channel]}
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb5, error=_err5)
|
||||||
|
|
||||||
|
def _err4(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.revoke(callback=_cb4, error=_err4)
|
||||||
|
|
||||||
|
def _err3(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb3, error=_err3)
|
||||||
|
|
||||||
|
def _err2(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(read=True, write=True, ttl=10, callback=_cb2, error=_err2)
|
||||||
|
|
||||||
|
|
||||||
|
x = 5
|
||||||
|
|
||||||
|
|
||||||
|
def run_test(t):
|
||||||
|
global x
|
||||||
|
x += 5
|
||||||
|
i = (x / 5) - 1
|
||||||
|
|
||||||
|
def _print():
|
||||||
|
print('Running test ' + str(i))
|
||||||
|
|
||||||
|
pubnub.timeout(x, _print)
|
||||||
|
pubnub.timeout(x + 1, t)
|
||||||
|
|
||||||
|
|
||||||
|
def stop():
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
run_test(test_1)
|
||||||
|
run_test(test_2)
|
||||||
|
run_test(test_3)
|
||||||
|
run_test(test_4)
|
||||||
|
run_test(test_5)
|
||||||
|
run_test(test_6)
|
||||||
|
run_test(test_7)
|
||||||
|
run_test(test_8)
|
||||||
|
run_test(test_9)
|
||||||
|
run_test(test_10)
|
||||||
|
run_test(test_11)
|
||||||
|
run_test(stop)
|
||||||
|
|
||||||
|
pubnub_pam.start()
|
|
@ -0,0 +1,333 @@
|
||||||
|
import time
|
||||||
|
# from twisted.trial import unittest
|
||||||
|
|
||||||
|
from pubnub import PubnubTornado as Pubnub
|
||||||
|
|
||||||
|
pubkey = "pub-c-37d3c709-c35e-487a-8b33-2314d9b62b28"
|
||||||
|
subkey = "sub-c-cd0b6288-cdf5-11e5-bcee-0619f8945a4f"
|
||||||
|
pubnub = Pubnub(pubkey, subkey)
|
||||||
|
pubnub_enc = Pubnub(pubkey, subkey, cipher_key="enigma")
|
||||||
|
|
||||||
|
|
||||||
|
# class PublishTests(unittest.TestCase):
|
||||||
|
def test_1():
|
||||||
|
channel = "test_1-" + str(time.time())
|
||||||
|
message = "I am a string"
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive array
|
||||||
|
def test_2():
|
||||||
|
channel = "test_2-" + str(time.time())
|
||||||
|
message = [1, 2]
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
print(resp)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive json object
|
||||||
|
def test_3():
|
||||||
|
channel = "test_2-" + str(time.time())
|
||||||
|
message = {"a": "b"}
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive number
|
||||||
|
def test_4():
|
||||||
|
channel = "test_2-" + str(time.time())
|
||||||
|
message = 100
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive number string
|
||||||
|
def test_5():
|
||||||
|
channel = "test_5-" + str(time.time())
|
||||||
|
message = "100"
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive string (Encryption enabled)
|
||||||
|
def test_6():
|
||||||
|
channel = "test_6-" + str(time.time())
|
||||||
|
message = "I am a string"
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive array (Encryption enabled)
|
||||||
|
def test_7():
|
||||||
|
channel = "test_7-" + str(time.time())
|
||||||
|
message = [1, 2]
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive json object (Encryption enabled)
|
||||||
|
def test_8():
|
||||||
|
channel = "test_8-" + str(time.time())
|
||||||
|
message = {"a": "b"}
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive number (Encryption enabled)
|
||||||
|
def test_9():
|
||||||
|
channel = "test_9-" + str(time.time())
|
||||||
|
message = 100
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive number string (Encryption enabled)
|
||||||
|
def test_10():
|
||||||
|
channel = "test_10-" + str(time.time())
|
||||||
|
message = "100"
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive object string (Encryption enabled)
|
||||||
|
def test_11():
|
||||||
|
channel = "test_11-" + str(time.time())
|
||||||
|
message = '{"a" : "b"}'
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive array string (Encryption enabled)
|
||||||
|
def test_12():
|
||||||
|
channel = "test_12-" + str(time.time())
|
||||||
|
message = '[1,2]'
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
x = 5
|
||||||
|
|
||||||
|
|
||||||
|
def run_test(t):
|
||||||
|
global x
|
||||||
|
x += 5
|
||||||
|
i = (x / 5) - 1
|
||||||
|
|
||||||
|
def _print():
|
||||||
|
print('Running test ' + str(i))
|
||||||
|
|
||||||
|
pubnub.timeout(x, _print)
|
||||||
|
pubnub.timeout(x + 1, t)
|
||||||
|
|
||||||
|
|
||||||
|
def stop():
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
run_test(test_1)
|
||||||
|
run_test(test_2)
|
||||||
|
run_test(test_3)
|
||||||
|
run_test(test_4)
|
||||||
|
run_test(test_5)
|
||||||
|
run_test(test_6)
|
||||||
|
run_test(test_7)
|
||||||
|
run_test(test_8)
|
||||||
|
run_test(test_9)
|
||||||
|
run_test(test_10)
|
||||||
|
run_test(test_11)
|
||||||
|
run_test(stop)
|
||||||
|
|
||||||
|
pubnub_enc.start()
|
|
@ -0,0 +1,27 @@
|
||||||
|
PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
|
||||||
|
Copyright (c) 2013 PubNub Inc.
|
||||||
|
http://www.pubnub.com/
|
||||||
|
http://www.pubnub.com/terms
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
|
||||||
|
Copyright (c) 2013 PubNub Inc.
|
||||||
|
http://www.pubnub.com/
|
||||||
|
http://www.pubnub.com/terms
|
|
@ -0,0 +1,137 @@
|
||||||
|
## Contact support@pubnub.com for all questions
|
||||||
|
|
||||||
|
#### [PubNub](http://www.pubnub.com) Real-time Data Network
|
||||||
|
##### Twisted Client
|
||||||
|
|
||||||
|
## IO Event Loop
|
||||||
|
Be sure to eventually start the event loop or PubNub won't run!
|
||||||
|
|
||||||
|
```
|
||||||
|
pubnub.start()
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Import
|
||||||
|
```
|
||||||
|
from pubnub import PubnubTwisted as Pubnub
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Init
|
||||||
|
```
|
||||||
|
pubnub = Pubnub(publish_key="demo", subscribe_key="demo", ssl_on=False)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Publish Example
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
message = 'Hello World !!!'
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Subscribe Example
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### History Example
|
||||||
|
```
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Here Now Example
|
||||||
|
```
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.here_now(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Presence Example
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
pubnub.presence(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Unsubscribe Example
|
||||||
|
```
|
||||||
|
pubnub.unsubscribe(channel='hello_world')
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Grant Example
|
||||||
|
```
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.grant(channel, authkey, True, True, callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Audit Example
|
||||||
|
```
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.audit(channel, authkey, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Revoke Example
|
||||||
|
```
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.revoke(channel, authkey, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### IO Event Loop start
|
||||||
|
```
|
||||||
|
pubnub.start()
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contact support@pubnub.com for all questions
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
publish_key = len(sys.argv) > 1 and sys.argv[1] or 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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'
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.audit(channel, auth_key=authkey, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,99 @@
|
||||||
|
# www.pubnub.com - PubNub - Data Stream Network
|
||||||
|
# coding=utf8
|
||||||
|
|
||||||
|
# PubNub Real-time Push APIs and Notifications Framework
|
||||||
|
# Copyright (c) 2010 Stephen Blum
|
||||||
|
# http://www.pubnub.com/
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Import Libs
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
from pubnub import PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Configuration
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
publish_key = 'pub-c-f6a20151-db8d-45af-ba42-def0edaa459f'
|
||||||
|
subscribe_key = 'sub-c-b5ff3208-7f64-11e4-b601-02ee2ddab7fe'
|
||||||
|
server_channel = 'echo-server'
|
||||||
|
client_channel = 'echo-channel'
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Create PubNub Instance
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
pubnub = Pubnub(
|
||||||
|
publish_key=publish_key,
|
||||||
|
subscribe_key=subscribe_key,
|
||||||
|
ssl_on=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Error Log
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def error_log(data):
|
||||||
|
print(data)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Access Log
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def access_log(data):
|
||||||
|
print(data)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Respond
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def request():
|
||||||
|
pubnub.publish(
|
||||||
|
server_channel,
|
||||||
|
{'response': client_channel, 'body': "Hello"},
|
||||||
|
callback=access_log,
|
||||||
|
error=error_log
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Request Received
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def onResponse(data, channel):
|
||||||
|
print("Channel: %s | Req: %s" % (channel, data))
|
||||||
|
request()
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Ready to Receive Requests
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def onReady(message):
|
||||||
|
print("Ready to Receive Requests on '%s'" % server_channel)
|
||||||
|
request()
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Network Recovered
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def onReconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Network Failed
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def onDisconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Start Echo Server
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
pubnub.subscribe(
|
||||||
|
client_channel,
|
||||||
|
callback=onResponse,
|
||||||
|
error=error_log,
|
||||||
|
connect=onReady,
|
||||||
|
reconnect=onReconnect,
|
||||||
|
disconnect=onDisconnect
|
||||||
|
)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,104 @@
|
||||||
|
# www.pubnub.com - PubNub - Data Stream Network
|
||||||
|
# coding=utf8
|
||||||
|
|
||||||
|
# PubNub Real-time Push APIs and Notifications Framework
|
||||||
|
# Copyright (c) 2010 Stephen Blum
|
||||||
|
# http://www.pubnub.com/
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Import Libs
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
from pubnub import PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Configuration
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
publish_key = 'pub-c-f6a20151-db8d-45af-ba42-def0edaa459f'
|
||||||
|
subscribe_key = 'sub-c-b5ff3208-7f64-11e4-b601-02ee2ddab7fe'
|
||||||
|
server_channel = 'echo-server'
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Create PubNub Instance
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
pubnub = Pubnub(
|
||||||
|
publish_key=publish_key,
|
||||||
|
subscribe_key=subscribe_key,
|
||||||
|
ssl_on=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Error Log
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def error_log(data):
|
||||||
|
print(data)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Access Log
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def access_log(data):
|
||||||
|
print(data)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Respond
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def respond(channel, body):
|
||||||
|
pubnub.publish(
|
||||||
|
channel,
|
||||||
|
body,
|
||||||
|
callback=access_log,
|
||||||
|
error=error_log
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Request Received
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def onRequest(request, channel):
|
||||||
|
response_channel = request['response']
|
||||||
|
response_body = request['body']
|
||||||
|
|
||||||
|
print("Channel: %s | Req: %s" % (channel, request))
|
||||||
|
|
||||||
|
respond(
|
||||||
|
channel=response_channel,
|
||||||
|
body=response_body
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Ready to Receive Requests
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def onReady(message):
|
||||||
|
print("Ready to Receive Requests on '%s'" % server_channel)
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Network Recovered
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def onReconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Network Failed
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
def onDisconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
# Start Echo Server
|
||||||
|
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||||
|
pubnub.subscribe(
|
||||||
|
server_channel,
|
||||||
|
callback=onRequest,
|
||||||
|
error=error_log,
|
||||||
|
connect=onReady,
|
||||||
|
reconnect=onReconnect,
|
||||||
|
disconnect=onDisconnect
|
||||||
|
)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
publish_key = len(sys.argv) > 1 and sys.argv[1] or 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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'
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.grant(channel, authkey, True, True, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 PubnubTwisted as 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'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.here_now(channel, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 PubnubTwisted as 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 = 'a'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,36 @@
|
||||||
|
# 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 PubnubTwisted as 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'
|
||||||
|
message = 'Hello World !!!'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
publish_key = len(sys.argv) > 1 and sys.argv[1] or 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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'
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.revoke(channel, authkey, callback=callback, error=callback)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,52 @@
|
||||||
|
# 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 PubnubTwisted as 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 = 'a'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,54 @@
|
||||||
|
# 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 'abcd'
|
||||||
|
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, daemon=False)
|
||||||
|
|
||||||
|
channel = 'ab'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message, channel):
|
||||||
|
print(str(message) + ' , ' + channel)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
print(pubnub.channel_group_add_channel(channel_group='abc', channel="a"))
|
||||||
|
|
||||||
|
pubnub.subscribe_group(channel_groups='abc', callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,205 @@
|
||||||
|
## Contact support@pubnub.com for all questions
|
||||||
|
|
||||||
|
#### [PubNub](http://www.pubnub.com) Real-time Data Network
|
||||||
|
##### Twisted Migration
|
||||||
|
|
||||||
|
#### Import
|
||||||
|
|
||||||
|
```
|
||||||
|
# Pre 3.5:
|
||||||
|
from pubnub import Pubnub
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
from pubnub import PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Init
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
pubnub = Pubnub(
|
||||||
|
"demo", ## PUBLISH_KEY
|
||||||
|
"demo", ## SUBSCRIBE_KEY
|
||||||
|
False ## SSL_ON?
|
||||||
|
)
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
pubnub = Pubnub(publish_key="demo", subscribe_key="demo", ssl_on=False)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PUBLISH
|
||||||
|
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
message = 'Hello World !!!'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
def callback(messages):
|
||||||
|
print(messages)
|
||||||
|
|
||||||
|
pubnub.publish( {
|
||||||
|
'channel' : channel,
|
||||||
|
'message' : message,
|
||||||
|
'callback' : callback
|
||||||
|
})
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### SUBSCRIBE
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Listen for Messages
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
def connected() :
|
||||||
|
print('CONNECTED')
|
||||||
|
|
||||||
|
def message_received(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel' : channel,
|
||||||
|
'connect' : connected,
|
||||||
|
'callback' : message_received
|
||||||
|
})
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Unsubscribe
|
||||||
|
Once subscribed, you can easily, gracefully, unsubscribe:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Pre 3.5:
|
||||||
|
pubnub.unsubscribe({
|
||||||
|
'channel' : 'hello_world'
|
||||||
|
})
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
pubnub.unsubscribe(channel='hello_world')
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PRESENCE
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
#
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
# Listen for Presence Event Messages
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
pubnub.presence(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### HERE_NOW
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
def callback(messages):
|
||||||
|
print(messages)
|
||||||
|
|
||||||
|
pubnub.here_now( {
|
||||||
|
'channel' : channel,
|
||||||
|
'callback' : callback
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
# Get info on who is here right now!
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.here_now(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### HISTORY
|
||||||
|
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
def history_complete(messages):
|
||||||
|
print(messages)
|
||||||
|
|
||||||
|
pubnub.history( {
|
||||||
|
'channel' : channel,
|
||||||
|
'limit' : 2,
|
||||||
|
'callback' : history_complete
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### IO Event Loop
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
reactor.run()
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
pubnub.start()
|
||||||
|
```
|
||||||
|
## Contact support@pubnub.com for all questions
|
|
@ -0,0 +1,90 @@
|
||||||
|
# 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 datetime
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from pubnub import PubnubTwisted as 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 'demo'
|
||||||
|
ssl_on = len(sys.argv) > 5 and bool(sys.argv[5]) or False
|
||||||
|
origin = len(sys.argv) > 6 and sys.argv[6] or 'pubsub.pubnub.com'
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
# Initiat Class
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
pubnub = Pubnub(
|
||||||
|
publish_key,
|
||||||
|
subscribe_key,
|
||||||
|
secret_key=secret_key,
|
||||||
|
cipher_key=cipher_key,
|
||||||
|
ssl_on=ssl_on,
|
||||||
|
origin=origin
|
||||||
|
)
|
||||||
|
crazy = ' ~`!@#$%^&*( 顶顅 Ȓ)+=[]\\{}|;\':",./<>?abcd'
|
||||||
|
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
# BENCHMARK
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
def success(msg):
|
||||||
|
print(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def connected(msg):
|
||||||
|
pubnub.publish(crazy, {'Info': 'Connected!'}, error=error, callback=success)
|
||||||
|
|
||||||
|
|
||||||
|
def error(err):
|
||||||
|
print(err)
|
||||||
|
|
||||||
|
trips = {'last': None, 'current': None, 'max': 0, 'avg': 0}
|
||||||
|
|
||||||
|
|
||||||
|
def received(message):
|
||||||
|
current_trip = trips['current'] = str(datetime.datetime.now())[0:19]
|
||||||
|
last_trip = trips['last'] = str(
|
||||||
|
datetime.datetime.now() - datetime.timedelta(seconds=1)
|
||||||
|
)[0:19]
|
||||||
|
|
||||||
|
# New Trip Span (1 Second)
|
||||||
|
if current_trip not in trips:
|
||||||
|
trips[current_trip] = 0
|
||||||
|
|
||||||
|
# Average
|
||||||
|
if last_trip in trips:
|
||||||
|
trips['avg'] = (trips['avg'] + trips[last_trip]) / 2
|
||||||
|
|
||||||
|
# Increment Trip Counter
|
||||||
|
trips[current_trip] = trips[current_trip] + 1
|
||||||
|
|
||||||
|
# Update Max
|
||||||
|
if trips[current_trip] > trips['max']:
|
||||||
|
trips['max'] = trips[current_trip]
|
||||||
|
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.publish(crazy, current_trip +
|
||||||
|
" Trip: " +
|
||||||
|
str(trips[current_trip]) +
|
||||||
|
" MAX: " +
|
||||||
|
str(trips['max']) +
|
||||||
|
"/sec " +
|
||||||
|
" AVG: " +
|
||||||
|
str(trips['avg']) +
|
||||||
|
"/sec", error=error)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(crazy, received, connect=connected, error=error)
|
||||||
|
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
# IO Event Loop
|
||||||
|
# -----------------------------------------------------------------------
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,168 @@
|
||||||
|
## 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/
|
||||||
|
|
||||||
|
## -----------------------------------
|
||||||
|
## PubNub 3.1 Real-time Push Cloud API
|
||||||
|
## -----------------------------------
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import datetime
|
||||||
|
import time
|
||||||
|
|
||||||
|
from pubnub import PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Configuration
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
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 'demo'
|
||||||
|
ssl_on = len(sys.argv) > 5 and bool(sys.argv[5]) or False
|
||||||
|
origin = len(sys.argv) > 6 and sys.argv[6] or 'pubsub.pubnub.com'
|
||||||
|
origin = '184.72.9.220'
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Analytics
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
analytics = {
|
||||||
|
'publishes': 0, # Total Send Requests
|
||||||
|
'received': 0, # Total Received Messages (Deliveries)
|
||||||
|
'queued': 0, # Total Unreceived Queue (UnDeliveries)
|
||||||
|
'successful_publishes': 0, # Confirmed Successful Publish Request
|
||||||
|
'failed_publishes': 0, # Confirmed UNSuccessful Publish Request
|
||||||
|
'failed_deliveries': 0, # (successful_publishes - received)
|
||||||
|
'deliverability': 0 # Percentage Delivery
|
||||||
|
}
|
||||||
|
|
||||||
|
trips = {
|
||||||
|
'last': None,
|
||||||
|
'current': None,
|
||||||
|
'max': 0,
|
||||||
|
'avg': 0
|
||||||
|
}
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Initiat Class
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
channel = 'deliverability-' + str(time.time())
|
||||||
|
pubnub = Pubnub(
|
||||||
|
publish_key,
|
||||||
|
subscribe_key,
|
||||||
|
secret_key=secret_key,
|
||||||
|
cipher_key=cipher_key,
|
||||||
|
ssl_on=ssl_on,
|
||||||
|
origin=origin
|
||||||
|
)
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## BENCHMARK
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
def publish_sent(info=None):
|
||||||
|
if info and info[0]:
|
||||||
|
analytics['successful_publishes'] += 1
|
||||||
|
else:
|
||||||
|
analytics['failed_publishes'] += 1
|
||||||
|
|
||||||
|
analytics['publishes'] += 1
|
||||||
|
analytics['queued'] += 1
|
||||||
|
|
||||||
|
pubnub.timeout(send, 0.1)
|
||||||
|
|
||||||
|
|
||||||
|
def send():
|
||||||
|
if analytics['queued'] > 100:
|
||||||
|
analytics['queued'] -= 10
|
||||||
|
return pubnub.timeout(send, 10)
|
||||||
|
|
||||||
|
pubnub.publish({
|
||||||
|
'channel': channel,
|
||||||
|
'callback': publish_sent,
|
||||||
|
'message': "1234567890"
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def received(message):
|
||||||
|
analytics['queued'] -= 1
|
||||||
|
analytics['received'] += 1
|
||||||
|
current_trip = trips['current'] = str(datetime.datetime.now())[0:19]
|
||||||
|
last_trip = trips['last'] = str(
|
||||||
|
datetime.datetime.now() - datetime.timedelta(seconds=1)
|
||||||
|
)[0:19]
|
||||||
|
|
||||||
|
## New Trip Span (1 Second)
|
||||||
|
if current_trip not in trips:
|
||||||
|
trips[current_trip] = 0
|
||||||
|
|
||||||
|
## Average
|
||||||
|
if last_trip in trips:
|
||||||
|
trips['avg'] = (trips['avg'] + trips[last_trip]) / 2
|
||||||
|
|
||||||
|
## Increment Trip Counter
|
||||||
|
trips[current_trip] = trips[current_trip] + 1
|
||||||
|
|
||||||
|
## Update Max
|
||||||
|
if trips[current_trip] > trips['max']:
|
||||||
|
trips['max'] = trips[current_trip]
|
||||||
|
|
||||||
|
|
||||||
|
def show_status():
|
||||||
|
## Update Failed Deliveries
|
||||||
|
analytics['failed_deliveries'] = \
|
||||||
|
analytics['successful_publishes'] \
|
||||||
|
- analytics['received']
|
||||||
|
|
||||||
|
## Update Deliverability
|
||||||
|
analytics['deliverability'] = (
|
||||||
|
float(analytics['received']) /
|
||||||
|
float(analytics['successful_publishes'] or 1.0)
|
||||||
|
) * 100.0
|
||||||
|
|
||||||
|
## Print Display
|
||||||
|
print((
|
||||||
|
"max:%(max)03d/sec " +
|
||||||
|
"avg:%(avg)03d/sec " +
|
||||||
|
"pubs:%(publishes)05d " +
|
||||||
|
"received:%(received)05d " +
|
||||||
|
"spub:%(successful_publishes)05d " +
|
||||||
|
"fpub:%(failed_publishes)05d " +
|
||||||
|
"failed:%(failed_deliveries)05d " +
|
||||||
|
"queued:%(queued)03d " +
|
||||||
|
"delivery:%(deliverability)03f%% " +
|
||||||
|
""
|
||||||
|
) % {
|
||||||
|
'max': trips['max'],
|
||||||
|
'avg': trips['avg'],
|
||||||
|
'publishes': analytics['publishes'],
|
||||||
|
'received': analytics['received'],
|
||||||
|
'successful_publishes': analytics['successful_publishes'],
|
||||||
|
'failed_publishes': analytics['failed_publishes'],
|
||||||
|
'failed_deliveries': analytics['failed_deliveries'],
|
||||||
|
'publishes': analytics['publishes'],
|
||||||
|
'deliverability': analytics['deliverability'],
|
||||||
|
'queued': analytics['queued']
|
||||||
|
})
|
||||||
|
pubnub.timeout(show_status, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def connected():
|
||||||
|
show_status()
|
||||||
|
pubnub.timeout(send, 1)
|
||||||
|
|
||||||
|
print("Connected: %s\n" % origin)
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel': channel,
|
||||||
|
'connect': connected,
|
||||||
|
'callback': received
|
||||||
|
})
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## IO Event Loop
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,156 @@
|
||||||
|
## 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/
|
||||||
|
|
||||||
|
## -----------------------------------
|
||||||
|
## PubNub 3.1 Real-time Push Cloud API
|
||||||
|
## -----------------------------------
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from pubnub import PubnubTwisted as Pubnub
|
||||||
|
from functools import partial
|
||||||
|
from threading import current_thread
|
||||||
|
import threading
|
||||||
|
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 None
|
||||||
|
ssl_on = len(sys.argv) > 5 and bool(sys.argv[5]) or False
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Initiate Pubnub State
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
#pubnub = Pubnub( publish_key, subscribe_key, secret_key, cipher_key, ssl_on )
|
||||||
|
pubnub = Pubnub(publish_key, subscribe_key, secret_key, ssl_on)
|
||||||
|
crazy = 'hello_world'
|
||||||
|
|
||||||
|
current = -1
|
||||||
|
|
||||||
|
errors = 0
|
||||||
|
received = 0
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Subscribe Example
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
def message_received(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def check_received(message):
|
||||||
|
global current
|
||||||
|
global errors
|
||||||
|
global received
|
||||||
|
print(message)
|
||||||
|
print(current)
|
||||||
|
if message <= current:
|
||||||
|
print('ERROR')
|
||||||
|
#sys.exit()
|
||||||
|
errors += 1
|
||||||
|
else:
|
||||||
|
received += 1
|
||||||
|
print('active thread count : ', threading.activeCount())
|
||||||
|
print('errors = ', errors)
|
||||||
|
print(current_thread().getName(), ' , ', 'received = ', received)
|
||||||
|
|
||||||
|
if received != message:
|
||||||
|
print('********** MISSED **************** ', message - received)
|
||||||
|
current = message
|
||||||
|
|
||||||
|
|
||||||
|
def connected_test(ch):
|
||||||
|
print('Connected', ch)
|
||||||
|
|
||||||
|
|
||||||
|
def connected(ch):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel' : 'abcd1',
|
||||||
|
'connect' : connected,
|
||||||
|
'callback' : message_received
|
||||||
|
})
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
def cb1():
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel': 'efgh1',
|
||||||
|
'connect': connected,
|
||||||
|
'callback': message_received
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def cb2():
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel': 'dsm-test',
|
||||||
|
'connect': connected_test,
|
||||||
|
'callback': check_received
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def cb3():
|
||||||
|
pubnub.unsubscribe({'channel': 'efgh1'})
|
||||||
|
|
||||||
|
|
||||||
|
def cb4():
|
||||||
|
pubnub.unsubscribe({'channel': 'abcd1'})
|
||||||
|
|
||||||
|
|
||||||
|
def subscribe(channel):
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel': channel,
|
||||||
|
'connect': connected,
|
||||||
|
'callback': message_received
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
print(threading.activeCount())
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.timeout(15, cb1)
|
||||||
|
|
||||||
|
pubnub.timeout(30, cb2)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.timeout(45, cb3)
|
||||||
|
|
||||||
|
pubnub.timeout(60, cb4)
|
||||||
|
|
||||||
|
#'''
|
||||||
|
for x in range(1, 1000):
|
||||||
|
#print x
|
||||||
|
def y(t):
|
||||||
|
subscribe('channel-' + str(t))
|
||||||
|
|
||||||
|
def z(t):
|
||||||
|
pubnub.unsubscribe({'channel': 'channel-' + str(t)})
|
||||||
|
|
||||||
|
pubnub.timeout(x + 5, partial(y, x))
|
||||||
|
pubnub.timeout(x + 25, partial(z, x))
|
||||||
|
x += 10
|
||||||
|
#'''
|
||||||
|
|
||||||
|
'''
|
||||||
|
for x in range(1,1000):
|
||||||
|
def cb(r): print r , ' : ', threading.activeCount()
|
||||||
|
def y(t):
|
||||||
|
pubnub.publish({
|
||||||
|
'message' : t,
|
||||||
|
'callback' : cb,
|
||||||
|
'channel' : 'dsm-test'
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.timeout(x + 1, partial(y,x))
|
||||||
|
x += 1
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,365 @@
|
||||||
|
import time
|
||||||
|
|
||||||
|
from pubnub import PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
subkey = "sub-c-9aeec0d4-cdf4-11e5-bcee-0619f8945a4f"
|
||||||
|
pubkey = "pub-c-b3fdf8fc-4516-4ab2-8836-6fb22ba7870d"
|
||||||
|
secretkey = "sec-c-ZDQwNTUwMDctZDViYi00MzhlLTg2NTctYjViZDcwNTA5Zjhj"
|
||||||
|
pubnub = Pubnub(pubkey, subkey)
|
||||||
|
pubnub_pam = Pubnub(pubkey, subkey, secretkey)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read true, write true, on channel ( Async Mode )
|
||||||
|
def test_1():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'auths': {u'abcd': {u'r': 1, u'w': 1}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'user', u'channel': u'abcd', u'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=True, write=True, ttl=1, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read false, write false, on channel ( Async Mode )
|
||||||
|
def test_2():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'auths': {u'abcd': {u'r': 0, u'm': 0, u'w': 0}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'user', u'channel': u'abcd', u'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
print("error")
|
||||||
|
print(response)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=False, write=False, ttl=1, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read True, write false, on channel ( Async Mode )
|
||||||
|
def test_3():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'auths': {u'abcd': {u'r': 1, u'm': 0, u'w': 0}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'user', u'channel': u'abcd', u'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=True, write=False, ttl=1, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write True, on channel ( Async Mode )
|
||||||
|
def test_4():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'auths': {u'abcd': {u'r': 0, u'm': 0, u'w': 1}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'user', u'channel': u'abcd', u'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=False, write=True, ttl=1, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write True, on channel ( Async Mode ), TTL 10
|
||||||
|
def test_5():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'auths': {u'abcd': {u'r': 0, u'm': 0, u'w': 1}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'user', u'channel': u'abcd', u'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel="abcd", auth_key="abcd", read=False, write=True, ttl=10, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write True, without channel ( Async Mode ), TTL 10
|
||||||
|
def test_6():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'r': 0, u'm': 0, u'w': 1,
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'subkey', u'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
print(response)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(read=False, write=True, ttl=10, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write False, without channel ( Async Mode )
|
||||||
|
def test_7():
|
||||||
|
def _callback(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'r': 0, u'm': 0, u'w': 0,
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'subkey', u'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _error(response):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(read=False, write=False, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Complete flow , try publish on forbidden channel, grant permission to subkey and try again. ( Sync Mode)
|
||||||
|
|
||||||
|
def test_8():
|
||||||
|
channel = "test_8-" + str(time.time())
|
||||||
|
message = "Hello World"
|
||||||
|
auth_key = "auth-" + channel
|
||||||
|
pubnub.set_auth_key(auth_key)
|
||||||
|
|
||||||
|
def _cb2(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'auths': {auth_key: {u'r': 1, u'm': 0, u'w': 1}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'user', u'channel': channel, u'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb3(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err3(resp):
|
||||||
|
print(resp)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
time.sleep(7)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb3, error=_err3)
|
||||||
|
|
||||||
|
def _err2(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel=channel, read=True, write=True, auth_key=auth_key, ttl=10, callback=_cb2, error=_err2)
|
||||||
|
|
||||||
|
|
||||||
|
# Complete flow , try publish on forbidden channel, grant permission to authkey and try again.
|
||||||
|
# then revoke and try again
|
||||||
|
def test_9():
|
||||||
|
channel = "test_9-" + str(time.time())
|
||||||
|
message = "Hello World"
|
||||||
|
auth_key = "auth-" + channel
|
||||||
|
pubnub.set_auth_key(auth_key)
|
||||||
|
|
||||||
|
def _cb2(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'auths': {auth_key: {u'r': 1, u'm': 0, u'w': 1}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'user', u'channel': channel, u'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb3(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _cb4(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'auths': {auth_key: {u'r': 0, u'm': 0, u'w': 0}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'user', u'channel': channel, u'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb5(resp, ch=None):
|
||||||
|
print(resp)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
def _err5(resp):
|
||||||
|
assert resp['message'] == 'Forbidden'
|
||||||
|
assert resp['payload'] == {u'channels': [channel]}
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb5, error=_err5)
|
||||||
|
|
||||||
|
def _err4(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.revoke(channel=channel, auth_key=auth_key, callback=_cb4, error=_err4)
|
||||||
|
|
||||||
|
def _err3(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
time.sleep(7)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb3, error=_err3)
|
||||||
|
|
||||||
|
def _err2(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel=channel, read=True, write=True, auth_key=auth_key, ttl=10, callback=_cb2, error=_err2)
|
||||||
|
|
||||||
|
|
||||||
|
# Complete flow , try publish on forbidden channel, grant permission channel level for subkey and try again.
|
||||||
|
# then revoke and try again
|
||||||
|
def test_10():
|
||||||
|
channel = "test_10-" + str(time.time())
|
||||||
|
message = "Hello World"
|
||||||
|
auth_key = "auth-" + channel
|
||||||
|
pubnub.set_auth_key(auth_key)
|
||||||
|
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert resp['message'] == 'Forbidden'
|
||||||
|
assert resp['payload'] == {u'channels': [channel]}
|
||||||
|
|
||||||
|
def _cb2(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'channels': {channel: {u'r': 1, u'm': 0, u'w': 1}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'channel', u'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb3(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _cb4(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'channels': {channel: {u'r': 0, u'm': 0, u'w': 0}},
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'channel', u'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb5(resp, ch=None):
|
||||||
|
print(resp)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
def _err5(resp):
|
||||||
|
assert resp['message'] == 'Forbidden'
|
||||||
|
assert resp['payload'] == {u'channels': [channel]}
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb5, error=_err5)
|
||||||
|
|
||||||
|
def _err4(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.revoke(channel=channel, callback=_cb4, error=_err4)
|
||||||
|
|
||||||
|
def _err3(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb3, error=_err3)
|
||||||
|
|
||||||
|
def _err2(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(channel=channel, read=True, write=True, ttl=10, callback=_cb2, error=_err2)
|
||||||
|
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
|
||||||
|
# Complete flow , try publish on forbidden channel, grant permission subkey level for subkey and try again.
|
||||||
|
# then revoke and try again
|
||||||
|
def test_11():
|
||||||
|
channel = "test_11-" + str(time.time())
|
||||||
|
message = "Hello World"
|
||||||
|
auth_key = "auth-" + channel
|
||||||
|
pubnub.set_auth_key(auth_key)
|
||||||
|
|
||||||
|
def _cb2(resp, ch=None):
|
||||||
|
print(resp)
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'r': 1, u'm': 0, u'w': 1,
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'subkey', u'ttl': 10}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb3(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _cb4(resp, ch=None):
|
||||||
|
assert resp == {
|
||||||
|
'message': u'Success',
|
||||||
|
'payload': {u'r': 0, u'm': 0, u'w': 0,
|
||||||
|
u'subscribe_key': subkey,
|
||||||
|
u'level': u'subkey', u'ttl': 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
def _cb5(resp, ch=None):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
def _err5(resp):
|
||||||
|
assert resp['message'] == 'Forbidden'
|
||||||
|
assert resp['payload'] == {u'channels': [channel]}
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb5, error=_err5)
|
||||||
|
|
||||||
|
def _err4(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.revoke(callback=_cb4, error=_err4)
|
||||||
|
|
||||||
|
def _err3(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_cb3, error=_err3)
|
||||||
|
|
||||||
|
def _err2(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_pam.grant(read=True, write=True, ttl=10, callback=_cb2, error=_err2)
|
||||||
|
|
||||||
|
|
||||||
|
x = 5
|
||||||
|
|
||||||
|
|
||||||
|
def run_test(t):
|
||||||
|
global x
|
||||||
|
x += 5
|
||||||
|
i = (x / 5) - 1
|
||||||
|
|
||||||
|
def _print():
|
||||||
|
print('Running test ' + str(i))
|
||||||
|
|
||||||
|
pubnub.timeout(x, _print)
|
||||||
|
pubnub.timeout(x + 1, t)
|
||||||
|
|
||||||
|
|
||||||
|
def stop():
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
run_test(test_1)
|
||||||
|
run_test(test_2)
|
||||||
|
run_test(test_3)
|
||||||
|
run_test(test_4)
|
||||||
|
run_test(test_5)
|
||||||
|
run_test(test_6)
|
||||||
|
run_test(test_7)
|
||||||
|
run_test(test_8)
|
||||||
|
run_test(test_9)
|
||||||
|
run_test(test_10)
|
||||||
|
run_test(test_11)
|
||||||
|
run_test(stop)
|
||||||
|
|
||||||
|
pubnub_pam.start()
|
|
@ -0,0 +1,333 @@
|
||||||
|
import time
|
||||||
|
# from twisted.trial import unittest
|
||||||
|
|
||||||
|
from pubnub import PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
pubkey = "pub-c-37d3c709-c35e-487a-8b33-2314d9b62b28"
|
||||||
|
subkey = "sub-c-cd0b6288-cdf5-11e5-bcee-0619f8945a4f"
|
||||||
|
pubnub = Pubnub(pubkey, subkey)
|
||||||
|
pubnub_enc = Pubnub(pubkey, subkey, cipher_key="enigma")
|
||||||
|
|
||||||
|
|
||||||
|
# class PublishTests(unittest.TestCase):
|
||||||
|
def test_1():
|
||||||
|
channel = "test_1-" + str(time.time())
|
||||||
|
message = "I am a string"
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive array
|
||||||
|
def test_2():
|
||||||
|
channel = "test_2-" + str(time.time())
|
||||||
|
message = [1, 2]
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
print(resp)
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive json object
|
||||||
|
def test_3():
|
||||||
|
channel = "test_2-" + str(time.time())
|
||||||
|
message = {"a": "b"}
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive number
|
||||||
|
def test_4():
|
||||||
|
channel = "test_2-" + str(time.time())
|
||||||
|
message = 100
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive number string
|
||||||
|
def test_5():
|
||||||
|
channel = "test_5-" + str(time.time())
|
||||||
|
message = "100"
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive string (Encryption enabled)
|
||||||
|
def test_6():
|
||||||
|
channel = "test_6-" + str(time.time())
|
||||||
|
message = "I am a string"
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive array (Encryption enabled)
|
||||||
|
def test_7():
|
||||||
|
channel = "test_7-" + str(time.time())
|
||||||
|
message = [1, 2]
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive json object (Encryption enabled)
|
||||||
|
def test_8():
|
||||||
|
channel = "test_8-" + str(time.time())
|
||||||
|
message = {"a": "b"}
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive number (Encryption enabled)
|
||||||
|
def test_9():
|
||||||
|
channel = "test_9-" + str(time.time())
|
||||||
|
message = 100
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive number string (Encryption enabled)
|
||||||
|
def test_10():
|
||||||
|
channel = "test_10-" + str(time.time())
|
||||||
|
message = "100"
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive object string (Encryption enabled)
|
||||||
|
def test_11():
|
||||||
|
channel = "test_11-" + str(time.time())
|
||||||
|
message = '{"a" : "b"}'
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
# Publish and receive array string (Encryption enabled)
|
||||||
|
def test_12():
|
||||||
|
channel = "test_12-" + str(time.time())
|
||||||
|
message = '[1,2]'
|
||||||
|
|
||||||
|
def _cb(resp, ch=None):
|
||||||
|
assert resp == message
|
||||||
|
pubnub_enc.unsubscribe(channel)
|
||||||
|
|
||||||
|
def _connect(resp):
|
||||||
|
def _cb1(resp, ch=None):
|
||||||
|
assert resp[0] == 1
|
||||||
|
|
||||||
|
def _err1(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.publish(channel, message, callback=_cb1, error=_err1)
|
||||||
|
|
||||||
|
def _error(resp):
|
||||||
|
assert False
|
||||||
|
|
||||||
|
pubnub_enc.subscribe(channel, callback=_cb, connect=_connect, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
x = 5
|
||||||
|
|
||||||
|
|
||||||
|
def run_test(t):
|
||||||
|
global x
|
||||||
|
x += 5
|
||||||
|
i = (x / 5) - 1
|
||||||
|
|
||||||
|
def _print():
|
||||||
|
print('Running test ' + str(i))
|
||||||
|
|
||||||
|
pubnub.timeout(x, _print)
|
||||||
|
pubnub.timeout(x + 1, t)
|
||||||
|
|
||||||
|
|
||||||
|
def stop():
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
run_test(test_1)
|
||||||
|
run_test(test_2)
|
||||||
|
run_test(test_3)
|
||||||
|
run_test(test_4)
|
||||||
|
run_test(test_5)
|
||||||
|
run_test(test_6)
|
||||||
|
run_test(test_7)
|
||||||
|
run_test(test_8)
|
||||||
|
run_test(test_9)
|
||||||
|
run_test(test_10)
|
||||||
|
run_test(test_11)
|
||||||
|
run_test(stop)
|
||||||
|
|
||||||
|
pubnub_enc.start()
|
|
@ -0,0 +1,230 @@
|
||||||
|
## 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/
|
||||||
|
|
||||||
|
## TODO Tests
|
||||||
|
##
|
||||||
|
## - wait 20 minutes, send a message, receive and success.
|
||||||
|
## -
|
||||||
|
## -
|
||||||
|
##
|
||||||
|
##
|
||||||
|
|
||||||
|
## -----------------------------------
|
||||||
|
## PubNub 3.1 Real-time Push Cloud API
|
||||||
|
## -----------------------------------
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from pubnub import PubnubTwisted as 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 None
|
||||||
|
cipher_key = len(sys.argv) > 4 and sys.argv[4] or None
|
||||||
|
ssl_on = len(sys.argv) > 5 and bool(sys.argv[5]) or False
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Command Line Options Supplied PubNub
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
pubnub_user_supplied_options = Pubnub(
|
||||||
|
publish_key, # OPTIONAL (supply None to disable)
|
||||||
|
subscribe_key, # REQUIRED
|
||||||
|
secret_key, # OPTIONAL (supply None to disable)
|
||||||
|
cipher_key, # OPTIONAL (supply None to disable)
|
||||||
|
ssl_on # OPTIONAL (supply None to disable)
|
||||||
|
)
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## High Security PubNub
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
pubnub_high_security = Pubnub(
|
||||||
|
## Publish Key
|
||||||
|
'pub-c-a30c030e-9f9c-408d-be89-d70b336ca7a0',
|
||||||
|
|
||||||
|
## Subscribe Key
|
||||||
|
'sub-c-387c90f3-c018-11e1-98c9-a5220e0555fd',
|
||||||
|
|
||||||
|
## Secret Key
|
||||||
|
'sec-c-MTliNDE0NTAtYjY4Ni00MDRkLTllYTItNDhiZGE0N2JlYzBl',
|
||||||
|
|
||||||
|
## Cipher Key
|
||||||
|
'YWxzamRmbVjFaa05HVnGFqZHM3NXRBS73jxmhVMkjiwVVXV1d5UrXR1JLSkZFRr' +
|
||||||
|
'WVd4emFtUm1iR0TFpUZvbiBoYXMgYmVlbxWkhNaF3uUi8kM0YkJTEVlZYVFjBYi' +
|
||||||
|
'jFkWFIxSkxTa1pGUjd874hjklaTFpUwRVuIFNob3VsZCB5UwRkxUR1J6YVhlQWa' +
|
||||||
|
'V1ZkNGVH32mDkdho3pqtRnRVbTFpUjBaeGUgYXNrZWQtZFoKjda40ZWlyYWl1eX' +
|
||||||
|
'U4RkNtdmNub2l1dHE2TTA1jd84jkdJTbFJXYkZwWlZtRnKkWVrSRhhWbFpZVmFz' +
|
||||||
|
'c2RkZmTFpUpGa1dGSXhTa3hUYTFwR1Vpkm9yIGluZm9ybWFNfdsWQdSiiYXNWVX' +
|
||||||
|
'RSblJWYlRGcFVqQmFlRmRyYUU0MFpXbHlZV2wxZVhVNFJrTnR51YjJsMWRIRTJU' +
|
||||||
|
'W91ciBpbmZvcm1hdGliBzdWJtaXR0ZWQb3UZSBhIHJlc3BvbnNlLCB3ZWxsIHJl' +
|
||||||
|
'VEExWdHVybiB0am0aW9uIb24gYXMgd2UgcG9zc2libHkgY2FuLuhcFe24ldWVns' +
|
||||||
|
'dSaTFpU3hVUjFKNllWaFdhRmxZUWpCaQo34gcmVxdWlGFzIHNveqQl83snBfVl3',
|
||||||
|
|
||||||
|
## 2048bit SSL ON - ENABLED TRUE
|
||||||
|
True
|
||||||
|
)
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Channel | Message Test Data (UTF-8)
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
crazy = ' ~`â¦â§!@#$%^&*(顶顅Ȓ)+=[]\\{}|;\':",./<>?abcd'
|
||||||
|
many_channels = [str(x) + '-many_channel_test' for x in range(10)]
|
||||||
|
runthroughs = 0
|
||||||
|
planned_tests = 2
|
||||||
|
delivery_retries = 0
|
||||||
|
max_retries = 10
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Unit Test Function
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
def test(trial, name):
|
||||||
|
if trial:
|
||||||
|
print('PASS: ' + name)
|
||||||
|
else:
|
||||||
|
print('- FAIL - ' + name)
|
||||||
|
|
||||||
|
|
||||||
|
def test_pubnub(pubnub):
|
||||||
|
global runthroughs, planned_tests, delivery_retries, max_retries
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Many Channels
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
def phase2():
|
||||||
|
status = {
|
||||||
|
'sent': 0,
|
||||||
|
'received': 0,
|
||||||
|
'connections': 0
|
||||||
|
}
|
||||||
|
|
||||||
|
def received(message, chan):
|
||||||
|
global runthroughs
|
||||||
|
|
||||||
|
test(status['received'] <= status['sent'], 'many sends')
|
||||||
|
status['received'] += 1
|
||||||
|
pubnub.unsubscribe({'channel': chan})
|
||||||
|
if status['received'] == len(many_channels):
|
||||||
|
runthroughs += 1
|
||||||
|
if runthroughs == planned_tests:
|
||||||
|
pubnub.stop()
|
||||||
|
|
||||||
|
def publish_complete(info, chan):
|
||||||
|
global delivery_retries, max_retries
|
||||||
|
status['sent'] += 1
|
||||||
|
test(info, 'publish complete')
|
||||||
|
test(info and len(info) > 2, 'publish response')
|
||||||
|
if not info[0]:
|
||||||
|
delivery_retries += 1
|
||||||
|
if max_retries > delivery_retries:
|
||||||
|
sendit(chan)
|
||||||
|
|
||||||
|
def sendit(chan):
|
||||||
|
tchan = chan
|
||||||
|
pubnub.publish({
|
||||||
|
'channel': chan,
|
||||||
|
'message': "Hello World",
|
||||||
|
'callback': (lambda msg: publish_complete(msg, tchan))
|
||||||
|
})
|
||||||
|
|
||||||
|
def connected(chan):
|
||||||
|
status['connections'] += 1
|
||||||
|
sendit(chan)
|
||||||
|
|
||||||
|
def delivered(info):
|
||||||
|
if info and info[0]:
|
||||||
|
status['sent'] += 1
|
||||||
|
|
||||||
|
def subscribe(chan):
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel': chan,
|
||||||
|
'connect': (lambda: connected(chan + '')),
|
||||||
|
'callback': (lambda msg: received(msg, chan))
|
||||||
|
})
|
||||||
|
|
||||||
|
## Subscribe All Channels
|
||||||
|
for chan in many_channels:
|
||||||
|
subscribe(chan)
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Time Example
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
def time_complete(timetoken):
|
||||||
|
test(timetoken, 'timetoken fetch')
|
||||||
|
test(isinstance(timetoken, int), 'timetoken int type')
|
||||||
|
|
||||||
|
pubnub.time({'callback': time_complete})
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Publish Example
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
def publish_complete(info):
|
||||||
|
test(info, 'publish complete')
|
||||||
|
test(info and len(info) > 2, 'publish response')
|
||||||
|
|
||||||
|
pubnub.history({
|
||||||
|
'channel': crazy,
|
||||||
|
'limit': 10,
|
||||||
|
'callback': history_complete
|
||||||
|
})
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## History Example
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
def history_complete(messages):
|
||||||
|
test(messages and len(messages) > 0, 'history')
|
||||||
|
test(messages, 'history')
|
||||||
|
|
||||||
|
pubnub.publish({
|
||||||
|
'channel': crazy,
|
||||||
|
'message': "Hello World",
|
||||||
|
'callback': publish_complete
|
||||||
|
})
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Subscribe Example
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
def message_received(message):
|
||||||
|
test(message, 'message received')
|
||||||
|
pubnub.unsubscribe({'channel': crazy})
|
||||||
|
|
||||||
|
def done():
|
||||||
|
pubnub.unsubscribe({'channel': crazy})
|
||||||
|
pubnub.publish({
|
||||||
|
'channel': crazy,
|
||||||
|
'message': "Hello World",
|
||||||
|
'callback': (lambda x: x)
|
||||||
|
})
|
||||||
|
|
||||||
|
def dumpster(message):
|
||||||
|
test(0, 'never see this')
|
||||||
|
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel': crazy,
|
||||||
|
'connect': done,
|
||||||
|
'callback': dumpster
|
||||||
|
})
|
||||||
|
|
||||||
|
def connected():
|
||||||
|
pubnub.publish({
|
||||||
|
'channel': crazy,
|
||||||
|
'message': {'Info': 'Connected!'}
|
||||||
|
})
|
||||||
|
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel': crazy,
|
||||||
|
'connect': connected,
|
||||||
|
'callback': message_received
|
||||||
|
})
|
||||||
|
|
||||||
|
phase2()
|
||||||
|
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
## Run Tests
|
||||||
|
## -----------------------------------------------------------------------
|
||||||
|
test_pubnub(pubnub_user_supplied_options)
|
||||||
|
test_pubnub(pubnub_high_security)
|
||||||
|
pubnub_high_security.start()
|
|
@ -0,0 +1,27 @@
|
||||||
|
PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
|
||||||
|
Copyright (c) 2013 PubNub Inc.
|
||||||
|
http://www.pubnub.com/
|
||||||
|
http://www.pubnub.com/terms
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
|
||||||
|
PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
|
||||||
|
Copyright (c) 2013 PubNub Inc.
|
||||||
|
http://www.pubnub.com/
|
||||||
|
http://www.pubnub.com/terms
|
|
@ -0,0 +1,400 @@
|
||||||
|
## Contact support@pubnub.com for all questions
|
||||||
|
|
||||||
|
#### [PubNub](http://www.pubnub.com) Real-time Data Network
|
||||||
|
##### Standalone Python Client
|
||||||
|
|
||||||
|
#### Init
|
||||||
|
|
||||||
|
```
|
||||||
|
pubnub = Pubnub(publish_key="demo", subscribe_key="demo", ssl_on=False)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PUBLISH
|
||||||
|
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
message = 'Hello World !!!'
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print pubnub.publish(channel=channel, message=message)
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### SUBSCRIBE
|
||||||
|
|
||||||
|
```
|
||||||
|
# Listen for Messages
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel, callback=callback, error=error,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### SUBSCRIBE to group
|
||||||
|
|
||||||
|
```
|
||||||
|
# Listen for Messages
|
||||||
|
|
||||||
|
channel_group = 'group1'
|
||||||
|
|
||||||
|
def callback(message, channel_group, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe_group(channel_groups=channel_group, callback=callback, error=error,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### SUBSCRIBE Synchronous ( compatible with pre-3.5 )
|
||||||
|
Runs in tight loop if callback return True.
|
||||||
|
Loop ends when callback return False
|
||||||
|
```
|
||||||
|
# Listen for Messages
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
return True
|
||||||
|
|
||||||
|
pubnub.subscribe_sync(channel=channel, callback=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### UNSUBSCRIBE
|
||||||
|
|
||||||
|
```
|
||||||
|
# Listen for Messages
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
pubnub.unsubscribe(channel=channel)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### PRESENCE
|
||||||
|
|
||||||
|
```
|
||||||
|
# Listen for Presence Event Messages
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.presence(channel=channel, callback=callback, error=error)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PRESENCE channel group
|
||||||
|
|
||||||
|
```
|
||||||
|
# Listen for Presence Event Messages
|
||||||
|
|
||||||
|
channel_group = 'group1'
|
||||||
|
|
||||||
|
def callback(message, channel_group, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.presence_group(channel_group=channel_group, callback=callback, error=error)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### HERE_NOW
|
||||||
|
|
||||||
|
```
|
||||||
|
# Get info on who is here right now!
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print pubnub.here_now(channel=channel)
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.here_now(channel=channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### HISTORY
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.history(channel=channel, count=2)
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.history(channel=channel, count=2, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### HISTORY (including timetokens)
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.history(channel, count=2, include_token=True)
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, include_token=True, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### GRANT
|
||||||
|
|
||||||
|
```
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print pubnub.grant(channel=channel, auth_key=authkey, read=True, write=True)
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.grant(channel=channel, auth_key=authkey, read=True, write=True, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### AUDIT
|
||||||
|
|
||||||
|
```
|
||||||
|
channel = "hello_world"
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print pubnub.audit(channel=channel, auth_key=authkey)
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.audit(channel=channel, auth_key=authkey, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### REVOKE
|
||||||
|
|
||||||
|
```
|
||||||
|
channel = "hello_world"
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print pubnub.revoke(channel=channel, auth_key=authkey)
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.revoke(channel=channel, auth_key=authkey, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
### CHANNEL GROUP METHODS
|
||||||
|
|
||||||
|
#### List Groups
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.channel_group_list_groups(namespace='aaa')
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.channel_group_list_groups(namespace='aaa', callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### List Channels
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.channel_group_list_channels(channel_group='dev:abcd')
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.channel_group_list_channels(channel_group='dev:abcd', callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Add Channel
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.channel_group_add_channel(channel_group='dev:abcd', channel="hi")
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.channel_group_add_channel(channel_group='dev:abcd', channel="hi", callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Remove Channel
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.channel_group_remove_channel(channel_group='dev:abcd', channel="hi")
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.channel_group_remove_channel(channel_group='dev:abcd', channel="hi", callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### List Channels
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.channel_group_list_channels(channel_group='dev:abcd')
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.channel_group_add_channel(channel_group='dev:abcd', callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Grant
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.grant(channel_group='dev:abcd', read=True, write=True, manage=True, auth_key="abcd")
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.grant(channel_group='dev:abcd', read=True, write=True, manage=True, auth_key="abcd", callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Revoke
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.revoke(channel_group='dev:abcd', auth_key="abcd")
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.revoke(channel_group='dev:abcd', auth_key="abcd", callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Audit
|
||||||
|
|
||||||
|
```
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.audit(channel_group='dev:abcd')
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.audit(channel_group='dev:abcd', callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Contact support@pubnub.com for all questions
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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'
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.audit(channel, authkey))
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.audit(channel, authkey, callback=callback, error=callback)
|
|
@ -0,0 +1,9 @@
|
||||||
|
sessionname pubnub-console
|
||||||
|
screen -t output tail -f ./pubnub-console.log
|
||||||
|
split
|
||||||
|
focus down
|
||||||
|
screen -t console python console.py "set_output_file"
|
||||||
|
split -v
|
||||||
|
focus down
|
||||||
|
screen -t help vi -R ./console-help.txt
|
||||||
|
focus up
|
|
@ -0,0 +1,8 @@
|
||||||
|
sessionname pubnub-console
|
||||||
|
screen -t help vi -R ./console-help.txt
|
||||||
|
split
|
||||||
|
focus down
|
||||||
|
screen -t output tail -f ./pubnub-console.log
|
||||||
|
split
|
||||||
|
focus down
|
||||||
|
screen -t console python console.py "set_output_file"
|
|
@ -0,0 +1,37 @@
|
||||||
|
********************** HELP ******************************
|
||||||
|
|
||||||
|
TO EXIT :
|
||||||
|
Ctrl-A \ followed by y ( on linux )
|
||||||
|
Ctrl-A Ctrl-\ followed by y ( on mac osx )
|
||||||
|
|
||||||
|
TO MOVE BETWEEN PANES . Ctrl-A TAB
|
||||||
|
|
||||||
|
**********************************************************
|
||||||
|
|
||||||
|
PUBLISH
|
||||||
|
|
||||||
|
Usage: publish [options] arg
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-c CHANNEL, --channel=CHANNEL
|
||||||
|
Channel on which to publish
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
(1) publish -c hello_world hi how r u
|
||||||
|
(2) pub -c hello_world [1,2]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SUBSCRIBE
|
||||||
|
|
||||||
|
Usage: subscribe [options] arg
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
-c CHANNEL, --channel=CHANNEL
|
||||||
|
Channel for subscribe
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
(1) subscribe -c hello_world
|
||||||
|
(2) sub -c hello_world
|
|
@ -0,0 +1,719 @@
|
||||||
|
# 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 atexit
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import pygments
|
||||||
|
import readline
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
|
from cmd2 import Cmd, make_option, options
|
||||||
|
from datetime import datetime
|
||||||
|
from pygments.formatters import TerminalFormatter
|
||||||
|
from pygments.lexers import JsonLexer
|
||||||
|
|
||||||
|
from pubnub import Pubnub
|
||||||
|
|
||||||
|
lexer = JsonLexer()
|
||||||
|
formatter = TerminalFormatter()
|
||||||
|
|
||||||
|
|
||||||
|
def highlight(msg):
|
||||||
|
return pygments.highlight(msg, lexer, formatter)
|
||||||
|
|
||||||
|
|
||||||
|
historyPath = os.path.expanduser("~/.pubnub_console_history")
|
||||||
|
|
||||||
|
|
||||||
|
def save_history(historyPath=historyPath):
|
||||||
|
import readline
|
||||||
|
readline.write_history_file(historyPath)
|
||||||
|
|
||||||
|
|
||||||
|
if os.path.exists(historyPath):
|
||||||
|
readline.read_history_file(historyPath)
|
||||||
|
|
||||||
|
atexit.register(save_history)
|
||||||
|
|
||||||
|
of = sys.stdout
|
||||||
|
|
||||||
|
color = Cmd()
|
||||||
|
|
||||||
|
stop = None
|
||||||
|
|
||||||
|
full_date = False
|
||||||
|
|
||||||
|
|
||||||
|
def stop_2(th):
|
||||||
|
th._Thread__stop()
|
||||||
|
|
||||||
|
|
||||||
|
def stop_3(th):
|
||||||
|
th._stop()
|
||||||
|
|
||||||
|
|
||||||
|
def print_console_2(of, message):
|
||||||
|
print >> of, message
|
||||||
|
|
||||||
|
|
||||||
|
def print_console_3(of, message):
|
||||||
|
of.write(message)
|
||||||
|
of.write("\n")
|
||||||
|
|
||||||
|
|
||||||
|
print_console = None
|
||||||
|
|
||||||
|
if type(sys.version_info) is tuple:
|
||||||
|
print_console = print_console_2
|
||||||
|
stop = stop_2
|
||||||
|
else:
|
||||||
|
if sys.version_info.major == 2:
|
||||||
|
print_console = print_console_2
|
||||||
|
stop = stop_2
|
||||||
|
else:
|
||||||
|
print_console = print_console_3
|
||||||
|
stop = stop_3
|
||||||
|
|
||||||
|
|
||||||
|
def get_date():
|
||||||
|
if full_date is True:
|
||||||
|
return color.colorize(datetime.now().strftime(
|
||||||
|
'%Y-%m-%d %H:%M:%S'), "magenta")
|
||||||
|
else:
|
||||||
|
return color.colorize(datetime.now().strftime(
|
||||||
|
'%H:%M:%S'), "magenta")
|
||||||
|
|
||||||
|
|
||||||
|
def print_ok_normal(msg, channel=None):
|
||||||
|
if msg is None:
|
||||||
|
return
|
||||||
|
chstr = "[" + color.colorize(get_date(), "magenta") + "] "
|
||||||
|
chstr += "[" + color.colorize("Channel : " + channel if channel is not None else "", "cyan") + "] "
|
||||||
|
try:
|
||||||
|
print_console(of, (chstr + color.colorize(str(msg), "green")))
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
print_console(of, (msg))
|
||||||
|
|
||||||
|
of.flush()
|
||||||
|
|
||||||
|
|
||||||
|
def print_error_normal(msg, channel=None):
|
||||||
|
if msg is None:
|
||||||
|
return
|
||||||
|
chstr = "[" + color.colorize(get_date(), "magenta") + "] "
|
||||||
|
chstr += "[" + color.colorize("Channel : " + channel if channel is not None else "", "cyan") + "] "
|
||||||
|
try:
|
||||||
|
print_console(of, (chstr + color.colorize(color.colorize(
|
||||||
|
str(msg), "red"), "bold")))
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
print_console(of, (msg))
|
||||||
|
of.flush()
|
||||||
|
|
||||||
|
|
||||||
|
def print_ok_pretty(msg, channel=None):
|
||||||
|
if msg is None:
|
||||||
|
return
|
||||||
|
chstr = "[" + color.colorize(get_date(), "magenta") + "] "
|
||||||
|
chstr += "[" + color.colorize("Channel : " + channel if channel is not None else "", "cyan") + "] "
|
||||||
|
try:
|
||||||
|
print_console(of, (chstr + highlight(json.dumps(msg, indent=2))))
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
print_console(of, (msg))
|
||||||
|
|
||||||
|
of.flush()
|
||||||
|
|
||||||
|
|
||||||
|
def print_error_pretty(msg, channel=None):
|
||||||
|
if msg is None:
|
||||||
|
return
|
||||||
|
chstr = "[" + color.colorize(get_date(), "magenta") + "] "
|
||||||
|
chstr += "[" + color.colorize("Channel : " + channel if channel is not None else "", "cyan") + "] "
|
||||||
|
try:
|
||||||
|
print_console(of, (chstr + color.colorize(color.colorize(
|
||||||
|
"ERROR: ", "red"), "bold") + highlight(json.dumps(msg, indent=2))))
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
print_console(of, (msg))
|
||||||
|
of.flush()
|
||||||
|
|
||||||
|
|
||||||
|
print_ok = print_ok_pretty
|
||||||
|
print_error = print_error_pretty
|
||||||
|
|
||||||
|
|
||||||
|
class DefaultPubnub(object):
|
||||||
|
def handlerFunctionClosure(self, name):
|
||||||
|
def handlerFunction(*args, **kwargs):
|
||||||
|
print_error("Pubnub not initialized." +
|
||||||
|
"Use init command to initialize")
|
||||||
|
|
||||||
|
return handlerFunction
|
||||||
|
|
||||||
|
def __getattr__(self, name):
|
||||||
|
return self.handlerFunctionClosure(name)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub = DefaultPubnub()
|
||||||
|
|
||||||
|
|
||||||
|
def kill_all_threads():
|
||||||
|
for thread in threading.enumerate():
|
||||||
|
if thread.isAlive():
|
||||||
|
stop(thread)
|
||||||
|
|
||||||
|
|
||||||
|
def get_input(message, t=None):
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
command = raw_input(message)
|
||||||
|
except NameError:
|
||||||
|
command = input(message)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
return None
|
||||||
|
|
||||||
|
command = command.strip()
|
||||||
|
|
||||||
|
if command is None or len(command) == 0:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
if t is not None and t == bool:
|
||||||
|
valid = ["True", "true", "1", 1, "y", "Y", "yes", "Yes", "YES"]
|
||||||
|
if command in valid:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
if t is not None:
|
||||||
|
command = t(command)
|
||||||
|
else:
|
||||||
|
command = eval("'" + command + "'")
|
||||||
|
|
||||||
|
return command
|
||||||
|
except ValueError:
|
||||||
|
print_error("Invalid input : " + command)
|
||||||
|
|
||||||
|
|
||||||
|
def _publish_command_handler(channel, message, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.publish(channel, message,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _subscribe_command_handler(channel):
|
||||||
|
def _callback(r, ch):
|
||||||
|
print_ok(r, ch)
|
||||||
|
|
||||||
|
def _error(r, ch=None):
|
||||||
|
print_error(r, ch if ch is not None else channel)
|
||||||
|
|
||||||
|
def _disconnect(r):
|
||||||
|
print_ok("DISCONNECTED", r)
|
||||||
|
|
||||||
|
def _reconnect(r):
|
||||||
|
print_ok("RECONNECTED", r)
|
||||||
|
|
||||||
|
def _connect(r):
|
||||||
|
print_ok("CONNECTED", r)
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, _callback, _error, connect=_connect,
|
||||||
|
disconnect=_disconnect, reconnect=_reconnect)
|
||||||
|
|
||||||
|
|
||||||
|
def _unsubscribe_command_handler(channels):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
unsub_list = []
|
||||||
|
current_channel_list = pubnub.get_channel_array()
|
||||||
|
|
||||||
|
for channel in channels:
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
if (channel in current_channel_list):
|
||||||
|
unsub_list.append(channel)
|
||||||
|
|
||||||
|
# pubnub.unsubscribe(channel + '-pnpres')
|
||||||
|
# if (channel + '-pnpres' in current_channel_list):
|
||||||
|
# unsub_list.append(channel + ' (Presence)')
|
||||||
|
|
||||||
|
if len(unsub_list) > 0:
|
||||||
|
print_ok('Unsubscribed from : ' + str(unsub_list))
|
||||||
|
else:
|
||||||
|
print_error('Not subscribed to : ' + str(channels))
|
||||||
|
|
||||||
|
|
||||||
|
def _grant_command_handler(channel, auth_key, read, write, ttl, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.grant(channel, auth_key,
|
||||||
|
read, write, ttl,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _revoke_command_handler(channel, auth_key, ttl, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.revoke(channel, auth_key, ttl,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _audit_command_handler(channel, auth_key, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.audit(channel, auth_key,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _history_command_handler(channel, count, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.history(channel, count,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _here_now_command_handler(channel, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.here_now(channel, _callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def get_channel_array():
|
||||||
|
channels = pubnub.get_channel_array()
|
||||||
|
|
||||||
|
for channel in channels:
|
||||||
|
if "-pnpres" in channel:
|
||||||
|
chname = channel.split("-pnpres")[0]
|
||||||
|
if chname not in channels:
|
||||||
|
continue
|
||||||
|
i = channels.index(chname)
|
||||||
|
channels[i] = channels[i] + color.colorize("(P)", "blue")
|
||||||
|
channels.remove(channel)
|
||||||
|
return channels
|
||||||
|
|
||||||
|
|
||||||
|
class DevConsole(Cmd):
|
||||||
|
def __init__(self):
|
||||||
|
Cmd.__init__(self)
|
||||||
|
global pubnub
|
||||||
|
self.intro = "For Help type ? or help . " + \
|
||||||
|
"To quit/exit type exit" + "\n" + \
|
||||||
|
"Commands can also be provided on command line while starting console (in quotes) ex. " + \
|
||||||
|
"pubnub-console 'init -p demo -s demo'"
|
||||||
|
self.default_channel = None
|
||||||
|
self.async = False
|
||||||
|
pubnub = Pubnub("demo", "demo")
|
||||||
|
self.channel_truncation = 3
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
self.publish_key = "demo"
|
||||||
|
self.subscribe_key = "demo"
|
||||||
|
self.origin = "pubsub.pubnub.com"
|
||||||
|
self.auth_key = None
|
||||||
|
self.cipher_key = None
|
||||||
|
self.secret_key = "demo"
|
||||||
|
self.ssl = False
|
||||||
|
self.uuid = None
|
||||||
|
self.disable_pretty = False
|
||||||
|
|
||||||
|
def get_channel_origin(self):
|
||||||
|
cho = ""
|
||||||
|
channels = get_channel_array()
|
||||||
|
sl = self.channel_truncation
|
||||||
|
if len(channels) > int(sl) and int(sl) > 0:
|
||||||
|
cho += ",".join(channels[:int(sl)]) + " " + str(
|
||||||
|
len(channels) - int(sl)) + " more..."
|
||||||
|
else:
|
||||||
|
cho += ",".join(channels)
|
||||||
|
|
||||||
|
if len(channels) > 0:
|
||||||
|
cho = color.colorize(cho, "bold") + "@"
|
||||||
|
|
||||||
|
origin = pubnub.get_origin().split("://")[1]
|
||||||
|
origin += color.colorize(" (SSL)", "green") if pubnub.get_origin(
|
||||||
|
).split("://")[0] == "https" else ""
|
||||||
|
return " [" + cho + color.colorize(origin, "blue") + "] > "
|
||||||
|
|
||||||
|
def get_prompt(self):
|
||||||
|
prompt = "[" + get_date() + "]"
|
||||||
|
|
||||||
|
if self.default_channel is not None and len(self.default_channel) > 0:
|
||||||
|
prompt += " [default channel: " + color.colorize(
|
||||||
|
self.default_channel, "bold") + "]"
|
||||||
|
|
||||||
|
prompt += self.get_channel_origin()
|
||||||
|
return prompt
|
||||||
|
|
||||||
|
def precmd(self, line):
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
return line
|
||||||
|
|
||||||
|
# def emptyline(self):
|
||||||
|
# self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def cmdloop_with_keyboard_interrupt(self):
|
||||||
|
try:
|
||||||
|
self.cmdloop()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
sys.stdout.write('\n')
|
||||||
|
kill_all_threads()
|
||||||
|
|
||||||
|
@options([make_option('-p', '--publish-key', action="store",
|
||||||
|
default=None, help="Publish Key"),
|
||||||
|
make_option('-s', '--subscribe-key', action="store",
|
||||||
|
default=None, help="Subscribe Key"),
|
||||||
|
make_option('-k', '--secret-key', action="store",
|
||||||
|
default=None, help="cipher Key"),
|
||||||
|
make_option('-c', '--cipher-key', action="store",
|
||||||
|
default=None, help="Secret Key"),
|
||||||
|
make_option('-a', '--auth-key', action="store",
|
||||||
|
default=None, help="Auth Key"),
|
||||||
|
make_option('--ssl-on', dest='ssl', action='store_true',
|
||||||
|
default=False, help="SSL Enabled ?"),
|
||||||
|
make_option('-o', '--origin', action="store",
|
||||||
|
default=None, help="Origin"),
|
||||||
|
make_option('-u', '--uuid', action="store",
|
||||||
|
default=None, help="UUID"),
|
||||||
|
make_option('--disable-pretty-print', dest='disable_pretty', action='store_true',
|
||||||
|
default=False, help="Disable Pretty Print ?")
|
||||||
|
])
|
||||||
|
def do_init(self, command, opts):
|
||||||
|
global pubnub
|
||||||
|
global print_ok
|
||||||
|
global print_error
|
||||||
|
global print_ok_normal
|
||||||
|
global print_error_normal
|
||||||
|
global print_error_pretty
|
||||||
|
global print_ok_pretty
|
||||||
|
|
||||||
|
self.publish_key = opts.publish_key if opts.publish_key is not None else self.publish_key
|
||||||
|
self.subscribe_key = opts.subscribe_key if opts.subscribe_key is not None else self.subscribe_key
|
||||||
|
self.secret_key = opts.secret_key if opts.secret_key is not None else self.secret_key
|
||||||
|
self.cipher_key = opts.cipher_key if opts.cipher_key is not None else self.cipher_key
|
||||||
|
self.auth_key = opts.auth_key if opts.auth_key is not None else self.auth_key
|
||||||
|
self.origin = opts.origin if opts.origin is not None else self.origin
|
||||||
|
self.uuid = opts.uuid if opts.uuid is not None else self.uuid
|
||||||
|
self.ssl = opts.ssl if opts.ssl is not None else self.ssl
|
||||||
|
self.disable_pretty = opts.disable_pretty if opts.disable_pretty is not None else self.disable_pretty
|
||||||
|
|
||||||
|
pubnub = Pubnub(self.publish_key,
|
||||||
|
self.subscribe_key,
|
||||||
|
self.secret_key,
|
||||||
|
self.cipher_key,
|
||||||
|
self.auth_key,
|
||||||
|
self.ssl,
|
||||||
|
self.origin,
|
||||||
|
self.uuid)
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
if opts.disable_pretty is True:
|
||||||
|
print_ok = print_ok_normal
|
||||||
|
print_error = print_error_normal
|
||||||
|
else:
|
||||||
|
print_ok = print_ok_pretty
|
||||||
|
print_error = print_error_pretty
|
||||||
|
|
||||||
|
def do_set_sync(self, command):
|
||||||
|
"""unset_async
|
||||||
|
Unset Async mode"""
|
||||||
|
self.async = False
|
||||||
|
|
||||||
|
def do_set_async(self, command):
|
||||||
|
"""set_async
|
||||||
|
Set Async mode"""
|
||||||
|
self.async = True
|
||||||
|
|
||||||
|
@options([make_option('-n', '--count', action="store",
|
||||||
|
default=3, help="Number of channels on prompt")
|
||||||
|
])
|
||||||
|
def do_set_channel_truncation(self, command, opts):
|
||||||
|
"""set_channel_truncation
|
||||||
|
Set Channel Truncation"""
|
||||||
|
|
||||||
|
self.channel_truncation = opts.count
|
||||||
|
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def do_unset_channel_truncation(self, command):
|
||||||
|
"""unset_channel_truncation
|
||||||
|
Unset Channel Truncation"""
|
||||||
|
self.channel_truncation = 0
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def do_set_full_date(self, command):
|
||||||
|
global full_date
|
||||||
|
"""do_set_full_date
|
||||||
|
Set Full Date"""
|
||||||
|
full_date = True
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def do_unset_full_date(self, command):
|
||||||
|
global full_date
|
||||||
|
"""do_unset_full_date
|
||||||
|
Unset Full Date"""
|
||||||
|
full_date = False
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel',
|
||||||
|
action="store", help="Default Channel")
|
||||||
|
])
|
||||||
|
def do_set_default_channel(self, command, opts):
|
||||||
|
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
self.default_channel = opts.channel
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
@options([make_option('-f', '--file', action="store",
|
||||||
|
default="./pubnub-console.log", help="Output file")
|
||||||
|
])
|
||||||
|
def do_set_output_file(self, command, opts):
|
||||||
|
global of
|
||||||
|
try:
|
||||||
|
of = open(opts.file, 'w+')
|
||||||
|
except IOError as e:
|
||||||
|
print_error("Could not set output file. " + e.reason)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel for here now data")
|
||||||
|
])
|
||||||
|
def do_here_now(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
|
||||||
|
_here_now_command_handler(opts.channel, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel for history data"),
|
||||||
|
make_option('-n', '--count', action="store",
|
||||||
|
default=5, help="Number of messages")
|
||||||
|
])
|
||||||
|
def do_get_history(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
|
||||||
|
_history_command_handler(opts.channel, opts.count, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel on which to publish")
|
||||||
|
])
|
||||||
|
def do_publish(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
|
||||||
|
if command is None:
|
||||||
|
print_error("Missing message")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
message = json.loads(str(command))
|
||||||
|
except ValueError:
|
||||||
|
message = str(command)
|
||||||
|
|
||||||
|
_publish_command_handler(opts.channel, message, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel on which to grant"),
|
||||||
|
make_option('-a', '--auth-key', dest="auth_key",
|
||||||
|
action="store",
|
||||||
|
help="Auth Key"),
|
||||||
|
make_option('-r', '--read-enabled', dest='read',
|
||||||
|
action='store_true',
|
||||||
|
default=False, help="Read ?"),
|
||||||
|
make_option('-w', '--write-enabled', dest='write',
|
||||||
|
action='store_true',
|
||||||
|
default=False, help="Write ?"),
|
||||||
|
make_option('-t', '--ttl', action="store",
|
||||||
|
default=5, help="TTL"),
|
||||||
|
make_option('-p', '--presence', action="store_true",
|
||||||
|
dest="presence",
|
||||||
|
default=False, help="Grant on presence channel ?")
|
||||||
|
])
|
||||||
|
def do_grant(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
|
||||||
|
opts.auth_key = pubnub.auth_key \
|
||||||
|
if opts.auth_key is None else opts.auth_key
|
||||||
|
|
||||||
|
_grant_command_handler(opts.channel, opts.auth_key,
|
||||||
|
opts.read, opts.write,
|
||||||
|
opts.ttl, async=self.async)
|
||||||
|
|
||||||
|
if opts.presence is True:
|
||||||
|
_grant_command_handler(opts.channel + '-pnpres', opts.auth_key,
|
||||||
|
opts.read, opts.write,
|
||||||
|
opts.ttl, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel on which to revoke"),
|
||||||
|
make_option('-a', '--auth-key', dest="auth_key", action="store",
|
||||||
|
help="Auth Key"),
|
||||||
|
make_option('-t', '--ttl', action="store",
|
||||||
|
default=5, help="TTL"),
|
||||||
|
make_option('-p', '--presence', action="store_true",
|
||||||
|
dest="presence",
|
||||||
|
default=False, help="Revoke on presence channel ?")
|
||||||
|
])
|
||||||
|
def do_revoke(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
|
||||||
|
opts.auth_key = pubnub.auth_key \
|
||||||
|
if opts.auth_key is None else opts.auth_key
|
||||||
|
|
||||||
|
_revoke_command_handler(
|
||||||
|
opts.channel, opts.auth_key, opts.ttl, async=self.async)
|
||||||
|
|
||||||
|
if opts.presence is True:
|
||||||
|
_revoke_command_handler(
|
||||||
|
opts.channel + '-pnpres', opts.auth_key, opts.ttl, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel on which to revoke"),
|
||||||
|
make_option('-a', '--auth-key', dest="auth_key", action="store",
|
||||||
|
help="Auth Key")
|
||||||
|
])
|
||||||
|
def do_audit(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
|
||||||
|
opts.auth_key = pubnub.auth_key \
|
||||||
|
if opts.auth_key is None else opts.auth_key
|
||||||
|
|
||||||
|
_audit_command_handler(opts.channel, opts.auth_key, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel for unsubscribe"),
|
||||||
|
make_option('-a', '--all', action="store_true", dest="all",
|
||||||
|
default=False, help="Unsubscribe from all channels"),
|
||||||
|
make_option('-p', '--presence', action="store_true",
|
||||||
|
dest="presence",
|
||||||
|
default=False, help="Unsubscribe from presence events ?")
|
||||||
|
])
|
||||||
|
def do_unsubscribe(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
|
||||||
|
if (opts.all is True):
|
||||||
|
opts.channel = []
|
||||||
|
chs = pubnub.get_channel_array()
|
||||||
|
for ch in chs:
|
||||||
|
if '-pnpres' not in ch:
|
||||||
|
opts.channel.append(ch)
|
||||||
|
elif opts.presence is True:
|
||||||
|
opts.channel.append(ch)
|
||||||
|
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
|
||||||
|
if not isinstance(opts.channel, list):
|
||||||
|
ch = []
|
||||||
|
ch.append(opts.channel)
|
||||||
|
opts.channel = ch
|
||||||
|
|
||||||
|
channels = []
|
||||||
|
if opts.presence is True and opts.all is False:
|
||||||
|
for c in opts.channel:
|
||||||
|
if '-pnpres' not in c:
|
||||||
|
channels.append(c + '-pnpres')
|
||||||
|
|
||||||
|
for c in opts.channel:
|
||||||
|
channels.append(c)
|
||||||
|
|
||||||
|
_unsubscribe_command_handler(channels)
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel for subscribe"),
|
||||||
|
make_option('-g', '--get-channel-list', action="store_true",
|
||||||
|
dest="get",
|
||||||
|
default=False, help="Get susbcribed channel list"),
|
||||||
|
make_option('-p', '--presence', action="store_true",
|
||||||
|
dest="presence",
|
||||||
|
default=False, help="Presence events ?")
|
||||||
|
])
|
||||||
|
def do_subscribe(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
if opts is None:
|
||||||
|
print_error("Missing argument")
|
||||||
|
return
|
||||||
|
|
||||||
|
if opts.channel is not None:
|
||||||
|
_subscribe_command_handler(opts.channel)
|
||||||
|
|
||||||
|
if opts.presence is True:
|
||||||
|
_subscribe_command_handler(opts.channel + '-pnpres')
|
||||||
|
|
||||||
|
if opts.get is True:
|
||||||
|
print_ok(get_channel_array())
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def do_exit(self, args):
|
||||||
|
kill_all_threads()
|
||||||
|
return -1
|
||||||
|
|
||||||
|
# def do_EOF(self, args):
|
||||||
|
# kill_all_threads()
|
||||||
|
# return self.do_exit(args)
|
||||||
|
|
||||||
|
# def handler(self, signum, frame):
|
||||||
|
# kill_all_threads()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
app = DevConsole()
|
||||||
|
app.cmdloop_with_keyboard_interrupt()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,52 @@
|
||||||
|
# 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 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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, auth_key="abcd")
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
print(pubnub.revoke(channel_group='dev:abcd', auth_key="abcd"))
|
||||||
|
print(pubnub.audit(channel_group="dev:abcd"))
|
||||||
|
print(pubnub.grant(channel_group='dev:abcd', read=True, write=True, manage=True, auth_key="abcd"))
|
||||||
|
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.revoke(channel_group='dev:abcd', auth_key="abcd", callback=callback, error=callback)
|
||||||
|
pubnub.audit(channel_group="dev:abcd", callback=callback, error=callback)
|
||||||
|
pubnub.grant(channel_group='dev:abcd', read=True, write=True, manage=True, auth_key="abcd", callback=callback, error=callback)
|
||||||
|
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)
|
|
@ -0,0 +1,273 @@
|
||||||
|
# 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/
|
||||||
|
|
||||||
|
from pubnub import Pubnub
|
||||||
|
from optparse import OptionParser
|
||||||
|
from datetime import datetime
|
||||||
|
import threading
|
||||||
|
|
||||||
|
parser = OptionParser()
|
||||||
|
|
||||||
|
parser.add_option("--publish-key",
|
||||||
|
dest="publish_key", default="demo",
|
||||||
|
help="Publish Key ( default : 'demo' )")
|
||||||
|
|
||||||
|
parser.add_option("--subscribe-key",
|
||||||
|
dest="subscribe_key", default="demo",
|
||||||
|
help="Subscribe Key ( default : 'demo' )")
|
||||||
|
|
||||||
|
parser.add_option("--secret-key",
|
||||||
|
dest="secret_key", default="demo",
|
||||||
|
help="Secret Key ( default : 'demo' )")
|
||||||
|
|
||||||
|
parser.add_option("--cipher-key",
|
||||||
|
dest="cipher_key", default="",
|
||||||
|
help="Cipher Key")
|
||||||
|
|
||||||
|
parser.add_option("--auth-key",
|
||||||
|
dest="auth_key", default=None,
|
||||||
|
help="Auth Key")
|
||||||
|
|
||||||
|
parser.add_option("--origin",
|
||||||
|
dest="origin", default="pubsub.pubnub.com",
|
||||||
|
help="Origin ( default: pubsub.pubnub.com )")
|
||||||
|
|
||||||
|
parser.add_option("--ssl-on",
|
||||||
|
action="store_false", dest="ssl", default=False,
|
||||||
|
help="SSL")
|
||||||
|
|
||||||
|
parser.add_option("--uuid",
|
||||||
|
dest="uuid", default=None,
|
||||||
|
help="UUID")
|
||||||
|
|
||||||
|
(options, args) = parser.parse_args()
|
||||||
|
|
||||||
|
print(options)
|
||||||
|
|
||||||
|
pubnub = Pubnub(options.publish_key,
|
||||||
|
options.subscribe_key,
|
||||||
|
options.secret_key,
|
||||||
|
options.cipher_key,
|
||||||
|
options.auth_key,
|
||||||
|
options.ssl,
|
||||||
|
options.origin,
|
||||||
|
options.uuid)
|
||||||
|
|
||||||
|
|
||||||
|
class color(object):
|
||||||
|
PURPLE = '\033[95m'
|
||||||
|
CYAN = '\033[96m'
|
||||||
|
DARKCYAN = '\033[36m'
|
||||||
|
BLUE = '\033[94m'
|
||||||
|
GREEN = '\033[92m'
|
||||||
|
YELLOW = '\033[93m'
|
||||||
|
RED = '\033[91m'
|
||||||
|
BOLD = '\033[1m'
|
||||||
|
UNDERLINE = '\033[4m'
|
||||||
|
END = '\033[0m'
|
||||||
|
|
||||||
|
|
||||||
|
def print_ok(msg, channel=None):
|
||||||
|
chstr = color.PURPLE + "[" + datetime.now().strftime(
|
||||||
|
'%Y-%m-%d %H:%M:%S') + "] " + color.END
|
||||||
|
chstr += color.CYAN + "[Channel : " + channel + \
|
||||||
|
"] " if channel is not None else "" + color.END
|
||||||
|
try:
|
||||||
|
print(chstr + color.GREEN + str(msg) + color.END)
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
print(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def print_error(msg, channel=None):
|
||||||
|
chstr = color.PURPLE + "[" + datetime.now().strftime(
|
||||||
|
'%Y-%m-%d %H:%M:%S') + "] " + color.END
|
||||||
|
chstr += color.CYAN + "[Channel : " + channel + \
|
||||||
|
"] " if channel is not None else "" + color.END
|
||||||
|
try:
|
||||||
|
print(chstr + color.RED + color.BOLD + str(msg) + color.END)
|
||||||
|
except UnicodeEncodeError:
|
||||||
|
print(msg)
|
||||||
|
|
||||||
|
|
||||||
|
def kill_all_threads():
|
||||||
|
for thread in threading.enumerate():
|
||||||
|
if thread.isAlive():
|
||||||
|
thread._Thread__stop()
|
||||||
|
|
||||||
|
|
||||||
|
def get_input(message, t=None):
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
command = raw_input(message)
|
||||||
|
except NameError:
|
||||||
|
command = input(message)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
return None
|
||||||
|
|
||||||
|
command = command.strip()
|
||||||
|
|
||||||
|
if command is None or len(command) == 0:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
if t is not None and t == bool:
|
||||||
|
valid = ["True", "true", "1", 1, "y", "Y", "yes", "Yes", "YES"]
|
||||||
|
if command in valid:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
if t is not None:
|
||||||
|
command = t(command)
|
||||||
|
else:
|
||||||
|
command = eval("'" + command + "'")
|
||||||
|
|
||||||
|
return command
|
||||||
|
except ValueError:
|
||||||
|
print_error("Invalid input : " + command)
|
||||||
|
|
||||||
|
|
||||||
|
def _publish_command_handler():
|
||||||
|
|
||||||
|
channel = get_input("[PUBLISH] Enter Channel Name ", str)
|
||||||
|
if channel is None:
|
||||||
|
return
|
||||||
|
while True:
|
||||||
|
message = get_input("[PUBLISH] Enter Message \
|
||||||
|
( QUIT or CTRL-C for exit from publish mode ) ")
|
||||||
|
if message == 'QUIT' or message == 'quit' or message is None:
|
||||||
|
return
|
||||||
|
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
pubnub.publish(channel, message, _callback, _error)
|
||||||
|
|
||||||
|
|
||||||
|
def _subscribe_command_handler():
|
||||||
|
channel = get_input("[SUBSCRIBE] Enter Channel Name ", str)
|
||||||
|
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r, channel)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r, channel)
|
||||||
|
pubnub.subscribe(channel, _callback, _error)
|
||||||
|
|
||||||
|
|
||||||
|
def _unsubscribe_command_handler():
|
||||||
|
channel = get_input("[UNSUBSCRIBE] Enter Channel Name ", str)
|
||||||
|
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
|
||||||
|
|
||||||
|
def _grant_command_handler():
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
channel = get_input("[GRANT] Enter Channel Name ", str)
|
||||||
|
auth_key = get_input("[GRANT] Enter Auth Key ", str)
|
||||||
|
ttl = get_input("[GRANT] Enter ttl ", int)
|
||||||
|
read = get_input("[GRANT] Read ? ", bool)
|
||||||
|
write = get_input("[GRANT] Write ? ", bool)
|
||||||
|
pubnub.grant(channel, auth_key, read, write, ttl, _callback)
|
||||||
|
|
||||||
|
|
||||||
|
def _revoke_command_handler():
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
channel = get_input("[REVOKE] Enter Channel Name ", str)
|
||||||
|
auth_key = get_input("[REVOKE] Enter Auth Key ", str)
|
||||||
|
ttl = get_input("[REVOKE] Enter ttl ", int)
|
||||||
|
|
||||||
|
pubnub.revoke(channel, auth_key, ttl, _callback)
|
||||||
|
|
||||||
|
|
||||||
|
def _audit_command_handler():
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
channel = get_input("[AUDIT] Enter Channel Name ", str)
|
||||||
|
auth_key = get_input("[AUDIT] Enter Auth Key ", str)
|
||||||
|
pubnub.audit(channel, auth_key, _callback)
|
||||||
|
|
||||||
|
|
||||||
|
def _history_command_handler():
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
channel = get_input("[HISTORY] Enter Channel Name ", str)
|
||||||
|
count = get_input("[HISTORY] Enter Count ", int)
|
||||||
|
|
||||||
|
pubnub.history(channel, count, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
def _here_now_command_handler():
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
channel = get_input("[HERE NOW] Enter Channel Name ", str)
|
||||||
|
|
||||||
|
pubnub.here_now(channel, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
commands = []
|
||||||
|
commands.append({"command": "publish", "handler": _publish_command_handler})
|
||||||
|
commands.append(
|
||||||
|
{"command": "subscribe", "handler": _subscribe_command_handler})
|
||||||
|
commands.append(
|
||||||
|
{"command": "unsubscribe", "handler": _unsubscribe_command_handler})
|
||||||
|
commands.append(
|
||||||
|
{"command": "here_now", "handler": _here_now_command_handler})
|
||||||
|
commands.append({"command": "history", "handler": _history_command_handler})
|
||||||
|
commands.append({"command": "grant", "handler": _grant_command_handler})
|
||||||
|
commands.append({"command": "revoke", "handler": _revoke_command_handler})
|
||||||
|
commands.append({"command": "audit", "handler": _audit_command_handler})
|
||||||
|
|
||||||
|
# last command is quit. add new commands before this line
|
||||||
|
commands.append({"command": "QUIT"})
|
||||||
|
|
||||||
|
|
||||||
|
def get_help():
|
||||||
|
help = ""
|
||||||
|
help += "Channels currently subscribed to : "
|
||||||
|
help += str(pubnub.get_channel_array())
|
||||||
|
help += "\n"
|
||||||
|
for i, v in enumerate(commands):
|
||||||
|
help += "Enter " + str(i) + " for " + v['command'] + "\n"
|
||||||
|
return help
|
||||||
|
|
||||||
|
|
||||||
|
while True:
|
||||||
|
command = get_input(color.BLUE + get_help(), int)
|
||||||
|
if command == len(commands) - 1 or command is None:
|
||||||
|
kill_all_threads()
|
||||||
|
break
|
||||||
|
if command >= len(commands):
|
||||||
|
print_error("Invalid input " + str(command))
|
||||||
|
continue
|
||||||
|
|
||||||
|
commands[command]['handler']()
|
||||||
|
|
||||||
|
# pubnub.start()
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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'
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.grant(channel, authkey, True, True))
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.grant(channel, authkey, True, True, callback=callback, error=callback)
|
|
@ -0,0 +1,106 @@
|
||||||
|
# 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 gevent.monkey
|
||||||
|
import random
|
||||||
|
import sys
|
||||||
|
from datetime import datetime
|
||||||
|
from pubnub import Pubnub as Pubnub
|
||||||
|
|
||||||
|
gevent.monkey.patch_all()
|
||||||
|
|
||||||
|
# from pubnub import PubnubTornado as Pubnub
|
||||||
|
# from pubnub import PubnubTwisted as Pubnub
|
||||||
|
|
||||||
|
publish_key = len(sys.argv) > 1 and sys.argv[1] or 'ds'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'ds'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'ds'
|
||||||
|
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, uuid="test-" + str(random.random()))
|
||||||
|
|
||||||
|
|
||||||
|
def x(url):
|
||||||
|
print(url)
|
||||||
|
|
||||||
|
|
||||||
|
# pubnub.set_http_debug(x)
|
||||||
|
|
||||||
|
channel = 'ab,cd,ef'
|
||||||
|
channel_group = "abg,cdg"
|
||||||
|
|
||||||
|
|
||||||
|
def set_heartbeat(*argv):
|
||||||
|
print("Change Heartbeat to ", argv[0])
|
||||||
|
pubnub.set_heartbeat(argv[0], argv[1], argv[2])
|
||||||
|
|
||||||
|
|
||||||
|
def set_heartbeat_interval(*argv):
|
||||||
|
pubnub.set_heartbeat_interval(argv[0])
|
||||||
|
|
||||||
|
|
||||||
|
# pubnub.timeout(0, set_heartbeat, 8)
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.channel_group_add_channel("abg", "abcd")
|
||||||
|
pubnub.channel_group_add_channel("cdg", "efgh")
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
pubnub.subscribe_group(channel_groups=channel_group, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
|
||||||
|
def cb(resp):
|
||||||
|
print(datetime.now().strftime('%H:%M:%S'), resp)
|
||||||
|
|
||||||
|
|
||||||
|
def err(resp):
|
||||||
|
print(datetime.now().strftime('%H:%M:%S'), resp)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.timeout(5, set_heartbeat, 120, cb, err)
|
||||||
|
pubnub.timeout(90, set_heartbeat, 60, cb, err)
|
||||||
|
pubnub.timeout(180, set_heartbeat, 30, cb, err)
|
||||||
|
pubnub.timeout(240, set_heartbeat, 15, cb, err)
|
||||||
|
pubnub.timeout(300, set_heartbeat, 8, cb, err)
|
||||||
|
# pubnub.timeout(360, pubnub.stop_heartbeat)
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
import time
|
||||||
|
while True:
|
||||||
|
time.sleep(10)
|
||||||
|
'''
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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'
|
||||||
|
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.here_now(channel))
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.here_now(channel, callback=callback, error=callback)
|
|
@ -0,0 +1,47 @@
|
||||||
|
# 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 = 'a'
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print(pubnub.history(channel, count=2))
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, callback=callback, error=callback)
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print(pubnub.history(channel, count=2, include_token=True))
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, include_token=True, callback=callback, error=callback)
|
|
@ -0,0 +1,126 @@
|
||||||
|
from gevent.monkey import patch_all
|
||||||
|
from pubnub import Pubnub
|
||||||
|
import random
|
||||||
|
import json
|
||||||
|
|
||||||
|
patch_all()
|
||||||
|
|
||||||
|
rand = str(random.randint(1, 99999999))
|
||||||
|
|
||||||
|
|
||||||
|
def get_unique(s):
|
||||||
|
return 'str-' + rand + '-' + s
|
||||||
|
|
||||||
|
|
||||||
|
# public channel
|
||||||
|
# This is the channel all clients announce themselves on -- or more generally speaking, a channel you expect the client
|
||||||
|
# to "check-in" on to announce his state
|
||||||
|
|
||||||
|
# channel_public = get_unique("channel_public")
|
||||||
|
channel_public = "channel_public"
|
||||||
|
|
||||||
|
# server auth key
|
||||||
|
# Only the server has/knows about this auth token. It will be used to grant read on the "check-in" Presence channel
|
||||||
|
|
||||||
|
# server_auth_token = get_unique("server_auth_token")
|
||||||
|
server_auth_token = "server_auth_token"
|
||||||
|
|
||||||
|
# client auth key
|
||||||
|
# only clients will use this authey -- it does not provide presence channel read access
|
||||||
|
|
||||||
|
# client_auth_token = get_unique("client_auth_token")
|
||||||
|
client_auth_token = "client_auth_token"
|
||||||
|
|
||||||
|
# each client must have a unique id -- a UUID, for presence information/state to bind to
|
||||||
|
|
||||||
|
# client uuid
|
||||||
|
client_uuid = get_unique("client_uuid")
|
||||||
|
|
||||||
|
# server uuid
|
||||||
|
server_uuid = get_unique("server_uuid")
|
||||||
|
|
||||||
|
# For the demo, we'll implement a SERVER called server, who is the authoritative 'admin' entity in the system
|
||||||
|
# We'll also implement a CLIENT called client, who is an arbitrary hardware device member of the network
|
||||||
|
|
||||||
|
# Please swap out the default 'pam' demo keys with your own PAM-enabled keys
|
||||||
|
|
||||||
|
# init server object
|
||||||
|
server = Pubnub(publish_key="pam", subscribe_key="pam", secret_key="pam", auth_key=server_auth_token, uuid=server_uuid)
|
||||||
|
|
||||||
|
# init client object
|
||||||
|
client = Pubnub(publish_key="pam", subscribe_key="pam", auth_key=client_auth_token, uuid=client_uuid)
|
||||||
|
|
||||||
|
# To access a Presence channel with PAM, its format is CHANNELNAME-pnpres
|
||||||
|
|
||||||
|
# Grant permission to server auth keys
|
||||||
|
# grant r/w to public, and r/w public Presence (public-pnpres)
|
||||||
|
|
||||||
|
print(server.grant(channel=channel_public, auth_key=server_auth_token, read=True, write=True))
|
||||||
|
print(server.grant(channel=channel_public + '-pnpres', auth_key=server_auth_token, read=True, write=True))
|
||||||
|
|
||||||
|
# Grant permission to client auth keys
|
||||||
|
# grant r/w to public, and w-only access to public Presence (public-pnpres)
|
||||||
|
print(server.grant(channel=channel_public, auth_key=client_auth_token, read=True, write=False))
|
||||||
|
print(server.grant(channel=channel_public + '-pnpres', auth_key=client_auth_token, read=False, write=False))
|
||||||
|
|
||||||
|
|
||||||
|
# Now, we'll run it to watch it work as advertised...
|
||||||
|
|
||||||
|
# Define some simple callabcks for the Server and Client
|
||||||
|
|
||||||
|
def _server_message_callback(message, channel):
|
||||||
|
print("Server heard: " + json.dumps(message))
|
||||||
|
|
||||||
|
|
||||||
|
def _client_message_callback(message, channel):
|
||||||
|
print("Client heard: " + json.dumps(message))
|
||||||
|
|
||||||
|
|
||||||
|
def _client_error_callback(error, channel):
|
||||||
|
print("Client Error: " + error + " on channel " + channel)
|
||||||
|
print("TTL on grant expired, or token was invalid, or revoked."
|
||||||
|
" Client will now unsubscribe from this unauthorized channel.")
|
||||||
|
client.unsubscribe(channel=channel)
|
||||||
|
|
||||||
|
|
||||||
|
def _server_error_callback(error, channel):
|
||||||
|
print("Server Error: " + error + " on channel " + channel)
|
||||||
|
print("TTL on grant expired, or token was revoked. Server will now unsubscribe from this unauthorized channel.")
|
||||||
|
server.unsubscribe(channel=channel)
|
||||||
|
|
||||||
|
|
||||||
|
def _server_presence_callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
if 'action' in message:
|
||||||
|
if message['action'] == 'join' and message['uuid'] == client_uuid:
|
||||||
|
print("Server can see that client with UUID " + message['uuid'] + " has a state of " + json.dumps(
|
||||||
|
message['data']))
|
||||||
|
|
||||||
|
|
||||||
|
def _client_presence_callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
if 'action' in message:
|
||||||
|
if message['action'] == 'join' and message['uuid'] == client_uuid:
|
||||||
|
print("Client can see that client with UUID " + message['uuid'] + " has a state of " + json.dumps(
|
||||||
|
message['data']))
|
||||||
|
|
||||||
|
|
||||||
|
# server subscribes to public channel
|
||||||
|
server.subscribe(channels=channel_public, callback=_server_message_callback, error=_server_error_callback)
|
||||||
|
|
||||||
|
# server subscribes to presence events on public channel
|
||||||
|
# presence() is a convienence method that subscribes to channel-pnpres with special logic for handling
|
||||||
|
# presence-event formatted messages
|
||||||
|
|
||||||
|
# uncomment out to see server able to read on presence channel
|
||||||
|
server.presence(channel=channel_public, callback=_server_presence_callback, error=_server_error_callback)
|
||||||
|
|
||||||
|
# now if the client tried to subscribe on the presence channel, and therefore, get state info
|
||||||
|
# he is explicitly denied!
|
||||||
|
|
||||||
|
# uncomment out to see client not able to read on presence channel
|
||||||
|
client.presence(channel=channel_public, callback=_client_presence_callback, error=_client_error_callback)
|
||||||
|
|
||||||
|
# client subscribes to public channel
|
||||||
|
client.subscribe(channels=channel_public, state={"myKey": get_unique("foo")}, callback=_client_message_callback,
|
||||||
|
error=_client_error_callback)
|
|
@ -0,0 +1,32 @@
|
||||||
|
# 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, daemon=False)
|
||||||
|
|
||||||
|
channel = 'b'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.presence(channel, callback=callback)
|
|
@ -0,0 +1,36 @@
|
||||||
|
# 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, pooling=False)
|
||||||
|
channel = 'hello_world'
|
||||||
|
message = 'Hello World !!!'
|
||||||
|
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.publish(channel, message))
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=callback, error=callback)
|
|
@ -0,0 +1,724 @@
|
||||||
|
## 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
|
||||||
|
import threading
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from cmd2 import Cmd, make_option, options, Cmd2TestCase
|
||||||
|
import optparse
|
||||||
|
import json
|
||||||
|
|
||||||
|
import atexit
|
||||||
|
import os
|
||||||
|
import readline
|
||||||
|
import rlcompleter
|
||||||
|
|
||||||
|
import pygments
|
||||||
|
from pygments.lexers import JsonLexer
|
||||||
|
from pygments.formatters import TerminalFormatter
|
||||||
|
|
||||||
|
lexer = JsonLexer()
|
||||||
|
formatter = TerminalFormatter()
|
||||||
|
def highlight(msg):
|
||||||
|
return pygments.highlight(msg, lexer, formatter)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
historyPath = os.path.expanduser("~/.pubnub_console_history")
|
||||||
|
|
||||||
|
|
||||||
|
def save_history(historyPath=historyPath):
|
||||||
|
import readline
|
||||||
|
readline.write_history_file(historyPath)
|
||||||
|
|
||||||
|
if os.path.exists(historyPath):
|
||||||
|
readline.read_history_file(historyPath)
|
||||||
|
|
||||||
|
atexit.register(save_history)
|
||||||
|
|
||||||
|
of = sys.stdout
|
||||||
|
|
||||||
|
color = Cmd()
|
||||||
|
|
||||||
|
stop = None
|
||||||
|
|
||||||
|
full_date = False
|
||||||
|
|
||||||
|
|
||||||
|
def stop_2(th):
|
||||||
|
th._Thread__stop()
|
||||||
|
|
||||||
|
|
||||||
|
def stop_3(th):
|
||||||
|
th._stop()
|
||||||
|
|
||||||
|
|
||||||
|
def print_console_2(of, message):
|
||||||
|
print >>of, message
|
||||||
|
|
||||||
|
|
||||||
|
def print_console_3(of, message):
|
||||||
|
of.write(message)
|
||||||
|
of.write("\n")
|
||||||
|
|
||||||
|
print_console = None
|
||||||
|
|
||||||
|
if type(sys.version_info) is tuple:
|
||||||
|
print_console = print_console_2
|
||||||
|
stop = stop_2
|
||||||
|
else:
|
||||||
|
if sys.version_info.major == 2:
|
||||||
|
print_console = print_console_2
|
||||||
|
stop = stop_2
|
||||||
|
else:
|
||||||
|
print_console = print_console_3
|
||||||
|
stop = stop_3
|
||||||
|
|
||||||
|
|
||||||
|
def get_date():
|
||||||
|
if full_date is True:
|
||||||
|
return color.colorize(datetime.now().strftime(
|
||||||
|
'%Y-%m-%d %H:%M:%S'), "magenta")
|
||||||
|
else:
|
||||||
|
return color.colorize(datetime.now().strftime(
|
||||||
|
'%H:%M:%S'), "magenta")
|
||||||
|
|
||||||
|
def print_ok_normal(msg, channel=None):
|
||||||
|
if msg is None:
|
||||||
|
return
|
||||||
|
chstr = "[" + color.colorize(get_date(), "magenta") + "] "
|
||||||
|
chstr += "[" + color.colorize("Channel : " + channel if channel is not None else "", "cyan") + "] "
|
||||||
|
try:
|
||||||
|
print_console(of, (chstr + color.colorize(str(msg), "green")))
|
||||||
|
except UnicodeEncodeError as e:
|
||||||
|
print_console(of, (msg))
|
||||||
|
|
||||||
|
of.flush()
|
||||||
|
|
||||||
|
|
||||||
|
def print_error_normal(msg, channel=None):
|
||||||
|
if msg is None:
|
||||||
|
return
|
||||||
|
chstr = "[" + color.colorize(get_date(), "magenta") + "] "
|
||||||
|
chstr += "[" + color.colorize("Channel : " + channel if channel is not None else "", "cyan") + "] "
|
||||||
|
try:
|
||||||
|
print_console(of, (chstr + color.colorize(color.colorize(
|
||||||
|
str(msg), "red"), "bold")))
|
||||||
|
except UnicodeEncodeError as e:
|
||||||
|
print_console(of, (msg))
|
||||||
|
of.flush()
|
||||||
|
|
||||||
|
def print_ok_pretty(msg, channel=None):
|
||||||
|
if msg is None:
|
||||||
|
return
|
||||||
|
chstr = "[" + color.colorize(get_date(), "magenta") + "] "
|
||||||
|
chstr += "[" + color.colorize("Channel : " + channel if channel is not None else "", "cyan") + "] "
|
||||||
|
try:
|
||||||
|
print_console(of, (chstr + highlight(json.dumps(msg, indent=2))))
|
||||||
|
except UnicodeEncodeError as e:
|
||||||
|
print_console(of, (msg))
|
||||||
|
|
||||||
|
of.flush()
|
||||||
|
|
||||||
|
|
||||||
|
def print_error_pretty(msg, channel=None):
|
||||||
|
if msg is None:
|
||||||
|
return
|
||||||
|
chstr = "[" + color.colorize(get_date(), "magenta") + "] "
|
||||||
|
chstr += "[" + color.colorize("Channel : " + channel if channel is not None else "", "cyan") + "] "
|
||||||
|
try:
|
||||||
|
print_console(of, (chstr + color.colorize(color.colorize(
|
||||||
|
"ERROR: ", "red"), "bold") +
|
||||||
|
highlight(json.dumps(msg, indent=2))))
|
||||||
|
except UnicodeEncodeError as e:
|
||||||
|
print_console(of, (msg))
|
||||||
|
of.flush()
|
||||||
|
|
||||||
|
print_ok = print_ok_pretty
|
||||||
|
print_error = print_error_pretty
|
||||||
|
|
||||||
|
|
||||||
|
class DefaultPubnub(object):
|
||||||
|
def handlerFunctionClosure(self, name):
|
||||||
|
def handlerFunction(*args, **kwargs):
|
||||||
|
print_error("Pubnub not initialized." +
|
||||||
|
"Use init command to initialize")
|
||||||
|
return handlerFunction
|
||||||
|
|
||||||
|
def __getattr__(self, name):
|
||||||
|
return self.handlerFunctionClosure(name)
|
||||||
|
|
||||||
|
pubnub = DefaultPubnub()
|
||||||
|
|
||||||
|
|
||||||
|
def kill_all_threads():
|
||||||
|
for thread in threading.enumerate():
|
||||||
|
if thread.isAlive():
|
||||||
|
stop(thread)
|
||||||
|
|
||||||
|
|
||||||
|
def get_input(message, t=None):
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
command = raw_input(message)
|
||||||
|
except NameError:
|
||||||
|
command = input(message)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
return None
|
||||||
|
|
||||||
|
command = command.strip()
|
||||||
|
|
||||||
|
if command is None or len(command) == 0:
|
||||||
|
raise ValueError
|
||||||
|
|
||||||
|
if t is not None and t == bool:
|
||||||
|
valid = ["True", "true", "1", 1, "y", "Y", "yes", "Yes", "YES"]
|
||||||
|
if command in valid:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
if t is not None:
|
||||||
|
command = t(command)
|
||||||
|
else:
|
||||||
|
command = eval("'" + command + "'")
|
||||||
|
|
||||||
|
return command
|
||||||
|
except ValueError:
|
||||||
|
print_error("Invalid input : " + command)
|
||||||
|
|
||||||
|
|
||||||
|
def _publish_command_handler(channel, message, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
print_ok(pubnub.publish(channel, message,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _subscribe_command_handler(channel):
|
||||||
|
|
||||||
|
def _callback(r, ch):
|
||||||
|
print_ok(r, ch)
|
||||||
|
|
||||||
|
def _error(r, ch=None):
|
||||||
|
print_error(r, ch if ch is not None else channel)
|
||||||
|
|
||||||
|
def _disconnect(r):
|
||||||
|
print_ok("DISCONNECTED", r)
|
||||||
|
|
||||||
|
def _reconnect(r):
|
||||||
|
print_ok("RECONNECTED", r)
|
||||||
|
|
||||||
|
def _connect(r):
|
||||||
|
print_ok("CONNECTED", r)
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, _callback, _error, connect=_connect,
|
||||||
|
disconnect=_disconnect, reconnect=_reconnect)
|
||||||
|
|
||||||
|
|
||||||
|
def _unsubscribe_command_handler(channels):
|
||||||
|
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
unsub_list = []
|
||||||
|
current_channel_list = pubnub.get_channel_array()
|
||||||
|
|
||||||
|
for channel in channels:
|
||||||
|
pubnub.unsubscribe(channel)
|
||||||
|
if (channel in current_channel_list):
|
||||||
|
unsub_list.append(channel)
|
||||||
|
|
||||||
|
#pubnub.unsubscribe(channel + '-pnpres')
|
||||||
|
#if (channel + '-pnpres' in current_channel_list):
|
||||||
|
# unsub_list.append(channel + ' (Presence)')
|
||||||
|
|
||||||
|
if len(unsub_list) > 0:
|
||||||
|
print_ok('Unsubscribed from : ' + str(unsub_list))
|
||||||
|
else:
|
||||||
|
print_error('Not subscribed to : ' + str(channels))
|
||||||
|
|
||||||
|
|
||||||
|
def _grant_command_handler(channel, auth_key, read, write, ttl, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.grant(channel, auth_key,
|
||||||
|
read, write, ttl,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _revoke_command_handler(channel, auth_key, ttl, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.revoke(channel, auth_key, ttl,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _audit_command_handler(channel, auth_key, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.audit(channel, auth_key,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _history_command_handler(channel, count, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.history(channel, count,
|
||||||
|
_callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def _here_now_command_handler(channel, async=False):
|
||||||
|
def _callback(r):
|
||||||
|
print_ok(r)
|
||||||
|
|
||||||
|
def _error(r):
|
||||||
|
print_error(r)
|
||||||
|
|
||||||
|
print_ok(pubnub.here_now(channel, _callback if async is True else None,
|
||||||
|
_error if async is True else None))
|
||||||
|
|
||||||
|
|
||||||
|
def kill_all_threads():
|
||||||
|
for thread in threading.enumerate():
|
||||||
|
if thread.isAlive():
|
||||||
|
stop(thread)
|
||||||
|
|
||||||
|
|
||||||
|
def get_channel_array():
|
||||||
|
channels = pubnub.get_channel_array()
|
||||||
|
|
||||||
|
for channel in channels:
|
||||||
|
if "-pnpres" in channel:
|
||||||
|
chname = channel.split("-pnpres")[0]
|
||||||
|
if chname not in channels:
|
||||||
|
continue
|
||||||
|
i = channels.index(chname)
|
||||||
|
channels[i] = channels[i] + color.colorize("(P)", "blue")
|
||||||
|
channels.remove(channel)
|
||||||
|
return channels
|
||||||
|
|
||||||
|
|
||||||
|
class DevConsole(Cmd):
|
||||||
|
def __init__(self):
|
||||||
|
Cmd.__init__(self)
|
||||||
|
global pubnub
|
||||||
|
self.intro = "For Help type ? or help . " + \
|
||||||
|
"To quit/exit type exit" + "\n" + \
|
||||||
|
"Commands can also be provided on command line while starting console (in quotes) ex. " + \
|
||||||
|
"pubnub-console 'init -p demo -s demo'"
|
||||||
|
self.default_channel = None
|
||||||
|
self.async = False
|
||||||
|
pubnub = Pubnub("demo", "demo")
|
||||||
|
self.channel_truncation = 3
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
self.publish_key = "demo"
|
||||||
|
self.subscribe_key = "demo"
|
||||||
|
self.origin = "pubsub.pubnub.com"
|
||||||
|
self.auth_key = None
|
||||||
|
self.cipher_key = None
|
||||||
|
self.secret_key = "demo"
|
||||||
|
self.ssl = False
|
||||||
|
self.uuid = None
|
||||||
|
self.disable_pretty = False
|
||||||
|
|
||||||
|
def get_channel_origin(self):
|
||||||
|
cho = ""
|
||||||
|
channels = get_channel_array()
|
||||||
|
channels_str = ",".join(channels)
|
||||||
|
sl = self.channel_truncation
|
||||||
|
if len(channels) > int(sl) and int(sl) > 0:
|
||||||
|
cho += ",".join(channels[:int(sl)]) + " " + str(
|
||||||
|
len(channels) - int(sl)) + " more..."
|
||||||
|
else:
|
||||||
|
cho += ",".join(channels)
|
||||||
|
|
||||||
|
if len(channels) > 0:
|
||||||
|
cho = color.colorize(cho, "bold") + "@"
|
||||||
|
|
||||||
|
origin = pubnub.get_origin().split("://")[1]
|
||||||
|
origin += color.colorize(" (SSL)", "green") if pubnub.get_origin(
|
||||||
|
).split("://")[0] == "https" else ""
|
||||||
|
return " [" + cho + color.colorize(origin, "blue") + "] > "
|
||||||
|
|
||||||
|
def get_prompt(self):
|
||||||
|
prompt = "[" + get_date() + "]"
|
||||||
|
|
||||||
|
if self.default_channel is not None and len(self.default_channel) > 0:
|
||||||
|
prompt += " [default channel: " + color.colorize(
|
||||||
|
self.default_channel, "bold") + "]"
|
||||||
|
|
||||||
|
prompt += self.get_channel_origin()
|
||||||
|
return prompt
|
||||||
|
|
||||||
|
def precmd(self, line):
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
return line
|
||||||
|
|
||||||
|
#def emptyline(self):
|
||||||
|
# self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def cmdloop_with_keyboard_interrupt(self):
|
||||||
|
try:
|
||||||
|
self.cmdloop()
|
||||||
|
except KeyboardInterrupt as e:
|
||||||
|
pass
|
||||||
|
sys.stdout.write('\n')
|
||||||
|
kill_all_threads()
|
||||||
|
|
||||||
|
@options([make_option('-p', '--publish-key', action="store",
|
||||||
|
default=None, help="Publish Key"),
|
||||||
|
make_option('-s', '--subscribe-key', action="store",
|
||||||
|
default=None, help="Subscribe Key"),
|
||||||
|
make_option('-k', '--secret-key', action="store",
|
||||||
|
default=None, help="cipher Key"),
|
||||||
|
make_option('-c', '--cipher-key', action="store",
|
||||||
|
default=None, help="Secret Key"),
|
||||||
|
make_option('-a', '--auth-key', action="store",
|
||||||
|
default=None, help="Auth Key"),
|
||||||
|
make_option('--ssl-on', dest='ssl', action='store_true',
|
||||||
|
default=False, help="SSL Enabled ?"),
|
||||||
|
make_option('-o', '--origin', action="store",
|
||||||
|
default=None, help="Origin"),
|
||||||
|
make_option('-u', '--uuid', action="store",
|
||||||
|
default=None, help="UUID"),
|
||||||
|
make_option('--disable-pretty-print', dest='disable_pretty', action='store_true',
|
||||||
|
default=False, help="Disable Pretty Print ?")
|
||||||
|
])
|
||||||
|
def do_init(self, command, opts):
|
||||||
|
global pubnub
|
||||||
|
global print_ok
|
||||||
|
global print_error
|
||||||
|
global print_ok_normal
|
||||||
|
global print_error_normal
|
||||||
|
global print_error_pretty
|
||||||
|
global print_ok_pretty
|
||||||
|
|
||||||
|
self.publish_key = opts.publish_key if opts.publish_key is not None else self.publish_key
|
||||||
|
self.subscribe_key = opts.subscribe_key if opts.subscribe_key is not None else self.subscribe_key
|
||||||
|
self.secret_key = opts.secret_key if opts.secret_key is not None else self.secret_key
|
||||||
|
self.cipher_key = opts.cipher_key if opts.cipher_key is not None else self.cipher_key
|
||||||
|
self.auth_key = opts.auth_key if opts.auth_key is not None else self.auth_key
|
||||||
|
self.origin = opts.origin if opts.origin is not None else self.origin
|
||||||
|
self.uuid = opts.uuid if opts.uuid is not None else self.uuid
|
||||||
|
self.ssl = opts.ssl if opts.ssl is not None else self.ssl
|
||||||
|
self.disable_pretty = opts.disable_pretty if opts.disable_pretty is not None else self.disable_pretty
|
||||||
|
|
||||||
|
pubnub = Pubnub(self.publish_key,
|
||||||
|
self.subscribe_key,
|
||||||
|
self.secret_key,
|
||||||
|
self.cipher_key,
|
||||||
|
self.auth_key,
|
||||||
|
self.ssl,
|
||||||
|
self.origin,
|
||||||
|
self.uuid)
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
if opts.disable_pretty is True:
|
||||||
|
print_ok = print_ok_normal
|
||||||
|
print_error = print_error_normal
|
||||||
|
else:
|
||||||
|
print_ok = print_ok_pretty
|
||||||
|
print_error = print_error_pretty
|
||||||
|
|
||||||
|
def do_set_sync(self, command):
|
||||||
|
"""unset_async
|
||||||
|
Unset Async mode"""
|
||||||
|
self.async = False
|
||||||
|
|
||||||
|
def do_set_async(self, command):
|
||||||
|
"""set_async
|
||||||
|
Set Async mode"""
|
||||||
|
self.async = True
|
||||||
|
|
||||||
|
@options([make_option('-n', '--count', action="store",
|
||||||
|
default=3, help="Number of channels on prompt")
|
||||||
|
])
|
||||||
|
def do_set_channel_truncation(self, command, opts):
|
||||||
|
"""set_channel_truncation
|
||||||
|
Set Channel Truncation"""
|
||||||
|
|
||||||
|
self.channel_truncation = opts.count
|
||||||
|
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def do_unset_channel_truncation(self, command):
|
||||||
|
"""unset_channel_truncation
|
||||||
|
Unset Channel Truncation"""
|
||||||
|
self.channel_truncation = 0
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def do_set_full_date(self, command):
|
||||||
|
global full_date
|
||||||
|
"""do_set_full_date
|
||||||
|
Set Full Date"""
|
||||||
|
full_date = True
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def do_unset_full_date(self, command):
|
||||||
|
global full_date
|
||||||
|
"""do_unset_full_date
|
||||||
|
Unset Full Date"""
|
||||||
|
full_date = False
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel',
|
||||||
|
action="store", help="Default Channel")
|
||||||
|
])
|
||||||
|
def do_set_default_channel(self, command, opts):
|
||||||
|
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
self.default_channel = opts.channel
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
@options([make_option('-f', '--file', action="store",
|
||||||
|
default="./pubnub-console.log", help="Output file")
|
||||||
|
])
|
||||||
|
def do_set_output_file(self, command, opts):
|
||||||
|
global of
|
||||||
|
try:
|
||||||
|
of = file(opts.file, 'w+')
|
||||||
|
except IOError as e:
|
||||||
|
print_error("Could not set output file. " + e.reason)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel for here now data")
|
||||||
|
])
|
||||||
|
def do_here_now(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
|
||||||
|
_here_now_command_handler(opts.channel, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel for history data"),
|
||||||
|
make_option('-n', '--count', action="store",
|
||||||
|
default=5, help="Number of messages")
|
||||||
|
])
|
||||||
|
def do_get_history(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
|
||||||
|
_history_command_handler(opts.channel, opts.count, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel on which to publish")
|
||||||
|
])
|
||||||
|
def do_publish(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
|
||||||
|
if command is None:
|
||||||
|
print_error("Missing message")
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
message = json.loads(str(command))
|
||||||
|
except ValueError as ve:
|
||||||
|
message = str(command)
|
||||||
|
|
||||||
|
_publish_command_handler(opts.channel, message, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel on which to grant"),
|
||||||
|
make_option('-a', '--auth-key', dest="auth_key",
|
||||||
|
action="store",
|
||||||
|
help="Auth Key"),
|
||||||
|
make_option('-r', '--read-enabled', dest='read',
|
||||||
|
action='store_true',
|
||||||
|
default=False, help="Read ?"),
|
||||||
|
make_option('-w', '--write-enabled', dest='write',
|
||||||
|
action='store_true',
|
||||||
|
default=False, help="Write ?"),
|
||||||
|
make_option('-t', '--ttl', action="store",
|
||||||
|
default=5, help="TTL"),
|
||||||
|
make_option('-p', '--presence', action="store_true",
|
||||||
|
dest="presence",
|
||||||
|
default=False, help="Grant on presence channel ?")
|
||||||
|
])
|
||||||
|
def do_grant(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
|
||||||
|
opts.auth_key = pubnub.auth_key \
|
||||||
|
if opts.auth_key is None else opts.auth_key
|
||||||
|
|
||||||
|
_grant_command_handler(opts.channel, opts.auth_key,
|
||||||
|
opts.read, opts.write,
|
||||||
|
opts.ttl, async=self.async)
|
||||||
|
|
||||||
|
if opts.presence is True:
|
||||||
|
_grant_command_handler(opts.channel + '-pnpres', opts.auth_key,
|
||||||
|
opts.read, opts.write,
|
||||||
|
opts.ttl, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel on which to revoke"),
|
||||||
|
make_option('-a', '--auth-key', dest="auth_key", action="store",
|
||||||
|
help="Auth Key"),
|
||||||
|
make_option('-t', '--ttl', action="store",
|
||||||
|
default=5, help="TTL"),
|
||||||
|
make_option('-p', '--presence', action="store_true",
|
||||||
|
dest="presence",
|
||||||
|
default=False, help="Revoke on presence channel ?")
|
||||||
|
])
|
||||||
|
def do_revoke(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
|
||||||
|
opts.auth_key = pubnub.auth_key \
|
||||||
|
if opts.auth_key is None else opts.auth_key
|
||||||
|
|
||||||
|
_revoke_command_handler(
|
||||||
|
opts.channel, opts.auth_key, opts.ttl, async=self.async)
|
||||||
|
|
||||||
|
if opts.presence is True:
|
||||||
|
_revoke_command_handler(
|
||||||
|
opts.channel + '-pnpres', opts.auth_key,
|
||||||
|
opts.ttl, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel on which to revoke"),
|
||||||
|
make_option('-a', '--auth-key', dest="auth_key", action="store",
|
||||||
|
help="Auth Key")
|
||||||
|
])
|
||||||
|
def do_audit(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
|
||||||
|
opts.auth_key = pubnub.auth_key \
|
||||||
|
if opts.auth_key is None else opts.auth_key
|
||||||
|
|
||||||
|
_audit_command_handler(opts.channel, opts.auth_key, async=self.async)
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel for unsubscribe"),
|
||||||
|
make_option('-a', '--all', action="store_true", dest="all",
|
||||||
|
default=False, help="Unsubscribe from all channels"),
|
||||||
|
make_option('-p', '--presence', action="store_true",
|
||||||
|
dest="presence",
|
||||||
|
default=False, help="Unsubscribe from presence events ?")
|
||||||
|
])
|
||||||
|
def do_unsubscribe(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
|
||||||
|
if (opts.all is True):
|
||||||
|
opts.channel = []
|
||||||
|
chs = pubnub.get_channel_array()
|
||||||
|
for ch in chs:
|
||||||
|
if '-pnpres' not in ch:
|
||||||
|
opts.channel.append(ch)
|
||||||
|
elif opts.presence is True:
|
||||||
|
opts.channel.append(ch)
|
||||||
|
|
||||||
|
if opts.channel is None:
|
||||||
|
print_error("Missing channel")
|
||||||
|
return
|
||||||
|
|
||||||
|
if not isinstance(opts.channel, list):
|
||||||
|
ch = []
|
||||||
|
ch.append(opts.channel)
|
||||||
|
opts.channel = ch
|
||||||
|
|
||||||
|
channels = []
|
||||||
|
if opts.presence is True and opts.all is False:
|
||||||
|
for c in opts.channel:
|
||||||
|
if '-pnpres' not in c:
|
||||||
|
channels.append(c + '-pnpres')
|
||||||
|
|
||||||
|
for c in opts.channel:
|
||||||
|
channels.append(c)
|
||||||
|
|
||||||
|
_unsubscribe_command_handler(channels)
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
@options([make_option('-c', '--channel', action="store",
|
||||||
|
help="Channel for subscribe"),
|
||||||
|
make_option('-g', '--get-channel-list', action="store_true",
|
||||||
|
dest="get",
|
||||||
|
default=False, help="Get susbcribed channel list"),
|
||||||
|
make_option('-p', '--presence', action="store_true",
|
||||||
|
dest="presence",
|
||||||
|
default=False, help="Presence events ?")
|
||||||
|
])
|
||||||
|
def do_subscribe(self, command, opts):
|
||||||
|
opts.channel = self.default_channel \
|
||||||
|
if opts.channel is None else opts.channel
|
||||||
|
if opts is None:
|
||||||
|
print_error("Missing argument")
|
||||||
|
return
|
||||||
|
|
||||||
|
if opts.channel is not None:
|
||||||
|
_subscribe_command_handler(opts.channel)
|
||||||
|
|
||||||
|
if opts.presence is True:
|
||||||
|
_subscribe_command_handler(opts.channel + '-pnpres')
|
||||||
|
|
||||||
|
if opts.get is True:
|
||||||
|
print_ok(get_channel_array())
|
||||||
|
self.prompt = self.get_prompt()
|
||||||
|
|
||||||
|
def do_exit(self, args):
|
||||||
|
kill_all_threads()
|
||||||
|
return -1
|
||||||
|
|
||||||
|
#def do_EOF(self, args):
|
||||||
|
# kill_all_threads()
|
||||||
|
# return self.do_exit(args)
|
||||||
|
|
||||||
|
#def handler(self, signum, frame):
|
||||||
|
# kill_all_threads()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
app = DevConsole()
|
||||||
|
app.cmdloop_with_keyboard_interrupt()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,27 @@
|
||||||
|
from setuptools import setup
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name='pubnub-console',
|
||||||
|
version='3.5.2',
|
||||||
|
description='PubNub Developer Console',
|
||||||
|
author='Stephen Blum',
|
||||||
|
author_email='support@pubnub.com',
|
||||||
|
url='http://pubnub.com',
|
||||||
|
scripts=['pubnub-console'],
|
||||||
|
license='MIT',
|
||||||
|
classifiers=(
|
||||||
|
'Development Status :: 5 - Production/Stable',
|
||||||
|
'Intended Audience :: Developers',
|
||||||
|
'Programming Language :: Python',
|
||||||
|
'License :: OSI Approved :: MIT License',
|
||||||
|
'Operating System :: OS Independent',
|
||||||
|
'Topic :: Internet :: WWW/HTTP',
|
||||||
|
'Topic :: Software Development :: Libraries :: Python Modules',
|
||||||
|
),
|
||||||
|
install_requires=[
|
||||||
|
'pubnub>=3.5.2',
|
||||||
|
'cmd2>=0.6.7',
|
||||||
|
'pygments >= 1.6'
|
||||||
|
],
|
||||||
|
zip_safe=False,
|
||||||
|
)
|
|
@ -0,0 +1,3 @@
|
||||||
|
pycrypto==2.6.1
|
||||||
|
cmd2==0.6.7
|
||||||
|
requests==2.2.1
|
|
@ -0,0 +1,35 @@
|
||||||
|
# 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 'pam'
|
||||||
|
subscribe_key = len(sys.argv) > 2 and sys.argv[2] or 'pam'
|
||||||
|
secret_key = len(sys.argv) > 3 and sys.argv[3] or 'pam'
|
||||||
|
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'
|
||||||
|
authkey = "abcd"
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.revoke(channel, authkey))
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.revoke(channel, authkey, callback=callback, error=callback)
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
BASEDIR=.
|
||||||
|
|
||||||
|
if [ ! -d "$BASEDIR/ve" ]; then
|
||||||
|
virtualenv -q $BASEDIR/ve --no-site-packages
|
||||||
|
$BASEDIR/ve/bin/activate
|
||||||
|
echo "Virtualenv created."
|
||||||
|
fi
|
||||||
|
|
||||||
|
chmod 755 $BASEDIR/ve/bin/activate
|
||||||
|
$BASEDIR/ve/bin/activate
|
||||||
|
|
||||||
|
if [ ! -f "$BASEDIR/ve/updated" -o $BASEDIR/requirements.pip -nt $BASEDIR/ve/updated ]; then
|
||||||
|
pip install -r $BASEDIR/requirements.pip -E $BASEDIR/ve
|
||||||
|
touch $BASEDIR/ve/updated
|
||||||
|
echo "Requirements installed."
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ! type "screen" > /dev/null; then
|
||||||
|
echo "[ERROR] Screen is not installed. Please install screen to use this utility ."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
rm ./pubnub-console.log
|
||||||
|
touch ./pubnub-console.log
|
||||||
|
export PYTHONPATH=../..
|
||||||
|
screen -X -S pubnub-console quit 2>&1 > /dev/null
|
||||||
|
OS="`uname`"
|
||||||
|
case $OS in
|
||||||
|
[dD]'arwin')
|
||||||
|
screen -c config_osx
|
||||||
|
;;
|
||||||
|
*) screen -c config ;;
|
||||||
|
esac
|
|
@ -0,0 +1,123 @@
|
||||||
|
# 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
|
||||||
|
import time
|
||||||
|
from gevent import monkey
|
||||||
|
from pubnub import Pubnub
|
||||||
|
|
||||||
|
monkey.patch_all()
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
def log(a):
|
||||||
|
print(a)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.set_http_debug(log)
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.state(channel='abcd', uuid='33c72389-1110-4312-9444-4dd24ade1d57', state={'a': 'b'}))
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.state(channel='abcd', uuid='33c72389-1110-4312-9444-4dd24ade1d57', state={'a': 'b'}, callback=callback,
|
||||||
|
error=callback)
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.state(channel='abcd', uuid='33c72389-1110-4312-9444-4dd24ade1d57'))
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.state(channel='abcd', uuid='33c72389-1110-4312-9444-4dd24ade1d57', callback=callback, error=callback)
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.state(channel='abcd'))
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.state(channel='abcd', callback=callback, error=callback)
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.state(channel='abcd', state={'a': 'b'}))
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.state(channel='abcd', state={'a': 'b'}, callback=callback, error=callback)
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.state(channel='abcd'))
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.state(channel='abcd', callback=callback, error=callback)
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.state(channel='abcd'))
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.state(channel='abcd', callback=callback, error=callback)
|
|
@ -0,0 +1,53 @@
|
||||||
|
# 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
|
||||||
|
import time
|
||||||
|
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, daemon=True)
|
||||||
|
|
||||||
|
channel = 'a'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
time.sleep(10)
|
|
@ -0,0 +1,69 @@
|
||||||
|
# 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 as 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 'abcd'
|
||||||
|
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 = 'ab'
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback_abc(message, channel, real_channel):
|
||||||
|
print(str(message) + ' , ' + channel + ', ' + real_channel)
|
||||||
|
pubnub.unsubscribe_group(channel_group='abc')
|
||||||
|
# pubnub.stop()
|
||||||
|
|
||||||
|
|
||||||
|
def callback_d(message, channel):
|
||||||
|
print(str(message) + ' , ' + channel)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect_abc(message):
|
||||||
|
print("CONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect_d(message):
|
||||||
|
print("CONNECTED " + str(message))
|
||||||
|
pubnub.unsubscribe(channel='d')
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
print(pubnub.channel_group_add_channel(channel_group='abc', channel="b"))
|
||||||
|
|
||||||
|
pubnub.subscribe_group(channel_groups='abc', callback=callback_abc, error=error,
|
||||||
|
connect=connect_abc, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels='d', callback=callback_d, error=error,
|
||||||
|
connect=connect_d, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
|
||||||
|
pubnub.start()
|
|
@ -0,0 +1,38 @@
|
||||||
|
# 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 gevent import monkey
|
||||||
|
from pubnub import Pubnub
|
||||||
|
|
||||||
|
monkey.patch_all()
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print(pubnub.where_now(uuid='33c72389-1110-4312-9444-4dd24ade1d57'))
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.where_now(uuid='33c72389-1110-4312-9444-4dd24ade1d57', callback=callback, error=callback)
|
|
@ -0,0 +1,96 @@
|
||||||
|
from gevent import monkey
|
||||||
|
from pubnub import Pubnub
|
||||||
|
|
||||||
|
monkey.patch_all()
|
||||||
|
|
||||||
|
|
||||||
|
pubnub = Pubnub(publish_key="ds", subscribe_key="ds",
|
||||||
|
secret_key="ds", ssl_on=False)
|
||||||
|
|
||||||
|
|
||||||
|
# Wildcard Subscribe without presence
|
||||||
|
|
||||||
|
def a():
|
||||||
|
channel_wc = "a.*"
|
||||||
|
channel = "a.b"
|
||||||
|
|
||||||
|
def callback(message1, channel1, real_channel=None):
|
||||||
|
print(channel1 + " : " + real_channel + " : " + str(message1))
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
def connect(channel1=None):
|
||||||
|
print("Connect on " + channel1)
|
||||||
|
print(pubnub.publish(channel=channel, message="a"))
|
||||||
|
|
||||||
|
def disconnect(channel1=None):
|
||||||
|
print("Disconnect on " + channel1)
|
||||||
|
|
||||||
|
def reconnect(channel1=None):
|
||||||
|
print("Reconnect on " + channel1)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel_wc, callback=callback, error=callback,
|
||||||
|
connect=connect, disconnect=disconnect, reconnect=reconnect)
|
||||||
|
|
||||||
|
|
||||||
|
# Wildcard Subscribe with presence
|
||||||
|
|
||||||
|
def b():
|
||||||
|
channel_wc = "b.*"
|
||||||
|
channel = "b.c"
|
||||||
|
|
||||||
|
def callback(message1, channel1, real_channel=None):
|
||||||
|
print(channel1 + " : " + real_channel + " : " + str(message1))
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
def presence(message1, channel1, real_channel=None):
|
||||||
|
print(channel1 + " : " + real_channel + " : " + str(message1))
|
||||||
|
|
||||||
|
def connect(channel1=None):
|
||||||
|
print("Connect on " + channel1)
|
||||||
|
print(pubnub.publish(channel=channel, message="b"))
|
||||||
|
|
||||||
|
def disconnect(channel1=None):
|
||||||
|
print("Disconnect on " + channel1)
|
||||||
|
|
||||||
|
def reconnect(channel1=None):
|
||||||
|
print("Reconnect on " + channel1)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel_wc, callback=callback, error=callback,
|
||||||
|
connect=connect, disconnect=disconnect, reconnect=reconnect, presence=presence)
|
||||||
|
|
||||||
|
|
||||||
|
# Wildcard Subscribe and unsubscribe
|
||||||
|
|
||||||
|
def c():
|
||||||
|
channel_wc = "c.*"
|
||||||
|
channel = "c.d"
|
||||||
|
|
||||||
|
def callback(message1, channel1, real_channel=None):
|
||||||
|
print(channel1 + " : " + real_channel + " : " + str(message1))
|
||||||
|
pubnub.unsubscribe(channel="c.*")
|
||||||
|
print(pubnub.publish(channel=channel, message="c1"))
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
def connect(channel1=None):
|
||||||
|
print("Connect on " + channel1)
|
||||||
|
print(pubnub.publish(channel=channel, message="c"))
|
||||||
|
|
||||||
|
def disconnect(channel1=None):
|
||||||
|
print("Disconnect on " + channel1)
|
||||||
|
|
||||||
|
def reconnect(channel1=None):
|
||||||
|
print("Reconnect on " + channel1)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel_wc, callback=callback, error=callback,
|
||||||
|
connect=connect, disconnect=disconnect, reconnect=reconnect)
|
||||||
|
|
||||||
|
|
||||||
|
a()
|
||||||
|
b()
|
||||||
|
c()
|
|
@ -0,0 +1,205 @@
|
||||||
|
## Contact support@pubnub.com for all questions
|
||||||
|
|
||||||
|
#### [PubNub](http://www.pubnub.com) Real-time Data Network
|
||||||
|
##### Standalone Python Migration
|
||||||
|
|
||||||
|
#### Init
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
pubnub = Pubnub(
|
||||||
|
"demo", ## PUBLISH_KEY
|
||||||
|
"demo", ## SUBSCRIBE_KEY
|
||||||
|
False ## SSL_ON?
|
||||||
|
)
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
pubnub = Pubnub(publish_key="demo", subscribe_key="demo", ssl_on=False)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PUBLISH
|
||||||
|
|
||||||
|
```
|
||||||
|
channel = 'hello_world'
|
||||||
|
message = 'Hello World !!!'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
info = pubnub.publish({
|
||||||
|
'channel' : channel,
|
||||||
|
'message' : message
|
||||||
|
})
|
||||||
|
print(info)
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print pubnub.publish(channel='hello_world', message='Hello World !!!')
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.publish(channel, message, callback=callback, error=callback)
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### SUBSCRIBE
|
||||||
|
Pre 3.5.x, subscribe was blocking and would only be terminated via a false return from the callback. In our latest version of the SDK, subscribe is asyncronous, and because of this, usage is a bit different, but the experience is more like our other async SDKs.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Listen for Messages
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
# Listen for Messages *BLOCKING*
|
||||||
|
def receive(message) :
|
||||||
|
print(message)
|
||||||
|
return True
|
||||||
|
|
||||||
|
pubnub.subscribe({
|
||||||
|
'channel' : channel,
|
||||||
|
'callback' : receive
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
def connect(message):
|
||||||
|
print("CONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def reconnect(message):
|
||||||
|
print("RECONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
def disconnect(message):
|
||||||
|
print("DISCONNECTED")
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.subscribe(channel, callback=callback, error=callback,
|
||||||
|
connect=connect, reconnect=reconnect, disconnect=disconnect)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Unsubscribe
|
||||||
|
Once subscribed, you can easily, gracefully, unsubscribe:
|
||||||
|
|
||||||
|
```
|
||||||
|
# Pre 3.5:
|
||||||
|
#
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
pubnub.unsubscribe(channel='hello_world')
|
||||||
|
```
|
||||||
|
|
||||||
|
#### PRESENCE
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
def pres_event(message) :
|
||||||
|
print(message)
|
||||||
|
return True
|
||||||
|
|
||||||
|
pubnub.presence({
|
||||||
|
'channel' : channel,
|
||||||
|
'callback' : receive
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
# Listen for Presence Event Messages
|
||||||
|
|
||||||
|
def callback(message, channel):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pubnub.presence(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### HERE_NOW
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
# Get info on who is here right now!
|
||||||
|
|
||||||
|
here_now = pubnub.here_now({
|
||||||
|
'channel' : 'hello_world',
|
||||||
|
})
|
||||||
|
|
||||||
|
print(here_now['occupancy'])
|
||||||
|
print(here_now['uuids'])
|
||||||
|
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
# Get info on who is here right now!
|
||||||
|
|
||||||
|
channel = 'hello_world'
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
print pubnub.here_now(channel)
|
||||||
|
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.here_now(channel, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### HISTORY
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
# Pre 3.5:
|
||||||
|
# Load Previously Published Messages
|
||||||
|
history = pubnub.detailedHistory({
|
||||||
|
'channel' : 'my_channel',
|
||||||
|
'end' : my_end_time_token, # Optional
|
||||||
|
'start' : my_start_time_token, # Optional
|
||||||
|
'count' : num_of_msgs_to_return # Optional, default is 100
|
||||||
|
})
|
||||||
|
print(history)
|
||||||
|
|
||||||
|
# New in 3.5+
|
||||||
|
|
||||||
|
# Synchronous usage
|
||||||
|
|
||||||
|
print pubnub.history(channel, count=2)
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
|
||||||
|
|
||||||
|
def callback(message):
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
pubnub.history(channel, count=2, callback=callback, error=callback)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Contact support@pubnub.com for all questions
|
|
@ -0,0 +1,96 @@
|
||||||
|
from pubnub import Pubnub
|
||||||
|
import random
|
||||||
|
|
||||||
|
pubnub = Pubnub("demo", "demo")
|
||||||
|
pubnub.set_u(True)
|
||||||
|
|
||||||
|
|
||||||
|
def rand_str(s):
|
||||||
|
return str(s) + '-' + str(random.randint(1, 100000000000))
|
||||||
|
|
||||||
|
|
||||||
|
def test_1():
|
||||||
|
channel = rand_str('channel')
|
||||||
|
channel2 = rand_str('channel')
|
||||||
|
channel_group = rand_str('group')
|
||||||
|
channel_group2 = rand_str('group')
|
||||||
|
namespace = rand_str('ns')
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_add_channel(channel_group=namespace + ':' + channel_group, channel=channel)
|
||||||
|
assert resp['status'] == 200
|
||||||
|
assert resp['message'] == 'OK'
|
||||||
|
assert resp['error'] == False
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_add_channel(channel_group=namespace + ':' + channel_group, channel=channel2)
|
||||||
|
assert resp['status'] == 200
|
||||||
|
assert resp['message'] == 'OK'
|
||||||
|
assert resp['error'] == False
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_add_channel(channel_group=namespace + ':' + channel_group2, channel=channel)
|
||||||
|
assert resp['status'] == 200
|
||||||
|
assert resp['message'] == 'OK'
|
||||||
|
assert resp['error'] == False
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_add_channel(channel_group=namespace + ':' + channel_group2, channel=channel2)
|
||||||
|
assert resp['status'] == 200
|
||||||
|
assert resp['message'] == 'OK'
|
||||||
|
assert resp['error'] == False
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_list_channels(channel_group=namespace + ':' + channel_group)
|
||||||
|
assert channel in resp['payload']['channels']
|
||||||
|
assert channel2 in resp['payload']['channels']
|
||||||
|
assert len(resp['payload']['channels']) == 2
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_remove_channel(channel_group=namespace + ':' + channel_group, channel=channel2)
|
||||||
|
print(resp)
|
||||||
|
assert resp['status'] == 200
|
||||||
|
assert resp['message'] == 'OK'
|
||||||
|
assert resp['error'] == False
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_list_channels(channel_group=namespace + ':' + channel_group)
|
||||||
|
print(resp)
|
||||||
|
assert channel in resp['payload']['channels']
|
||||||
|
assert len(resp['payload']['channels']) == 1
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_list_channels(channel_group=namespace + ':' + channel_group2)
|
||||||
|
assert channel in resp['payload']['channels']
|
||||||
|
assert channel2 in resp['payload']['channels']
|
||||||
|
assert len(resp['payload']['channels']) == 2
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_remove_channel(channel_group=namespace + ':' + channel_group2, channel=channel2)
|
||||||
|
print(resp)
|
||||||
|
assert resp['status'] == 200
|
||||||
|
assert resp['message'] == 'OK'
|
||||||
|
assert resp['error'] == False
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_list_channels(channel_group=namespace + ':' + channel_group2)
|
||||||
|
print(resp)
|
||||||
|
assert channel in resp['payload']['channels']
|
||||||
|
assert len(resp['payload']['channels']) == 1
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_list_groups(namespace=namespace)
|
||||||
|
assert channel_group in resp['payload']['groups']
|
||||||
|
assert channel_group2 in resp['payload']['groups']
|
||||||
|
assert len(resp['payload']['groups']) == 2
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_remove_group(channel_group=namespace + ':' + channel_group2)
|
||||||
|
print(resp)
|
||||||
|
assert resp['status'] == 200
|
||||||
|
assert resp['message'] == 'OK'
|
||||||
|
assert resp['error'] == False
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_list_groups(namespace=namespace)
|
||||||
|
assert channel_group in resp['payload']['groups']
|
||||||
|
assert len(resp['payload']['groups']) == 1
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_list_namespaces()
|
||||||
|
assert namespace in resp['payload']['namespaces']
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_remove_namespace(namespace=namespace)
|
||||||
|
print(resp)
|
||||||
|
assert resp['status'] == 200
|
||||||
|
assert resp['message'] == 'OK'
|
||||||
|
assert resp['error'] == False
|
||||||
|
|
||||||
|
resp = pubnub.channel_group_list_namespaces()
|
||||||
|
assert namespace not in resp['payload']['namespaces']
|
|
@ -0,0 +1,90 @@
|
||||||
|
from pubnub import Pubnub
|
||||||
|
import time
|
||||||
|
|
||||||
|
subkey = "sub-c-9aeec0d4-cdf4-11e5-bcee-0619f8945a4f"
|
||||||
|
pubkey = "pub-c-b3fdf8fc-4516-4ab2-8836-6fb22ba7870d"
|
||||||
|
secretkey = "sec-c-ZDQwNTUwMDctZDViYi00MzhlLTg2NTctYjViZDcwNTA5Zjhj"
|
||||||
|
pubnub = Pubnub(pubkey, subkey)
|
||||||
|
pubnub_pam = Pubnub(pubkey, subkey, secretkey)
|
||||||
|
pam_timeout = 10
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read true, write true, on channel ( Sync Mode )
|
||||||
|
def test_1():
|
||||||
|
resp = pubnub_pam.grant(channel="abcd", auth_key="abcd", read=True,
|
||||||
|
write=True, ttl=1)
|
||||||
|
print(resp)
|
||||||
|
assert resp['message'] == 'Success'
|
||||||
|
assert resp['payload'] == {
|
||||||
|
'auths': {'abcd': {'r': 1, 'w': 1, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read false, write false, on channel ( Sync Mode )
|
||||||
|
def test_2():
|
||||||
|
resp = pubnub_pam.grant(channel="abcd", auth_key="abcd", read=False,
|
||||||
|
write=False, ttl=1)
|
||||||
|
assert resp['message'] == 'Success'
|
||||||
|
assert resp['payload'] == {
|
||||||
|
'auths': {'abcd': {'r': 0, 'w': 0, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read True, write false, on channel ( Sync Mode )
|
||||||
|
def test_3():
|
||||||
|
resp = pubnub_pam.grant(channel="abcd", auth_key="abcd", read=True,
|
||||||
|
write=False, ttl=1)
|
||||||
|
assert resp['message'] == 'Success'
|
||||||
|
assert resp['payload'] == {
|
||||||
|
'auths': {'abcd': {'r': 1, 'w': 0, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write True, on channel ( Sync Mode )
|
||||||
|
def test_4():
|
||||||
|
resp = pubnub_pam.grant(channel="abcd", auth_key="abcd", read=True,
|
||||||
|
write=False, ttl=1)
|
||||||
|
assert resp['message'] == 'Success'
|
||||||
|
assert resp['payload'] == {
|
||||||
|
'auths': {'abcd': {'r': 1, 'w': 0, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Grant permission read False, write True, on channel ( Sync Mode ), TTL 10
|
||||||
|
def test_5():
|
||||||
|
resp = pubnub_pam.grant(channel="abcd", auth_key="abcd", read=True,
|
||||||
|
write=False, ttl=10)
|
||||||
|
assert resp['message'] == 'Success'
|
||||||
|
assert resp['payload'] == {
|
||||||
|
'auths': {'abcd': {'r': 1, 'w': 0, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': 'abcd', 'ttl': 10
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Complete flow , try publish on forbidden channel, grant permission to
|
||||||
|
# auth key and try again. ( Sync Mode)
|
||||||
|
def test_8():
|
||||||
|
channel = "test_8-" + str(time.time())
|
||||||
|
message = "Hello World"
|
||||||
|
auth_key = "auth-" + channel
|
||||||
|
pubnub.set_auth_key(auth_key)
|
||||||
|
resp = pubnub_pam.grant(channel=channel, read=True, write=True,
|
||||||
|
auth_key=auth_key, ttl=10)
|
||||||
|
assert resp == {
|
||||||
|
'message': 'Success',
|
||||||
|
'payload': {'auths': {auth_key: {'r': 1, 'w': 1, 'm': 0}},
|
||||||
|
'subscribe_key': subkey,
|
||||||
|
'level': 'user', 'channel': channel, 'ttl': 10}
|
||||||
|
}
|
||||||
|
time.sleep(pam_timeout)
|
||||||
|
resp = pubnub.publish(channel=channel, message=message)
|
||||||
|
assert resp[0] == 1
|
|
@ -0,0 +1,65 @@
|
||||||
|
from pubnub import Pubnub
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
from nose.tools import with_setup
|
||||||
|
|
||||||
|
|
||||||
|
pubnub = Pubnub("ds", "ds")
|
||||||
|
pubnub_enc = Pubnub(publish_key="ds", subscribe_key="ds", cipher_key="enigma")
|
||||||
|
pubnub_pam = Pubnub(publish_key="pam", subscribe_key="pam", secret_key="pam")
|
||||||
|
|
||||||
|
|
||||||
|
def rand(msg):
|
||||||
|
return "rand-" + str(random.random()) + "-" + msg
|
||||||
|
|
||||||
|
channel = rand("channel")
|
||||||
|
channel_enc = rand("channel_enc")
|
||||||
|
channel_pam = rand("channel_pam")
|
||||||
|
|
||||||
|
messages = []
|
||||||
|
|
||||||
|
|
||||||
|
def setup_func():
|
||||||
|
pubnub_pam.grant(channel=channel_pam, read=True, write=True, ttl=144000)
|
||||||
|
|
||||||
|
for i in range(0, 20):
|
||||||
|
msg = rand("message-" + str(i))
|
||||||
|
messages.append(msg)
|
||||||
|
print(pubnub.publish(channel=channel, message=msg))
|
||||||
|
# Fails with Python 3
|
||||||
|
# print(pubnub_enc.publish(channel=channel_enc, message=msg))
|
||||||
|
print(pubnub_pam.publish(channel=channel_pam, message=msg))
|
||||||
|
|
||||||
|
|
||||||
|
@with_setup(setup_func)
|
||||||
|
def test_1():
|
||||||
|
time.sleep(3)
|
||||||
|
hresp = pubnub.history(channel=channel, count=20)
|
||||||
|
# Fails with Python 3
|
||||||
|
# hresp2 = pubnub_enc.history(channel=channel_enc, count=20)
|
||||||
|
hresp3 = pubnub_pam.history(channel=channel_pam, count=20)
|
||||||
|
hresp4 = pubnub_pam.history(channel=channel_pam + "no_rw", count=20)
|
||||||
|
assert hresp[0] == messages
|
||||||
|
# Fails with Python 3
|
||||||
|
# assert hresp2[0] == messages
|
||||||
|
assert hresp3[0] == messages
|
||||||
|
assert hresp4['message'] == 'Forbidden'
|
||||||
|
assert channel_pam + "no_rw" in hresp4['payload']['channels']
|
||||||
|
|
||||||
|
|
||||||
|
def test_2():
|
||||||
|
time.sleep(3)
|
||||||
|
hresp = pubnub.history(channel=channel, count=20, include_token=True)
|
||||||
|
# Fails with Python 3
|
||||||
|
# hresp2 = pubnub_enc.history(channel=channel_enc, count=20, include_token=True)
|
||||||
|
hresp3 = pubnub_pam.history(channel=channel_pam, count=20, include_token=True)
|
||||||
|
hresp4 = pubnub_pam.history(channel=channel_pam + "no_rw", count=20, include_token=True)
|
||||||
|
assert len(hresp[0]) == len(messages)
|
||||||
|
assert hresp[0][0]['timetoken']
|
||||||
|
# Fails with Python 3
|
||||||
|
# assert len(hresp2[0]) == len(messages)
|
||||||
|
# assert hresp2[0][0]['timetoken']
|
||||||
|
assert len(hresp3[0]) == len(messages)
|
||||||
|
assert hresp3[0][0]['timetoken']
|
||||||
|
assert hresp4['message'] == 'Forbidden'
|
||||||
|
assert channel_pam + "no_rw" in hresp4['payload']['channels']
|
|
@ -0,0 +1,360 @@
|
||||||
|
# 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 time
|
||||||
|
import random
|
||||||
|
from pubnub import Pubnub
|
||||||
|
from inspect import currentframe, getouterframes
|
||||||
|
from gevent import monkey
|
||||||
|
|
||||||
|
monkey.patch_all()
|
||||||
|
|
||||||
|
|
||||||
|
def get_line():
|
||||||
|
# print getouterframes(currentframe())[3]
|
||||||
|
return getouterframes(currentframe())[2][2]
|
||||||
|
|
||||||
|
|
||||||
|
DELAY = 5
|
||||||
|
|
||||||
|
RESULTS = {}
|
||||||
|
|
||||||
|
|
||||||
|
def check_tests():
|
||||||
|
for i in RESULTS:
|
||||||
|
test = RESULTS[i]
|
||||||
|
if test['done'] is False:
|
||||||
|
if test['expect'] == test['passed']:
|
||||||
|
green(i + " PASSED " + str(test['passed']))
|
||||||
|
else:
|
||||||
|
red(i + " FAILED " + str(test['failed']))
|
||||||
|
test['done'] = True
|
||||||
|
|
||||||
|
|
||||||
|
def init(conf, name, expect):
|
||||||
|
# check_tests()
|
||||||
|
print("\n\n")
|
||||||
|
RESULTS[name + conf] = {'passed': 0, 'failed': 0, 'expect': 0, 'done': False, 'conf': conf}
|
||||||
|
RESULTS[name + conf]['expect'] = expect
|
||||||
|
|
||||||
|
|
||||||
|
def get_random():
|
||||||
|
return str(random.randint(1, 99999))
|
||||||
|
|
||||||
|
|
||||||
|
def red(name):
|
||||||
|
print('\033[1;31m' + name + '\033[1;m')
|
||||||
|
|
||||||
|
|
||||||
|
def green(name):
|
||||||
|
print('\033[1;92m' + name + '\033[1;m')
|
||||||
|
|
||||||
|
|
||||||
|
def test(cond, desc=None, test_name=None, conf=None):
|
||||||
|
if (cond):
|
||||||
|
green("[" + test_name + " " + str(conf) + " ""][" + str(get_line()) + "] PASS : " + str(desc))
|
||||||
|
RESULTS[test_name + conf]['passed'] = RESULTS[test_name + str(conf)]['passed'] + 1
|
||||||
|
else:
|
||||||
|
red("[" + test_name + " " + str(conf) + " ""][" + str(get_line()) + "] FAIL : " + str(desc))
|
||||||
|
RESULTS[test_name + conf]['failed'] = RESULTS[test_name + str(conf)]['failed'] + 1
|
||||||
|
# exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
def run_tests(tests):
|
||||||
|
for test in tests:
|
||||||
|
if len(test) > 4:
|
||||||
|
test[1](test[2], test[3], test[0], test[4])
|
||||||
|
else:
|
||||||
|
test[1](test[2], test[3], test[0])
|
||||||
|
time.sleep(DELAY)
|
||||||
|
check_tests()
|
||||||
|
|
||||||
|
|
||||||
|
def test_1(pubnub, pubnub2, conf=None, msg=None):
|
||||||
|
init(conf, "test_1", 6)
|
||||||
|
r = get_random()
|
||||||
|
channel_wc = r + "-" + "test_1-ab.*"
|
||||||
|
message = msg if msg is not None else (r + "-" + "test_1_hi")
|
||||||
|
channel = r + "-" + "test_1-ab.d"
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message1, channel1, real_channel=None):
|
||||||
|
# print(str(message1) + ' : ' + str(channel1) + ' : ' + str(real_channel))
|
||||||
|
test(message1 == str(message, 'utf-8'), "message received", "test_1", conf)
|
||||||
|
test(channel1 == channel_wc, "Channel == wildcard channel", "test_1", conf)
|
||||||
|
test(real_channel == channel, "Real channel == publish channel", "test_1", conf)
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
def connect(channel1=None):
|
||||||
|
test(True, "Connect Called", "test_1", conf)
|
||||||
|
test(channel1 == channel_wc, "Channel param in Connect same as wildcard", "test_1", conf)
|
||||||
|
|
||||||
|
def _callback(message):
|
||||||
|
test(message[0] == 1, "Publish Successful", "test_1", conf)
|
||||||
|
|
||||||
|
def _error(message):
|
||||||
|
test(False, "Publish Successful", "test_1", conf)
|
||||||
|
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel_wc, callback=callback, error=callback, connect=connect)
|
||||||
|
|
||||||
|
|
||||||
|
def test_2(pubnub, pubnub2, conf=None, msg=None):
|
||||||
|
init(conf, "test_2", 8)
|
||||||
|
r = get_random()
|
||||||
|
channel_wc = r + "-" + "test_2-ab.*"
|
||||||
|
message = msg if msg is not None else (r + "-" + "test_2_hi")
|
||||||
|
channel = r + "-" + "test_2-ab.d"
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message1, channel1, real_channel=None):
|
||||||
|
# print(str(message1) + ' : ' + str(channel1) + ' : ' + str(real_channel))
|
||||||
|
test(message1 == str(message, 'utf-8'), "message received", "test_2", conf)
|
||||||
|
test(channel1 == channel_wc, "Channel == wildcard channel", "test_2", conf)
|
||||||
|
test(real_channel == channel, "Real channel == publish channel", "test_2", conf)
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
def presence(message, channel1, real_channel=None):
|
||||||
|
if (pubnub.uuid == message['uuid']):
|
||||||
|
test(channel_wc == real_channel, "On pubnub subscribe presence event as wildcard as real channel", "test_2",
|
||||||
|
conf)
|
||||||
|
elif (pubnub2.uuid == message['uuid']):
|
||||||
|
test(channel == real_channel, "On pubnub2 subscribe presence event as channel as real channel", "test_2",
|
||||||
|
conf)
|
||||||
|
else:
|
||||||
|
test(False, "Wrong presence event", "test_2", conf)
|
||||||
|
|
||||||
|
def connect(channel1=None):
|
||||||
|
# print(channel1)
|
||||||
|
test(True, "Connect Called", "test_2", conf)
|
||||||
|
test(channel1 == channel_wc, "Channel param in Connect same as wildcard", "test_2", conf)
|
||||||
|
|
||||||
|
def _callback(message):
|
||||||
|
test(message[0] == 1, "Publish Successful", "test_2", conf)
|
||||||
|
|
||||||
|
def _error(message):
|
||||||
|
test(False, "Publish Successful", "test_2", conf)
|
||||||
|
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
def _callback(message, channel1):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _error(message):
|
||||||
|
test(False, "Error in subscribe", "test_2", conf)
|
||||||
|
|
||||||
|
pubnub2.subscribe(channels=channel, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel_wc, callback=callback, error=callback, connect=connect, presence=presence)
|
||||||
|
|
||||||
|
|
||||||
|
def test_3(pubnub, pubnub2, conf=None, msg=None):
|
||||||
|
init(conf, "test_3", 6)
|
||||||
|
|
||||||
|
r = get_random()
|
||||||
|
channel_wc = r + "-" + "test_3-ab.*"
|
||||||
|
message = msg if msg is not None else (r + "-" + "test_3_hi")
|
||||||
|
channel = r + "-" + "test_3-ab.d"
|
||||||
|
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback(message1, channel1, real_channel=None):
|
||||||
|
if 'action' in message1:
|
||||||
|
test(False, "Presence event received without presence callback", "test_3", conf)
|
||||||
|
return
|
||||||
|
|
||||||
|
test(message1 == str(message, 'utf-8'), "message received", "test_3", conf)
|
||||||
|
test(channel1 == channel_wc, "Channel == wildcard channel", "test_3", conf)
|
||||||
|
test(real_channel == channel, "Real channel == publish channel", "test_3", conf)
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
def connect(channel1=None):
|
||||||
|
# print(channel1)
|
||||||
|
test(True, "Connect Called", "test_3", conf)
|
||||||
|
test(channel1 == channel_wc, "Channel param in Connect same as wildcard", "test_3", conf)
|
||||||
|
|
||||||
|
def _callback(message):
|
||||||
|
test(message[0] == 1, "Publish Successful", "test_3", conf)
|
||||||
|
|
||||||
|
def _error(message):
|
||||||
|
test(False, "Publish Successful", "test_3", conf)
|
||||||
|
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
def _callback(message, channel1):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _error(message):
|
||||||
|
test(False, "Error in subscribe", "test_3", conf)
|
||||||
|
|
||||||
|
pubnub2.subscribe(channels=channel, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel_wc, callback=callback, error=callback, connect=connect)
|
||||||
|
|
||||||
|
|
||||||
|
def test_4(pubnub, pubnub2, conf=None, msg=None):
|
||||||
|
init(conf, "test_4", 18)
|
||||||
|
|
||||||
|
r = get_random()
|
||||||
|
channel_wc = r + "-" + "test_4-ab.*"
|
||||||
|
channel_group = r + "-" + "test_4_group"
|
||||||
|
channel_g = r + "-" + "test_4_group_channel"
|
||||||
|
message = msg if msg is not None else (r + "-" + "test_4_hi")
|
||||||
|
channel = r + "-" + "test_4-ab.d"
|
||||||
|
channel_n = r + "-" + "test_4-a"
|
||||||
|
|
||||||
|
def _callback(resp):
|
||||||
|
# Asynchronous usage
|
||||||
|
def callback_wc(message1, channel1, real_channel=None):
|
||||||
|
test(message1 == str(message, 'utf-8'), "message received", "test_4", conf)
|
||||||
|
test(channel1 == channel_wc, "Channel == wildcard channel", "test_4", conf)
|
||||||
|
test(real_channel == channel, "Real channel == publish channel", "test_4", conf)
|
||||||
|
|
||||||
|
def callback_group(message1, channel1, real_channel=None):
|
||||||
|
test(message1 == str(message, 'utf-8'), "message received", "test_4", conf)
|
||||||
|
test(channel1 == channel_group, "Channel == group", "test_4", conf)
|
||||||
|
test(real_channel == channel_g, "Real channel == publish channel", "test_4", conf)
|
||||||
|
|
||||||
|
def callback_n(message1, channel1, real_channel=None):
|
||||||
|
test(message1 == str(message, 'utf-8'), "message received", "test_4", conf)
|
||||||
|
test(channel1 == channel_n, "Channel == channel", "test_4", conf)
|
||||||
|
test(real_channel == channel_n, "Real channel == publish channel", "test_4", conf)
|
||||||
|
|
||||||
|
def error(message):
|
||||||
|
print("ERROR : " + str(message))
|
||||||
|
|
||||||
|
def connect_wc(channel1=None):
|
||||||
|
test(True, "Connect Called", "test_4", conf)
|
||||||
|
test(channel1 == channel_wc, "Channel param in Connect same as wildcard", "test_4", conf)
|
||||||
|
|
||||||
|
def _callback(message):
|
||||||
|
test(message[0] == 1, "Publish Successful", "test_4", conf)
|
||||||
|
|
||||||
|
def _error(message):
|
||||||
|
test(False, "Publish Successful", "test_4", conf)
|
||||||
|
|
||||||
|
pubnub.publish(channel=channel, message=message, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
def connect_group(channel1=None):
|
||||||
|
# print(channel1)
|
||||||
|
test(True, "Connect Called", "test_4", conf)
|
||||||
|
test(channel1 == channel_group, "Channel param in Connect same as channel_group", "test_4", conf)
|
||||||
|
|
||||||
|
def _callback(message):
|
||||||
|
test(message[0] == 1, "Publish Successful", "test_4", conf)
|
||||||
|
|
||||||
|
def _error(message):
|
||||||
|
test(False, "Publish Successful", "test_4", conf)
|
||||||
|
|
||||||
|
pubnub.publish(channel=channel_g, message=message, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
def connect_n(channel1=None):
|
||||||
|
# print(channel1)
|
||||||
|
test(True, "Connect Called", "test_4", conf)
|
||||||
|
test(channel1 == channel_n, "Channel param in Connect same as channel_n", "test_4", conf)
|
||||||
|
|
||||||
|
def _callback(message):
|
||||||
|
test(message[0] == 1, "Publish Successful", "test_4", conf)
|
||||||
|
|
||||||
|
def _error(message):
|
||||||
|
test(False, "Publish Successful", "test_4", conf)
|
||||||
|
|
||||||
|
pubnub.publish(channel=channel_n, message=message, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel_wc, callback=callback_wc, error=error, connect=connect_wc)
|
||||||
|
|
||||||
|
pubnub.subscribe(channels=channel_n, callback=callback_n, error=error, connect=connect_n)
|
||||||
|
|
||||||
|
pubnub.subscribe_group(channel_groups=[channel_group], callback=callback_group, error=error,
|
||||||
|
connect=connect_group)
|
||||||
|
|
||||||
|
def _error(message):
|
||||||
|
test(False, "Channel Group Creation failed")
|
||||||
|
|
||||||
|
pubnub.channel_group_add_channel(channel_group=channel_group, channel=channel_g, callback=_callback, error=_error)
|
||||||
|
|
||||||
|
|
||||||
|
pubnub = Pubnub(publish_key="ds", subscribe_key="ds",
|
||||||
|
secret_key="ds", ssl_on=False)
|
||||||
|
|
||||||
|
pubnub2 = Pubnub(publish_key="ds", subscribe_key="ds",
|
||||||
|
secret_key="ds", ssl_on=False)
|
||||||
|
|
||||||
|
pubnub_ssl = Pubnub(publish_key="ds", subscribe_key="ds",
|
||||||
|
secret_key="ds", ssl_on=True)
|
||||||
|
|
||||||
|
pubnub_ssl_2 = Pubnub(publish_key="ds", subscribe_key="ds",
|
||||||
|
secret_key="ds", ssl_on=True)
|
||||||
|
|
||||||
|
pubnub_enc = Pubnub(publish_key="ds", subscribe_key="ds",
|
||||||
|
secret_key="ds", cipher_key="enigma", ssl_on=False)
|
||||||
|
|
||||||
|
pubnub_enc_2 = Pubnub(publish_key="ds", subscribe_key="ds",
|
||||||
|
secret_key="ds", cipher_key="enigma", ssl_on=False, daemon=False)
|
||||||
|
|
||||||
|
pubnub_enc_ssl = Pubnub(publish_key="ds", subscribe_key="ds",
|
||||||
|
secret_key="ds", cipher_key="enigma", ssl_on=False)
|
||||||
|
|
||||||
|
pubnub_enc_ssl_2 = Pubnub(publish_key="ds", subscribe_key="ds",
|
||||||
|
secret_key="ds", cipher_key="enigma", ssl_on=False, daemon=False)
|
||||||
|
|
||||||
|
# run_tests([ ("[EMOJI][ENC]", test_4, pubnub_enc, pubnub_enc_2, "😀")])
|
||||||
|
|
||||||
|
|
||||||
|
run_tests([
|
||||||
|
("", test_1, pubnub, pubnub2),
|
||||||
|
("[SSL]", test_1, pubnub_ssl, pubnub_ssl_2),
|
||||||
|
("[ENC]", test_1, pubnub_enc, pubnub_enc_2),
|
||||||
|
("[SSL][ENC]", test_1, pubnub_enc_ssl, pubnub_enc_ssl_2),
|
||||||
|
("", test_2, pubnub, pubnub2),
|
||||||
|
("[SSL]", test_2, pubnub_ssl, pubnub_ssl_2),
|
||||||
|
("[ENC]", test_2, pubnub_enc, pubnub_enc_2),
|
||||||
|
("[SSL][ENC]", test_2, pubnub_enc_ssl, pubnub_enc_ssl_2),
|
||||||
|
("", test_3, pubnub, pubnub2),
|
||||||
|
("[SSL]", test_3, pubnub_ssl, pubnub_ssl_2),
|
||||||
|
("[ENC]", test_3, pubnub_enc, pubnub_enc_2),
|
||||||
|
("[SSL][ENC]", test_3, pubnub_enc_ssl, pubnub_enc_ssl_2),
|
||||||
|
("", test_3, pubnub, pubnub2),
|
||||||
|
("[SSL]", test_3, pubnub_ssl, pubnub_ssl_2),
|
||||||
|
("[ENC]", test_3, pubnub_enc, pubnub_enc_2),
|
||||||
|
("[SSL][ENC]", test_3, pubnub_enc_ssl, pubnub_enc_ssl_2),
|
||||||
|
("", test_4, pubnub, pubnub2),
|
||||||
|
("[SSL]", test_4, pubnub_ssl, pubnub_ssl_2),
|
||||||
|
("[ENC]", test_4, pubnub_enc, pubnub_enc_2),
|
||||||
|
("[SSL][ENC]", test_4, pubnub_enc_ssl, pubnub_enc_ssl_2),
|
||||||
|
("[EMOJI]", test_1, pubnub, pubnub2, "😀"),
|
||||||
|
("[SSL][EMOJI]", test_1, pubnub_ssl, pubnub_ssl_2, "😀"),
|
||||||
|
("[ENC][EMOJI]", test_1, pubnub_enc, pubnub_enc_2, "😀"),
|
||||||
|
("[SSL][ENC][EMOJI]", test_1, pubnub_enc_ssl, pubnub_enc_ssl_2, "😀"),
|
||||||
|
("[EMOJI]", test_2, pubnub, pubnub2, "😀"),
|
||||||
|
("[SSL][EMOJI]", test_2, pubnub_ssl, pubnub_ssl_2, "😀"),
|
||||||
|
("[ENC][EMOJI]", test_2, pubnub_enc, pubnub_enc_2, "😀"),
|
||||||
|
("[SSL][ENC][EMOJI]", test_2, pubnub_enc_ssl, pubnub_enc_ssl_2, "😀"),
|
||||||
|
("[EMOJI]", test_3, pubnub, pubnub2, "😀"),
|
||||||
|
("[SSL][EMOJI]", test_3, pubnub_ssl, pubnub_ssl_2, "😀"),
|
||||||
|
("[ENC][EMOJI]", test_3, pubnub_enc, pubnub_enc_2, "😀"),
|
||||||
|
("[SSL][ENC][EMOJI]", test_3, pubnub_enc_ssl, pubnub_enc_ssl_2, "😀"),
|
||||||
|
("[EMOJI]", test_3, pubnub, pubnub2, "😀"),
|
||||||
|
("[SSL][EMOJI]", test_3, pubnub_ssl, pubnub_ssl_2, "😀"),
|
||||||
|
("[ENC][EMOJI]", test_3, pubnub_enc, pubnub_enc_2, "😀"),
|
||||||
|
("[SSL][ENC][EMOJI]", test_3, pubnub_enc_ssl, pubnub_enc_ssl_2, "😀"),
|
||||||
|
("[EMOJI]", test_3, pubnub, pubnub2, "😀"),
|
||||||
|
("[SSL][EMOJI]", test_3, pubnub_ssl, pubnub_ssl_2, "😀"),
|
||||||
|
("[ENC][EMOJI]", test_3, pubnub_enc, pubnub_enc_2, "😀"),
|
||||||
|
("[SSL][ENC][EMOJI]", test_3, pubnub_enc_ssl, pubnub_enc_ssl_2, "😀"),
|
||||||
|
("[EMOJI]", test_4, pubnub, pubnub2, "😀"),
|
||||||
|
("[SSL][EMOJI]", test_4, pubnub_ssl, pubnub_ssl_2, "😀"),
|
||||||
|
("[ENC][EMOJI]", test_4, pubnub_enc, pubnub_enc_2, "😀"),
|
||||||
|
("[SSL][ENC][EMOJI]", test_4, pubnub_enc_ssl, pubnub_enc_ssl_2, "😀")
|
||||||
|
])
|
Loading…
Reference in New Issue