From 24d7a6d58f490d0a99a5dca2aacb7856ea3c3b71 Mon Sep 17 00:00:00 2001 From: erikvw Date: Thu, 25 Jan 2024 21:23:40 -0600 Subject: [PATCH] fix edc_notification paths, move signals into models module, apps --- edc_adverse_event/apps.py | 7 ----- edc_adverse_event/auths.py | 2 +- edc_adverse_event/models/__init__.py | 7 +++++ edc_adverse_event/{ => models}/signals.py | 32 ++++++++++++++--------- edc_adverse_event/notifications.py | 3 ++- runtests.py | 4 +++ 6 files changed, 33 insertions(+), 22 deletions(-) rename edc_adverse_event/{ => models}/signals.py (76%) diff --git a/edc_adverse_event/apps.py b/edc_adverse_event/apps.py index 94f19ab..2daccb7 100644 --- a/edc_adverse_event/apps.py +++ b/edc_adverse_event/apps.py @@ -6,10 +6,3 @@ class AppConfig(DjangoAppConfig): verbose_name = "Adverse Events" has_exportable_data = True include_in_administration_section = True - - def ready(self): - from .signals import post_delete_ae_susar # noqa; noqa - from .signals import update_ae_initial_for_susar # noqa - from .signals import update_ae_initial_susar_reported # noqa - from .signals import update_ae_notifications_for_tmg_group # noqa - from .signals import update_death_notifications_for_tmg_group # noqa diff --git a/edc_adverse_event/auths.py b/edc_adverse_event/auths.py index 039a678..bb4b4bc 100644 --- a/edc_adverse_event/auths.py +++ b/edc_adverse_event/auths.py @@ -1,4 +1,4 @@ -from edc_auth.auth_objects import ( +from edc_auth.constants import ( AUDITOR_ROLE, CLINICIAN_ROLE, CLINICIAN_SUPER_ROLE, diff --git a/edc_adverse_event/models/__init__.py b/edc_adverse_event/models/__init__.py index c6a5b0a..052c43a 100644 --- a/edc_adverse_event/models/__init__.py +++ b/edc_adverse_event/models/__init__.py @@ -3,3 +3,10 @@ from .cause_of_death import CauseOfDeath from .edc_permissions import EdcPermissions from .sae_reason import SaeReason +from .signals import ( + post_delete_ae_susar, + update_ae_initial_for_susar, + update_ae_initial_susar_reported, + update_ae_notifications_for_tmg_group, + update_death_notifications_for_tmg_group, +) diff --git a/edc_adverse_event/signals.py b/edc_adverse_event/models/signals.py similarity index 76% rename from edc_adverse_event/signals.py rename to edc_adverse_event/models/signals.py index ec67dcf..f13acf9 100644 --- a/edc_adverse_event/signals.py +++ b/edc_adverse_event/models/signals.py @@ -6,11 +6,8 @@ from edc_notification.models import Notification from edc_utils import get_utcnow -from .constants import AE_TMG_ACTION, DEATH_REPORT_TMG_ACTION, TMG -from .utils import get_ae_model - -AeInitial = get_ae_model("AeInitial") -AeSusar = get_ae_model("AeSusar") +from ..constants import AE_TMG_ACTION, DEATH_REPORT_TMG_ACTION, TMG +from ..utils import get_ae_model @receiver(m2m_changed, weak=False, dispatch_uid="update_ae_notifications_for_tmg_group") @@ -36,10 +33,13 @@ def update_ae_notifications_for_tmg_group( instance.userprofile.email_notifications.add(tmg_ae_notification) -@receiver(post_save, sender=AeSusar, weak=False, dispatch_uid="update_ae_initial_for_susar") +@receiver(post_save, weak=False, dispatch_uid="update_ae_initial_for_susar") def update_ae_initial_for_susar(sender, instance, raw, update_fields, **kwargs): if not raw and not update_fields: - if getattr(instance.ae_initial, "susar", None): + ae_susar_model_cls = get_ae_model("AeSusar") + if isinstance(instance, (ae_susar_model_cls,)) and getattr( + instance.ae_initial, "susar", None + ): if instance.submitted_datetime: if instance.ae_initial.susar_reported != YES: instance.ae_initial.susar = YES @@ -53,26 +53,32 @@ def update_ae_initial_for_susar(sender, instance, raw, update_fields, **kwargs): @receiver( post_save, - sender=AeInitial, weak=False, dispatch_uid="update_ae_initial_susar_reported", ) def update_ae_initial_susar_reported(sender, instance, raw, update_fields, **kwargs): if not raw and not update_fields: - if getattr(instance, "susar", None): + ae_initial_model_cls = get_ae_model("AeInitial") + if isinstance(instance, (ae_initial_model_cls,)) and getattr(instance, "susar", None): + ae_susar_model_cls = get_ae_model("AeSusar") if instance.susar == YES and instance.susar_reported == YES: try: with transaction.atomic(): - AeSusar.objects.get(ae_initial=instance) + ae_susar_model_cls.objects.get(ae_initial=instance) except ObjectDoesNotExist: - AeSusar.objects.create( + ae_susar_model_cls.objects.create( ae_initial=instance, submitted_datetime=get_utcnow() ) -@receiver(post_delete, sender=AeSusar, weak=False, dispatch_uid="post_delete_ae_susar") +@receiver(post_delete, weak=False, dispatch_uid="post_delete_ae_susar") def post_delete_ae_susar(instance, **kwargs): - if instance.ae_initial.susar == YES and instance.ae_initial.susar_reported != NO: + ae_susar_model_cls = get_ae_model("AeSusar") + if ( + isinstance(instance, (ae_susar_model_cls,)) + and instance.ae_initial.susar == YES + and instance.ae_initial.susar_reported != NO + ): instance.ae_initial.susar_reported = NO instance.ae_initial.save() diff --git a/edc_adverse_event/notifications.py b/edc_adverse_event/notifications.py index 82b78e8..80b643c 100644 --- a/edc_adverse_event/notifications.py +++ b/edc_adverse_event/notifications.py @@ -1,4 +1,5 @@ -from edc_notification import GradedEventNotification, ModelNotification, register +from edc_notification.decorators import register +from edc_notification.notification import GradedEventNotification, ModelNotification from .utils import get_adverse_event_app_label diff --git a/runtests.py b/runtests.py index 8f0dd6c..0c97a5b 100644 --- a/runtests.py +++ b/runtests.py @@ -46,10 +46,13 @@ "edc_appointment.apps.AppConfig", "edc_consent.apps.AppConfig", "edc_crf.apps.AppConfig", + "edc_data_manager.apps.AppConfig", "edc_dashboard.apps.AppConfig", "edc_device.apps.AppConfig", "edc_facility.apps.AppConfig", + "edc_form_runners.apps.AppConfig", "edc_identifier.apps.AppConfig", + "edc_lab.apps.AppConfig", "edc_list_data.apps.AppConfig", "edc_locator.apps.AppConfig", "edc_metadata.apps.AppConfig", @@ -65,6 +68,7 @@ "edc_visit_tracking.apps.AppConfig", "edc_visit_schedule.apps.AppConfig", "adverse_event_app.apps.AppConfig", + "edc_appconfig.apps.AppConfig", ], add_dashboard_middleware=True, ).settings