1__all__ = ( 2 "pre_init", 3 "post_init", 4 "pre_save", 5 "pre_save_post_validation", 6 "post_save", 7 "pre_delete", 8 "post_delete", 9) 10 11signals_available = False 12try: 13 from blinker import Namespace 14 15 signals_available = True 16except ImportError: 17 18 class Namespace: 19 def signal(self, name, doc=None): 20 return _FakeSignal(name, doc) 21 22 class _FakeSignal: 23 """If blinker is unavailable, create a fake class with the same 24 interface that allows sending of signals but will fail with an 25 error on anything else. Instead of doing anything on send, it 26 will just ignore the arguments and do nothing instead. 27 """ 28 29 def __init__(self, name, doc=None): 30 self.name = name 31 self.__doc__ = doc 32 33 def _fail(self, *args, **kwargs): 34 raise RuntimeError( 35 "signalling support is unavailable " 36 "because the blinker library is " 37 "not installed." 38 ) 39 40 send = lambda *a, **kw: None # noqa 41 connect = ( 42 disconnect 43 ) = has_receivers_for = receivers_for = temporarily_connected_to = _fail 44 del _fail 45 46 47# the namespace for code signals. If you are not mongoengine code, do 48# not put signals in here. Create your own namespace instead. 49_signals = Namespace() 50 51pre_init = _signals.signal("pre_init") 52post_init = _signals.signal("post_init") 53pre_save = _signals.signal("pre_save") 54pre_save_post_validation = _signals.signal("pre_save_post_validation") 55post_save = _signals.signal("post_save") 56pre_delete = _signals.signal("pre_delete") 57post_delete = _signals.signal("post_delete") 58pre_bulk_insert = _signals.signal("pre_bulk_insert") 59post_bulk_insert = _signals.signal("post_bulk_insert") 60