1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- # -*- coding: utf-8 -*-
- """
- flask.signals
- ~~~~~~~~~~~~~
- Implements signals based on blinker if available, otherwise
- falls silently back to a noop.
- :copyright: 2010 Pallets
- :license: BSD-3-Clause
- """
- try:
- from blinker import Namespace
- signals_available = True
- except ImportError:
- signals_available = False
- class Namespace(object):
- def signal(self, name, doc=None):
- return _FakeSignal(name, doc)
- class _FakeSignal(object):
- """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, doc=None):
- self.name = name
- self.__doc__ = doc
- def send(self, *args, **kwargs):
- pass
- def _fail(self, *args, **kwargs):
- raise RuntimeError(
- "Signalling support is unavailable because the blinker"
- " library is not installed."
- )
- 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")
|