meta-edc 0.3.47__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.
- meta_ae/tests/holidays.csv +1 -1
- meta_analytics/dataframes/screening/get_screening_df.py +1 -0
- meta_analytics/tables/enrolled/glucose.py +3 -1
- meta_consent/action_items.py +18 -1
- meta_consent/admin/__init__.py +1 -0
- meta_consent/admin/subject_consent_v1_ext_admin.py +45 -0
- meta_consent/baker_recipes.py +1 -0
- meta_consent/consents.py +14 -1
- meta_consent/constants.py +1 -0
- meta_consent/forms/__init__.py +1 -0
- meta_consent/forms/subject_consent_v1_ext_form.py +16 -0
- meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +544 -0
- meta_consent/migrations/0027_auto_20250111_0344.py +27 -0
- meta_consent/models/__init__.py +1 -0
- meta_consent/models/signals.py +18 -0
- meta_consent/models/subject_consent_v1_ext.py +29 -0
- meta_consent/tests/holidays.csv +1 -1
- meta_dashboard/templates/meta_dashboard/bootstrap3/buttons/eligibility_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/bootstrap3/buttons/screening_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard/sidebar.html +24 -0
- meta_dashboard/templates/meta_dashboard/bootstrap3/subject/dashboard.html +3 -0
- meta_dashboard/tests/holidays.csv +1 -1
- meta_dashboard/views/subject/dashboard/dashboard_view.py +11 -0
- meta_edc/celery_live.py +1 -3
- meta_edc/celery_uat.py +1 -3
- meta_edc/management/commands/update_forms_reference.py +6 -2
- meta_edc/settings/debug.py +2 -2
- meta_edc-0.3.48.dist-info/AUTHORS +0 -0
- {meta_edc-0.3.47.dist-info → meta_edc-0.3.48.dist-info}/METADATA +3 -3
- {meta_edc-0.3.47.dist-info → meta_edc-0.3.48.dist-info}/RECORD +51 -44
- {meta_edc-0.3.47.dist-info → meta_edc-0.3.48.dist-info}/WHEEL +1 -1
- meta_prn/tests/tests/test_dm_referral.py +1 -4
- meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -1
- meta_reports/templates/meta_reports/endpoints_all_change_list_note.html +1 -1
- meta_reports/templates/meta_reports/endpoints_change_list_note.html +1 -1
- meta_screening/tests/holidays.csv +1 -1
- meta_screening/tests/meta_test_case_mixin.py +15 -0
- meta_subject/models/todo.txt +1 -1
- meta_subject/static/meta_subject/slider.css +1 -1
- meta_subject/templates/meta_subject/endpoint_review_instructions.html +1 -1
- meta_subject/templates/meta_subject/widgets/slider.html +0 -1
- meta_subject/tests/holidays.csv +1 -1
- meta_subject/tests/tests/test_medication_adherence.py +5 -1
- meta_subject/tests/tests/test_mnsi.py +33 -9
- meta_visit_schedule/visit_schedules/phase_three/schedule.py +2 -2
- tests/etc/randomization_list.csv +1 -1
- tests/etc/randomization_list_phase_three.csv +1 -1
- tests/holidays.csv +1 -1
- /meta_edc-0.3.47.dist-info/AUTHORS → /meta_analytics/notebooks/cleaning/__init__.py +0 -0
- {meta_edc-0.3.47.dist-info → meta_edc-0.3.48.dist-info}/LICENSE +0 -0
- {meta_edc-0.3.47.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,
|
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
|
-
|
37
|
-
@
|
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
|
-
|
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=
|
46
|
-
eligibility_datetime=
|
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=
|
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=
|
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
|
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=
|
289
|
+
rupper=relativedelta(months=2),
|
290
290
|
requisitions=requisitions_36m,
|
291
291
|
crfs=crfs_36m,
|
292
292
|
facility_name=FIVE_DAY_CLINIC,
|
tests/etc/randomization_list.csv
CHANGED
tests/holidays.csv
CHANGED
File without changes
|
File without changes
|
File without changes
|