mirror of https://github.com/mitsuhiko/flask.git
Armin Ronacher
15 years ago
10 changed files with 212 additions and 4 deletions
@ -0,0 +1,50 @@
|
||||
# -*- coding: utf-8 -*- |
||||
""" |
||||
flask.signals |
||||
~~~~~~~~~~~~~ |
||||
|
||||
Implements signals based on blinker if available, otherwise |
||||
falls silently back to a noop |
||||
|
||||
:copyright: (c) 2010 by Armin Ronacher. |
||||
:license: BSD, see LICENSE for more details. |
||||
""" |
||||
signals_available = False |
||||
try: |
||||
from blinker import Namespace |
||||
signals_available = True |
||||
_signals = Namespace() |
||||
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 = _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 sourcecode or consult |
||||
# the API documentation in docs/api.rst as well as docs/signals.rst |
||||
template_rendered = _signals.signal('template-rendered') |
||||
request_started = _signals.signal('request-started') |
||||
request_finished = _signals.signal('request-finished') |
||||
got_request_exception = _signals.signal('got-request-exception') |
Loading…
Reference in new issue