Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/django/db/models/signals.py: 86%
25 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1from functools import partial
3from django.db.models.utils import make_model_tuple
4from django.dispatch import Signal
6class_prepared = Signal()
9class ModelSignal(Signal):
10 """
11 Signal subclass that allows the sender to be lazily specified as a string
12 of the `app_label.ModelName` form.
13 """
15 def _lazy_method(self, method, apps, receiver, sender, **kwargs):
16 from django.db.models.options import Options
18 # This partial takes a single optional argument named "sender".
19 partial_method = partial(method, receiver, **kwargs)
20 if isinstance(sender, str): 20 ↛ 21line 20 didn't jump to line 21, because the condition on line 20 was never true
21 apps = apps or Options.default_apps
22 apps.lazy_model_operation(partial_method, make_model_tuple(sender))
23 else:
24 return partial_method(sender)
26 def connect(self, receiver, sender=None, weak=True, dispatch_uid=None, apps=None):
27 self._lazy_method(
28 super().connect,
29 apps,
30 receiver,
31 sender,
32 weak=weak,
33 dispatch_uid=dispatch_uid,
34 )
36 def disconnect(self, receiver=None, sender=None, dispatch_uid=None, apps=None):
37 return self._lazy_method(
38 super().disconnect, apps, receiver, sender, dispatch_uid=dispatch_uid
39 )
42pre_init = ModelSignal(use_caching=True)
43post_init = ModelSignal(use_caching=True)
45pre_save = ModelSignal(use_caching=True)
46post_save = ModelSignal(use_caching=True)
48pre_delete = ModelSignal(use_caching=True)
49post_delete = ModelSignal(use_caching=True)
51m2m_changed = ModelSignal(use_caching=True)
53pre_migrate = Signal()
54post_migrate = Signal()