1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import typing as t
- try:
- from blinker import Namespace
- signals_available = True
- except ImportError:
- signals_available = False
- class Namespace: # type: ignore
- def signal(self, name: str, doc: t.Optional[str] = None) -> "_FakeSignal":
- return _FakeSignal(name, doc)
- class _FakeSignal:
- """If blinker is unavailable, create a fake class with the same
- interface that allows sending of signals but will fail with an
- error on anything else. Instead of doing anything on send, it
- will just ignore the arguments and do nothing instead.
- """
- def __init__(self, name: str, doc: t.Optional[str] = None) -> None:
- self.name = name
- self.__doc__ = doc
- def send(self, *args: t.Any, **kwargs: t.Any) -> t.Any:
- pass
- def _fail(self, *args: t.Any, **kwargs: t.Any) -> t.Any:
- raise RuntimeError(
- "Signalling support is unavailable because the blinker"
- " library is not installed."
- ) from None
- connect = connect_via = connected_to = temporarily_connected_to = _fail
- disconnect = _fail
- has_receivers_for = receivers_for = _fail
- del _fail
- # The namespace for code signals. If you are not Flask code, do
- # not put signals in here. Create your own namespace instead.
- _signals = Namespace()
- # Core signals. For usage examples grep the source code or consult
- # the API documentation in docs/api.rst as well as docs/signals.rst
- template_rendered = _signals.signal("template-rendered")
- before_render_template = _signals.signal("before-render-template")
- request_started = _signals.signal("request-started")
- request_finished = _signals.signal("request-finished")
- request_tearing_down = _signals.signal("request-tearing-down")
- got_request_exception = _signals.signal("got-request-exception")
- appcontext_tearing_down = _signals.signal("appcontext-tearing-down")
- appcontext_pushed = _signals.signal("appcontext-pushed")
- appcontext_popped = _signals.signal("appcontext-popped")
- message_flashed = _signals.signal("message-flashed")
|