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.
- meta_ae/action_items.py +2 -1
- meta_ae/admin/__init__.py +11 -0
- meta_ae/admin/ae_susar_admin.py +1 -1
- meta_ae/admin/death_report_admin.py +1 -1
- meta_ae/admin/modeladmin_mixins.py +10 -12
- meta_ae/baker_recipes.py +3 -3
- meta_ae/forms/__init__.py +13 -0
- meta_ae/forms/modelform_mixins.py +2 -2
- meta_ae/migrations/0001_initial.py +27 -27
- meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
- meta_ae/migrations/0022_historicalhospitalization_hospitalization.py +5 -13
- meta_ae/migrations/0023_alter_aefollowup_action_identifier_and_more.py +2017 -0
- meta_ae/model_mixins/__init__.py +2 -0
- meta_ae/model_mixins/ae_review_model_mixin.py +6 -6
- meta_ae/model_mixins/death_report_model_mixin.py +3 -3
- meta_ae/models/__init__.py +13 -0
- meta_ae/models/hospitalization.py +3 -3
- meta_ae/pdf_reports/__init__.py +2 -0
- meta_analytics/.DS_Store +0 -0
- meta_analytics/dataframes/__init__.py +24 -0
- meta_analytics/dataframes/get_eos_df.py +1 -2
- meta_analytics/dataframes/get_glucose_df.py +6 -7
- meta_analytics/dataframes/get_glucose_fbg_df.py +2 -3
- meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +1 -2
- meta_analytics/dataframes/get_last_imp_visits_df.py +5 -6
- meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
- meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +13 -20
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +9 -10
- meta_analytics/dataframes/screening/__init__.py +2 -0
- meta_analytics/dataframes/screening/get_glucose_tested_only_df.py +1 -2
- meta_analytics/dataframes/screening/get_screening_df.py +6 -10
- meta_analytics/dataframes/utils.py +3 -8
- meta_analytics/get_tables.py +1 -2
- meta_analytics/tables/__init__.py +2 -0
- meta_consent/action_items.py +2 -1
- meta_consent/admin/__init__.py +6 -0
- meta_consent/admin/actions/__init__.py +2 -0
- meta_consent/admin/actions/create_missing_prescriptions.py +1 -1
- meta_consent/admin/list_filters.py +2 -2
- meta_consent/admin/modeladmin_mixins.py +3 -4
- meta_consent/admin/subject_consent_v1_ext_admin.py +2 -2
- meta_consent/baker_recipes.py +7 -8
- meta_consent/form_validators/__init__.py +2 -0
- meta_consent/forms/__init__.py +7 -0
- meta_consent/forms/subject_consent_v1_ext_form.py +2 -3
- meta_consent/forms/subject_reconsent_form.py +4 -4
- meta_consent/management/commands/create_missing_prescriptions.py +4 -2
- meta_consent/migrations/0001_initial.py +9 -9
- meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
- meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +5 -14
- meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
- meta_consent/models/__init__.py +9 -0
- meta_consent/models/model_mixins.py +1 -2
- meta_consent/models/signals.py +9 -10
- meta_consent/models/subject_consent.py +1 -1
- meta_consent/models/subject_reconsent.py +3 -3
- meta_dashboard/patterns.py +1 -1
- meta_dashboard/templatetags/meta_dashboard_extras.py +1 -1
- meta_dashboard/view_utils/__init__.py +7 -0
- meta_dashboard/view_utils/subject_screening_button.py +9 -16
- meta_dashboard/views/__init__.py +8 -0
- meta_dashboard/views/ae/__init__.py +2 -0
- meta_dashboard/views/ae/ae_listboard_view.py +1 -1
- meta_dashboard/views/ae/death_report_listboard_view.py +1 -1
- meta_dashboard/views/screening/__init__.py +2 -0
- meta_dashboard/views/subject/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/__init__.py +2 -0
- meta_dashboard/views/subject/dashboard/dashboard_view.py +1 -1
- meta_dashboard/views/subject/listboard/__init__.py +2 -0
- meta_edc/__init__.py +5 -9
- meta_edc/celery.py +1 -1
- meta_edc/celery_live.py +1 -1
- meta_edc/celery_uat.py +1 -1
- meta_edc/management/commands/update_forms_reference.py +10 -12
- meta_edc/settings/debug.py +5 -4
- meta_edc/settings/defaults.py +18 -3
- meta_edc/settings/live.py +3 -1
- meta_edc/settings/logging.py +9 -4
- meta_edc/settings/minimal.py +4 -5
- meta_edc/settings/uat.py +3 -1
- meta_edc/views/__init__.py +2 -0
- meta_edc-1.1.12.dist-info/METADATA +174 -0
- {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/RECORD +413 -526
- meta_edc-1.1.12.dist-info/WHEEL +4 -0
- meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
- meta_pharmacy/admin/__init__.py +5 -0
- meta_pharmacy/admin/substitutions_admin.py +2 -2
- meta_pharmacy/forms/__init__.py +2 -0
- meta_pharmacy/forms/substitutions_form.py +6 -4
- meta_pharmacy/labels/__init__.py +4 -2
- meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +1 -2
- meta_pharmacy/labels/draw_label_with_test_data.py +2 -2
- meta_pharmacy/labels/label_data.py +1 -2
- meta_pharmacy/labels/print_sheets.py +4 -6
- meta_pharmacy/migrations/0002_initial.py +7 -20
- meta_pharmacy/migrations/0003_auto_20240909_2335.py +3 -2
- meta_pharmacy/migrations/0006_lotnumber_label.py +5 -14
- meta_pharmacy/migrations/0008_remove_lotnumber_medication_and_more.py +5 -6
- meta_pharmacy/migrations/0010_alter_historicallabeldata_device_created_and_more.py +382 -0
- meta_pharmacy/models/__init__.py +7 -0
- meta_pharmacy/models/label_data.py +4 -5
- meta_pharmacy/models/substitutions.py +3 -3
- meta_pharmacy/prepare_meta_pharmacy.py +1 -1
- meta_pharmacy/utils/__init__.py +2 -0
- meta_pharmacy/utils/update_initial_pharmacy_data.py +1 -1
- meta_prn/admin/__init__.py +16 -0
- meta_prn/admin/dm_referral_admin.py +2 -1
- meta_prn/admin/end_of_study_admin.py +6 -7
- meta_prn/admin/loss_to_followup_admin.py +3 -2
- meta_prn/admin/off_study_medication_admin.py +5 -6
- meta_prn/admin/offschedule_admin.py +5 -6
- meta_prn/admin/offschedule_dm_referral_admin.py +6 -6
- meta_prn/admin/offschedule_postnatal_admin.py +7 -7
- meta_prn/admin/offschedule_pregnancy_admin.py +8 -7
- meta_prn/admin/onschedule_admin.py +7 -8
- meta_prn/admin/onschedule_dm_referral_admin.py +6 -7
- meta_prn/admin/pregnancy_notification_admin.py +5 -6
- meta_prn/admin/protocol_incident_admin.py +1 -1
- meta_prn/admin/subject_transfer_admin.py +1 -1
- meta_prn/baker_recipes.py +4 -4
- meta_prn/form_validators/__init__.py +5 -0
- meta_prn/form_validators/end_of_study.py +2 -2
- meta_prn/forms/__init__.py +13 -0
- meta_prn/migrations/0001_initial.py +25 -25
- meta_prn/migrations/0017_auto_20220307_1929.py +5 -5
- meta_prn/migrations/0018_auto_20220309_2106.py +9 -9
- meta_prn/migrations/0021_auto_20220316_2147.py +13 -13
- meta_prn/migrations/0022_auto_20220318_0133.py +9 -9
- meta_prn/migrations/0032_historicalegfrnotification_egfrnotification.py +5 -13
- meta_prn/migrations/0038_alter_endofstudy_delivery_date_and_more.py +5 -13
- meta_prn/migrations/0041_endofstudy_transfer_date_and_more.py +5 -13
- meta_prn/migrations/0057_historicalonscheduledmreferral_and_more.py +13 -38
- meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
- meta_prn/models/__init__.py +20 -0
- meta_prn/models/offschedule.py +4 -4
- meta_prn/models/protocol_incident.py +1 -1
- meta_prn/models/subject_transfer.py +8 -0
- meta_rando/migrations/0001_initial.py +5 -5
- meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
- meta_reports/__init__.py +2 -0
- meta_reports/admin/__init__.py +16 -0
- meta_reports/admin/dbviews/__init__.py +13 -0
- meta_reports/admin/dbviews/glucose_summary_admin.py +6 -6
- meta_reports/admin/dbviews/imp_substitutions_admin.py +12 -11
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/__init__.py +5 -0
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/note_model_admin.py +27 -3
- meta_reports/admin/dbviews/missing_screening_ogtt_admin/unmanaged_model_admin.py +6 -6
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/on_study_missing_lab_values_admin/unmanaged_model_admin.py +0 -3
- meta_reports/admin/dbviews/on_study_missing_values_admin/__init__.py +2 -0
- meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +8 -8
- meta_reports/admin/dbviews/unattended_three_in_row2_admin.py +6 -6
- meta_reports/admin/dbviews/unattended_three_in_row_admin.py +5 -5
- meta_reports/admin/dbviews/unattended_two_in_row_admin.py +5 -5
- meta_reports/admin/endpoints_admin.py +1 -1
- meta_reports/admin/last_imp_refill_admin.py +9 -9
- meta_reports/admin/list_filters.py +2 -2
- meta_reports/admin/modeladmin_mixins.py +9 -16
- meta_reports/death_report.py +1 -1
- meta_reports/forms/__init__.py +2 -0
- meta_reports/forms/missing_ogtt_note_form.py +2 -3
- meta_reports/management/commands/generate_endpoints.py +5 -4
- meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
- meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
- meta_reports/models/__init__.py +17 -0
- meta_reports/models/dbviews/__init__.py +14 -0
- meta_reports/models/dbviews/glucose_summary/__init__.py +2 -0
- meta_reports/models/dbviews/glucose_summary/unmanaged_model.py +4 -5
- meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
- meta_reports/models/dbviews/imp_substitutions/view_definition.py +1 -1
- meta_reports/models/dbviews/missing_screening_ogtt/__init__.py +2 -0
- meta_reports/models/dbviews/missing_screening_ogtt/note_model.py +1 -1
- meta_reports/models/dbviews/missing_screening_ogtt/unmanaged_model.py +4 -3
- meta_reports/models/dbviews/on_study_missing_lab_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_lab_values/qa_cases.py +13 -11
- meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +18 -0
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
- meta_reports/models/endpoints.py +4 -4
- meta_reports/models/last_imp_refill.py +2 -3
- meta_reports/pdf_report.py +2 -2
- meta_reports/tasks.py +1 -1
- meta_screening/admin/__init__.py +8 -0
- meta_screening/admin/fieldsets.py +13 -14
- meta_screening/admin/list_filters.py +6 -4
- meta_screening/admin/screening_part_one_admin.py +1 -2
- meta_screening/admin/screening_part_three_admin.py +2 -3
- meta_screening/admin/screening_part_two_admin.py +7 -10
- meta_screening/admin/subject_refusal_admin.py +5 -3
- meta_screening/admin/subject_screening_admin.py +4 -4
- meta_screening/baker_recipes.py +9 -9
- meta_screening/eligibility/__init__.py +9 -0
- meta_screening/eligibility/eligibility.py +7 -7
- meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
- meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +8 -8
- meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +13 -14
- meta_screening/form_validators/__init__.py +8 -0
- meta_screening/forms/__init__.py +20 -0
- meta_screening/forms/field_lists.py +16 -17
- meta_screening/forms/screening_part_one_form.py +2 -2
- meta_screening/forms/screening_part_three_form.py +5 -3
- meta_screening/forms/screening_part_two_form.py +1 -5
- meta_screening/forms/subject_refusal_form.py +0 -4
- meta_screening/forms/subject_screening_form.py +0 -4
- meta_screening/migrations/0001_initial.py +15 -15
- meta_screening/migrations/0010_auto_20191106_0828.py +5 -5
- meta_screening/migrations/0068_alter_historicalscreeningpartone_acute_condition_and_more.py +1579 -0
- meta_screening/model_mixins/__init__.py +8 -0
- meta_screening/model_mixins/eligibility_model_mixin.py +5 -3
- meta_screening/model_mixins/part_one_fields_model_mixin.py +5 -9
- meta_screening/model_mixins/part_three_fields_model_mixin.py +5 -6
- meta_screening/model_mixins/part_two_fields_model_mixin.py +18 -16
- meta_screening/models/__init__.py +9 -0
- meta_screening/models/icp_referral.py +5 -5
- meta_screening/models/signals.py +10 -11
- meta_screening/models/subject_refusal.py +1 -1
- meta_screening/models/subject_screening.py +1 -3
- meta_subject/action_items.py +13 -15
- meta_subject/admin/__init__.py +39 -0
- meta_subject/admin/birth_outcome_admin.py +4 -8
- meta_subject/admin/blood_results/__init__.py +9 -0
- meta_subject/admin/blood_results/blood_results_fbc_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_hba1c_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_ins_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lft_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_lipids_admin.py +1 -1
- meta_subject/admin/blood_results/blood_results_rft_admin.py +3 -5
- meta_subject/admin/complications_glycemia_admin.py +1 -1
- meta_subject/admin/delivery_admin.py +7 -10
- meta_subject/admin/diabetes/__init__.py +2 -0
- meta_subject/admin/diabetes/dm_endpoint_admin.py +2 -2
- meta_subject/admin/diabetes/dm_followup_admin.py +3 -2
- meta_subject/admin/egfr_drop_notification_admin.py +1 -1
- meta_subject/admin/followup_examination_admin.py +10 -9
- meta_subject/admin/followup_vitals_admin.py +4 -5
- meta_subject/admin/glucose_admin.py +2 -4
- meta_subject/admin/glucose_fbg_admin.py +1 -3
- meta_subject/admin/health_economics/__init__.py +2 -0
- meta_subject/admin/health_economics/health_economics_simple_admin.py +1 -1
- meta_subject/admin/health_economics/health_economics_update_admin.py +1 -1
- meta_subject/admin/hepatitis_test_admin.py +1 -1
- meta_subject/admin/list_filters.py +1 -1
- meta_subject/admin/mnsi_admin.py +7 -5
- meta_subject/admin/other_arv_regimens_admin.py +3 -3
- meta_subject/admin/patient_history_admin.py +4 -4
- meta_subject/admin/physical_exam_admin.py +1 -1
- meta_subject/admin/pregnancy_update_admin.py +1 -1
- meta_subject/admin/study_medication_admin.py +8 -15
- meta_subject/admin/subject_requisition_admin.py +1 -1
- meta_subject/admin/subject_visit_admin.py +1 -1
- meta_subject/admin/subject_visit_missed_admin.py +1 -1
- meta_subject/admin/urine_dipstick_test_admin.py +1 -1
- meta_subject/admin/urine_pregnancy_admin.py +1 -1
- meta_subject/baker_recipes.py +15 -15
- meta_subject/form_validators/__init__.py +11 -0
- meta_subject/form_validators/delivery_form_validator.py +2 -3
- meta_subject/form_validators/dm_endpoint_form_validator.py +1 -1
- meta_subject/form_validators/dm_followup_form_validator.py +7 -6
- meta_subject/form_validators/glucose_form_validator.py +3 -5
- meta_subject/forms/__init__.py +41 -0
- meta_subject/forms/blood_results/__init__.py +9 -0
- meta_subject/forms/blood_results/blood_results_rft_form.py +1 -2
- meta_subject/forms/diabetes/__init__.py +2 -0
- meta_subject/forms/diabetes/dm_followup_form.py +2 -2
- meta_subject/forms/followup_vitals_form.py +3 -8
- meta_subject/forms/health_economics/__init__.py +2 -0
- meta_subject/forms/next_appointment_form.py +2 -3
- meta_subject/forms/slider_widget.py +1 -1
- meta_subject/forms/study_medication_form.py +11 -8
- meta_subject/management/commands/create_missing_refills.py +3 -3
- meta_subject/management/commands/create_missing_rx.py +1 -1
- meta_subject/management/commands/missed.py +20 -23
- meta_subject/metadata_rules/__init__.py +2 -0
- meta_subject/metadata_rules/predicates.py +25 -32
- meta_subject/migrations/0001_initial.py +61 -61
- meta_subject/migrations/0002_auto_20191021_0353.py +5 -5
- meta_subject/migrations/0012_auto_20200118_2334.py +5 -5
- meta_subject/migrations/0014_auto_20200120_1622.py +5 -5
- meta_subject/migrations/0018_coronakap_historicalcoronakap.py +5 -5
- meta_subject/migrations/0033_auto_20200516_2356.py +5 -5
- meta_subject/migrations/0038_auto_20200520_0020.py +5 -5
- meta_subject/migrations/0040_auto_20200527_2155.py +1 -1
- meta_subject/migrations/0045_auto_20200530_1801.py +1 -1
- meta_subject/migrations/0051_auto_20200617_2117.py +5 -5
- meta_subject/migrations/0063_auto_20210715_0337.py +5 -5
- meta_subject/migrations/0066_auto_20210721_0335.py +9 -9
- meta_subject/migrations/0067_auto_20210726_0340.py +5 -5
- meta_subject/migrations/0068_auto_20210728_1809.py +5 -5
- meta_subject/migrations/0072_auto_20210805_1545.py +7 -7
- meta_subject/migrations/0073_auto_20210809_0055.py +5 -5
- meta_subject/migrations/0077_auto_20210809_2323.py +3 -3
- meta_subject/migrations/0082_auto_20210823_1612.py +3 -3
- meta_subject/migrations/0083_auto_20210823_1620.py +3 -3
- meta_subject/migrations/0088_auto_20210924_0027.py +5 -5
- meta_subject/migrations/0090_auto_20210924_0424.py +5 -5
- meta_subject/migrations/0093_auto_20211117_0352.py +5 -5
- meta_subject/migrations/0095_auto_20220128_1719.py +5 -5
- meta_subject/migrations/0098_auto_20220309_2106.py +5 -5
- meta_subject/migrations/0101_auto_20220316_2147.py +13 -13
- meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
- meta_subject/migrations/0164_dmreferralfollowup_historicaldmreferralfollowup.py +5 -5
- meta_subject/migrations/0172_remove_historicalbloodresultsglu_action_item_and_more.py +1 -2
- meta_subject/migrations/0177_alter_bloodresultslft_alp_value_and_more.py +1 -2
- meta_subject/migrations/0178_historicalhealtheconomicsupdate_and_more.py +5 -14
- meta_subject/migrations/0186_healtheconomicsupdate_singleton_field_and_more.py +1 -2
- meta_subject/migrations/0187_dmdiagnosis_historicaldmdiagnosis_dmdxresult_and_more.py +5 -14
- meta_subject/migrations/0188_historicaldmdxresult_dmdxresult.py +5 -14
- meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
- meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +5 -6
- meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +5 -14
- meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +9297 -0
- meta_subject/model_mixins/__init__.py +8 -0
- meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
- meta_subject/model_mixins/vitals_fields_model_mixin.py +1 -1
- meta_subject/models/__init__.py +48 -0
- meta_subject/models/birth_outcomes.py +3 -3
- meta_subject/models/blood_results/__init__.py +11 -0
- meta_subject/models/delivery.py +3 -3
- meta_subject/models/diabetes/__init__.py +2 -0
- meta_subject/models/diabetes/dm_endpoint.py +4 -4
- meta_subject/models/diabetes/dm_followup.py +3 -4
- meta_subject/models/diet_and_lifestyle.py +2 -2
- meta_subject/models/followup_examination.py +11 -11
- meta_subject/models/glucose.py +4 -4
- meta_subject/models/glucose_fbg.py +2 -3
- meta_subject/models/health_economics/__init__.py +2 -0
- meta_subject/models/health_economics/health_economics.py +7 -7
- meta_subject/models/health_economics/health_economics_update.py +2 -1
- meta_subject/models/hepatitis_test.py +2 -2
- meta_subject/models/other_arv_regimens_detail.py +1 -1
- meta_subject/models/patient_history.py +5 -6
- meta_subject/models/physical_exam.py +2 -2
- meta_subject/models/pregnancy_update.py +1 -1
- meta_subject/models/signals.py +14 -12
- meta_subject/models/subject_visit.py +1 -1
- meta_subject/models/urine_dipstick_test.py +1 -1
- meta_subject/models/urine_pregnancy.py +1 -1
- meta_visit_schedule/visit_schedules/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/__init__.py +2 -0
- meta_visit_schedule/visit_schedules/phase_three/schedule.py +2 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +1 -2
- meta_ae/tests/holidays.csv +0 -15
- meta_ae/tests/tests/test_actions.py +0 -126
- meta_ae/tests/urls.py +0 -10
- meta_analytics/dataframes/glucose_endpoints/utils.py +0 -0
- meta_analytics/notebooks/anu.ipynb +0 -95
- meta_analytics/notebooks/appointment_planning.ipynb +0 -329
- meta_analytics/notebooks/arvs.ipynb +0 -103
- meta_analytics/notebooks/cleaning/__init__.py +0 -0
- meta_analytics/notebooks/cleaning/consent_v1_ext.ipynb +0 -227
- meta_analytics/notebooks/cleaning/offschedule_eos.ipynb +0 -353
- meta_analytics/notebooks/dsmc/renal_dysfunction.ipynb +0 -435
- meta_analytics/notebooks/endpoints/meta_endpoints_by_date.ipynb +0 -656
- meta_analytics/notebooks/followup_examination.ipynb +0 -141
- meta_analytics/notebooks/hba1c.ipynb +0 -136
- meta_analytics/notebooks/hiv_regimens.ipynb +0 -429
- meta_analytics/notebooks/incidence.ipynb +0 -232
- meta_analytics/notebooks/liver.ipynb +0 -389
- meta_analytics/notebooks/magreth.ipynb +0 -645
- meta_analytics/notebooks/monitoring_report.ipynb +0 -1834
- meta_analytics/notebooks/pharmacy.ipynb +0 -1061
- meta_analytics/notebooks/pharmacy_stock_202410.ipynb +0 -306
- meta_analytics/notebooks/qa.ipynb +0 -273
- meta_analytics/notebooks/steering.ipynb +0 -61
- meta_analytics/notebooks/undiagnosed/meta3_screening_consort_chart.ipynb +0 -1176
- meta_analytics/notebooks/undiagnosed/meta3_screening_undiagnosed.ipynb +0 -519
- meta_analytics/notebooks/undiagnosed/meta_screening_table2.ipynb +0 -964
- meta_analytics/notebooks/undiagnosed/screen_undiagnosed_or.ipynb +0 -296
- meta_analytics/notebooks/undiagnosed/screening.ipynb +0 -273
- meta_analytics/notebooks/undiagnosed/screening2.ipynb +0 -958
- meta_analytics/notebooks/undiagnosed/screening_undiagnosed_20241002.ipynb +0 -958
- meta_analytics/notebooks/ven.ipynb +0 -191
- meta_analytics/notebooks/vitals.ipynb +0 -263
- meta_analytics/tests/__init__.py +0 -0
- meta_analytics/tests/test_endpoints_by_date.py +0 -94
- meta_consent/tests/__init__.py +0 -0
- meta_consent/tests/holidays.csv +0 -15
- meta_consent/tests/tests/__init__.py +0 -0
- meta_consent/tests/tests/test_form_validators.py +0 -110
- meta_consent/tests/tests/test_subject_consent.py +0 -10
- meta_consent/tests/urls.py +0 -17
- meta_dashboard/tests/__init__.py +0 -0
- meta_dashboard/tests/admin.py +0 -22
- meta_dashboard/tests/holidays.csv +0 -15
- meta_dashboard/tests/tests/__init__.py +0 -0
- meta_dashboard/tests/urls.py +0 -55
- meta_edc/tests/__init__.py +0 -0
- meta_edc/tests/tests/__init__.py +0 -0
- meta_edc/tests/tests/test_endpoints.py +0 -555
- meta_edc-1.1.8.dist-info/METADATA +0 -767
- meta_edc-1.1.8.dist-info/WHEEL +0 -5
- meta_edc-1.1.8.dist-info/licenses/AUTHORS.rst +0 -8
- meta_edc-1.1.8.dist-info/top_level.txt +0 -20
- meta_labs/tests/__init__.py +0 -0
- meta_labs/tests/test_labs.py +0 -27
- meta_labs/tests/test_reportables.py +0 -70
- meta_labs/tests/urls.py +0 -4
- meta_lists/tests/__init__.py +0 -0
- meta_lists/tests/test_lists.py +0 -8
- meta_pharmacy/notebooks/pharmacy.ipynb +0 -41
- meta_prn/tests/__init__.py +0 -0
- meta_prn/tests/tests/__init__.py +0 -0
- meta_prn/tests/tests/test_actions.py +0 -97
- meta_prn/tests/tests/test_dm_referral.py +0 -203
- meta_prn/tests/tests/test_eos_events.py +0 -134
- meta_prn/tests/tests/test_manager_order.py +0 -14
- meta_prn/tests/tests/test_pregnancy_notification.py +0 -93
- meta_prn/tests/urls.py +0 -10
- meta_rando/tests/__init__.py +0 -0
- meta_rando/tests/tests/__init__.py +0 -0
- meta_rando/tests/tests/test_randomizers.py +0 -57
- meta_reports/tests/__init__.py +0 -0
- meta_reports/tests/test_reports.py +0 -35
- meta_reports/tests/test_sql_gen.py +0 -5
- meta_reports/tests/urls.py +0 -4
- meta_screening/offline_models.py +0 -3
- meta_screening/tests/__init__.py +0 -0
- meta_screening/tests/holidays.csv +0 -15
- meta_screening/tests/meta_test_case_mixin.py +0 -234
- meta_screening/tests/options.py +0 -127
- meta_screening/tests/tests/__init__.py +0 -0
- meta_screening/tests/tests/test_forms.py +0 -404
- meta_screening/tests/tests/test_screening_part_one.py +0 -108
- meta_screening/tests/tests/test_screening_part_three.py +0 -433
- meta_screening/tests/tests/test_screening_part_two.py +0 -84
- meta_sites/tests/__init__.py +0 -0
- meta_sites/tests/test_sites.py +0 -12
- meta_sites/tests/urls.py +0 -4
- meta_stats/__init__.py +0 -0
- meta_stats/incidence.py +0 -16
- meta_stats/models.py +0 -0
- meta_stats/tests/__init__.py +0 -0
- meta_stats/tests/tests/__init__.py +0 -0
- meta_stats/tests/tests/test_incidence.py +0 -10
- meta_subject/tests/__init__.py +0 -0
- meta_subject/tests/holidays.csv +0 -15
- meta_subject/tests/tests/__init__.py +0 -0
- meta_subject/tests/tests/test_egfr.py +0 -234
- meta_subject/tests/tests/test_fixes.py +0 -64
- meta_subject/tests/tests/test_followup.py +0 -52
- meta_subject/tests/tests/test_manager_order.py +0 -11
- meta_subject/tests/tests/test_medication_adherence.py +0 -79
- meta_subject/tests/tests/test_metadata_rules.py +0 -135
- meta_subject/tests/tests/test_mnsi.py +0 -341
- meta_subject/tests/tests/test_next_appointment.py +0 -231
- meta_subject/tests/tests/test_patient_history_form.py +0 -74
- meta_subject/tests/tests/test_physical_exam.py +0 -84
- meta_subject/tests/tests/test_sf12.py +0 -161
- meta_subject/tests/tests/test_study_medication.py +0 -229
- meta_subject/tests/urls.py +0 -24
- meta_visit_schedule/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/__init__.py +0 -0
- meta_visit_schedule/tests/tests/test_schedule.py +0 -181
- meta_visit_schedule/tests/urls.py +0 -4
- tests/__init__.py +0 -0
- tests/etc/randomization_list.csv +0 -241
- tests/etc/randomization_list_phase_three.csv +0 -241
- tests/etc/user-aes-local.key +0 -0
- tests/etc/user-aes-restricted.key +0 -1
- tests/etc/user-rsa-local-private.pem +0 -27
- tests/etc/user-rsa-local-public.pem +0 -9
- tests/etc/user-rsa-restricted-private.pem +0 -27
- tests/etc/user-rsa-restricted-public.pem +0 -9
- tests/etc/user-salt-local.key +0 -0
- tests/etc/user-salt-restricted.key +0 -0
- tests/holidays.csv +0 -15
- tests/test_settings.py +0 -185
- {meta_edc-1.1.8.dist-info → meta_edc-1.1.12.dist-info}/licenses/LICENSE +0 -0
- /meta_ae/tests/__init__.py → /meta_subject/management/__init__py.py +0 -0
- /meta_ae/tests/tests/__init__.py → /meta_subject/management/commands/__init__py.py +0 -0
meta_consent/models/signals.py
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
|
|
1
3
|
from django.core.exceptions import ValidationError
|
|
2
4
|
from django.db.models.signals import post_delete, post_save
|
|
3
5
|
from django.dispatch import receiver
|
|
4
|
-
from edc_action_item import ActionItemDeleteError, delete_action_item
|
|
6
|
+
from edc_action_item.delete_action_item import ActionItemDeleteError, delete_action_item
|
|
5
7
|
from edc_appointment.utils import refresh_appointments
|
|
6
8
|
from edc_constants.constants import YES
|
|
7
9
|
from edc_pharmacy.exceptions import PrescriptionAlreadyExists
|
|
@@ -26,10 +28,11 @@ from .subject_consent_v1_ext import SubjectConsentV1Ext
|
|
|
26
28
|
sender=SubjectConsentV1,
|
|
27
29
|
dispatch_uid="subject_consent_on_post_save",
|
|
28
30
|
)
|
|
29
|
-
def subject_consent_on_post_save(sender, instance, raw, created, **kwargs):
|
|
31
|
+
def subject_consent_on_post_save(sender, instance, raw, created, **kwargs): # noqa: ARG001
|
|
30
32
|
"""Creates an onschedule instance for this consented subject, if
|
|
31
33
|
it does not exist.
|
|
32
34
|
"""
|
|
35
|
+
|
|
33
36
|
if not raw:
|
|
34
37
|
if not created:
|
|
35
38
|
_, schedule = site_visit_schedules.get_by_onschedule_model("meta_prn.onschedule")
|
|
@@ -62,7 +65,7 @@ def subject_consent_on_post_save(sender, instance, raw, created, **kwargs):
|
|
|
62
65
|
onschedule_datetime=instance.consent_datetime,
|
|
63
66
|
)
|
|
64
67
|
# All refills are created against this prescription
|
|
65
|
-
|
|
68
|
+
with contextlib.suppress(PrescriptionAlreadyExists):
|
|
66
69
|
create_prescription(
|
|
67
70
|
subject_identifier=instance.subject_identifier,
|
|
68
71
|
report_datetime=instance.consent_datetime,
|
|
@@ -70,20 +73,16 @@ def subject_consent_on_post_save(sender, instance, raw, created, **kwargs):
|
|
|
70
73
|
randomizer_name=get_meta_version(),
|
|
71
74
|
site=instance.site,
|
|
72
75
|
)
|
|
73
|
-
except PrescriptionAlreadyExists:
|
|
74
|
-
pass
|
|
75
76
|
|
|
76
77
|
# create / delete action for reconsent
|
|
77
78
|
if instance.completed_by_next_of_kin == YES:
|
|
78
79
|
ReconsentAction(subject_identifier=instance.subject_identifier)
|
|
79
80
|
else:
|
|
80
|
-
|
|
81
|
+
with contextlib.suppress(ActionItemDeleteError):
|
|
81
82
|
delete_action_item(
|
|
82
83
|
action_cls=ReconsentAction,
|
|
83
84
|
subject_identifier=instance.subject_identifier,
|
|
84
85
|
)
|
|
85
|
-
except ActionItemDeleteError:
|
|
86
|
-
pass
|
|
87
86
|
|
|
88
87
|
|
|
89
88
|
@receiver(
|
|
@@ -92,7 +91,7 @@ def subject_consent_on_post_save(sender, instance, raw, created, **kwargs):
|
|
|
92
91
|
sender=SubjectConsentV1Ext,
|
|
93
92
|
dispatch_uid="subject_consent_v1_ext_on_post_save",
|
|
94
93
|
)
|
|
95
|
-
def subject_consent_v1_ext_on_post_save(sender, instance, raw, created, **kwargs):
|
|
94
|
+
def subject_consent_v1_ext_on_post_save(sender, instance, raw, created, **kwargs): # noqa: ARG001
|
|
96
95
|
if not raw:
|
|
97
96
|
refresh_appointments(
|
|
98
97
|
subject_identifier=instance.subject_identifier,
|
|
@@ -106,7 +105,7 @@ def subject_consent_v1_ext_on_post_save(sender, instance, raw, created, **kwargs
|
|
|
106
105
|
weak=False,
|
|
107
106
|
dispatch_uid="subject_consent_on_post_delete",
|
|
108
107
|
)
|
|
109
|
-
def subject_consent_on_post_delete(sender, instance, using, **kwargs):
|
|
108
|
+
def subject_consent_on_post_delete(sender, instance, using, **kwargs): # noqa: ARG001
|
|
110
109
|
"""Updates/Resets subject screening."""
|
|
111
110
|
# don't allow if subject visits exist. This should be caught
|
|
112
111
|
# in the ModelAdmin delete view
|
|
@@ -67,12 +67,12 @@ class SubjectReconsent(
|
|
|
67
67
|
self.get_subject_consent(
|
|
68
68
|
screening_identifier=subject_screening.screening_identifier
|
|
69
69
|
)
|
|
70
|
-
except ObjectDoesNotExist:
|
|
71
|
-
raise ValidationError("Previous consent does not exist.")
|
|
70
|
+
except ObjectDoesNotExist as e:
|
|
71
|
+
raise ValidationError("Previous consent does not exist.") from e
|
|
72
72
|
super().save(*args, **kwargs)
|
|
73
73
|
|
|
74
74
|
def natural_key(self):
|
|
75
|
-
return
|
|
75
|
+
return self.subject_identifier, self.version
|
|
76
76
|
|
|
77
77
|
def get_subject_consent(self, screening_identifier=None):
|
|
78
78
|
"""Returns the first subject consent model instance."""
|
meta_dashboard/patterns.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
screening_identifier = "[A-Z0-9]{6,8}"
|
|
1
|
+
screening_identifier = "[A-Z0-9]{6,8}"
|
|
@@ -64,7 +64,7 @@ def render_consent_button(context, subject_screening: SubjectScreening):
|
|
|
64
64
|
)
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
def refusal_button(context, subject_refusal):
|
|
67
|
+
def refusal_button(context, subject_refusal): # noqa: ARG001
|
|
68
68
|
title = ["Capture subject's primary reason for not joining."]
|
|
69
69
|
|
|
70
70
|
return dict(
|
|
@@ -4,3 +4,10 @@ from .subject_screening_button import (
|
|
|
4
4
|
SubjectScreeningPartThreeButton,
|
|
5
5
|
SubjectScreeningPartTwoButton,
|
|
6
6
|
)
|
|
7
|
+
|
|
8
|
+
__all__ = [
|
|
9
|
+
"SubjectScreeningButton",
|
|
10
|
+
"SubjectScreeningPartOneButton",
|
|
11
|
+
"SubjectScreeningPartThreeButton",
|
|
12
|
+
"SubjectScreeningPartTwoButton",
|
|
13
|
+
]
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from dataclasses import dataclass, field
|
|
4
|
-
from typing import Type
|
|
5
4
|
|
|
6
5
|
from django.utils.translation import gettext as _
|
|
7
6
|
from edc_constants.constants import TBD, YES
|
|
@@ -14,8 +13,8 @@ from meta_screening.models import ScreeningPartOne, ScreeningPartThree, Screenin
|
|
|
14
13
|
|
|
15
14
|
__all__ = [
|
|
16
15
|
"SubjectScreeningPartOneButton",
|
|
17
|
-
"SubjectScreeningPartTwoButton",
|
|
18
16
|
"SubjectScreeningPartThreeButton",
|
|
17
|
+
"SubjectScreeningPartTwoButton",
|
|
19
18
|
]
|
|
20
19
|
|
|
21
20
|
|
|
@@ -38,17 +37,13 @@ class SubjectScreeningButton(BaseSubjectScreeningButton):
|
|
|
38
37
|
|
|
39
38
|
@property
|
|
40
39
|
def title(self) -> str:
|
|
41
|
-
if self.perms.view_only or self.model_obj.consented
|
|
42
|
-
title = _("View")
|
|
43
|
-
else:
|
|
44
|
-
title = _("Edit")
|
|
45
|
-
return title
|
|
40
|
+
return _("View") if self.perms.view_only or self.model_obj.consented else _("Edit")
|
|
46
41
|
|
|
47
42
|
|
|
48
43
|
@dataclass
|
|
49
44
|
class SubjectScreeningPartOneButton(SubjectScreeningButton):
|
|
50
45
|
model_obj: ScreeningPartOne = None
|
|
51
|
-
model_cls:
|
|
46
|
+
model_cls: type[ScreeningPartOne] = field(default=ScreeningPartOne)
|
|
52
47
|
|
|
53
48
|
@property
|
|
54
49
|
def label(self) -> str:
|
|
@@ -58,7 +53,7 @@ class SubjectScreeningPartOneButton(SubjectScreeningButton):
|
|
|
58
53
|
@dataclass
|
|
59
54
|
class SubjectScreeningPartTwoButton(SubjectScreeningButton):
|
|
60
55
|
model_obj: ScreeningPartTwo = None
|
|
61
|
-
model_cls:
|
|
56
|
+
model_cls: type[ScreeningPartTwo] = field(default=ScreeningPartTwo)
|
|
62
57
|
|
|
63
58
|
@property
|
|
64
59
|
def label(self) -> str:
|
|
@@ -76,9 +71,8 @@ class SubjectScreeningPartTwoButton(SubjectScreeningButton):
|
|
|
76
71
|
self._action = VIEW
|
|
77
72
|
if self.model_obj.eligible_part_two == TBD:
|
|
78
73
|
self._action = ADD
|
|
79
|
-
elif self.model_obj:
|
|
80
|
-
|
|
81
|
-
self._action = CHANGE
|
|
74
|
+
elif self.model_obj and self.perms.change:
|
|
75
|
+
self._action = CHANGE
|
|
82
76
|
return self._action
|
|
83
77
|
|
|
84
78
|
@property
|
|
@@ -91,7 +85,7 @@ class SubjectScreeningPartTwoButton(SubjectScreeningButton):
|
|
|
91
85
|
@dataclass
|
|
92
86
|
class SubjectScreeningPartThreeButton(SubjectScreeningButton):
|
|
93
87
|
model_obj: ScreeningPartThree = None
|
|
94
|
-
model_cls:
|
|
88
|
+
model_cls: type[ScreeningPartThree] = field(default=ScreeningPartThree)
|
|
95
89
|
|
|
96
90
|
@property
|
|
97
91
|
def label(self) -> str:
|
|
@@ -109,9 +103,8 @@ class SubjectScreeningPartThreeButton(SubjectScreeningButton):
|
|
|
109
103
|
self._action = VIEW
|
|
110
104
|
if self.model_obj.eligible_part_three == TBD:
|
|
111
105
|
self._action = ADD
|
|
112
|
-
elif self.model_obj:
|
|
113
|
-
|
|
114
|
-
self._action = CHANGE
|
|
106
|
+
elif self.model_obj and self.perms.change:
|
|
107
|
+
self._action = CHANGE
|
|
115
108
|
return self._action
|
|
116
109
|
|
|
117
110
|
@property
|
meta_dashboard/views/__init__.py
CHANGED
|
@@ -2,3 +2,11 @@ from .ae import AeListboardView, DeathReportListboardView
|
|
|
2
2
|
from .screening import ListboardView as ScreeningListboardView
|
|
3
3
|
from .subject import DashboardView as SubjectDashboardView
|
|
4
4
|
from .subject import SubjectListboardView
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
"AeListboardView",
|
|
8
|
+
"DeathReportListboardView",
|
|
9
|
+
"ScreeningListboardView",
|
|
10
|
+
"SubjectDashboardView",
|
|
11
|
+
"SubjectListboardView",
|
|
12
|
+
]
|
|
@@ -32,7 +32,7 @@ class DashboardView(SubjectDashboardView):
|
|
|
32
32
|
message = format_html(
|
|
33
33
|
'{text} <A href="{url}">{verbose_name}</A>',
|
|
34
34
|
text=_("Subject has reached the protocol endpoint. See "),
|
|
35
|
-
url=mark_safe(url), #
|
|
35
|
+
url=mark_safe(url), # noqa: S308
|
|
36
36
|
verbose_name=GlucoseSummary._meta.verbose_name,
|
|
37
37
|
)
|
|
38
38
|
self.message_user(message, level=messages.WARNING)
|
meta_edc/__init__.py
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
from importlib.metadata import PackageNotFoundError, version
|
|
1
|
+
import importlib.metadata
|
|
3
2
|
|
|
4
3
|
from .celery import app as celery_app
|
|
5
4
|
|
|
6
5
|
try:
|
|
7
|
-
__version__ =
|
|
8
|
-
except PackageNotFoundError:
|
|
9
|
-
__version__ =
|
|
6
|
+
__version__ = importlib.metadata.version(__package__)
|
|
7
|
+
except importlib.metadata.PackageNotFoundError:
|
|
8
|
+
__version__ = "unknown"
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
__all__ = ["celery_app", "__version__"]
|
|
13
|
-
|
|
14
|
-
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meta_edc.settings.debug")
|
|
10
|
+
__all__ = ["__version__", "celery_app"]
|
meta_edc/celery.py
CHANGED
meta_edc/celery_live.py
CHANGED
meta_edc/celery_uat.py
CHANGED
|
@@ -1,36 +1,34 @@
|
|
|
1
|
-
import os
|
|
2
1
|
import sys
|
|
3
2
|
|
|
4
3
|
from django.conf import settings
|
|
5
4
|
from django.core.management.base import BaseCommand
|
|
6
5
|
from django.core.management.color import color_style
|
|
6
|
+
from edc_form_describer.forms_reference import FormsReference
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
from meta_subject.admin_site import meta_subject_admin
|
|
9
|
+
from meta_visit_schedule.visit_schedules import visit_schedule
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
from edc_form_describer import FormsReference
|
|
11
|
+
style = color_style()
|
|
13
12
|
|
|
14
|
-
from meta_subject.admin_site import meta_subject_admin
|
|
15
|
-
from meta_visit_schedule.visit_schedules import visit_schedule
|
|
16
13
|
|
|
14
|
+
def update_forms_reference(sender=None, **kwargs): # noqa: ARG001
|
|
17
15
|
sys.stdout.write(
|
|
18
16
|
style.MIGRATE_HEADING("Refreshing CRF reference document for meta_subject\n")
|
|
19
17
|
)
|
|
20
|
-
doc_folder =
|
|
21
|
-
if not
|
|
22
|
-
|
|
18
|
+
doc_folder = settings.BASE_DIR / "docs"
|
|
19
|
+
if not doc_folder.exists():
|
|
20
|
+
doc_folder.mkdir()
|
|
23
21
|
forms = FormsReference(
|
|
24
22
|
visit_schedules=[visit_schedule],
|
|
25
23
|
admin_site=meta_subject_admin,
|
|
26
24
|
add_per_form_timestamp=False,
|
|
27
25
|
)
|
|
28
|
-
path =
|
|
26
|
+
path = doc_folder / "forms_reference.md"
|
|
29
27
|
forms.to_file(path=path, overwrite=True, pad=0)
|
|
30
28
|
|
|
31
29
|
|
|
32
30
|
class Command(BaseCommand):
|
|
33
31
|
help = "Update forms reference document (.md)"
|
|
34
32
|
|
|
35
|
-
def handle(self, *args, **options):
|
|
33
|
+
def handle(self, *args, **options): # noqa: ARG002
|
|
36
34
|
update_forms_reference()
|
meta_edc/settings/debug.py
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import os
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
2
3
|
|
|
3
4
|
from multisite import SiteID
|
|
4
5
|
|
|
5
6
|
from .defaults import * # noqa
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
sys.stdout.write(f"Settings file {__file__}\n")
|
|
8
9
|
|
|
9
10
|
# TZ Sites:
|
|
10
11
|
# SITE_ID = SiteID(default=20) # Amana
|
|
11
|
-
SITE_ID = SiteID(default=10) # Hindu Mandal
|
|
12
|
-
|
|
12
|
+
# SITE_ID = SiteID(default=10) # Hindu Mandal
|
|
13
|
+
SITE_ID = SiteID(default=40) # Mwananyamala
|
|
13
14
|
# SITE_ID = SiteID(default=50) # Mbagala
|
|
14
15
|
# SITE_ID = SiteID(default=60) # Mnazi-Moja
|
|
15
16
|
# SITE_ID = SiteID(default=30) # Temeke
|
meta_edc/settings/defaults.py
CHANGED
|
@@ -32,9 +32,18 @@ env = environ.Env(
|
|
|
32
32
|
TWILIO_ENABLED=(bool, False),
|
|
33
33
|
EDC_SITES_DOMAIN_SUFFIX="meta4.clinicedc.org",
|
|
34
34
|
)
|
|
35
|
+
if os.getenv("DJANGO_BASE_DIR"):
|
|
36
|
+
# for deployed systems where meta-edc is pip installed.
|
|
37
|
+
# same dir as manage.py
|
|
38
|
+
BASE_DIR = Path(os.getenv("DJANGO_BASE_DIR"))
|
|
39
|
+
else:
|
|
40
|
+
# when running from a repo
|
|
41
|
+
BASE_DIR = Path(__file__).resolve().parent.parent.parent
|
|
35
42
|
|
|
36
|
-
|
|
37
|
-
ENV_DIR = Path(
|
|
43
|
+
if os.getenv("DJANGO_ENV_DIR"):
|
|
44
|
+
ENV_DIR = Path(os.getenv("DJANGO_ENV_DIR"))
|
|
45
|
+
else:
|
|
46
|
+
ENV_DIR = Path(__file__).resolve().parent.parent.parent.parent
|
|
38
47
|
|
|
39
48
|
# copy your .env file from .envs/ to BASE_DIR
|
|
40
49
|
if "test" in sys.argv:
|
|
@@ -60,6 +69,12 @@ SECRET_KEY = env.str("DJANGO_SECRET_KEY")
|
|
|
60
69
|
|
|
61
70
|
APP_NAME = env.str("DJANGO_APP_NAME")
|
|
62
71
|
|
|
72
|
+
DJANGO_REVISION_IGNORE_WORKING_DIR = env.str("DJANGO_REVISION_IGNORE_WORKING_DIR")
|
|
73
|
+
if DJANGO_REVISION_IGNORE_WORKING_DIR:
|
|
74
|
+
# get the version from the package and not a git tag
|
|
75
|
+
# this overrides django_revision
|
|
76
|
+
REVISION = version(APP_NAME)
|
|
77
|
+
|
|
63
78
|
LIVE_SYSTEM = env.str("DJANGO_LIVE_SYSTEM")
|
|
64
79
|
|
|
65
80
|
ETC_DIR = env.str("DJANGO_ETC_FOLDER")
|
|
@@ -471,7 +486,7 @@ if TWILIO_ENABLED:
|
|
|
471
486
|
TWILIO_SENDER = env.str("TWILIO_SENDER")
|
|
472
487
|
|
|
473
488
|
# django_revision
|
|
474
|
-
GIT_DIR = BASE_DIR
|
|
489
|
+
GIT_DIR = BASE_DIR.parent
|
|
475
490
|
|
|
476
491
|
# django_crypto_fields
|
|
477
492
|
KEY_PATH = env.str("DJANGO_KEY_FOLDER")
|
meta_edc/settings/live.py
CHANGED
meta_edc/settings/logging.py
CHANGED
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
# see http://www.simonkrueger.com/2015/05/27/logging-django-apps-to-syslog.html
|
|
2
|
-
import
|
|
2
|
+
from pathlib import Path
|
|
3
3
|
|
|
4
4
|
import environ
|
|
5
5
|
|
|
6
|
-
__all__ = ["
|
|
6
|
+
__all__ = ["LOGGING", "LOGGING_FILE_LEVEL", "LOGGING_SYSLOG_LEVEL", "LOG_FOLDER"]
|
|
7
7
|
|
|
8
8
|
env = environ.Env()
|
|
9
9
|
env.read_env(".env")
|
|
10
10
|
|
|
11
|
-
LOG_FOLDER = env.str("DJANGO_LOG_FOLDER")
|
|
11
|
+
LOG_FOLDER = Path(env.str("DJANGO_LOG_FOLDER"))
|
|
12
12
|
LOGGING_FILE_LEVEL = env.str("DJANGO_LOGGING_FILE_LEVEL")
|
|
13
13
|
LOGGING_SYSLOG_LEVEL = env.str("DJANGO_LOGGING_SYSLOG_LEVEL")
|
|
14
14
|
|
|
15
|
+
|
|
15
16
|
LOGGING = {
|
|
16
17
|
"version": 1,
|
|
17
18
|
"disable_existing_loggers": False,
|
|
18
19
|
"filters": {
|
|
19
20
|
"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"},
|
|
20
21
|
"require_debug_true": {"()": "django.utils.log.RequireDebugTrue"},
|
|
22
|
+
"ignore_specific_ip": {
|
|
23
|
+
"()": "edc_utils.logging_filters.IgnoreSpecificIPDisallowedHost",
|
|
24
|
+
"ip_to_ignore": "178.128.175.239",
|
|
25
|
+
},
|
|
21
26
|
},
|
|
22
27
|
"formatters": {
|
|
23
28
|
"verbose": {
|
|
@@ -36,7 +41,7 @@ LOGGING = {
|
|
|
36
41
|
"file": {
|
|
37
42
|
"level": LOGGING_FILE_LEVEL,
|
|
38
43
|
"class": "logging.FileHandler",
|
|
39
|
-
"filename":
|
|
44
|
+
"filename": LOG_FOLDER / "edc.log",
|
|
40
45
|
"formatter": "verbose",
|
|
41
46
|
},
|
|
42
47
|
"syslog": {
|
meta_edc/settings/minimal.py
CHANGED
|
@@ -2,21 +2,20 @@
|
|
|
2
2
|
A settings file with the bare minimum attributes.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
import os
|
|
6
5
|
from pathlib import Path
|
|
7
6
|
|
|
8
7
|
import environ
|
|
9
8
|
from multisite import SiteID
|
|
10
9
|
|
|
11
10
|
APP_NAME = "meta_edc"
|
|
12
|
-
BASE_DIR =
|
|
13
|
-
ENV_DIR =
|
|
11
|
+
BASE_DIR = Path(__file__).resolve().parent.parent
|
|
12
|
+
ENV_DIR = Path(__file__).resolve().parent.parent
|
|
14
13
|
|
|
15
14
|
env = environ.Env()
|
|
16
|
-
env.read_env(
|
|
15
|
+
env.read_env(ENV_DIR / ".env")
|
|
17
16
|
|
|
18
17
|
EDC_SITES_MODULE_NAME = env.str("EDC_SITES_MODULE_NAME")
|
|
19
18
|
ETC_DIR = env.str("DJANGO_ETC_FOLDER")
|
|
20
|
-
SECRET_KEY = "blahblahblah" #
|
|
19
|
+
SECRET_KEY = "blahblahblah" # noqa: S105
|
|
21
20
|
ALLOWED_HOSTS = ["*"]
|
|
22
21
|
SITE_ID = SiteID(default=1) # 1 is not a site
|
meta_edc/settings/uat.py
CHANGED
meta_edc/views/__init__.py
CHANGED