meta-edc 0.3.25__py3-none-any.whl → 0.3.26__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -436,14 +436,14 @@ class GlucoseEndpointsByDate:
436
436
  self.df = self.df.sort_values(by=["subject_identifier", "fbg_datetime"])
437
437
  self.df = self.df.reset_index(drop=True)
438
438
 
439
- def to_model(self, model: str | None = None, subject_identifiers: list[str] | None = None):
439
+ def to_model(self):
440
440
  """Write endpoint_only_df to the Endpoints model"""
441
441
  df = self.endpoint_only_df
442
- model = model or "meta_reports.endpoints"
442
+ model = "meta_reports.endpoints"
443
443
  now = get_utcnow()
444
444
  model_cls = django_apps.get_model(model)
445
- if subject_identifiers:
446
- model_cls.objects.filter(subject_identifier__in=subject_identifiers).delete()
445
+ if self.subject_identifiers:
446
+ model_cls.objects.filter(subject_identifier__in=self.subject_identifiers).delete()
447
447
  else:
448
448
  model_cls.objects.all().delete()
449
449
  created = 0
@@ -1,9 +1,35 @@
1
+ from typing import Any
2
+
3
+ from django.core.checks import messages
4
+ from django.core.exceptions import ObjectDoesNotExist
5
+ from django.urls import reverse
6
+ from django.utils.html import format_html
1
7
  from django.utils.translation import gettext_lazy as _
2
8
  from edc_subject_dashboard.views import SubjectDashboardView
3
9
 
10
+ from meta_reports.models import Endpoints, GlucoseSummary
11
+
4
12
 
5
13
  class DashboardView(SubjectDashboardView):
6
14
  consent_model = "meta_consent.subjectconsentv1"
7
15
  navbar_selected_item = "consented_subject"
8
16
  visit_model = "meta_subject.subjectvisit"
9
17
  history_button_label = _("Audit")
18
+
19
+ def get_context_data(self, **kwargs) -> dict[str, Any]:
20
+ context = super().get_context_data(**kwargs)
21
+ try:
22
+ Endpoints.objects.get(subject_identifier=self.subject_identifier)
23
+ except ObjectDoesNotExist:
24
+ pass
25
+ else:
26
+ url = reverse("meta_reports_admin:meta_reports_glucosesummary_changelist")
27
+ url = f"{url}?q={self.subject_identifier}"
28
+ message = _(
29
+ format_html(
30
+ f"Subject has reached the protocol endpoint. "
31
+ f'See <A href="{url}">{GlucoseSummary._meta.verbose_name}</A>'
32
+ )
33
+ )
34
+ self.message_user(message, level=messages.WARNING)
35
+ return context
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: meta-edc
3
- Version: 0.3.25
3
+ Version: 0.3.26
4
4
  Summary: META Trial EDC (http://www.isrctn.com/ISRCTN76157257)
5
5
  Home-page: https://github.com/meta-trial/meta-edc
6
6
  Author: Erik van Widenfelt
@@ -91,7 +91,7 @@ meta_analytics/dataframes/enrolled/get_glucose_df.py,sha256=L4gzszNjYzu-QmYu4gs1
91
91
  meta_analytics/dataframes/glucose_endpoints/__init__.py,sha256=a9RlAnFM0Z4AKw-WztBvnGMo3tLLe1dx3292A2n_CnA,107
92
92
  meta_analytics/dataframes/glucose_endpoints/constants.py,sha256=XIt19uf5aSxiOVzkvHtUHs1RJo-1XqJLQOySOJvhQb8,789
93
93
  meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py,sha256=MOIcrrdH26q2zrmQDXE-lxHg9klNuKjRjDAc4Elc9ZE,6506
94
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py,sha256=Wcf-vMtfVi2hnjNVkzVzCbtmfMHcjjLd74RBS9clYCQ,19359
94
+ meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py,sha256=Lqfa8YXiOJXrGNyXrbqOLXhkygZjtE5pGgemyYgeVik,19288
95
95
  meta_analytics/dataframes/glucose_endpoints/utils.py,sha256=2V3nFFnaysuJvNrcHUOLqOk8e_3aP71079kB_YBXcQw,2014
96
96
  meta_analytics/dataframes/screening/__init__.py,sha256=onGpmB4474gu_JcyRGdRy09YQyP2Np-mX-rYZTFdJoA,114
97
97
  meta_analytics/dataframes/screening/get_glucose_tested_only_df.py,sha256=0oMJIsIJRjurfpPONuJ4Aoab1UJikezGe3lQNWRoOo4,660
@@ -204,7 +204,7 @@ meta_dashboard/views/screening/__init__.py,sha256=bjnvZdqdonOW_DPFs1MR2GQv2x4oqA
204
204
  meta_dashboard/views/screening/listboard_view.py,sha256=DF42XR3ftCHO4vd3cuxtq5ir2NqOmQHGQV6cGObr7is,578
205
205
  meta_dashboard/views/subject/__init__.py,sha256=s7l0halOqlqscWdMD_r98V4VKeEsgchhY3eAgs0EI3k,81
206
206
  meta_dashboard/views/subject/dashboard/__init__.py,sha256=1961drFBW7OVhglUAL4OGFxLOU0tN3jOGMvO7Oone8U,42
207
- meta_dashboard/views/subject/dashboard/dashboard_view.py,sha256=FdijhyyRb6us-ksU5SCgmP1BNj2nE5NVIz78gnJZ7-E,344
207
+ meta_dashboard/views/subject/dashboard/dashboard_view.py,sha256=FBgOQpZAkTOSeZtUnKRc_CayACOTMeeH6lmwNvEG9vQ,1330
208
208
  meta_dashboard/views/subject/listboard/__init__.py,sha256=WHtaM6dXPN7vtnROBOutMO9zEBVIkx3T0RPJdbq4sq4,49
209
209
  meta_dashboard/views/subject/listboard/listboard_view.py,sha256=bQ5fPqbbkVvPNrmNvIGNZ_GoRIkqUFHk6T7p1dkjr_Y,601
210
210
  meta_data_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -431,7 +431,7 @@ meta_reports/ae_report.py,sha256=K0DCdfVBOCqqWWvCsl-Tf8rRCnNv3W2xbUI10VCuEhI,154
431
431
  meta_reports/apps.py,sha256=uQb4mBQ94Ij0luH5yzMF-a5t2N418JHcovYovislwS4,194
432
432
  meta_reports/death_report.py,sha256=mJw08jMxOWIAtsKQN8zCP64HIrxW1fb48D9OXqEMpM0,4713
433
433
  meta_reports/pdf_report.py,sha256=9lWnRc_BNieDFXC4VgA0QHK6g_ct58u8tupPRsbRvV0,2395
434
- meta_reports/tasks.py,sha256=HQUV_hnUaGM6TiVXQFO0_0d1-_vC1c3CAyG5EWAHYLI,409
434
+ meta_reports/tasks.py,sha256=wPzfm99Hox1AIvt1KxYg1r6g9v8ta2AHOHesoN6AxEk,370
435
435
  meta_reports/urls.py,sha256=_c6AMrK4U5MsyFSU2JSPNfiZlbhuw24C7CyPNYpqGd0,206
436
436
  meta_reports/admin/__init__.py,sha256=dpLUWcQsAUP-Mfx-eehY9Zegia9qp0uF82iwIdJCego,313
437
437
  meta_reports/admin/endpoints_admin.py,sha256=L4mDLNIkR6203RI3ImBYel2kevaH_Nwa6KMYuoDwyNU,518
@@ -992,7 +992,7 @@ meta_subject/model_mixins/crf_model_mixin.py,sha256=UK1ycbYwaZ8LSNTJm74QJ5c-01HD
992
992
  meta_subject/model_mixins/crf_with_action_model_mixin.py,sha256=q1Q16YyPjQlpDtCPOXRkO5C7Vr7JO_QL8xWC48Uz33M,298
993
993
  meta_subject/model_mixins/search_slug_model_mixin.py,sha256=r5KmTykU0qV4JymMMKP2IBwAP8Z5hDnVJix-rO2PvME,296
994
994
  meta_subject/model_mixins/vitals_fields_model_mixin.py,sha256=JYh0w1eEFLR_BCvzHb2ldwNIkyINbfvef-SL4_wA-NY,1160
995
- meta_subject/models/__init__.py,sha256=3WYHv3NgJiY5IsUBrlzKZ8zR5AsJHa1IA4bOH9Fh5bA,1707
995
+ meta_subject/models/__init__.py,sha256=wHtGa2pg7-1rfAZRE2dMWpCyenLto4he0_YUaaWxQJo,1762
996
996
  meta_subject/models/birth_outcomes.py,sha256=zikxatYZvL1qvnJ6JtVZ5aw8LCKLwQNXi6cP5F-5Jj0,3124
997
997
  meta_subject/models/complications.py,sha256=lkUoM3wJ9GuCFkuBUVxbCRSWfl3UtiVNSoMmkPKQdzg,1849
998
998
  meta_subject/models/complications_glycemia.py,sha256=2wHind-dDsPY5J4M0pUbRzjp72Brz990oDzCbF-V1CM,6056
@@ -1017,7 +1017,7 @@ meta_subject/models/patient_history.py,sha256=q1GFQYoH0rYowBFUDUYebYthKSdTHNuDnz
1017
1017
  meta_subject/models/physical_exam.py,sha256=SlDJJQrCEouTMaETYGjjVzFYONVx6AdtalPioUCN9yg,1991
1018
1018
  meta_subject/models/pregnancy_update.py,sha256=Cs5bZAslR7jtDS_dJE_btHN8Jw21KdqKCHA-Ll9ISO0,949
1019
1019
  meta_subject/models/sf12.py,sha256=1f6cAMtBUXy7jMaacAU8RJFFv73r9c3rJjBbNl-bSM4,283
1020
- meta_subject/models/signals.py,sha256=S8yhI1eAgZTIYJS9I1jBiBm8JvGKb-LiSDQZt7jJHR0,3989
1020
+ meta_subject/models/signals.py,sha256=N-Y-QmwSiiJnridHMrAm08YttRorjB9hzo9XTCdMzWk,4557
1021
1021
  meta_subject/models/study_medication.py,sha256=1kA_w4pYT1gcunfiQ46KdM01pd1jrQqLt4JEPLvfTTo,461
1022
1022
  meta_subject/models/subject_requisition.py,sha256=bSDwD-hpXeioH3xA7E6eGMu4hxWLDDSxhznfjrpXTjw,341
1023
1023
  meta_subject/models/subject_visit.py,sha256=f49M7ywCQqdYdiT5dUhlWXTTXs5K6aKlxkMgzWyj3VE,2152
@@ -1089,9 +1089,9 @@ tests/etc/user-rsa-restricted-private.pem,sha256=CUcHW9bznWdmmASN00hCzvxFPAFl4N2
1089
1089
  tests/etc/user-rsa-restricted-public.pem,sha256=mt84djoL-uHw6Wc5SJh0zml6VzXulnf8eQSFg7-fheg,450
1090
1090
  tests/etc/user-salt-local.key,sha256=x5anBw9fvbHurczouT3CjrkWb_xs7Ypm1htIJsgiuiw,256
1091
1091
  tests/etc/user-salt-restricted.key,sha256=pxmpcfBRNB-4C6wTvHXz-9fOfJgKIFOjaAF8ZFfa4q4,256
1092
- meta_edc-0.3.25.dist-info/AUTHORS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1093
- meta_edc-0.3.25.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1094
- meta_edc-0.3.25.dist-info/METADATA,sha256=_h3VBVgFtMfng1bM34X77mipeNrGWNGSLczqNHi1QGg,2771
1095
- meta_edc-0.3.25.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
1096
- meta_edc-0.3.25.dist-info/top_level.txt,sha256=RkzjNXwRq2kg_uZ_1bDwPUntijSXoY2YBqtByDwvvrc,244
1097
- meta_edc-0.3.25.dist-info/RECORD,,
1092
+ meta_edc-0.3.26.dist-info/AUTHORS,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1093
+ meta_edc-0.3.26.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1094
+ meta_edc-0.3.26.dist-info/METADATA,sha256=G4yeTPysQ4wOftmA6bRMObIYXwqjSanz2r6NCLcOAs0,2771
1095
+ meta_edc-0.3.26.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
1096
+ meta_edc-0.3.26.dist-info/top_level.txt,sha256=RkzjNXwRq2kg_uZ_1bDwPUntijSXoY2YBqtByDwvvrc,244
1097
+ meta_edc-0.3.26.dist-info/RECORD,,
meta_reports/tasks.py CHANGED
@@ -9,4 +9,4 @@ def update_endpoints_table(subject_identifiers: list[str] | None = None):
9
9
  subject_identifiers = []
10
10
  cls = GlucoseEndpointsByDate(subject_identifiers=subject_identifiers)
11
11
  cls.run()
12
- return cls.to_model(subject_identifiers=subject_identifiers)
12
+ return cls.to_model()
@@ -36,6 +36,7 @@ from .pregnancy_update import PregnancyUpdate
36
36
  from .sf12 import Sf12
37
37
  from .signals import (
38
38
  study_medication_on_pre_save,
39
+ update_glucose_endpoints_for_subject_on_post_save,
39
40
  update_pregnancy_notification_on_delivery_post_save,
40
41
  update_schedule_on_delivery_post_save,
41
42
  )
@@ -11,6 +11,7 @@ from meta_edc.meta_version import get_meta_version
11
11
  from meta_pharmacy.constants import METFORMIN
12
12
  from meta_visit_schedule.constants import SCHEDULE_PREGNANCY
13
13
 
14
+ from . import Glucose, GlucoseFbg
14
15
  from .delivery import Delivery
15
16
  from .study_medication import StudyMedication
16
17
  from .subject_visit import SubjectVisit
@@ -105,3 +106,21 @@ def update_schedule_on_delivery_post_save(sender, instance, raw, **kwargs):
105
106
  subject_identifier=instance.subject_identifier,
106
107
  offschedule_datetime=offschedule_datetime,
107
108
  )
109
+
110
+
111
+ @receiver(
112
+ post_save,
113
+ weak=False,
114
+ dispatch_uid="update_glucose_endpoints_for_subject_on_post_save",
115
+ )
116
+ def update_glucose_endpoints_for_subject_on_post_save(
117
+ sender, instance, raw, update_fields, **kwargs
118
+ ):
119
+ if not raw and not update_fields and sender in [Glucose, GlucoseFbg]:
120
+ from meta_analytics.dataframes import GlucoseEndpointsByDate
121
+
122
+ cls = GlucoseEndpointsByDate(
123
+ subject_identifiers=[instance.subject_visit.subject_identifier]
124
+ )
125
+ cls.run()
126
+ cls.to_model()