Coverage for apis_core / entities / signals.py: 55%
29 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 11:37 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 11:37 +0000
1import logging
3from django.conf import settings
4from django.contrib.contenttypes.models import ContentType
5from django.db.models.signals import post_save
6from django.dispatch import receiver
8from apis_core.entities.abc import Entity
9from apis_core.entities.models import EntityID
10from apis_core.generic.signals import post_merge_with
12logger = logging.getLogger(__name__)
15@receiver(post_save)
16def create_default_entity_id(
17 sender, instance, created, raw, using, update_fields, **kwargs
18):
19 # disable the handler during fixture loading
20 if raw:
21 return
23 if not isinstance(instance, Entity):
24 return
26 skip_entity_id_creation = getattr(instance, "skip_entity_id_creation", False)
27 create_entity_ids = getattr(settings, "CREATE_ENTITY_IDS", True)
28 if created and create_entity_ids and not skip_entity_id_creation:
29 e = EntityID(content_object=instance)
30 e.save()
31 logger.info(
32 "Created EntityID %s as a result of saving %s", repr(e), repr(instance)
33 )
36@receiver(post_merge_with)
37def merge_entity_ids(sender, instance, entities, *args, **kwargs):
38 for entity in entities:
39 content_type = ContentType.objects.get_for_model(entity)
40 for e in EntityID.objects.filter(
41 content_type=content_type, object_id=entity.id
42 ):
43 logger.info(
44 "Updating EntityID %s to point to %s as a result of merging %s",
45 repr(e),
46 repr(instance),
47 repr(entity),
48 )
49 e.content_object = instance
50 e.save()