class Publisher(SignalLogger): """Base class for signaling Publisher. The base __init__ function setups the signaling object that a Subscriber can connect to. """ def __init__(self): """Setups signaling object. """ super().__init__() self._signal = Signal() def subscribe(self, handle): """Subscribe a handle to this publisher. """ self._signal.connect(handle) def unsubscribe(self, handle): """Unsubscribe a handle from this publisher. """ self._signal.disconnect(handle) def emit(self, **kwargs): """Emits arguments to the subscribers. """ self._signal.send(sender=self, **kwargs)
def suspended_signal( signal, receiver, sender=None, weak=True, dispatch_uid=None ): result = Signal.disconnect( signal, receiver, sender=sender, dispatch_uid=dispatch_uid ) assert result, 'Signal was not disconnected; details: {}'.format( (signal, receiver, sender, dispatch_uid)) try: yield result finally: Signal.connect( signal, receiver, sender=sender, weak=weak, dispatch_uid=dispatch_uid )