Ejemplo n.º 1
0
    def test_multiple_channels(self):
        pubnub = PubNub(pnconf_sub_copy())
        ch1 = helper.gen_channel("here-now-native-sync-ch1")
        ch2 = helper.gen_channel("here-now-native-sync-ch2")
        pubnub.config.uuid = "here-now-native-sync-uuid"

        subscribe_listener = SubscribeListener()
        here_now_listener = NonSubscribeListener()
        pubnub.add_listener(subscribe_listener)
        pubnub.subscribe().channels([ch1, ch2]).execute()

        subscribe_listener.wait_for_connect()

        time.sleep(5)

        pubnub.here_now() \
            .channels([ch1, ch2]) \
            .pn_async(here_now_listener.callback)

        if here_now_listener.pn_await() is False:
            self.fail("HereNow operation timeout")

        result = here_now_listener.result
        channels = result.channels

        assert len(channels) == 2
        assert channels[0].occupancy == 1
        assert channels[0].occupants[0].uuid == pubnub.uuid
        assert channels[1].occupancy == 1
        assert channels[1].occupants[0].uuid == pubnub.uuid

        pubnub.unsubscribe().channels([ch1, ch2]).execute()
        subscribe_listener.wait_for_disconnect()

        pubnub.stop()
Ejemplo n.º 2
0
    def test_single_channel(self):
        pubnub = PubNub(pnconf_sub_copy())
        ch = helper.gen_channel("herenow-asyncio-channel")
        uuid = helper.gen_channel("herenow-asyncio-uuid")
        pubnub.config.uuid = uuid

        subscribe_listener = SubscribeListener()
        here_now_listener = NonSubscribeListener()
        pubnub.add_listener(subscribe_listener)
        pubnub.subscribe().channels(ch).execute()

        subscribe_listener.wait_for_connect()

        time.sleep(2)

        pubnub.here_now() \
            .channels(ch) \
            .include_uuids(True) \
            .pn_async(here_now_listener.callback)

        if here_now_listener.pn_await() is False:
            self.fail("HereNow operation timeout")

        result = here_now_listener.result
        channels = result.channels

        assert len(channels) == 1
        assert channels[0].occupancy == 1
        assert channels[0].occupants[0].uuid == pubnub.uuid

        pubnub.unsubscribe().channels(ch).execute()
        subscribe_listener.wait_for_disconnect()

        pubnub.stop()
Ejemplo n.º 3
0
    def test_cg_subscribe_unsubscribe(self):
        ch = helper.gen_channel("test-subscribe-unsubscribe-channel")
        gr = helper.gen_channel("test-subscribe-unsubscribe-group")

        pubnub = PubNub(pnconf_sub_copy())
        callback_messages = SubscribeListener()
        cg_operation = NonSubscribeListener()

        pubnub.add_channel_to_channel_group()\
            .channel_group(gr)\
            .channels(ch)\
            .async(cg_operation.callback)
        result = cg_operation.await_result()
        assert isinstance(result, PNChannelGroupsAddChannelResult)
        cg_operation.reset()

        time.sleep(1)

        pubnub.add_listener(callback_messages)
        pubnub.subscribe().channel_groups(gr).execute()
        callback_messages.wait_for_connect()

        pubnub.unsubscribe().channel_groups(gr).execute()
        callback_messages.wait_for_disconnect()

        pubnub.remove_channel_from_channel_group()\
            .channel_group(gr)\
            .channels(ch)\
            .async(cg_operation.callback)
        result = cg_operation.await_result()
        assert isinstance(result, PNChannelGroupsRemoveChannelResult)

        pubnub.stop()
Ejemplo n.º 4
0
    def test_subscribe_pub_unsubscribe(self):
        ch = helper.gen_channel("test-subscribe-sub-pub-unsub")
        pubnub = PubNub(pnconf_sub_copy())
        subscribe_listener = SubscribeListener()
        publish_operation = NonSubscribeListener()
        message = "hey"

        try:
            pubnub.add_listener(subscribe_listener)

            pubnub.subscribe().channels(ch).execute()
            subscribe_listener.wait_for_connect()

            pubnub.publish().channel(ch).message(message).pn_async(
                publish_operation.callback)

            if publish_operation. await () is False:
                self.fail("Publish operation timeout")

            publish_result = publish_operation.result
            assert isinstance(publish_result, PNPublishResult)
            assert publish_result.timetoken > 0

            result = subscribe_listener.wait_for_message_on(ch)
            assert isinstance(result, PNMessageResult)
            assert result.channel == ch
            assert result.subscription is None
            assert result.timetoken > 0
            assert result.message == message

            pubnub.unsubscribe().channels(ch).execute()
            subscribe_listener.wait_for_disconnect()
Ejemplo n.º 5
0
    def test_cg_subscribe_unsubscribe(self):
        ch = helper.gen_channel("test-subscribe-unsubscribe-channel")
        gr = helper.gen_channel("test-subscribe-unsubscribe-group")

        pubnub = PubNub(pnconf_sub_copy())
        callback_messages = SubscribeListener()
        cg_operation = NonSubscribeListener()

        pubnub.add_channel_to_channel_group()\
            .channel_group(gr)\
            .channels(ch)\
            .pn_async(cg_operation.callback)
        result = cg_operation.await_result()
        assert isinstance(result, PNChannelGroupsAddChannelResult)
        cg_operation.reset()

        time.sleep(1)

        pubnub.add_listener(callback_messages)
        pubnub.subscribe().channel_groups(gr).execute()
        callback_messages.wait_for_connect()

        pubnub.unsubscribe().channel_groups(gr).execute()
        callback_messages.wait_for_disconnect()

        pubnub.remove_channel_from_channel_group()\
            .channel_group(gr)\
            .channels(ch)\
            .pn_async(cg_operation.callback)
        result = cg_operation.await_result()
        assert isinstance(result, PNChannelGroupsRemoveChannelResult)

        pubnub.stop()
Ejemplo n.º 6
0
    def test_subscribe_unsubscribe(self):
        pubnub = PubNub(pnconf_sub_copy())
        ch = helper.gen_channel("test-subscribe-sub-unsub")

        try:
            listener = SubscribeListener()
            pubnub.add_listener(listener)

            pubnub.subscribe().channels(ch).execute()
            assert ch in pubnub.get_subscribed_channels()
            assert len(pubnub.get_subscribed_channels()) == 1

            listener.wait_for_connect()
            assert ch in pubnub.get_subscribed_channels()
            assert len(pubnub.get_subscribed_channels()) == 1

            pubnub.unsubscribe().channels(ch).execute()
            assert ch not in pubnub.get_subscribed_channels()
            assert len(pubnub.get_subscribed_channels()) == 0

            listener.wait_for_disconnect()
            assert ch not in pubnub.get_subscribed_channels()
            assert len(pubnub.get_subscribed_channels()) == 0

        except PubNubException as e:
            self.fail(e)
        finally:
            pubnub.stop()
Ejemplo n.º 7
0
    def get(self, request):
        pnconfig = PNConfiguration()
        pnconfig.subscribe_key = "sub-c-c7c2aa20-b56f-11e8-b6ef-c2e67adadb66"
        pnconfig.publish_key = "pub-c-fdd957cd-be31-427f-9e91-9c2bed852ba9"
        pnconfig.ssl = True

        pubnub = PubNub(pnconfig)

        my_listener = SubscribeListener()
        pubnub.add_listener(my_listener)

        pubnub.subscribe().channels("test_channel").execute()
        my_listener.wait_for_connect()
        print('connected')

        pubnub.publish().channel('test_channel').message({
            'order': 16,
            'owner': 1
        }).sync()
        info = my_listener.wait_for_message_on('test_channel')
        print(info.message)
        print(pubnub.time())
        print(pubnub.timestamp())

        pubnub.unsubscribe().channels('test_channel').execute()
        my_listener.wait_for_disconnect()
        print('unsubscribe')

        envelope = pubnub.history().channel('test_channel').count(100).sync()
        print(envelope)

        return Response(dict(info.message))
Ejemplo n.º 8
0
def writeDB(data, server, port):
    client = MongoClient(server, port)
    db = client.home1

    # writing new data in db
    db.home1.insert_one(data)
    data.pop('_id', None)
    my_listener = SubscribeListener()
    pb.add_listener(my_listener)
    pb.subscribe().channels(channel).execute()
    my_listener.wait_for_connect()
    print 'connected'
    print data
    print type(data)

    while True:
        try:
            envelope = pb.publish().channel(channel).message(data).sync()
            print("publish timetoken: %d" % envelope.result.timetoken)
        except PubNubException as e:
            print 'exception...'
            pass
        # pb.publish().channel(channel).message(data)
        print 'published'
        result = my_listener.wait_for_message_on(channel)
        print 'result message'
        print result.message
        print 'waiting'
        t_sleep = random.randint(0, 6)
        print 'T_SLEEP', t_sleep
        time.sleep(t_sleep)
Ejemplo n.º 9
0
    def test_subscribe_unsubscribe(self):
        pubnub = PubNub(pnconf_sub_copy())
        ch = helper.gen_channel("test-subscribe-sub-unsub")

        try:
            listener = SubscribeListener()
            pubnub.add_listener(listener)

            pubnub.subscribe().channels(ch).execute()
            assert ch in pubnub.get_subscribed_channels()
            assert len(pubnub.get_subscribed_channels()) == 1

            listener.wait_for_connect()
            assert ch in pubnub.get_subscribed_channels()
            assert len(pubnub.get_subscribed_channels()) == 1

            pubnub.unsubscribe().channels(ch).execute()
            assert ch not in pubnub.get_subscribed_channels()
            assert len(pubnub.get_subscribed_channels()) == 0

            listener.wait_for_disconnect()
            assert ch not in pubnub.get_subscribed_channels()
            assert len(pubnub.get_subscribed_channels()) == 0

        except PubNubException as e:
            self.fail(e)
        finally:
            pubnub.stop()
Ejemplo n.º 10
0
    def test_subscribe_cg_join_leave(self):
        ch = helper.gen_channel("test-subscribe-unsubscribe-channel")
        gr = helper.gen_channel("test-subscribe-unsubscribe-group")

        pubnub = PubNub(pnconf_sub_copy())
        pubnub_listener = PubNub(pnconf_sub_copy())
        non_subscribe_listener = NonSubscribeListener()

        pubnub.add_channel_to_channel_group() \
            .channel_group(gr) \
            .channels(ch) \
            .async(non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNChannelGroupsAddChannelResult)

        time.sleep(1)

        callback_messages = SubscribeListener()
        callback_presence = SubscribeListener()

        pubnub_listener.add_listener(callback_presence)
        pubnub_listener.subscribe().channel_groups(gr).with_presence().execute()
        callback_presence.wait_for_connect()

        prs_envelope = callback_presence.wait_for_presence_on(ch)
        assert prs_envelope.event == 'join'
        assert prs_envelope.uuid == pubnub_listener.uuid
        assert prs_envelope.channel == ch
        assert prs_envelope.subscription == gr

        pubnub.add_listener(callback_messages)
        pubnub.subscribe().channel_groups(gr).execute()

        prs_envelope = callback_presence.wait_for_presence_on(ch)

        assert prs_envelope.event == 'join'
        assert prs_envelope.uuid == pubnub.uuid
        assert prs_envelope.channel == ch
        assert prs_envelope.subscription == gr

        pubnub.unsubscribe().channel_groups(gr).execute()
        prs_envelope = callback_presence.wait_for_presence_on(ch)

        assert prs_envelope.event == 'leave'
        assert prs_envelope.uuid == pubnub.uuid
        assert prs_envelope.channel == ch
        assert prs_envelope.subscription == gr

        pubnub_listener.unsubscribe().channel_groups(gr).execute()
        callback_presence.wait_for_disconnect()

        pubnub.remove_channel_from_channel_group() \
            .channel_group(gr) \
            .channels(ch) \
            .async(non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNChannelGroupsRemoveChannelResult)

        pubnub.stop()
        pubnub_listener.stop()
Ejemplo n.º 11
0
    def test_multiple_channels(self):

        pubnub = PubNub(pnconf_sub_copy())
        ch1 = "state-native-sync-ch-1"
        ch2 = "state-native-sync-ch-2"
        pubnub.config.uuid = "state-native-sync-uuid"
        uuid = pubnub.config.uuid

        subscribe_listener = SubscribeListener()
        where_now_listener = NonSubscribeListener()
        pubnub.add_listener(subscribe_listener)
        pubnub.subscribe().channels([ch1, ch2]).execute()

        subscribe_listener.wait_for_connect()

        time.sleep(2)

        pubnub.where_now() \
            .uuid(uuid) \
            .pn_async(where_now_listener.callback)

        if where_now_listener.pn_await() is False:
            self.fail("WhereNow operation timeout")

        result = where_now_listener.result
        channels = result.channels

        assert len(channels) == 2
        assert ch1 in channels
        assert ch2 in channels

        pubnub.unsubscribe().channels([ch1, ch2]).execute()
        subscribe_listener.wait_for_disconnect()

        pubnub.stop()
Ejemplo n.º 12
0
    def test_single_channel(self):
        pubnub = PubNub(pnconf_sub_copy())
        ch = helper.gen_channel("wherenow-asyncio-channel")
        uuid = helper.gen_channel("wherenow-asyncio-uuid")
        pubnub.config.uuid = uuid

        subscribe_listener = SubscribeListener()
        where_now_listener = NonSubscribeListener()
        pubnub.add_listener(subscribe_listener)
        pubnub.subscribe().channels(ch).execute()

        subscribe_listener.wait_for_connect()

        time.sleep(2)

        pubnub.where_now() \
            .uuid(uuid) \
            .pn_async(where_now_listener.callback)

        if where_now_listener.pn_await() is False:
            self.fail("WhereNow operation timeout")

        result = where_now_listener.result
        channels = result.channels

        assert len(channels) == 1
        assert channels[0] == ch

        pubnub.unsubscribe().channels(ch).execute()
        subscribe_listener.wait_for_disconnect()

        pubnub.stop()
Ejemplo n.º 13
0
    def test_subscribe_pub_unsubscribe(self):
        ch = helper.gen_channel("test-subscribe-sub-pub-unsub")
        pubnub = PubNub(pnconf_sub_copy())
        subscribe_listener = SubscribeListener()
        publish_operation = NonSubscribeListener()
        message = "hey"

        try:
            pubnub.add_listener(subscribe_listener)

            pubnub.subscribe().channels(ch).execute()
            subscribe_listener.wait_for_connect()

            pubnub.publish().channel(ch).message(message).async(publish_operation.callback)

            if publish_operation.await() is False:
                self.fail("Publish operation timeout")

            publish_result = publish_operation.result
            assert isinstance(publish_result, PNPublishResult)
            assert publish_result.timetoken > 0

            result = subscribe_listener.wait_for_message_on(ch)
            assert isinstance(result, PNMessageResult)
            assert result.channel == ch
            assert result.subscription is None
            assert result.timetoken > 0
            assert result.message == message

            pubnub.unsubscribe().channels(ch).execute()
            subscribe_listener.wait_for_disconnect()
Ejemplo n.º 14
0
def start_pub_nub_server(pn_instance, pn_instance_channel):
    print("Initializing Pub Nub Server")
    try:
        my_listener = SubscribeListener()
        pn_instance.add_listener(my_listener)
        pn_instance.subscribe().channels(pn_instance_channel).execute()
        my_listener.wait_for_connect()
        while True:
            result = my_listener.wait_for_message_on(pn_instance_channel)
            if result.message[1] == 'Server':  # if it is for me
                print("Just received a message: ", end='')
                print(result.message)
                petitioner = result.message[0]
                if petitioner in lockers_owners_dic:
                    if result.message[2] == 'locker_status':
                        locker_status = lockers_lock_status_is_open[
                            lockers_owners_dic[petitioner]]
                        response = ['Server', petitioner]
                        if locker_status:
                            response.append("open")
                        else:
                            response.append("closed")
                        response.append(pn_instance.uuid)
                        print("Responding: ", end='')
                        print(response)
                        pn_instance.publish().channel(
                            pn_instance_channel).message(response).sync()
                    elif result.message[2] == 'open':
                        # Call function to open the locker
                        print("Opening " + petitioner + "'s locker")
                        thread_to_open_locker = Thread(
                            target=set_locker_lock_state,
                            args=(
                                lockers_owners_dic[petitioner],
                                True,
                                pn_instance,
                                pn_instance_channel,
                            ))
                        thread_to_open_locker.start()
                    elif result.message[2] == 'close':
                        # Call function to close the locker
                        print("Closing " + petitioner + "'s locker")
                        thread_to_open_locker = Thread(
                            target=set_locker_lock_state,
                            args=(
                                lockers_owners_dic[petitioner],
                                False,
                                pn_instance,
                                pn_instance_channel,
                            ))
                        thread_to_open_locker.start()

    finally:
        pn_instance.unsubscribe().channels(pn_instance_channel).execute()
        print("PubNub instance unsubscribed")
    return
Ejemplo n.º 15
0
    def test_timeout_event_on_broken_heartbeat(self):
        ch = helper.gen_channel("heartbeat-test")

        pubnub = PubNub(messenger_config)
        pubnub_listener = PubNub(listener_config)

        pubnub.config.uuid = helper.gen_channel("messenger")
        pubnub_listener.config.uuid = helper.gen_channel("listener")

        callback_presence = SubscribeListener()
        callback_messages = SubscribeListener()

        # - connect to :ch-pnpres
        pubnub_listener.add_listener(callback_presence)
        pubnub_listener.subscribe().channels(ch).with_presence().execute()
        callback_presence.wait_for_connect()

        presence_message = callback_presence.wait_for_presence_on(ch)
        assert ch == presence_message.channel
        assert 'join' == presence_message.event
        assert pubnub_listener.uuid == presence_message.uuid

        # - connect to :ch
        pubnub.add_listener(callback_messages)
        pubnub.subscribe().channels(ch).execute()
        callback_messages.wait_for_connect()

        prs_envelope = callback_presence.wait_for_presence_on(ch)
        assert ch == prs_envelope.channel
        assert 'join' == prs_envelope.event
        assert pubnub.uuid == prs_envelope.uuid

        # wait for one heartbeat call
        time.sleep(6)

        # - break messenger heartbeat loop
        pubnub._subscription_manager._stop_heartbeat_timer()

        # - assert for timeout
        presence_message = callback_presence.wait_for_presence_on(ch)
        assert ch == presence_message.channel
        assert 'timeout' == presence_message.event
        assert pubnub.uuid == presence_message.uuid

        pubnub.unsubscribe().channels(ch).execute()
        callback_messages.wait_for_disconnect()

        # - disconnect from :ch-pnpres
        pubnub_listener.unsubscribe().channels(ch).execute()
        callback_presence.wait_for_disconnect()

        pubnub.stop()
        pubnub_listener.stop()
def start_pub_nub_server(channel_name):
    pn_config = PNConfiguration()
    pn_config.subscribe_key = "INSERT API KEY"
    pn_config.publish_key = "INSERT API KEY"
    pn_config.uuid = '3242a702-6d6f-42d4-a548-356af0b95681'
    # instantiate a PubNub instance
    pub_nub = PubNub(pn_config)
    try:
        my_listener = SubscribeListener()
        pub_nub.add_listener(my_listener)
        pub_nub.subscribe().channels(channel_name).execute()
        my_listener.wait_for_connect()
        while True:
            result = my_listener.wait_for_message_on(channel_name)
            if result.message[1] == 'Server':  # if it is for me
                print("Just received a message: ", end='')
                print(result.message)
                petitioner = result.message[0]
                if petitioner in lockers_owners_dic:
                    if result.message[2] == 'locker_status':
                        locker_status = lockers_lock_status_is_open[
                            lockers_owners_dic[petitioner]]
                        response = ['Server', petitioner]
                        if locker_status:
                            response.append("open")
                        else:
                            response.append("closed")
                        response.append(str(pn_config.uuid))
                        print("Responding: ", end='')
                        print(response)
                        pub_nub.publish().channel(
                            pub_num_lockers_channel).message(response).sync()
                    elif result.message[2] == 'open':
                        # Call function to open the locker
                        print("Opening " + petitioner + "'s locker")
                        lockers_lock_status_is_open[
                            lockers_owners_dic[petitioner]] = True
                        print(lockers_lock_status_is_open)
                    elif result.message[2] == 'close':
                        # Call function to close the locker
                        print("Closing " + petitioner + "'s locker")
                        lockers_lock_status_is_open[
                            lockers_owners_dic[petitioner]] = False
                        print(lockers_lock_status_is_open)

    finally:
        pub_nub.unsubscribe().channels(channel_name).execute()
        pub_nub.stop()
        print("Unsubscribe")
    return
Ejemplo n.º 17
0
def get_data_from_pubnub():
    my_listener = SubscribeListener()
    pubnub.add_listener(my_listener)

    pubnub.subscribe().channels(my_channel).execute()
    my_listener.wait_for_connect()

    result = my_listener.wait_for_message_on('awesomeChannel')
    print(result.message)

    pubnub.unsubscribe().channels('awesomeChannel').execute()
    my_listener.wait_for_disconnect()

    print('unsubscribed')
Ejemplo n.º 18
0
 def pubnub_call(self, channel):
     pnconfig = PNConfiguration()
     pnconfig.subscribe_key = "sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f"
     pnconfig.ssl = False
     pubnub = PubNub(pnconfig)
     my_listener = SubscribeListener()
     pubnub.add_listener(my_listener)
     pubnub.subscribe().channels(channel).execute()
     my_listener.wait_for_connect()
     while True:
         bf_result = my_listener.wait_for_message_on(channel)
         bf_data = bf_result.message
         print bf_data
         # pubnub.unsubscribe().channels(channel).execute()
         # my_listener.wait_for_disconnect()
         return bf_data
Ejemplo n.º 19
0
def subscribe_pub(channel, msg):
    my_listener = SubscribeListener()
    pubnub.add_listener(my_listener)

    pubnub.subscribe().channels(channel).execute()
    my_listener.wait_for_connect()
    print('connected')

    pubnub.publish().channel(channel).message(msg).sync()
    result = my_listener.wait_for_message_on(channel)
    print(result.message)
    # Unsubscribe
    pubnub.unsubscribe().channels(channel).execute()
    my_listener.wait_for_disconnect()

    print('unsubscribed')
Ejemplo n.º 20
0
    def test_join_leave(self):
        ch = helper.gen_channel("test-subscribe-join-leave")

        pubnub = PubNub(pnconf_sub_copy())
        pubnub_listener = PubNub(pnconf_sub_copy())
        callback_messages = SubscribeListener()
        callback_presence = SubscribeListener()

        pubnub.config.uuid = helper.gen_channel("messenger")
        pubnub_listener.config.uuid = helper.gen_channel("listener")

        try:
            pubnub.add_listener(callback_messages)
            pubnub_listener.add_listener(callback_presence)

            pubnub_listener.subscribe().channels(ch).with_presence().execute()
            callback_presence.wait_for_connect()

            envelope = callback_presence.wait_for_presence_on(ch)
            assert envelope.channel == ch
            assert envelope.event == 'join'
            assert envelope.uuid == pubnub_listener.uuid

            pubnub.subscribe().channels(ch).execute()
            callback_messages.wait_for_connect()

            envelope = callback_presence.wait_for_presence_on(ch)
            assert envelope.channel == ch
            assert envelope.event == 'join'
            assert envelope.uuid == pubnub.uuid

            pubnub.unsubscribe().channels(ch).execute()
            callback_messages.wait_for_disconnect()

            envelope = callback_presence.wait_for_presence_on(ch)
            assert envelope.channel == ch
            assert envelope.event == 'leave'
            assert envelope.uuid == pubnub.uuid

            pubnub_listener.unsubscribe().channels(ch).execute()
            callback_presence.wait_for_disconnect()
        except PubNubException as e:
            self.fail(e)
        finally:
            pubnub.stop()
            pubnub_listener.stop()
Ejemplo n.º 21
0
def ListenMessage(threadName, delay):
    my_listener = SubscribeListener()

    pubnub.add_listener(my_listener)

    pubnub.subscribe().channels('awesomeChannel').execute()
    my_listener.wait_for_connect()
    print('connected')
    result = my_listener.wait_for_message_on('awesomeChannel')
    keep_goin = True
    print("starting to listen")
    while keep_goin:

        print(result.message)
        result = my_listener.wait_for_message_on('awesomeChannel')
        if result.message == "bye":
            keep_goin = False
Ejemplo n.º 22
0
    def test_join_leave(self):
        ch = helper.gen_channel("test-subscribe-join-leave")

        pubnub = PubNub(pnconf_sub_copy())
        pubnub_listener = PubNub(pnconf_sub_copy())
        callback_messages = SubscribeListener()
        callback_presence = SubscribeListener()

        pubnub.config.uuid = helper.gen_channel("messenger")
        pubnub_listener.config.uuid = helper.gen_channel("listener")

        try:
            pubnub.add_listener(callback_messages)
            pubnub_listener.add_listener(callback_presence)

            pubnub_listener.subscribe().channels(ch).with_presence().execute()
            callback_presence.wait_for_connect()

            envelope = callback_presence.wait_for_presence_on(ch)
            assert envelope.channel == ch
            assert envelope.event == 'join'
            assert envelope.uuid == pubnub_listener.uuid

            pubnub.subscribe().channels(ch).execute()
            callback_messages.wait_for_connect()

            envelope = callback_presence.wait_for_presence_on(ch)
            assert envelope.channel == ch
            assert envelope.event == 'join'
            assert envelope.uuid == pubnub.uuid

            pubnub.unsubscribe().channels(ch).execute()
            callback_messages.wait_for_disconnect()

            envelope = callback_presence.wait_for_presence_on(ch)
            assert envelope.channel == ch
            assert envelope.event == 'leave'
            assert envelope.uuid == pubnub.uuid

            pubnub_listener.unsubscribe().channels(ch).execute()
            callback_presence.wait_for_disconnect()
        except PubNubException as e:
            self.fail(e)
        finally:
            pubnub.stop()
            pubnub_listener.stop()
Ejemplo n.º 23
0
    def __init__(self, publish_key, subscribe_key, device_id, channel_name):
        self.pkey = publish_key
        self.skey = subscribe_key
        self.dId = device_id
        self.cN = channel_name
        pnconfig = PNConfiguration()

        pnconfig.publish_key = str(self.pkey)
        pnconfig.subscribe_key = str(self.skey)

        self.pubnub = PubNub(pnconfig)

        global my_listener
        my_listener = SubscribeListener()
        self.pubnub.add_listener(my_listener)

        self.pubnub.subscribe().channels(str(self.cN)).execute()
        my_listener.wait_for_connect()
Ejemplo n.º 24
0
    def listen(self, functionmapper):
        '''
        Implements a multicast pub/sub. It is the responsibility of the
        subscriber determine if it needs to perform any actions based on
        the message key

        functionmapper is a dict that maps payload keys to methods to call
        Methods will receive the payload as the first argument.

        e.g.:

        ```
        functionmapper = {
            'test': {
                'module': 'config',
                'method': 'foo'
            }
        }
        ```
        '''
        my_listener = SubscribeListener()
        self.pubnub.add_listener(my_listener)

        self.pubnub.subscribe().channels(self.channel).execute()
        # self.pubnub.add_channel_to_channel_group()\
        #     .channel_group("test")\
        #     .channels(channels)\
        #     .sync()

        my_listener.wait_for_connect()
        print('connected')

        while True:
            result = my_listener.wait_for_message_on(self.channel)
            print(result.message)
            event_key = result.message.get('key')
            task_definition = functionmapper.get(event_key, None)
            print ('key: {}'.format(event_key))
            print ('task defn: {}'.format(task_definition))

            if task_definition is not None:
                mod = importlib.import_module(task_definition.get('module'))
                method = task_definition.get('method')
                getattr(mod, method)(result.message)
Ejemplo n.º 25
0
    def test_multiple_channels(self):
        pubnub = PubNub(pnconf_sub_copy())
        ch1 = helper.gen_channel("here-now-native-sync-ch1")
        ch2 = helper.gen_channel("here-now-native-sync-ch2")
        pubnub.config.uuid = "here-now-native-sync-uuid"

        subscribe_listener = SubscribeListener()
        here_now_listener = NonSubscribeListener()
        pubnub.add_listener(subscribe_listener)
        pubnub.subscribe().channels([ch1, ch2]).execute()

        subscribe_listener.wait_for_connect()

        time.sleep(5)

        pubnub.here_now().channels([ch1, ch2]).async(here_now_listener.callback)

        if here_now_listener.await() is False:
            self.fail("HereNow operation timeout")
Ejemplo n.º 26
0
    def test_single_channel(self):
        pubnub = PubNub(pnconf_sub_copy())
        ch = helper.gen_channel("herenow-asyncio-channel")
        uuid = helper.gen_channel("herenow-asyncio-uuid")
        pubnub.config.uuid = uuid

        subscribe_listener = SubscribeListener()
        here_now_listener = NonSubscribeListener()
        pubnub.add_listener(subscribe_listener)
        pubnub.subscribe().channels(ch).execute()

        subscribe_listener.wait_for_connect()

        time.sleep(2)

        pubnub.here_now().channels(ch).include_uuids(True).async(here_now_listener.callback)

        if here_now_listener.await() is False:
            self.fail("HereNow operation timeout")
class BitflyerPubnub(object):
    """docstring for BitflyerPubnub"""
    def __init__(self, channel):
        pnconfig = PNConfiguration()
        pnconfig.subscribe_key = "sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f"
        self.pubnub = PubNub(pnconfig)
        self.listener = SubscribeListener()
        self.channel = channel

    def __enter__(self):
        self.pubnub.add_listener(self.listener)
        self.pubnub.subscribe().channels([self.channel]).execute()
        self.listener.wait_for_connect()
        return self

    def listen(self, key):
        return self.listener.wait_for_message_on(self.channel).message[key]

    def __exit__(self, type, value, traceback):
        self.pubnub.unsubscribe().channels([self.channel]).execute()
        self.listener.wait_for_disconnect()
Ejemplo n.º 28
0
def pubnub_bot(setenv):
    pnconfig = PNConfiguration()
    pnconfig.subscribe_key = os.environ['SUBKEY']
    pnconfig.publish_key = os.environ['PUBKEY']
    pnconfig.subscribe_timeout = 20
    pnconfig.uuid = "d301009f-f274-435d-b2bb-40735d944392"
    pnconfig.ssl = True
    pubnub_bot = PubNub(pnconfig)
    listener = SubscribeListener()
    pubnub_bot.add_listener(listener)
    pubnub_bot.subscribe().channels('sprinkler').execute()
    listener.wait_for_connect()
    pubnub_bot.listener = listener
    # Empty message queue
    while not listener.message_queue.empty():
        listener.message_queue.get()

    yield pubnub_bot

    pubnub_bot.unsubscribe_all()
    pubnub_bot.stop()
Ejemplo n.º 29
0
    def test_multiple_channels(self):
        pubnub = PubNub(pnconf_sub_copy())
        ch1 = helper.gen_channel("here-now-native-sync-ch1")
        ch2 = helper.gen_channel("here-now-native-sync-ch2")
        pubnub.config.uuid = "here-now-native-sync-uuid"

        subscribe_listener = SubscribeListener()
        here_now_listener = NonSubscribeListener()
        pubnub.add_listener(subscribe_listener)
        pubnub.subscribe().channels([ch1, ch2]).execute()

        subscribe_listener.wait_for_connect()

        time.sleep(5)

        pubnub.here_now() \
            .channels([ch1, ch2]) \
            .async(here_now_listener.callback)

        if here_now_listener. await () is False:
            self.fail("HereNow operation timeout")
Ejemplo n.º 30
0
    def test_single_channel(self):
        pubnub = PubNub(pnconf_sub_copy())
        ch = helper.gen_channel("herenow-asyncio-channel")
        uuid = helper.gen_channel("herenow-asyncio-uuid")
        pubnub.config.uuid = uuid

        subscribe_listener = SubscribeListener()
        here_now_listener = NonSubscribeListener()
        pubnub.add_listener(subscribe_listener)
        pubnub.subscribe().channels(ch).execute()

        subscribe_listener.wait_for_connect()

        time.sleep(2)

        pubnub.here_now() \
            .channels(ch) \
            .include_uuids(True) \
            .async(here_now_listener.callback)

        if here_now_listener. await () is False:
            self.fail("HereNow operation timeout")
Ejemplo n.º 31
0
    def test_subscribe_cg_publish_unsubscribe(self):
        ch = helper.gen_channel("test-subscribe-unsubscribe-channel")
        gr = helper.gen_channel("test-subscribe-unsubscribe-group")
        message = "hey"

        pubnub = PubNub(pnconf_sub_copy())
        callback_messages = SubscribeListener()
        non_subscribe_listener = NonSubscribeListener()

        pubnub.add_channel_to_channel_group() \
            .channel_group(gr) \
            .channels(ch) \
            .pn_async(non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNChannelGroupsAddChannelResult)

        time.sleep(1)

        pubnub.add_listener(callback_messages)
        pubnub.subscribe().channel_groups(gr).execute()
        callback_messages.wait_for_connect()

        pubnub.publish().message(message).channel(ch).pn_async(
            non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNPublishResult)
        assert result.timetoken > 0

        pubnub.unsubscribe().channel_groups(gr).execute()
        callback_messages.wait_for_disconnect()

        pubnub.remove_channel_from_channel_group() \
            .channel_group(gr) \
            .channels(ch) \
            .pn_async(non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNChannelGroupsRemoveChannelResult)

        pubnub.stop()
Ejemplo n.º 32
0
    def test_subscribe_cg_publish_unsubscribe(self):
        ch = helper.gen_channel("test-subscribe-unsubscribe-channel")
        gr = helper.gen_channel("test-subscribe-unsubscribe-group")
        message = "hey"

        pubnub = PubNub(pnconf_sub_copy())
        callback_messages = SubscribeListener()
        non_subscribe_listener = NonSubscribeListener()

        pubnub.add_channel_to_channel_group() \
            .channel_group(gr) \
            .channels(ch) \
            .async(non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNChannelGroupsAddChannelResult)

        time.sleep(1)

        pubnub.add_listener(callback_messages)
        pubnub.subscribe().channel_groups(gr).execute()
        callback_messages.wait_for_connect()

        pubnub.publish().message(message).channel(ch).async(non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNPublishResult)
        assert result.timetoken > 0

        pubnub.unsubscribe().channel_groups(gr).execute()
        callback_messages.wait_for_disconnect()

        pubnub.remove_channel_from_channel_group() \
            .channel_group(gr) \
            .channels(ch) \
            .async(non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNChannelGroupsRemoveChannelResult)

        pubnub.stop()
Ejemplo n.º 33
0
    def test_callbacks(self):
        pn = _pubnub()
        subscribe_listener = SubscribeListener()
        pn.add_listener(subscribe_listener)

        test_channel = "test_ch1_%s" % utils.uuid()

        pn.subscribe() \
            .channels([test_channel]) \
            .execute()

        subscribe_listener.wait_for_connect()

        pn.set_channel_metadata() \
            .channel(test_channel) \
            .set_name("The channel %s" + utils.uuid()) \
            .sync()

        pn.set_memberships() \
            .channel_memberships([PNChannelMembership.channel(test_channel)]) \
            .sync()

        pn.set_uuid_metadata() \
            .set_name("Some Name %s" + utils.uuid()) \
            .email("*****@*****.**") \
            .sync()

        membership_result = subscribe_listener.membership_queue.get(block=True,
                                                                    timeout=10)
        channel_result = subscribe_listener.channel_queue.get(block=True,
                                                              timeout=10)
        uuid_result = subscribe_listener.uuid_queue.get(block=True, timeout=10)

        assert membership_result is not None
        assert channel_result is not None
        assert uuid_result is not None
class BitflyerHelper:

    api_key = ""
    api_secret = ""
    pubnub_subscribe_key = ""
    error_count = 0
    pubnub = None

    def __init__(self, api_key, api_secret, pubnub_subscribe_key=""):
        self.session = requests.session()
        self.api_key = api_key
        self.api_secret = api_secret
        self.pubnub_subscribe_key = pubnub_subscribe_key
        self.listener = SubscribeListener()
        self.session.mount('https://', HTTPAdapter(max_retries=5))
        self.session.mount('http://', HTTPAdapter(max_retries=5))

    # リアルタイム(pubnub)で情報を取得するためのセットアップ
    def setup_pubnub(self):
        pnconfig = PNConfiguration()
        pnconfig.subscribe_key = self.pubnub_subscribe_key
        pnconfig.ssl = False
        self.pubnub = PubNub(pnconfig)
        self.pubnub.add_listener(self.listener)

    # 板情報をリアルタイムで取得するためのセットアップ
    def subscribe_board_pubnub(self):
        self.pubnub.subscribe().channels(
            'lightning_board_snapshot_FX_BTC_JPY').execute()
        self.listener.wait_for_connect()

    # 板情報の差分をリアルタイムで取得するためのセットアップ
    def subscribe_board_diff_pubnub(self):
        self.pubnub.subscribe().channels(
            'lightning_board_FX_BTC_JPY').execute()
        self.listener.wait_for_connect()

    # 約定履歴をリアルタイムで取得するためのセットアップ
    def subscribe_executions_pubnub(self):
        self.pubnub.subscribe().channels(
            'lightning_executions_FX_BTC_JPY').execute()
        self.listener.wait_for_connect()

    # 板情報をリアルタイムで取得
    def get_board_pubnub(self):
        return self.listener.wait_for_message_on(
            "lightning_board_snapshot_FX_BTC_JPY").message

    # 板情報の差分をリアルタイムで取得
    def get_board_diff_pubnub(self):
        return self.listener.wait_for_message_on(
            "lightning_board_FX_BTC_JPY").message

    # 約定履歴をリアルタイムで取得
    def get_executions_pubnub(self):
        return self.listener.wait_for_message_on(
            'lightning_executions_FX_BTC_JPY').message

    # 4本値の取得, period: n本足を秒数で表記, after: 指定したunixtime以降のデータを取得
    """
        返り値 [UNIX timestamp, 始値, 高値, 安値, 終値, 出来高]
    """

    def get_ohlc(self, period: int, after: int, before: int):
        endpoint = "https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc?" \
                   "periods={0}&after={1}&before={2}".format(str(period), str(after), str(before))
        response = self.get_request(endpoint)
        return response

    # マーケットの一覧を取得
    def get_markets(self):
        response = self.get_request("/v1/getmarkets").json()
        return response

    # 板情報を取得
    def get_board(self, product_code: ProductCode):
        params = {"product_code": product_code.value}
        response = self.get_request("/v1/getboard", params=params).json()
        return response

    # Tickerを取得
    def get_ticker(self, product_code: ProductCode):
        params = {"product_code": product_code.value}
        response = self.get_request("/v1/getticker", params=params).json()
        return response

    # 約定履歴
    def get_executions(self, product_code: ProductCode):
        params = {"product_code": product_code.value}
        response = self.get_request("/v1/getexecutions", params=params).json()
        return response

    # 板の状態
    def get_board_state(self, product_code: ProductCode):
        params = {"product_code": product_code.value}
        response = self.get_request("/v1/getboardstate", params=params).json()
        return response

    # 取引所の状態
    def get_health(self, product_code: ProductCode):
        params = {"product_code": product_code.value}
        response = self.get_request("/v1/gethealth", params=params).json()
        return response

    # チャットの取得
    def get_chats(self, from_date: str = None):
        params = {}
        response = self.get_request("/v1/getchats", params=params).json()
        return response

    # APIキーの権限を取得
    def get_permissions(self):
        method = "GET"
        endpoint = "/v1/me/getpermissions"
        body = ""
        headers = self.create_private_header(method=method,
                                             endpoint=endpoint,
                                             body=body)
        response = self.get_request(endpoint=endpoint,
                                    params=body,
                                    headers=headers).json()
        return response

    # 資産残高を取得
    def get_balance(self):
        method = "GET"
        endpoint = "/v1/me/getbalance"
        body = ""
        headers = self.create_private_header(method=method,
                                             endpoint=endpoint,
                                             body=body)
        response = self.get_request(endpoint=endpoint,
                                    params=body,
                                    headers=headers).json()
        return response

    # 証拠金の状態を取得
    def get_collateral(self):
        method = "GET"
        endpoint = "/v1/me/getcollateral"
        body = ""
        headers = self.create_private_header(method=method,
                                             endpoint=endpoint,
                                             body=body)
        response = self.get_request(endpoint=endpoint,
                                    params=body,
                                    headers=headers).json()
        return response

    # 通貨別の証拠金の数量を取得
    def get_collateralaccounts(self):
        method = "GET"
        endpoint = "/v1/me/getcollateralaccounts"
        body = ""
        headers = self.create_private_header(method=method,
                                             endpoint=endpoint,
                                             body=body)
        response = self.get_request(endpoint=endpoint,
                                    params=body,
                                    headers=headers).json()
        return response

    # 新規注文を出す
    def send_child_order(self, child_order: ChildOrder):
        method = "POST"
        endpoint = "/v1/me/sendchildorder"
        body = child_order.to_body()
        print(body)
        body = json.dumps(body)
        headers = self.create_private_header(method=method,
                                             endpoint=endpoint,
                                             body=body)
        response = self.post_request(endpoint=endpoint,
                                     params=body,
                                     headers=headers).json()
        print(response)
        return response

    # 注文をキャンセルする
    def cancel_child_order(self, product_code: ProductCode,
                           child_order_acceptance_id: str):
        method = "POST"
        endpoint = "/v1/me/cancelchildorder"
        body = {
            "product_code": product_code.value,
            "child_order_acceptance_id": child_order_acceptance_id
        }
        body = json.dumps(body)
        headers = self.create_private_header(method=method,
                                             endpoint=endpoint,
                                             body=body)
        response = self.post_request(endpoint=endpoint,
                                     params=body,
                                     headers=headers)
        return response

    # 新規の親注文を出す(特殊注文)
    def send_parent_order(self, parent_order):
        method = "POST"
        endpoint = "/v1/me/sendparentorder"
        body = parent_order.to_body()
        body = json.dumps(body)
        headers = self.create_private_header(method=method,
                                             endpoint=endpoint,
                                             body=body)
        response = self.post_request(endpoint=endpoint,
                                     params=body,
                                     headers=headers).json()
        print(response)
        return response

    # 注文の一覧を取得
    def get_child_orders(self, product_code: ProductCode):
        method = "GET"
        endpoint = "/v1/me/getchildorders?product_code={}".format(
            product_code.value)
        headers = self.create_private_header(method=method,
                                             endpoint=endpoint,
                                             body="")
        response = self.get_request(endpoint=endpoint, headers=headers).json()
        return response

    # 建玉の一覧を取得
    def get_positions(self, product_code: ProductCode):
        method = "GET"
        endpoint = "/v1/me/getpositions?product_code={}".format(
            product_code.value)
        headers = self.create_private_header(method=method,
                                             endpoint=endpoint,
                                             body="")
        response = self.get_request(endpoint=endpoint, headers=headers)
        if response.status_code == 200:
            return response.json()
        else:
            return None

    # Private API用のヘッダーを作成
    def create_private_header(self, method, endpoint, body):
        if self.api_key and self.api_secret:
            access_timestamp = str(time.time())
            api_secret = str.encode(self.api_secret)
            text = str.encode(access_timestamp + method + endpoint + body)
            access_sign = hmac.new(api_secret, text,
                                   hashlib.sha256).hexdigest()
            auth_header = {
                "ACCESS-KEY": self.api_key,
                "ACCESS-TIMESTAMP": access_timestamp,
                "ACCESS-SIGN": access_sign,
                "Content-Type": "application/json"
            }
            return auth_header
        else:
            sys.exit()

    # GETメソッド用
    def get_request(self, endpoint, params=None, headers=None):
        if endpoint[0] == "/":
            url = BASE_URL.format(endpoint)
        else:
            url = endpoint
        while True:
            try:
                response = self.session.get(url,
                                            params=params,
                                            timeout=5,
                                            headers=headers)
                if not (response.status_code == 200
                        or response.status_code == 404):
                    continue
                self.error_count = 0
                return response
            except Exception as e:
                if self.error_count < error_limit:
                    self.error_count += 1
                    continue
                else:
                    sys.exit(e)

    # POSTメソッド用
    def post_request(self, endpoint, params=None, headers=None):
        url = BASE_URL.format(endpoint)
        while True:
            try:
                response = self.session.post(url,
                                             data=params,
                                             timeout=5,
                                             headers=headers)
                if response.status_code != 200:
                    continue
                self.error_count = 0
                return response
            except Exception as e:
                if self.error_count < error_limit:
                    self.error_count += 1
                    continue
                else:
                    sys.exit(e)
Ejemplo n.º 35
0
def setup_listener(pubnub, channel_name):
    listener = SubscribeListener()
    pubnub.add_listener(listener)
    pubnub.subscribe().channels(channel_name).execute()
    listener.wait_for_connect()
    return listener
Ejemplo n.º 36
0
    def test_subscribe_cg_join_leave(self):
        ch = helper.gen_channel("test-subscribe-unsubscribe-channel")
        gr = helper.gen_channel("test-subscribe-unsubscribe-group")

        pubnub = PubNub(pnconf_sub_copy())
        pubnub_listener = PubNub(pnconf_sub_copy())
        non_subscribe_listener = NonSubscribeListener()

        pubnub.add_channel_to_channel_group() \
            .channel_group(gr) \
            .channels(ch) \
            .pn_async(non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNChannelGroupsAddChannelResult)

        time.sleep(1)

        callback_messages = SubscribeListener()
        callback_presence = SubscribeListener()

        pubnub_listener.add_listener(callback_presence)
        pubnub_listener.subscribe().channel_groups(
            gr).with_presence().execute()
        callback_presence.wait_for_connect()

        prs_envelope = callback_presence.wait_for_presence_on(ch)
        assert prs_envelope.event == 'join'
        assert prs_envelope.uuid == pubnub_listener.uuid
        assert prs_envelope.channel == ch
        assert prs_envelope.subscription == gr

        pubnub.add_listener(callback_messages)
        pubnub.subscribe().channel_groups(gr).execute()

        prs_envelope = callback_presence.wait_for_presence_on(ch)

        assert prs_envelope.event == 'join'
        assert prs_envelope.uuid == pubnub.uuid
        assert prs_envelope.channel == ch
        assert prs_envelope.subscription == gr

        pubnub.unsubscribe().channel_groups(gr).execute()
        prs_envelope = callback_presence.wait_for_presence_on(ch)

        assert prs_envelope.event == 'leave'
        assert prs_envelope.uuid == pubnub.uuid
        assert prs_envelope.channel == ch
        assert prs_envelope.subscription == gr

        pubnub_listener.unsubscribe().channel_groups(gr).execute()
        callback_presence.wait_for_disconnect()

        pubnub.remove_channel_from_channel_group() \
            .channel_group(gr) \
            .channels(ch) \
            .pn_async(non_subscribe_listener.callback)
        result = non_subscribe_listener.await_result_and_reset()
        assert isinstance(result, PNChannelGroupsRemoveChannelResult)

        pubnub.stop()
        pubnub_listener.stop()
Ejemplo n.º 37
0
    def message(self, pubnub, message):
        print(message)

    def presence(self, pubnub, presence):
        pass


my_listener = SubscribeListener(
)  # create listner_object to read the msg from the Broker/Server
pubnub.add_listener(
    my_listener)  # add listner_object to pubnub_object to subscribe it
pubnub.subscribe().channels(
    channel).execute()  # subscribe the channel (Runs in background)

my_listener.wait_for_connect(
)  # wait for the listner_obj to connect to the Broker.Channel
print('connected')  # print confirmation msg

pubnub.publish().channel(channel).message(
    data).sync()  # publish the data to the mentioned channel

while True:  # Infinite loop
    result = my_listener.wait_for_message_on(
        channel)  # Read the new msg on the channel
    print(result.message)  # print the new msg
    for command in result.message.values():
        # Check for PM command.
        if command == pmx_str:
            pm_instance = pt_pms5003('/dev/ttyAMA0')
            pma, pmb, pmc = pm_instance.pt_pms5003_read()
            data['message'] = "PM 1.0=" + str(pma) + " PM 2.5=" + str(
Ejemplo n.º 38
0
from key import get_pubnub_obj

from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub, SubscribeListener

pixel_pin = board.D18
num_pixels = 60 * 5
ORDER = neopixel.GRB
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.05, auto_write=False, pixel_order=ORDER)

pubnub = get_pubnub_obj()
my_listener = SubscribeListener()
pubnub.add_listener(my_listener)

pubnub.subscribe().channels('ledWall').execute()
my_listener.wait_for_connect()

color_index = 0

def get_clean_screen():
  return [
		'0000000000000000000000000000000000000000000000000000000000000',
		'0000000000000000000000000000000000000000000000000000000000000',
		'0000000000000000000000000000000000000000000000000000000000000',
		'0000000000000000000000000000000000000000000000000000000000000',
		'0000000000000000000000000000000000000000000000000000000000000'
	]

def shiftLeft(numTimes, screen):
	return [
		screen[0][numTimes:],