123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- # -*- coding: utf-8 -*-
- """
- flask.signals
- ~~~~~~~~~~~~~
- Implements signals based on blinker if available, otherwise
- falls silently back to a noop.
- :copyright: © 2010 by the Pallets team.
- :license: BSD, see LICENSE for more details.
- """
- signals_available = False
- try:
- from blinker import Namespace
- signals_available = True
- except ImportError:
- 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 _fail(self, *args, **kwargs):
- raise RuntimeError('signalling support is unavailable '
- 'because the blinker library is '
- 'not installed.')
- send = lambda *a, **kw: None
- connect = disconnect = has_receivers_for = receivers_for = \
- temporarily_connected_to = connected_to = _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')
|