Source code for save_to_db.core.utils.signal

[docs]class Signal(object): """This class is used to emit signals. :ivar name: Signal name. """ def __init__(self, name): self.name = name self.__listeners = []
[docs] def register(self, listener): """Registers listener to the signal. .. note:: This method can be also used as a decorator: .. code-block:: Python signal = Signal('MySignal') @signal.register def signal_listener(value): print('Signal value: {}'.format(value)) # Output: "Signal value: Demo Value" signal.emit('Demo Value') """ if listener not in self.__listeners: self.__listeners.append(listener) # returning listener makes it possible to use this function as # a decorator return listener
[docs] def unregister(self, listener): """ Unregisters listener from the signal. """ if listener in self.__listeners: self.__listeners.remove(listener)
[docs] def clear(self): """ Removes all listeners from the signal. """ self.__listeners.clear()
[docs] def emit(self, *args, **kwargs): """Emits the signal. All listeners will be called with the same arguments as this method. """ for listener in self.__listeners: listener(*args, **kwargs)
def __repr__(self): return "<Signal('{}')>".format(self.name)