meta-edc 1.1.8__py3-none-any.whl → 1.1.12__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.

Potentially problematic release.


This version of meta-edc might be problematic. Click here for more details.

Files changed (475) hide show
  1. meta_ae/action_items.py +2 -1
  2. meta_ae/admin/__init__.py +11 -0
  3. meta_ae/admin/ae_susar_admin.py +1 -1
  4. meta_ae/admin/death_report_admin.py +1 -1
  5. meta_ae/admin/modeladmin_mixins.py +10 -12
  6. meta_ae/baker_recipes.py +3 -3
  7. meta_ae/forms/__init__.py +13 -0
  8. meta_ae/forms/modelform_mixins.py +2 -2
  9. meta_ae/migrations/0001_initial.py +27 -27
  10. meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
  11. meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +5 -13
  12. meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
  13. meta_ae/model_mixins/__init__.py +2 -0
  14. meta_ae/model_mixins/ae_review_model_mixin.py +6 -6
  15. meta_ae/model_mixins/death_report_model_mixin.py +3 -3
  16. meta_ae/models/__init__.py +13 -0
  17. meta_ae/models/hospitalization.py +3 -3
  18. meta_ae/pdf_reports/__init__.py +2 -0
  19. meta_analytics/.DS_Store +0 -0
  20. meta_analytics/dataframes/__init__.py +24 -0
  21. meta_analytics/dataframes/get_eos_df.py +1 -2
  22. meta_analytics/dataframes/get_glucose_df.py +6 -7
  23. meta_analytics/dataframes/get_glucose_fbg_df.py +2 -3
  24. meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +1 -2
  25. meta_analytics/dataframes/get_last_imp_visits_df.py +5 -6
  26. meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
  27. meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +13 -20
  28. meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +9 -10
  29. meta_analytics/dataframes/screening/__init__.py +2 -0
  30. meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +1 -2
  31. meta_analytics/dataframes/screening/get_screening_df.py +6 -10
  32. meta_analytics/dataframes/utils.py +3 -8
  33. meta_analytics/get_tables.py +1 -2
  34. meta_analytics/tables/__init__.py +2 -0
  35. meta_consent/action_items.py +2 -1
  36. meta_consent/admin/__init__.py +6 -0
  37. meta_consent/admin/actions/__init__.py +2 -0
  38. meta_consent/admin/actions/create_missing_prescriptions.py +1 -1
  39. meta_consent/admin/list_filters.py +2 -2
  40. meta_consent/admin/modeladmin_mixins.py +3 -4
  41. meta_consent/admin/subject_consent_v1_ext_admin.py +2 -2
  42. meta_consent/baker_recipes.py +7 -8
  43. meta_consent/form_validators/__init__.py +2 -0
  44. meta_consent/forms/__init__.py +7 -0
  45. meta_consent/forms/subject_consent_v1_ext_form.py +2 -3
  46. meta_consent/forms/subject_reconsent_form.py +4 -4
  47. meta_consent/management/commands/create_missing_prescriptions.py +4 -2
  48. meta_consent/migrations/0001_initial.py +9 -9
  49. meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
  50. meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +5 -14
  51. meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
  52. meta_consent/models/__init__.py +9 -0
  53. meta_consent/models/model_mixins.py +1 -2
  54. meta_consent/models/signals.py +9 -10
  55. meta_consent/models/subject_consent.py +1 -1
  56. meta_consent/models/subject_reconsent.py +3 -3
  57. meta_dashboard/patterns.py +1 -1
  58. meta_dashboard/templatetags/meta_dashboard_extras.py +1 -1
  59. meta_dashboard/view_utils/__init__.py +7 -0
  60. meta_dashboard/view_utils/subject_screening_button.py +9 -16
  61. meta_dashboard/views/__init__.py +8 -0
  62. meta_dashboard/views/ae/__init__.py +2 -0
  63. meta_dashboard/views/ae/ae_listboard_view.py +1 -1
  64. meta_dashboard/views/ae/death_report_listboard_view.py +1 -1
  65. meta_dashboard/views/screening/__init__.py +2 -0
  66. meta_dashboard/views/subject/__init__.py +2 -0
  67. meta_dashboard/views/subject/dashboard/__init__.py +2 -0
  68. meta_dashboard/views/subject/dashboard/dashboard_view.py +1 -1
  69. meta_dashboard/views/subject/listboard/__init__.py +2 -0
  70. meta_edc/__init__.py +5 -9
  71. meta_edc/celery.py +1 -1
  72. meta_edc/celery_live.py +1 -1
  73. meta_edc/celery_uat.py +1 -1
  74. meta_edc/management/commands/update_forms_reference.py +10 -12
  75. meta_edc/settings/debug.py +5 -4
  76. meta_edc/settings/defaults.py +18 -3
  77. meta_edc/settings/live.py +3 -1
  78. meta_edc/settings/logging.py +9 -4
  79. meta_edc/settings/minimal.py +4 -5
  80. meta_edc/settings/uat.py +3 -1
  81. meta_edc/views/__init__.py +2 -0
  82. meta_edc-1.1.12.dist-info/METADATA +174 -0
  83. {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/RECORD +413 -526
  84. meta_edc-1.1.12.dist-info/WHEEL +4 -0
  85. meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
  86. meta_pharmacy/admin/__init__.py +5 -0
  87. meta_pharmacy/admin/substitutions_admin.py +2 -2
  88. meta_pharmacy/forms/__init__.py +2 -0
  89. meta_pharmacy/forms/substitutions_form.py +6 -4
  90. meta_pharmacy/labels/__init__.py +4 -2
  91. meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +1 -2
  92. meta_pharmacy/labels/draw_label_with_test_data.py +2 -2
  93. meta_pharmacy/labels/label_data.py +1 -2
  94. meta_pharmacy/labels/print_sheets.py +4 -6
  95. meta_pharmacy/migrations/0002_initial.py +7 -20
  96. meta_pharmacy/migrations/0003_auto_20240909_2335.py +3 -2
  97. meta_pharmacy/migrations/0006_lotnumber_label.py +5 -14
  98. meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +5 -6
  99. meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
  100. meta_pharmacy/models/__init__.py +7 -0
  101. meta_pharmacy/models/label_data.py +4 -5
  102. meta_pharmacy/models/substitutions.py +3 -3
  103. meta_pharmacy/prepare_meta_pharmacy.py +1 -1
  104. meta_pharmacy/utils/__init__.py +2 -0
  105. meta_pharmacy/utils/update_initial_pharmacy_data.py +1 -1
  106. meta_prn/admin/__init__.py +16 -0
  107. meta_prn/admin/dm_referral_admin.py +2 -1
  108. meta_prn/admin/end_of_study_admin.py +6 -7
  109. meta_prn/admin/loss_to_followup_admin.py +3 -2
  110. meta_prn/admin/off_study_medication_admin.py +5 -6
  111. meta_prn/admin/offschedule_admin.py +5 -6
  112. meta_prn/admin/offschedule_dm_referral_admin.py +6 -6
  113. meta_prn/admin/offschedule_postnatal_admin.py +7 -7
  114. meta_prn/admin/offschedule_pregnancy_admin.py +8 -7
  115. meta_prn/admin/onschedule_admin.py +7 -8
  116. meta_prn/admin/onschedule_dm_referral_admin.py +6 -7
  117. meta_prn/admin/pregnancy_notification_admin.py +5 -6
  118. meta_prn/admin/protocol_incident_admin.py +1 -1
  119. meta_prn/admin/subject_transfer_admin.py +1 -1
  120. meta_prn/baker_recipes.py +4 -4
  121. meta_prn/form_validators/__init__.py +5 -0
  122. meta_prn/form_validators/end_of_study.py +2 -2
  123. meta_prn/forms/__init__.py +13 -0
  124. meta_prn/migrations/0001_initial.py +25 -25
  125. meta_prn/migrations/0017_auto_20220307_1929.py +5 -5
  126. meta_prn/migrations/0018_auto_20220309_2106.py +9 -9
  127. meta_prn/migrations/0021_auto_20220316_2147.py +13 -13
  128. meta_prn/migrations/0022_auto_20220318_0133.py +9 -9
  129. meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -13
  130. meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -13
  131. meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -13
  132. meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +13 -38
  133. meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
  134. meta_prn/models/__init__.py +20 -0
  135. meta_prn/models/offschedule.py +4 -4
  136. meta_prn/models/protocol_incident.py +1 -1
  137. meta_prn/models/subject_transfer.py +8 -0
  138. meta_rando/migrations/0001_initial.py +5 -5
  139. meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
  140. meta_reports/__init__.py +2 -0
  141. meta_reports/admin/__init__.py +16 -0
  142. meta_reports/admin/dbviews/__init__.py +13 -0
  143. meta_reports/admin/dbviews/glucose_summary_admin.py +6 -6
  144. meta_reports/admin/dbviews/imp_substitutions_admin.py +12 -11
  145. meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +5 -0
  146. meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +27 -3
  147. meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +6 -6
  148. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +2 -0
  149. meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +0 -3
  150. meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +2 -0
  151. meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +8 -8
  152. meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +6 -6
  153. meta_reports/admin/dbviews/unattended_three_in_row_admin.py +5 -5
  154. meta_reports/admin/dbviews/unattended_two_in_row_admin.py +5 -5
  155. meta_reports/admin/endpoints_admin.py +1 -1
  156. meta_reports/admin/last_imp_refill_admin.py +9 -9
  157. meta_reports/admin/list_filters.py +2 -2
  158. meta_reports/admin/modeladmin_mixins.py +9 -16
  159. meta_reports/death_report.py +1 -1
  160. meta_reports/forms/__init__.py +2 -0
  161. meta_reports/forms/missing_ogtt_note_form.py +2 -3
  162. meta_reports/management/commands/generate_endpoints.py +5 -4
  163. meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
  164. meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
  165. meta_reports/models/__init__.py +17 -0
  166. meta_reports/models/dbviews/__init__.py +14 -0
  167. meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
  168. meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +4 -5
  169. meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
  170. meta_reports/models/dbviews/imp_substitutions/view_definition.py +1 -1
  171. meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +2 -0
  172. meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +1 -1
  173. meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +4 -3
  174. meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +2 -0
  175. meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +13 -11
  176. meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
  177. meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +18 -0
  178. meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
  179. meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
  180. meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
  181. meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
  182. meta_reports/models/endpoints.py +4 -4
  183. meta_reports/models/last_imp_refill.py +2 -3
  184. meta_reports/pdf_report.py +2 -2
  185. meta_reports/tasks.py +1 -1
  186. meta_screening/admin/__init__.py +8 -0
  187. meta_screening/admin/fieldsets.py +13 -14
  188. meta_screening/admin/list_filters.py +6 -4
  189. meta_screening/admin/screening_part_one_admin.py +1 -2
  190. meta_screening/admin/screening_part_three_admin.py +2 -3
  191. meta_screening/admin/screening_part_two_admin.py +7 -10
  192. meta_screening/admin/subject_refusal_admin.py +5 -3
  193. meta_screening/admin/subject_screening_admin.py +4 -4
  194. meta_screening/baker_recipes.py +9 -9
  195. meta_screening/eligibility/__init__.py +9 -0
  196. meta_screening/eligibility/eligibility.py +7 -7
  197. meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
  198. meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +8 -8
  199. meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +13 -14
  200. meta_screening/form_validators/__init__.py +8 -0
  201. meta_screening/forms/__init__.py +20 -0
  202. meta_screening/forms/field_lists.py +16 -17
  203. meta_screening/forms/screening_part_one_form.py +2 -2
  204. meta_screening/forms/screening_part_three_form.py +5 -3
  205. meta_screening/forms/screening_part_two_form.py +1 -5
  206. meta_screening/forms/subject_refusal_form.py +0 -4
  207. meta_screening/forms/subject_screening_form.py +0 -4
  208. meta_screening/migrations/0001_initial.py +15 -15
  209. meta_screening/migrations/0010_auto_20191106_0828.py +5 -5
  210. meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
  211. meta_screening/model_mixins/__init__.py +8 -0
  212. meta_screening/model_mixins/eligibility_model_mixin.py +5 -3
  213. meta_screening/model_mixins/part_one_fields_model_mixin.py +5 -9
  214. meta_screening/model_mixins/part_three_fields_model_mixin.py +5 -6
  215. meta_screening/model_mixins/part_two_fields_model_mixin.py +18 -16
  216. meta_screening/models/__init__.py +9 -0
  217. meta_screening/models/icp_referral.py +5 -5
  218. meta_screening/models/signals.py +10 -11
  219. meta_screening/models/subject_refusal.py +1 -1
  220. meta_screening/models/subject_screening.py +1 -3
  221. meta_subject/action_items.py +13 -15
  222. meta_subject/admin/__init__.py +39 -0
  223. meta_subject/admin/birth_outcome_admin.py +4 -8
  224. meta_subject/admin/blood_results/__init__.py +9 -0
  225. meta_subject/admin/blood_results/blood_results_fbc_admin.py +1 -1
  226. meta_subject/admin/blood_results/blood_results_hba1c_admin.py +1 -1
  227. meta_subject/admin/blood_results/blood_results_ins_admin.py +1 -1
  228. meta_subject/admin/blood_results/blood_results_lft_admin.py +1 -1
  229. meta_subject/admin/blood_results/blood_results_lipids_admin.py +1 -1
  230. meta_subject/admin/blood_results/blood_results_rft_admin.py +3 -5
  231. meta_subject/admin/complications_glycemia_admin.py +1 -1
  232. meta_subject/admin/delivery_admin.py +7 -10
  233. meta_subject/admin/diabetes/__init__.py +2 -0
  234. meta_subject/admin/diabetes/dm_endpoint_admin.py +2 -2
  235. meta_subject/admin/diabetes/dm_followup_admin.py +3 -2
  236. meta_subject/admin/egfr_drop_notification_admin.py +1 -1
  237. meta_subject/admin/followup_examination_admin.py +10 -9
  238. meta_subject/admin/followup_vitals_admin.py +4 -5
  239. meta_subject/admin/glucose_admin.py +2 -4
  240. meta_subject/admin/glucose_fbg_admin.py +1 -3
  241. meta_subject/admin/health_economics/__init__.py +2 -0
  242. meta_subject/admin/health_economics/health_economics_simple_admin.py +1 -1
  243. meta_subject/admin/health_economics/health_economics_update_admin.py +1 -1
  244. meta_subject/admin/hepatitis_test_admin.py +1 -1
  245. meta_subject/admin/list_filters.py +1 -1
  246. meta_subject/admin/mnsi_admin.py +7 -5
  247. meta_subject/admin/other_arv_regimens_admin.py +3 -3
  248. meta_subject/admin/patient_history_admin.py +4 -4
  249. meta_subject/admin/physical_exam_admin.py +1 -1
  250. meta_subject/admin/pregnancy_update_admin.py +1 -1
  251. meta_subject/admin/study_medication_admin.py +8 -15
  252. meta_subject/admin/subject_requisition_admin.py +1 -1
  253. meta_subject/admin/subject_visit_admin.py +1 -1
  254. meta_subject/admin/subject_visit_missed_admin.py +1 -1
  255. meta_subject/admin/urine_dipstick_test_admin.py +1 -1
  256. meta_subject/admin/urine_pregnancy_admin.py +1 -1
  257. meta_subject/baker_recipes.py +15 -15
  258. meta_subject/form_validators/__init__.py +11 -0
  259. meta_subject/form_validators/delivery_form_validator.py +2 -3
  260. meta_subject/form_validators/dm_endpoint_form_validator.py +1 -1
  261. meta_subject/form_validators/dm_followup_form_validator.py +7 -6
  262. meta_subject/form_validators/glucose_form_validator.py +3 -5
  263. meta_subject/forms/__init__.py +41 -0
  264. meta_subject/forms/blood_results/__init__.py +9 -0
  265. meta_subject/forms/blood_results/blood_results_rft_form.py +1 -2
  266. meta_subject/forms/diabetes/__init__.py +2 -0
  267. meta_subject/forms/diabetes/dm_followup_form.py +2 -2
  268. meta_subject/forms/followup_vitals_form.py +3 -8
  269. meta_subject/forms/health_economics/__init__.py +2 -0
  270. meta_subject/forms/next_appointment_form.py +2 -3
  271. meta_subject/forms/slider_widget.py +1 -1
  272. meta_subject/forms/study_medication_form.py +11 -8
  273. meta_subject/management/commands/create_missing_refills.py +3 -3
  274. meta_subject/management/commands/create_missing_rx.py +1 -1
  275. meta_subject/management/commands/missed.py +20 -23
  276. meta_subject/metadata_rules/__init__.py +2 -0
  277. meta_subject/metadata_rules/predicates.py +25 -32
  278. meta_subject/migrations/0001_initial.py +61 -61
  279. meta_subject/migrations/0002_auto_20191021_0353.py +5 -5
  280. meta_subject/migrations/0012_auto_20200118_2334.py +5 -5
  281. meta_subject/migrations/0014_auto_20200120_1622.py +5 -5
  282. meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -5
  283. meta_subject/migrations/0033_auto_20200516_2356.py +5 -5
  284. meta_subject/migrations/0038_auto_20200520_0020.py +5 -5
  285. meta_subject/migrations/0040_auto_20200527_2155.py +1 -1
  286. meta_subject/migrations/0045_auto_20200530_1801.py +1 -1
  287. meta_subject/migrations/0051_auto_20200617_2117.py +5 -5
  288. meta_subject/migrations/0063_auto_20210715_0337.py +5 -5
  289. meta_subject/migrations/0066_auto_20210721_0335.py +9 -9
  290. meta_subject/migrations/0067_auto_20210726_0340.py +5 -5
  291. meta_subject/migrations/0068_auto_20210728_1809.py +5 -5
  292. meta_subject/migrations/0072_auto_20210805_1545.py +7 -7
  293. meta_subject/migrations/0073_auto_20210809_0055.py +5 -5
  294. meta_subject/migrations/0077_auto_20210809_2323.py +3 -3
  295. meta_subject/migrations/0082_auto_20210823_1612.py +3 -3
  296. meta_subject/migrations/0083_auto_20210823_1620.py +3 -3
  297. meta_subject/migrations/0088_auto_20210924_0027.py +5 -5
  298. meta_subject/migrations/0090_auto_20210924_0424.py +5 -5
  299. meta_subject/migrations/0093_auto_20211117_0352.py +5 -5
  300. meta_subject/migrations/0095_auto_20220128_1719.py +5 -5
  301. meta_subject/migrations/0098_auto_20220309_2106.py +5 -5
  302. meta_subject/migrations/0101_auto_20220316_2147.py +13 -13
  303. meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
  304. meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +5 -5
  305. meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +1 -2
  306. meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +1 -2
  307. meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +5 -14
  308. meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +1 -2
  309. meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +5 -14
  310. meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +5 -14
  311. meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
  312. meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +5 -6
  313. meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +5 -14
  314. meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
  315. meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +9297 -0
  316. meta_subject/model_mixins/__init__.py +8 -0
  317. meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
  318. meta_subject/model_mixins/vitals_fields_model_mixin.py +1 -1
  319. meta_subject/models/__init__.py +48 -0
  320. meta_subject/models/birth_outcomes.py +3 -3
  321. meta_subject/models/blood_results/__init__.py +11 -0
  322. meta_subject/models/delivery.py +3 -3
  323. meta_subject/models/diabetes/__init__.py +2 -0
  324. meta_subject/models/diabetes/dm_endpoint.py +4 -4
  325. meta_subject/models/diabetes/dm_followup.py +3 -4
  326. meta_subject/models/diet_and_lifestyle.py +2 -2
  327. meta_subject/models/followup_examination.py +11 -11
  328. meta_subject/models/glucose.py +4 -4
  329. meta_subject/models/glucose_fbg.py +2 -3
  330. meta_subject/models/health_economics/__init__.py +2 -0
  331. meta_subject/models/health_economics/health_economics.py +7 -7
  332. meta_subject/models/health_economics/health_economics_update.py +2 -1
  333. meta_subject/models/hepatitis_test.py +2 -2
  334. meta_subject/models/other_arv_regimens_detail.py +1 -1
  335. meta_subject/models/patient_history.py +5 -6
  336. meta_subject/models/physical_exam.py +2 -2
  337. meta_subject/models/pregnancy_update.py +1 -1
  338. meta_subject/models/signals.py +14 -12
  339. meta_subject/models/subject_visit.py +1 -1
  340. meta_subject/models/urine_dipstick_test.py +1 -1
  341. meta_subject/models/urine_pregnancy.py +1 -1
  342. meta_visit_schedule/visit_schedules/__init__.py +2 -0
  343. meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
  344. meta_visit_schedule/visit_schedules/phase_three/schedule.py +2 -2
  345. meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
  346. meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +1 -2
  347. meta_ae/tests/holidays.csv +0 -15
  348. meta_ae/tests/tests/test_actions.py +0 -126
  349. meta_ae/tests/urls.py +0 -10
  350. meta_analytics/dataframes/glucose_endpoints/utils.py +0 -0
  351. meta_analytics/notebooks/anu.ipynb +0 -95
  352. meta_analytics/notebooks/appointment_planning.ipynb +0 -329
  353. meta_analytics/notebooks/arvs.ipynb +0 -103
  354. meta_analytics/notebooks/cleaning/__init__.py +0 -0
  355. meta_analytics/notebooks/cleaning/consent_v1_ext.ipynb +0 -227
  356. meta_analytics/notebooks/cleaning/offschedule_eos.ipynb +0 -353
  357. meta_analytics/notebooks/dsmc/renal_dysfunction.ipynb +0 -435
  358. meta_analytics/notebooks/endpoints/meta_endpoints_by_date.ipynb +0 -656
  359. meta_analytics/notebooks/followup_examination.ipynb +0 -141
  360. meta_analytics/notebooks/hba1c.ipynb +0 -136
  361. meta_analytics/notebooks/hiv_regimens.ipynb +0 -429
  362. meta_analytics/notebooks/incidence.ipynb +0 -232
  363. meta_analytics/notebooks/liver.ipynb +0 -389
  364. meta_analytics/notebooks/magreth.ipynb +0 -645
  365. meta_analytics/notebooks/monitoring_report.ipynb +0 -1834
  366. meta_analytics/notebooks/pharmacy.ipynb +0 -1061
  367. meta_analytics/notebooks/pharmacy_stock_202410.ipynb +0 -306
  368. meta_analytics/notebooks/qa.ipynb +0 -273
  369. meta_analytics/notebooks/steering.ipynb +0 -61
  370. meta_analytics/notebooks/undiagnosed/meta3_screening_consort_chart.ipynb +0 -1176
  371. meta_analytics/notebooks/undiagnosed/meta3_screening_undiagnosed.ipynb +0 -519
  372. meta_analytics/notebooks/undiagnosed/meta_screening_table2.ipynb +0 -964
  373. meta_analytics/notebooks/undiagnosed/screen_undiagnosed_or.ipynb +0 -296
  374. meta_analytics/notebooks/undiagnosed/screening.ipynb +0 -273
  375. meta_analytics/notebooks/undiagnosed/screening2.ipynb +0 -958
  376. meta_analytics/notebooks/undiagnosed/screening_undiagnosed_20241002.ipynb +0 -958
  377. meta_analytics/notebooks/ven.ipynb +0 -191
  378. meta_analytics/notebooks/vitals.ipynb +0 -263
  379. meta_analytics/tests/__init__.py +0 -0
  380. meta_analytics/tests/test_endpoints_by_date.py +0 -94
  381. meta_consent/tests/__init__.py +0 -0
  382. meta_consent/tests/holidays.csv +0 -15
  383. meta_consent/tests/tests/__init__.py +0 -0
  384. meta_consent/tests/tests/test_form_validators.py +0 -110
  385. meta_consent/tests/tests/test_subject_consent.py +0 -10
  386. meta_consent/tests/urls.py +0 -17
  387. meta_dashboard/tests/__init__.py +0 -0
  388. meta_dashboard/tests/admin.py +0 -22
  389. meta_dashboard/tests/holidays.csv +0 -15
  390. meta_dashboard/tests/tests/__init__.py +0 -0
  391. meta_dashboard/tests/urls.py +0 -55
  392. meta_edc/tests/__init__.py +0 -0
  393. meta_edc/tests/tests/__init__.py +0 -0
  394. meta_edc/tests/tests/test_endpoints.py +0 -555
  395. meta_edc-1.1.8.dist-info/METADATA +0 -767
  396. meta_edc-1.1.8.dist-info/WHEEL +0 -5
  397. meta_edc-1.1.8.dist-info/licenses/AUTHORS.rst +0 -8
  398. meta_edc-1.1.8.dist-info/top_level.txt +0 -20
  399. meta_labs/tests/__init__.py +0 -0
  400. meta_labs/tests/test_labs.py +0 -27
  401. meta_labs/tests/test_reportables.py +0 -70
  402. meta_labs/tests/urls.py +0 -4
  403. meta_lists/tests/__init__.py +0 -0
  404. meta_lists/tests/test_lists.py +0 -8
  405. meta_pharmacy/notebooks/pharmacy.ipynb +0 -41
  406. meta_prn/tests/__init__.py +0 -0
  407. meta_prn/tests/tests/__init__.py +0 -0
  408. meta_prn/tests/tests/test_actions.py +0 -97
  409. meta_prn/tests/tests/test_dm_referral.py +0 -203
  410. meta_prn/tests/tests/test_eos_events.py +0 -134
  411. meta_prn/tests/tests/test_manager_order.py +0 -14
  412. meta_prn/tests/tests/test_pregnancy_notification.py +0 -93
  413. meta_prn/tests/urls.py +0 -10
  414. meta_rando/tests/__init__.py +0 -0
  415. meta_rando/tests/tests/__init__.py +0 -0
  416. meta_rando/tests/tests/test_randomizers.py +0 -57
  417. meta_reports/tests/__init__.py +0 -0
  418. meta_reports/tests/test_reports.py +0 -35
  419. meta_reports/tests/test_sql_gen.py +0 -5
  420. meta_reports/tests/urls.py +0 -4
  421. meta_screening/offline_models.py +0 -3
  422. meta_screening/tests/__init__.py +0 -0
  423. meta_screening/tests/holidays.csv +0 -15
  424. meta_screening/tests/meta_test_case_mixin.py +0 -234
  425. meta_screening/tests/options.py +0 -127
  426. meta_screening/tests/tests/__init__.py +0 -0
  427. meta_screening/tests/tests/test_forms.py +0 -404
  428. meta_screening/tests/tests/test_screening_part_one.py +0 -108
  429. meta_screening/tests/tests/test_screening_part_three.py +0 -433
  430. meta_screening/tests/tests/test_screening_part_two.py +0 -84
  431. meta_sites/tests/__init__.py +0 -0
  432. meta_sites/tests/test_sites.py +0 -12
  433. meta_sites/tests/urls.py +0 -4
  434. meta_stats/__init__.py +0 -0
  435. meta_stats/incidence.py +0 -16
  436. meta_stats/models.py +0 -0
  437. meta_stats/tests/__init__.py +0 -0
  438. meta_stats/tests/tests/__init__.py +0 -0
  439. meta_stats/tests/tests/test_incidence.py +0 -10
  440. meta_subject/tests/__init__.py +0 -0
  441. meta_subject/tests/holidays.csv +0 -15
  442. meta_subject/tests/tests/__init__.py +0 -0
  443. meta_subject/tests/tests/test_egfr.py +0 -234
  444. meta_subject/tests/tests/test_fixes.py +0 -64
  445. meta_subject/tests/tests/test_followup.py +0 -52
  446. meta_subject/tests/tests/test_manager_order.py +0 -11
  447. meta_subject/tests/tests/test_medication_adherence.py +0 -79
  448. meta_subject/tests/tests/test_metadata_rules.py +0 -135
  449. meta_subject/tests/tests/test_mnsi.py +0 -341
  450. meta_subject/tests/tests/test_next_appointment.py +0 -231
  451. meta_subject/tests/tests/test_patient_history_form.py +0 -74
  452. meta_subject/tests/tests/test_physical_exam.py +0 -84
  453. meta_subject/tests/tests/test_sf12.py +0 -161
  454. meta_subject/tests/tests/test_study_medication.py +0 -229
  455. meta_subject/tests/urls.py +0 -24
  456. meta_visit_schedule/tests/__init__.py +0 -0
  457. meta_visit_schedule/tests/tests/__init__.py +0 -0
  458. meta_visit_schedule/tests/tests/test_schedule.py +0 -181
  459. meta_visit_schedule/tests/urls.py +0 -4
  460. tests/__init__.py +0 -0
  461. tests/etc/randomization_list.csv +0 -241
  462. tests/etc/randomization_list_phase_three.csv +0 -241
  463. tests/etc/user-aes-local.key +0 -0
  464. tests/etc/user-aes-restricted.key +0 -1
  465. tests/etc/user-rsa-local-private.pem +0 -27
  466. tests/etc/user-rsa-local-public.pem +0 -9
  467. tests/etc/user-rsa-restricted-private.pem +0 -27
  468. tests/etc/user-rsa-restricted-public.pem +0 -9
  469. tests/etc/user-salt-local.key +0 -0
  470. tests/etc/user-salt-restricted.key +0 -0
  471. tests/holidays.csv +0 -15
  472. tests/test_settings.py +0 -185
  473. {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/licenses/LICENSE +0 -0
  474. /meta_ae/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
  475. /meta_ae/tests/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
@@ -1,8 +1,7 @@
1
- from typing import Tuple
2
-
3
1
  from django.contrib import admin
4
2
  from django_audit_fields.admin import audit_fieldset_tuple
5
- from edc_action_item import ActionItemModelAdminMixin, action_fieldset_tuple
3
+ from edc_action_item.fieldsets import action_fieldset_tuple
4
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
6
5
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
7
6
  from edc_model_admin.history import SimpleHistoryAdmin
8
7
  from edc_sites.admin import SiteModelAdminMixin
@@ -40,7 +39,7 @@ class OffStudyMedicationAdmin(
40
39
  audit_fieldset_tuple,
41
40
  )
42
41
 
43
- radio_fields = {
42
+ radio_fields = { # noqa: RUF012
44
43
  "reason": admin.VERTICAL,
45
44
  }
46
45
 
@@ -48,7 +47,7 @@ class OffStudyMedicationAdmin(
48
47
 
49
48
  search_fields = ("subject_identifier",)
50
49
 
51
- def get_list_display(self, request) -> Tuple[str, ...]:
50
+ def get_list_display(self, request) -> tuple[str, ...]:
52
51
  list_display = super().get_list_display(request)
53
52
  custom_fields = (
54
53
  "subject_identifier",
@@ -58,7 +57,7 @@ class OffStudyMedicationAdmin(
58
57
  )
59
58
  return custom_fields + tuple(f for f in list_display if f not in custom_fields)
60
59
 
61
- def get_list_filter(self, request) -> Tuple[str, ...]:
60
+ def get_list_filter(self, request) -> tuple[str, ...]:
62
61
  list_filter = super().get_list_filter(request)
63
62
  custom_fields = (
64
63
  "medications",
@@ -1,10 +1,9 @@
1
- from typing import Tuple
2
-
3
1
  from django.contrib import admin
4
2
  from django.template.loader import render_to_string
5
3
  from django.utils.safestring import mark_safe
6
4
  from django_audit_fields import audit_fieldset_tuple
7
- from edc_action_item import ActionItemModelAdminMixin, action_fieldset_tuple
5
+ from edc_action_item.fieldsets import action_fieldset_tuple
6
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
8
7
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
9
8
  from edc_model_admin.history import SimpleHistoryAdmin
10
9
  from edc_sites.admin import SiteModelAdminMixin
@@ -23,7 +22,7 @@ class OffScheduleAdmin(
23
22
  ):
24
23
  form = OffScheduleForm
25
24
 
26
- additional_instructions = mark_safe(
25
+ additional_instructions = mark_safe( # noqa: S308
27
26
  render_to_string(
28
27
  "meta_prn/offschedule/additional_instructions.html",
29
28
  context=dict(verbose_name=EndOfStudy._meta.verbose_name),
@@ -36,12 +35,12 @@ class OffScheduleAdmin(
36
35
  audit_fieldset_tuple,
37
36
  )
38
37
 
39
- def get_list_display(self, request) -> Tuple[str, ...]:
38
+ def get_list_display(self, request) -> tuple[str, ...]:
40
39
  list_display = super().get_list_display(request)
41
40
  custom_fields = ("subject_identifier", "dashboard", "offschedule_datetime")
42
41
  return custom_fields + tuple(f for f in list_display if f not in custom_fields)
43
42
 
44
- def get_list_filter(self, request) -> Tuple[str, ...]:
43
+ def get_list_filter(self, request) -> tuple[str, ...]:
45
44
  list_filter = super().get_list_filter(request)
46
45
  custom_fields = ("offschedule_datetime",)
47
46
  return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
@@ -1,10 +1,10 @@
1
- from typing import Tuple
2
1
 
3
2
  from django.contrib import admin
4
3
  from django.template.loader import render_to_string
5
4
  from django.utils.safestring import mark_safe
6
5
  from django_audit_fields import audit_fieldset_tuple
7
- from edc_action_item import ActionItemModelAdminMixin, action_fieldset_tuple
6
+ from edc_action_item.fieldsets import action_fieldset_tuple
7
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
8
8
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
9
9
  from edc_model_admin.history import SimpleHistoryAdmin
10
10
  from edc_sites.admin import SiteModelAdminMixin
@@ -25,12 +25,12 @@ class OffScheduleDmReferralAdmin(
25
25
 
26
26
  form = OffScheduleDmReferralForm
27
27
 
28
- additional_instructions = mark_safe(
28
+ additional_instructions = mark_safe( # noqa: S308
29
29
  render_to_string(
30
30
  "meta_prn/offschedule/additional_instructions.html",
31
31
  context=dict(verbose_name=EndOfStudy._meta.verbose_name),
32
32
  )
33
- ) # nosec B703, B308
33
+ )
34
34
 
35
35
  fieldsets = (
36
36
  (None, {"fields": ("subject_identifier", "offschedule_datetime")}),
@@ -38,12 +38,12 @@ class OffScheduleDmReferralAdmin(
38
38
  audit_fieldset_tuple,
39
39
  )
40
40
 
41
- def get_list_display(self, request) -> Tuple[str, ...]:
41
+ def get_list_display(self, request) -> tuple[str, ...]:
42
42
  list_display = super().get_list_display(request)
43
43
  custom_fields = ("subject_identifier", "dashboard", "offschedule_datetime")
44
44
  return custom_fields + tuple(f for f in list_display if f not in custom_fields)
45
45
 
46
- def get_list_filter(self, request) -> Tuple[str, ...]:
46
+ def get_list_filter(self, request) -> tuple[str, ...]:
47
47
  list_filter = super().get_list_filter(request)
48
48
  custom_fields = ("offschedule_datetime",)
49
49
  return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
@@ -1,10 +1,10 @@
1
- from typing import Tuple
2
1
 
3
2
  from django.contrib import admin
4
3
  from django.template.loader import render_to_string
5
4
  from django.utils.safestring import mark_safe
6
5
  from django_audit_fields import audit_fieldset_tuple
7
- from edc_action_item import ActionItemModelAdminMixin, action_fieldset_tuple
6
+ from edc_action_item.fieldsets import action_fieldset_tuple
7
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
8
8
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
9
9
  from edc_model_admin.history import SimpleHistoryAdmin
10
10
  from edc_sites.admin import SiteModelAdminMixin
@@ -22,12 +22,12 @@ class OffSchedulePostnatalAdmin(
22
22
  ):
23
23
  instructions = None
24
24
 
25
- additional_instructions = mark_safe(
25
+ additional_instructions = mark_safe( # noqa: S308
26
26
  render_to_string(
27
27
  "meta_prn/offschedule/additional_instructions.html",
28
28
  context=dict(verbose_name=EndOfStudy._meta.verbose_name),
29
29
  )
30
- ) # nosec B703, B308
30
+ )
31
31
 
32
32
  fieldsets = (
33
33
  (None, {"fields": ("subject_identifier", "offschedule_datetime")}),
@@ -35,16 +35,16 @@ class OffSchedulePostnatalAdmin(
35
35
  audit_fieldset_tuple,
36
36
  )
37
37
 
38
- def get_list_display(self, request) -> Tuple[str, ...]:
38
+ def get_list_display(self, request) -> tuple[str, ...]:
39
39
  list_display = super().get_list_display(request)
40
40
  custom_fields = ("subject_identifier", "dashboard", "offschedule_datetime")
41
41
  return custom_fields + tuple(f for f in list_display if f not in custom_fields)
42
42
 
43
- def get_list_filter(self, request) -> Tuple[str, ...]:
43
+ def get_list_filter(self, request) -> tuple[str, ...]:
44
44
  list_filter = super().get_list_filter(request)
45
45
  custom_fields = ("offschedule_datetime",)
46
46
  return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
47
47
 
48
- def get_readonly_fields(self, request, obj=None) -> Tuple[str, ...]:
48
+ def get_readonly_fields(self, request, obj=None) -> tuple[str, ...]:
49
49
  custom_fields = ("subject_identifier", "offschedule_datetime")
50
50
  return tuple(set(super().get_readonly_fields(request, obj=obj) + custom_fields))
@@ -1,10 +1,10 @@
1
- from typing import Tuple
2
1
 
3
2
  from django.contrib import admin
4
3
  from django.template.loader import render_to_string
5
4
  from django.utils.safestring import mark_safe
6
5
  from django_audit_fields import audit_fieldset_tuple
7
- from edc_action_item import ActionItemModelAdminMixin, action_fieldset_tuple
6
+ from edc_action_item.fieldsets import action_fieldset_tuple
7
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
8
8
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
9
9
  from edc_model_admin.history import SimpleHistoryAdmin
10
10
  from edc_sites.admin import SiteModelAdminMixin
@@ -23,12 +23,12 @@ class OffSchedulePregnancyAdmin(
23
23
  ):
24
24
  instructions = None
25
25
 
26
- additional_instructions = mark_safe(
26
+ additional_instructions = mark_safe( # noqa: S308
27
27
  render_to_string(
28
28
  "meta_prn/offschedule/additional_instructions.html",
29
29
  context=dict(verbose_name=EndOfStudy._meta.verbose_name),
30
30
  )
31
- ) # nosec B703, B308
31
+ )
32
32
 
33
33
  form = OffSchedulePregnancyForm
34
34
 
@@ -38,16 +38,17 @@ class OffSchedulePregnancyAdmin(
38
38
  audit_fieldset_tuple,
39
39
  )
40
40
 
41
- def get_list_display(self, request) -> Tuple[str, ...]:
41
+ def get_list_display(self, request) -> tuple[str, ...]:
42
42
  list_display = super().get_list_display(request)
43
43
  custom_fields = ("subject_identifier", "dashboard", "offschedule_datetime")
44
44
  return custom_fields + tuple(f for f in list_display if f not in custom_fields)
45
45
 
46
- def get_list_filter(self, request) -> Tuple[str, ...]:
46
+ def get_list_filter(self, request) -> tuple[str, ...]:
47
47
  list_filter = super().get_list_filter(request)
48
48
  custom_fields = ("offschedule_datetime",)
49
49
  return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
50
50
 
51
51
  # def get_readonly_fields(self, request, obj=None) -> Tuple[str, ...]:
52
52
  # custom_fields = ("subject_identifier", "offschedule_datetime")
53
- # return tuple(set(super().get_readonly_fields(request, obj=obj) + custom_fields))
53
+ # return tuple(set(super().get_readonly_fields(request, obj=obj) +
54
+ # custom_fields))
@@ -1,5 +1,3 @@
1
- from typing import Tuple
2
-
3
1
  from django.contrib import admin
4
2
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
5
3
  from edc_model_admin.history import SimpleHistoryAdmin
@@ -17,23 +15,24 @@ class OnScheduleAdmin(
17
15
 
18
16
  fields = ("subject_identifier", "onschedule_datetime")
19
17
 
20
- def get_list_display(self, request) -> Tuple[str, ...]:
18
+ def get_list_display(self, request) -> tuple[str, ...]:
21
19
  list_display = super().get_list_display(request)
22
20
  custom_fields = ("subject_identifier", "dashboard", "onschedule_datetime")
23
21
  return custom_fields + tuple(
24
- f for f in list_display if f not in custom_fields + ("__str__",)
22
+ f for f in list_display if f not in (*custom_fields, "__str__")
25
23
  )
26
24
 
27
- def get_list_filter(self, request) -> Tuple[str, ...]:
25
+ def get_list_filter(self, request) -> tuple[str, ...]:
28
26
  list_filter = super().get_list_filter(request)
29
27
  custom_fields = ("onschedule_datetime",)
30
28
  return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
31
29
 
32
- def get_readonly_fields(self, request, obj=None) -> Tuple[str, ...]:
30
+ def get_readonly_fields(self, request, obj=None) -> tuple[str, ...]: # noqa: ARG002
33
31
  return (
34
32
  "subject_identifier",
35
33
  "onschedule_datetime",
36
34
  )
37
35
 
38
- def get_search_fields(self, request) -> Tuple[str, ...]:
39
- return tuple(set(super().get_search_fields(request) + ("subject_identifier",)))
36
+ def get_search_fields(self, request) -> tuple[str, ...]:
37
+ fields = super().get_search_fields(request)
38
+ return tuple({*fields, "subject_identifier"})
@@ -1,5 +1,3 @@
1
- from typing import Tuple
2
-
3
1
  from django.contrib import admin
4
2
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
5
3
  from edc_model_admin.history import SimpleHistoryAdmin
@@ -17,14 +15,14 @@ class OnScheduleDmReferralAdmin(
17
15
 
18
16
  fields = ("subject_identifier", "onschedule_datetime")
19
17
 
20
- def get_list_display(self, request) -> Tuple[str, ...]:
18
+ def get_list_display(self, request) -> tuple[str, ...]:
21
19
  list_display = super().get_list_display(request)
22
20
  custom_fields = ("subject_identifier", "dashboard", "onschedule_datetime")
23
21
  return custom_fields + tuple(
24
- f for f in list_display if f not in custom_fields + ("__str__",)
22
+ f for f in list_display if f not in (*custom_fields, "__str__")
25
23
  )
26
24
 
27
- def get_list_filter(self, request) -> Tuple[str, ...]:
25
+ def get_list_filter(self, request) -> tuple[str, ...]:
28
26
  list_filter = super().get_list_filter(request)
29
27
  custom_fields = ("onschedule_datetime",)
30
28
  return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
@@ -35,5 +33,6 @@ class OnScheduleDmReferralAdmin(
35
33
  # "onschedule_datetime",
36
34
  # )
37
35
 
38
- def get_search_fields(self, request) -> Tuple[str, ...]:
39
- return tuple(set(super().get_search_fields(request) + ("subject_identifier",)))
36
+ def get_search_fields(self, request) -> tuple[str, ...]:
37
+ fields = super().get_search_fields(request)
38
+ return tuple({*fields, "subject_identifier"})
@@ -1,8 +1,7 @@
1
- from typing import Tuple
2
-
3
1
  from django.contrib import admin
4
2
  from django_audit_fields.admin import audit_fieldset_tuple
5
- from edc_action_item import ActionItemModelAdminMixin, action_fieldset_tuple
3
+ from edc_action_item.fieldsets import action_fieldset_tuple
4
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
6
5
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
7
6
  from edc_model_admin.history import SimpleHistoryAdmin
8
7
  from edc_sites.admin import SiteModelAdminMixin
@@ -46,12 +45,12 @@ class PregnancyNotificationAdmin(
46
45
  audit_fieldset_tuple,
47
46
  )
48
47
 
49
- radio_fields = {
48
+ radio_fields = { # noqa: RUF012
50
49
  "bhcg_confirmed": admin.VERTICAL,
51
50
  "may_contact": admin.VERTICAL,
52
51
  }
53
52
 
54
- def get_list_display(self, request) -> Tuple[str, ...]:
53
+ def get_list_display(self, request) -> tuple[str, ...]:
55
54
  list_display = super().get_list_display(request)
56
55
  custom_fields = (
57
56
  "subject_identifier",
@@ -61,7 +60,7 @@ class PregnancyNotificationAdmin(
61
60
  )
62
61
  return custom_fields + tuple(f for f in list_display if f not in custom_fields)
63
62
 
64
- def get_list_filter(self, request) -> Tuple[str, ...]:
63
+ def get_list_filter(self, request) -> tuple[str, ...]:
65
64
  list_filter = super().get_list_filter(request)
66
65
  custom_fields = ("edd", "may_contact")
67
66
  return custom_fields + tuple(f for f in list_filter if f not in custom_fields)
@@ -1,5 +1,5 @@
1
1
  from django.contrib import admin
2
- from edc_action_item import ActionItemModelAdminMixin
2
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
3
3
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
4
4
  from edc_model_admin.history import SimpleHistoryAdmin
5
5
  from edc_protocol_incident.modeladmin_mixins import ProtocolIncidentModelAdminMixin
@@ -1,5 +1,5 @@
1
1
  from django.contrib import admin
2
- from edc_action_item import ActionItemModelAdminMixin
2
+ from edc_action_item.modeladmin_mixins import ActionItemModelAdminMixin
3
3
  from edc_model_admin.dashboard import ModelAdminSubjectDashboardMixin
4
4
  from edc_model_admin.history import SimpleHistoryAdmin
5
5
  from edc_sites.admin import SiteModelAdminMixin
meta_prn/baker_recipes.py CHANGED
@@ -1,6 +1,6 @@
1
1
  from dateutil.relativedelta import relativedelta
2
+ from django.utils import timezone
2
3
  from edc_constants.constants import YES
3
- from edc_utils import get_utcnow
4
4
  from faker import Faker
5
5
  from model_bakery.recipe import Recipe
6
6
 
@@ -14,15 +14,15 @@ pregnancynotification = Recipe(
14
14
  # site=None,
15
15
  action_identifier=None,
16
16
  subject_identifier=None,
17
- report_datetime=get_utcnow(),
17
+ report_datetime=timezone.now(),
18
18
  bhcg_confirmed=YES,
19
19
  unconfirmed_details=None,
20
- edd=get_utcnow() + relativedelta(months=6),
20
+ edd=timezone.now() + relativedelta(months=6),
21
21
  )
22
22
 
23
23
  dmreferral = Recipe(
24
24
  DmReferral,
25
25
  action_identifier=None,
26
26
  subject_identifier=None,
27
- report_datetime=get_utcnow(),
27
+ report_datetime=timezone.now(),
28
28
  )
@@ -1,2 +1,7 @@
1
1
  from .end_of_study import EndOfStudyFormValidator
2
2
  from .protocol_incident import ProtocolIncidentFormValidator
3
+
4
+ __all__ = [
5
+ "EndOfStudyFormValidator",
6
+ "ProtocolIncidentFormValidator",
7
+ ]
@@ -192,7 +192,7 @@ class EndOfStudyFormValidator(
192
192
  if (obj.bhcg_date or obj.report_datetime.date()) != self.cleaned_data.get(
193
193
  "pregnancy_date"
194
194
  ):
195
- dt = formatted_date((obj.bhcg_date or obj.report_datetime.date()))
195
+ dt = formatted_date(obj.bhcg_date or obj.report_datetime.date())
196
196
  self.raise_validation_error(
197
197
  {
198
198
  "pregnancy_date": (
@@ -229,7 +229,7 @@ class EndOfStudyFormValidator(
229
229
  obj.delivery_datetime.date() or obj.report_datetime.date()
230
230
  ) != self.cleaned_data.get("delivery_date"):
231
231
  dt = formatted_date(
232
- (obj.delivery_datetime.date() or obj.report_datetime.date())
232
+ obj.delivery_datetime.date() or obj.report_datetime.date()
233
233
  )
234
234
  self.raise_validation_error(
235
235
  {
@@ -8,3 +8,16 @@ from .offschedule_pregnancy_form import OffSchedulePregnancyForm
8
8
  from .pregnancy_notification_form import PregnancyNotificationForm
9
9
  from .protocol_incident_form import ProtocolIncidentForm
10
10
  from .subject_transfer_form import SubjectTransferForm
11
+
12
+ __all__ = [
13
+ "DmReferralForm",
14
+ "EndOfStudyForm",
15
+ "LossToFollowupForm",
16
+ "OffScheduleDmReferralForm",
17
+ "OffScheduleForm",
18
+ "OffSchedulePregnancyForm",
19
+ "OffStudyMedicationForm",
20
+ "PregnancyNotificationForm",
21
+ "ProtocolIncidentForm",
22
+ "SubjectTransferForm",
23
+ ]
@@ -9,7 +9,7 @@ import django.db.models.deletion
9
9
  import django_audit_fields.fields.hostname_modification_field
10
10
  import django_audit_fields.fields.userfield
11
11
  import django_audit_fields.fields.uuid_auto_field
12
- import django_audit_fields.models.audit_model_mixin
12
+ import django.utils.timezone
13
13
  import django_revision.revision_field
14
14
  import edc_action_item.managers
15
15
  import edc_identifier.managers
@@ -80,14 +80,14 @@ class Migration(migrations.Migration):
80
80
  "created",
81
81
  models.DateTimeField(
82
82
  blank=True,
83
- default=django_audit_fields.models.audit_model_mixin.utcnow,
83
+ default=django.utils.timezone.now,
84
84
  ),
85
85
  ),
86
86
  (
87
87
  "modified",
88
88
  models.DateTimeField(
89
89
  blank=True,
90
- default=django_audit_fields.models.audit_model_mixin.utcnow,
90
+ default=django.utils.timezone.now,
91
91
  ),
92
92
  ),
93
93
  (
@@ -250,14 +250,14 @@ class Migration(migrations.Migration):
250
250
  "created",
251
251
  models.DateTimeField(
252
252
  blank=True,
253
- default=django_audit_fields.models.audit_model_mixin.utcnow,
253
+ default=django.utils.timezone.now,
254
254
  ),
255
255
  ),
256
256
  (
257
257
  "modified",
258
258
  models.DateTimeField(
259
259
  blank=True,
260
- default=django_audit_fields.models.audit_model_mixin.utcnow,
260
+ default=django.utils.timezone.now,
261
261
  ),
262
262
  ),
263
263
  (
@@ -439,14 +439,14 @@ class Migration(migrations.Migration):
439
439
  "created",
440
440
  models.DateTimeField(
441
441
  blank=True,
442
- default=django_audit_fields.models.audit_model_mixin.utcnow,
442
+ default=django.utils.timezone.now,
443
443
  ),
444
444
  ),
445
445
  (
446
446
  "modified",
447
447
  models.DateTimeField(
448
448
  blank=True,
449
- default=django_audit_fields.models.audit_model_mixin.utcnow,
449
+ default=django.utils.timezone.now,
450
450
  ),
451
451
  ),
452
452
  (
@@ -779,14 +779,14 @@ class Migration(migrations.Migration):
779
779
  "created",
780
780
  models.DateTimeField(
781
781
  blank=True,
782
- default=django_audit_fields.models.audit_model_mixin.utcnow,
782
+ default=django.utils.timezone.now,
783
783
  ),
784
784
  ),
785
785
  (
786
786
  "modified",
787
787
  models.DateTimeField(
788
788
  blank=True,
789
- default=django_audit_fields.models.audit_model_mixin.utcnow,
789
+ default=django.utils.timezone.now,
790
790
  ),
791
791
  ),
792
792
  (
@@ -885,14 +885,14 @@ class Migration(migrations.Migration):
885
885
  "created",
886
886
  models.DateTimeField(
887
887
  blank=True,
888
- default=django_audit_fields.models.audit_model_mixin.utcnow,
888
+ default=django.utils.timezone.now,
889
889
  ),
890
890
  ),
891
891
  (
892
892
  "modified",
893
893
  models.DateTimeField(
894
894
  blank=True,
895
- default=django_audit_fields.models.audit_model_mixin.utcnow,
895
+ default=django.utils.timezone.now,
896
896
  ),
897
897
  ),
898
898
  (
@@ -1063,14 +1063,14 @@ class Migration(migrations.Migration):
1063
1063
  "created",
1064
1064
  models.DateTimeField(
1065
1065
  blank=True,
1066
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1066
+ default=django.utils.timezone.now,
1067
1067
  ),
1068
1068
  ),
1069
1069
  (
1070
1070
  "modified",
1071
1071
  models.DateTimeField(
1072
1072
  blank=True,
1073
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1073
+ default=django.utils.timezone.now,
1074
1074
  ),
1075
1075
  ),
1076
1076
  (
@@ -1270,14 +1270,14 @@ class Migration(migrations.Migration):
1270
1270
  "created",
1271
1271
  models.DateTimeField(
1272
1272
  blank=True,
1273
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1273
+ default=django.utils.timezone.now,
1274
1274
  ),
1275
1275
  ),
1276
1276
  (
1277
1277
  "modified",
1278
1278
  models.DateTimeField(
1279
1279
  blank=True,
1280
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1280
+ default=django.utils.timezone.now,
1281
1281
  ),
1282
1282
  ),
1283
1283
  (
@@ -1496,14 +1496,14 @@ class Migration(migrations.Migration):
1496
1496
  "created",
1497
1497
  models.DateTimeField(
1498
1498
  blank=True,
1499
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1499
+ default=django.utils.timezone.now,
1500
1500
  ),
1501
1501
  ),
1502
1502
  (
1503
1503
  "modified",
1504
1504
  models.DateTimeField(
1505
1505
  blank=True,
1506
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1506
+ default=django.utils.timezone.now,
1507
1507
  ),
1508
1508
  ),
1509
1509
  (
@@ -1870,14 +1870,14 @@ class Migration(migrations.Migration):
1870
1870
  "created",
1871
1871
  models.DateTimeField(
1872
1872
  blank=True,
1873
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1873
+ default=django.utils.timezone.now,
1874
1874
  ),
1875
1875
  ),
1876
1876
  (
1877
1877
  "modified",
1878
1878
  models.DateTimeField(
1879
1879
  blank=True,
1880
- default=django_audit_fields.models.audit_model_mixin.utcnow,
1880
+ default=django.utils.timezone.now,
1881
1881
  ),
1882
1882
  ),
1883
1883
  (
@@ -2003,14 +2003,14 @@ class Migration(migrations.Migration):
2003
2003
  "created",
2004
2004
  models.DateTimeField(
2005
2005
  blank=True,
2006
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2006
+ default=django.utils.timezone.now,
2007
2007
  ),
2008
2008
  ),
2009
2009
  (
2010
2010
  "modified",
2011
2011
  models.DateTimeField(
2012
2012
  blank=True,
2013
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2013
+ default=django.utils.timezone.now,
2014
2014
  ),
2015
2015
  ),
2016
2016
  (
@@ -2222,14 +2222,14 @@ class Migration(migrations.Migration):
2222
2222
  "created",
2223
2223
  models.DateTimeField(
2224
2224
  blank=True,
2225
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2225
+ default=django.utils.timezone.now,
2226
2226
  ),
2227
2227
  ),
2228
2228
  (
2229
2229
  "modified",
2230
2230
  models.DateTimeField(
2231
2231
  blank=True,
2232
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2232
+ default=django.utils.timezone.now,
2233
2233
  ),
2234
2234
  ),
2235
2235
  (
@@ -2448,14 +2448,14 @@ class Migration(migrations.Migration):
2448
2448
  "created",
2449
2449
  models.DateTimeField(
2450
2450
  blank=True,
2451
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2451
+ default=django.utils.timezone.now,
2452
2452
  ),
2453
2453
  ),
2454
2454
  (
2455
2455
  "modified",
2456
2456
  models.DateTimeField(
2457
2457
  blank=True,
2458
- default=django_audit_fields.models.audit_model_mixin.utcnow,
2458
+ default=django.utils.timezone.now,
2459
2459
  ),
2460
2460
  ),
2461
2461
  (