meta-edc 0.3.46__py3-none-any.whl → 0.3.48__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.
Files changed (52) hide show
  1. meta_ae/tests/holidays.csv +1 -1
  2. meta_analytics/dataframes/screening/get_screening_df.py +1 -0
  3. meta_analytics/tables/enrolled/glucose.py +3 -1
  4. meta_consent/action_items.py +18 -1
  5. meta_consent/admin/__init__.py +1 -0
  6. meta_consent/admin/subject_consent_v1_ext_admin.py +45 -0
  7. meta_consent/baker_recipes.py +1 -0
  8. meta_consent/consents.py +14 -1
  9. meta_consent/constants.py +1 -0
  10. meta_consent/forms/__init__.py +1 -0
  11. meta_consent/forms/subject_consent_v1_ext_form.py +16 -0
  12. meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +544 -0
  13. meta_consent/migrations/0027_auto_20250111_0344.py +27 -0
  14. meta_consent/models/__init__.py +1 -0
  15. meta_consent/models/signals.py +18 -0
  16. meta_consent/models/subject_consent_v1_ext.py +29 -0
  17. meta_consent/tests/holidays.csv +1 -1
  18. meta_dashboard/templates/meta_dashboard/bootstrap3/buttons/eligibility_button.html +1 -1
  19. meta_dashboard/templates/meta_dashboard/bootstrap3/buttons/screening_button.html +1 -1
  20. meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard/sidebar.html +24 -0
  21. meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard.html +3 -0
  22. meta_dashboard/tests/holidays.csv +1 -1
  23. meta_dashboard/views/subject/dashboard/dashboard_view.py +11 -0
  24. meta_edc/celery_live.py +1 -3
  25. meta_edc/celery_uat.py +1 -3
  26. meta_edc/management/commands/update_forms_reference.py +6 -2
  27. meta_edc/settings/debug.py +2 -2
  28. meta_edc-0.3.48.dist-info/AUTHORS +0 -0
  29. {meta_edc-0.3.46.dist-info → meta_edc-0.3.48.dist-info}/METADATA +3 -3
  30. {meta_edc-0.3.46.dist-info → meta_edc-0.3.48.dist-info}/RECORD +52 -45
  31. {meta_edc-0.3.46.dist-info → meta_edc-0.3.48.dist-info}/WHEEL +1 -1
  32. meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +4 -0
  33. meta_prn/tests/tests/test_dm_referral.py +1 -4
  34. meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -1
  35. meta_reports/templates/meta_reports/endpoints_all_change_list_note.html +1 -1
  36. meta_reports/templates/meta_reports/endpoints_change_list_note.html +1 -1
  37. meta_screening/tests/holidays.csv +1 -1
  38. meta_screening/tests/meta_test_case_mixin.py +15 -0
  39. meta_subject/models/todo.txt +1 -1
  40. meta_subject/static/meta_subject/slider.css +1 -1
  41. meta_subject/templates/meta_subject/endpoint_review_instructions.html +1 -1
  42. meta_subject/templates/meta_subject/widgets/slider.html +0 -1
  43. meta_subject/tests/holidays.csv +1 -1
  44. meta_subject/tests/tests/test_medication_adherence.py +5 -1
  45. meta_subject/tests/tests/test_mnsi.py +33 -9
  46. meta_visit_schedule/visit_schedules/phase_three/schedule.py +2 -2
  47. tests/etc/randomization_list.csv +1 -1
  48. tests/etc/randomization_list_phase_three.csv +1 -1
  49. tests/holidays.csv +1 -1
  50. /meta_edc-0.3.46.dist-info/AUTHORS → /meta_analytics/notebooks/cleaning/__init__.py +0 -0
  51. {meta_edc-0.3.46.dist-info → meta_edc-0.3.48.dist-info}/LICENSE +0 -0
  52. {meta_edc-0.3.46.dist-info → meta_edc-0.3.48.dist-info}/top_level.txt +0 -0
@@ -4,7 +4,7 @@ from zoneinfo import ZoneInfo
4
4
  import time_machine
5
5
  from dateutil.relativedelta import relativedelta
6
6
  from django.core.exceptions import ObjectDoesNotExist
7
- from django.test import TestCase, tag
7
+ from django.test import TestCase, override_settings
8
8
  from edc_constants.constants import NO, YES
9
9
  from edc_utils import get_utcnow
10
10
  from model_bakery import baker
@@ -32,28 +32,35 @@ from meta_visit_schedule.constants import (
32
32
  WEEK2,
33
33
  )
34
34
 
35
+ test_datetime = datetime(2019, 6, 11, 8, 00, tzinfo=ZoneInfo("UTC"))
35
36
 
36
- @tag("mnsi")
37
- @time_machine.travel(datetime(2022, 6, 11, 8, 00, tzinfo=ZoneInfo("UTC")))
37
+
38
+ @override_settings(
39
+ EDC_PROTOCOL_STUDY_OPEN_DATETIME=test_datetime - relativedelta(years=3),
40
+ EDC_PROTOCOL_STUDY_CLOSE_DATETIME=test_datetime + relativedelta(years=3),
41
+ )
38
42
  class TestMnsiRequired(MetaTestCaseMixin, TestCase):
39
43
  def setUp(self):
40
44
  super().setUp()
41
- self.baseline_datetime = get_utcnow() - relativedelta(months=6)
45
+ traveller = time_machine.travel(test_datetime)
46
+ traveller.start()
47
+ self.baseline_datetime = get_utcnow()
42
48
 
43
- six_months_ago = self.baseline_datetime
44
49
  self.subject_screening = self.get_subject_screening(
45
- report_datetime=six_months_ago,
46
- eligibility_datetime=six_months_ago,
50
+ report_datetime=self.baseline_datetime,
51
+ eligibility_datetime=self.baseline_datetime,
47
52
  )
48
53
  self.subject_consent = self.get_subject_consent(
49
54
  self.subject_screening,
50
- consent_datetime=six_months_ago,
55
+ consent_datetime=self.baseline_datetime,
51
56
  )
57
+
52
58
  self.subject_visit = self.get_subject_visit(
53
59
  subject_screening=self.subject_screening,
54
60
  subject_consent=self.subject_consent,
55
- appt_datetime=six_months_ago,
61
+ appt_datetime=self.baseline_datetime,
56
62
  )
63
+ traveller.stop()
57
64
 
58
65
  def get_visit(self, visit_code: str):
59
66
  """Returns a scheduled visit with the specified visit code.
@@ -88,6 +95,7 @@ class TestMnsiRequired(MetaTestCaseMixin, TestCase):
88
95
  def set_mnsi_status(subject_visit, mnsi_performed):
89
96
  visit_mnsi = baker.make(
90
97
  "meta_subject.mnsi",
98
+ report_datetime=subject_visit.report_datetime,
91
99
  subject_visit=subject_visit,
92
100
  mnsi_performed=mnsi_performed,
93
101
  )
@@ -260,7 +268,14 @@ class TestMnsiRequired(MetaTestCaseMixin, TestCase):
260
268
  self.assertNotIn("meta_subject.mnsi", [o.model for o in crfs.all()])
261
269
 
262
270
  def test_mnsi_required_between_36m_and_45m(self):
271
+ traveller = time_machine.travel(datetime(2024, 12, 17, tzinfo=ZoneInfo("UTC")))
272
+ traveller.start()
273
+ self.get_subject_consent_extended(self.subject_consent, consent_datetime=get_utcnow())
274
+ traveller.stop()
275
+
263
276
  month1_visit = self.get_visit(visit_code=MONTH1)
277
+ traveller = time_machine.travel(month1_visit.report_datetime)
278
+ traveller.start()
264
279
  self.set_mnsi_status(subject_visit=month1_visit, mnsi_performed=YES)
265
280
 
266
281
  for visit_code in [MONTH36, MONTH39, MONTH42, MONTH45]:
@@ -269,8 +284,12 @@ class TestMnsiRequired(MetaTestCaseMixin, TestCase):
269
284
  crfs = self.get_crf_metadata(subject_visit)
270
285
  self.assertIn("meta_subject.mnsi", [o.model for o in crfs.all()])
271
286
  self.set_mnsi_status(subject_visit=subject_visit, mnsi_performed=NO)
287
+ traveller.stop()
272
288
 
273
289
  def test_mnsi_only_required_once_between_36m_and_45m(self):
290
+ traveller = time_machine.travel(datetime(2024, 12, 17, tzinfo=ZoneInfo("UTC")))
291
+ traveller.start()
292
+ self.get_subject_consent_extended(self.subject_consent, consent_datetime=get_utcnow())
274
293
  month1_visit = self.get_visit(visit_code=MONTH1)
275
294
  self.set_mnsi_status(subject_visit=month1_visit, mnsi_performed=YES)
276
295
 
@@ -292,8 +311,12 @@ class TestMnsiRequired(MetaTestCaseMixin, TestCase):
292
311
  month45_visit = self.get_next_subject_visit(month42_visit)
293
312
  crfs = self.get_crf_metadata(month45_visit)
294
313
  self.assertNotIn("meta_subject.mnsi", [o.model for o in crfs.all()])
314
+ traveller.stop()
295
315
 
296
316
  def test_mnsi_required_at_48m(self):
317
+ traveller = time_machine.travel(datetime(2024, 12, 16, tzinfo=ZoneInfo("UTC")))
318
+ traveller.start()
319
+ self.get_subject_consent_extended(self.subject_consent, consent_datetime=get_utcnow())
297
320
  month1_visit = self.get_visit(visit_code=MONTH1)
298
321
  crfs = self.get_crf_metadata(month1_visit)
299
322
  self.assertIn("meta_subject.mnsi", [o.model for o in crfs.all()])
@@ -315,3 +338,4 @@ class TestMnsiRequired(MetaTestCaseMixin, TestCase):
315
338
  month48_visit = self.get_visit(visit_code=MONTH48)
316
339
  crfs = self.get_crf_metadata(month48_visit)
317
340
  self.assertIn("meta_subject.mnsi", [o.model for o in crfs.all()])
341
+ traveller.stop()
@@ -101,7 +101,7 @@ class Visit(BaseVisit):
101
101
  # schedule for new participants
102
102
  schedule = Schedule(
103
103
  name=SCHEDULE,
104
- verbose_name="Day 1 to Month 12 Follow-up",
104
+ verbose_name="Day 1 to Month 36/48 Follow-up",
105
105
  onschedule_model="meta_prn.onschedule",
106
106
  offschedule_model="meta_prn.offschedule",
107
107
  consent_definitions=[consent_v1],
@@ -286,7 +286,7 @@ visit36 = Visit(
286
286
  timepoint=14,
287
287
  rbase=relativedelta(months=36),
288
288
  rlower=relativedelta(months=1),
289
- rupper=relativedelta(months=1),
289
+ rupper=relativedelta(months=2),
290
290
  requisitions=requisitions_36m,
291
291
  crfs=crfs_36m,
292
292
  facility_name=FIVE_DAY_CLINIC,
@@ -238,4 +238,4 @@ sid,assignment,site_name
238
238
  1237,placebo,amana
239
239
  1238,active,amana
240
240
  1239,active,amana
241
- 1240,placebo,amana
241
+ 1240,placebo,amana
@@ -238,4 +238,4 @@ sid,assignment,site_name,gender
238
238
  1237,placebo,amana,F
239
239
  1238,active,amana,M
240
240
  1239,active,amana,F
241
- 1240,placebo,amana,M
241
+ 1240,placebo,amana,M
tests/holidays.csv CHANGED
@@ -12,4 +12,4 @@
12
12
  2019-12-01,Mawlid Day,tanzania
13
13
  2019-12-09,Independence Day,tanzania
14
14
  2019-12-25,Christmas Day,tanzania
15
- 2019-12-26,Boxing Day,tanzania
15
+ 2019-12-26,Boxing Day,tanzania