mirror of https://github.com/pallets/flask.git
				
				
				
			
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| # -*- 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 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")
 |