(self, listener: UserListener, **curriedArgs)
return subdLisnr, newSub
Subscribe listener to this topic. Returns a pair (pub.Listener, success).

        :param curriedArgs: keyword argument to curry the listener arguments at message time; the listener(args) is
            treated essentially as ``listener(**(args - curriedArgs))``. If the listener was already subscribed,
            the pure curried args names (curriendArgs.keys() - _overrides_) must be unchanged.
        :return: True only if listener was not already subscribed; False if it was already subscribed.
Subscribe listener to this topic. Returns a pair (pub.Listener, success).
Subscribe listener to this topic . Returns a pair ( pub . Listener success ) .
def subscribe(self, listener: UserListener, **curriedArgs) -> Tuple[Listener, bool]:
        """
        Subscribe listener to this topic. Returns a pair (pub.Listener, success).

        :param curriedArgs: keyword argument to curry the listener arguments at message time; the listener(args) is
            treated essentially as ``listener(**(args - curriedArgs))``. If the listener was already subscribed,
            the pure curried args names (curriendArgs.keys() - _overrides_) must be unchanged.
        :return: True only if listener was not already subscribed; False if it was already subscribed.
        """
        if listener in self.__listeners:
            assert self.hasMDS()
            newSub = False
            subdLisnr = self.__listeners[listener]

            # subscribe with different curried args; only ok if the keys are the same!
            if curriedArgs:
                subdLisnr.setCurriedArgs(**curriedArgs)

        else:
            newSub = True
            if self.__validator is None:
                args, reqd = topicArgsFromCallable(listener, ignoreArgs=curriedArgs)
                self.setMsgArgSpec(args, reqd)
                assert self.__validator is not None
            argsInfo = self.__validator.validate(listener, curriedArgNames=curriedArgs)
            weakListener = Listener(
                listener, argsInfo, curriedArgs=curriedArgs, onDead=self.__onDeadListener)
            self.__listeners[weakListener] = weakListener
            subdLisnr = weakListener

        # notify of subscription
        self._treeConfig.notificationMgr.notifySubscribe(subdLisnr, self, newSub)

        return subdLisnr, newSub
def subscribe ( self , listener : UserListener , * * curriedArgs ) -> Tuple [ Listener , bool ] : if listener in self . __listeners : assert self . hasMDS ( ) newSub = False subdLisnr = self . __listeners [ listener ] # subscribe with different curried args; only ok if the keys are the same! if curriedArgs : subdLisnr . setCurriedArgs ( * * curriedArgs ) else : newSub = True if self . __validator is None : args , reqd = topicArgsFromCallable ( listener , ignoreArgs = curriedArgs ) self . setMsgArgSpec ( args , reqd ) assert self . __validator is not None argsInfo = self . __validator . validate ( listener , curriedArgNames = curriedArgs ) weakListener = Listener ( listener , argsInfo , curriedArgs = curriedArgs , onDead = self . __onDeadListener ) self . __listeners [ weakListener ] = weakListener subdLisnr = weakListener # notify of subscription self . _treeConfig . notificationMgr . notifySubscribe ( subdLisnr , self , newSub ) return subdLisnr , newSub