示例#1
0
def testSubscribe():
    topicName = 'testSubscribe'
    def proto(a, b, c=None): pass
    topicMgr.getOrCreateTopic(topicName, proto)

    def listener(a, b, c=None): pass
    # verify that pub.isValid() works too
    pub.validate(listener, topicName)
    assert pub.isValid(listener, topicName)

    assert topicMgr.getTopic(topicName).getNumListeners() == 0
    assert topicMgr.getTopicsSubscribed(listener) == []
    assert not pub.isSubscribed(listener, topicName)
    assert pub.subscribe(listener, topicName)
    assert pub.isSubscribed(listener, topicName)
    def topicNames(listener):
        return [t.getName() for t in topicMgr.getTopicsSubscribed(listener)]
    assert topicNames(listener) == [topicName]
    # should do nothing if already subscribed:
    assert not pub.subscribe(listener, topicName)[1]
    assert topicMgr.getTopic(topicName).getNumListeners() == 1

    # test topicMgr.getTopicsSubscribed()
    pub.subscribe(listener, 'lt2', )
    assert set(topicNames(listener)) == set([topicName,'lt2'])
    pub.subscribe(listener, 'lt1.lst1')
    assert set(topicNames(listener)) == set([topicName,'lt2','lt1.lst1'])

    # test ALL_TOPICS
    def listenToAll(): pass
    pub.subscribe(listenToAll, pub.ALL_TOPICS)
    assert topicNames(listenToAll) == [pub.ALL_TOPICS]
示例#2
0
def _subscribe(self):
    def sgetter(funcname):
        def realsgetter(owner, msg):
            return owner._subs[funcname](owner, msg)
        return realsgetter

    # wx classes throw exception if getmember is applied to the instance (self)
    methods = inspect.getmembers(self.__class__, inspect.ismethod)
    topicmgr = pub.getDefaultTopicMgr()
    for mname, method in methods:
        pubsubtopic = getattr(method, '_pubrecv', None)
        if pubsubtopic:
            self._subs[mname] = method
            subsgetter = sgetter(mname)
            if not topicmgr.getTopic(pubsubtopic, True) or not pub.isSubscribed(subsgetter, pubsubtopic):
                setattr(self, mname, subsgetter)
                pub.subscribe(subsgetter.__get__(self, self.__class__), pubsubtopic)
示例#3
0
 def remove_listener(self, listener):
     """Remove a listener for a topic
     
     Args:
     ----
     listener : dict
         A dictionary comprised of a "handler": handler (fct) and a "topic":"topicname" key-value pairs
     """
     try:
         if pub.isSubscribed(listener["handler"], listener["topic"]):
             pub.unsubscribe(listener["handler"], listener["topic"])
         else:
             logger.debug("Listener not subscribed", listener)
     except Exception as exc:
         print(f"Removing webhooks listener failed! {exc!r} occurred.")
         logger.warn(
             f"Removing webhooks listener failed! {exc!r} occurred.")
示例#4
0
def _subscribe(self):
    def sgetter(funcname):
        def realsgetter(owner, msg):
            return owner._subs[funcname](owner, msg)

        return realsgetter

    # wx classes throw exception if getmember is applied to the instance (self)
    methods = inspect.getmembers(self.__class__, inspect.ismethod)
    topicmgr = pub.getDefaultTopicMgr()
    for mname, method in methods:
        pubsubtopic = getattr(method, '_pubrecv', None)
        if pubsubtopic:
            self._subs[mname] = method
            subsgetter = sgetter(mname)
            if not topicmgr.getTopic(pubsubtopic,
                                     True) or not pub.isSubscribed(
                                         subsgetter, pubsubtopic):
                setattr(self, mname, subsgetter)
                pub.subscribe(subsgetter.__get__(self, self.__class__),
                              pubsubtopic)
示例#5
0
 def remove_listener(self, listener):
     if pub.isSubscribed(listener["handler"], listener["topic"]):
         pub.unsubscribe(listener["handler"], listener["topic"])
     else:
         logger.debug("Listener not subscribed", listener)
示例#6
0
 def isSubscribed(self, listener, topic):
     topic = self._get_pubsub_uid() + '.' + topic
     return pub.isSubscribed(listener, topic)