Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

agriconnect / aiohttp   python

Repository URL to install this package:

/ signals.py

from aiohttp.frozenlist import FrozenList

__all__ = ('Signal',)

class Signal(FrozenList):
    """Coroutine-based signal implementation.

    To connect a callback to a signal, use any list method.

    Signals are fired using the send() coroutine, which takes named

    __slots__ = ('_owner',)

    def __init__(self, owner):
        self._owner = owner

    def __repr__(self):
        return '<Signal owner={}, frozen={}, {!r}>'.format(self._owner,

    async def send(self, *args, **kwargs):
        Sends data to all registered receivers.
        if not self.frozen:
            raise RuntimeError("Cannot send non-frozen signal.")

        for receiver in self:
            await receiver(*args, **kwargs)  # type: ignore