meta-edc 0.3.39__py3-none-any.whl → 1.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- meta_ae/action_items.py +38 -27
- meta_ae/admin/__init__.py +11 -0
- meta_ae/admin/ae_initial_admin.py +5 -2
- meta_ae/admin/ae_susar_admin.py +1 -1
- meta_ae/admin/death_report_admin.py +1 -1
- meta_ae/admin/modeladmin_mixins.py +14 -15
- meta_ae/baker_recipes.py +4 -6
- meta_ae/choices.py +1 -1
- meta_ae/forms/__init__.py +13 -0
- meta_ae/forms/death_report_form.py +1 -1
- meta_ae/forms/modelform_mixins.py +2 -2
- meta_ae/list_data.py +1 -1
- meta_ae/migrations/0001_initial.py +27 -27
- meta_ae/migrations/0006_aelocalreview_aesponsorreview.py +5 -5
- meta_ae/migrations/0017_auto_20221130_2257.py +1 -1
- 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_ae/templatetags/meta_ae_extras.py +4 -6
- meta_analytics/.DS_Store +0 -0
- meta_analytics/README.rst +1 -2
- meta_analytics/dataframes/__init__.py +27 -0
- meta_analytics/dataframes/constants.py +5 -2
- meta_analytics/dataframes/get_eos_df.py +16 -4
- meta_analytics/dataframes/get_glucose_df.py +166 -0
- meta_analytics/dataframes/get_glucose_fbg_df.py +26 -0
- meta_analytics/dataframes/get_glucose_fbg_ogtt_df.py +21 -0
- meta_analytics/dataframes/get_last_imp_visits_df.py +12 -10
- meta_analytics/dataframes/glucose_endpoints/__init__.py +2 -0
- meta_analytics/dataframes/glucose_endpoints/endpoint_by_date.py +125 -124
- meta_analytics/dataframes/glucose_endpoints/glucose_endpoints_by_date.py +111 -235
- 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 +9 -15
- meta_analytics/dataframes/utils.py +21 -12
- meta_analytics/get_tables.py +1 -2
- meta_analytics/tables/__init__.py +2 -0
- meta_analytics/tables/enrolled/glucose.py +2 -1
- meta_analytics/utils.py +81 -0
- meta_auth/auths.py +1 -1
- meta_consent/action_items.py +22 -3
- meta_consent/admin/__init__.py +7 -0
- meta_consent/admin/actions/__init__.py +2 -0
- meta_consent/admin/actions/create_missing_prescriptions.py +2 -2
- meta_consent/admin/list_filters.py +22 -0
- meta_consent/admin/modeladmin_mixins.py +4 -5
- meta_consent/admin/subject_consent_v1_ext_admin.py +93 -0
- meta_consent/baker_recipes.py +7 -7
- meta_consent/consents.py +15 -2
- meta_consent/constants.py +1 -0
- meta_consent/form_validators/__init__.py +2 -0
- meta_consent/forms/__init__.py +8 -0
- meta_consent/forms/subject_consent_v1_ext_form.py +47 -0
- meta_consent/forms/subject_reconsent_form.py +4 -4
- meta_consent/management/commands/create_missing_prescriptions.py +5 -3
- meta_consent/migrations/0001_initial.py +9 -9
- meta_consent/migrations/0024_historicalsubjectconsentv1.py +3 -8
- meta_consent/migrations/0026_historicalsubjectconsentv1ext_subjectconsentv1ext.py +535 -0
- meta_consent/migrations/0027_auto_20250111_0344.py +30 -0
- meta_consent/migrations/0028_historicalsubjectconsentv1ext_assessment_score_and_more.py +162 -0
- meta_consent/migrations/0029_alter_historicalsubjectconsentv1ext_agrees_to_extension_and_more.py +33 -0
- meta_consent/migrations/0030_auto_20250120_2114.py +40 -0
- meta_consent/migrations/0031_alter_historicalsubjectconsent_guardian_name_and_more.py +124 -0
- meta_consent/migrations/0032_alter_historicalsubjectconsent_device_created_and_more.py +678 -0
- meta_consent/migrations/0033_historicalsubjectconsentspfq_subjectconsentspfq.py +615 -0
- meta_consent/migrations/0034_remove_subjectconsentspfq_site_and_more.py +23 -0
- meta_consent/migrations/0035_alter_historicalsubjectconsent_consent_definition_name_and_more.py +43 -0
- meta_consent/models/__init__.py +10 -0
- meta_consent/models/model_mixins.py +1 -2
- meta_consent/models/signals.py +25 -11
- meta_consent/models/subject_consent.py +2 -2
- meta_consent/models/subject_consent_v1.py +0 -1
- meta_consent/models/subject_consent_v1_ext.py +34 -0
- meta_consent/models/subject_reconsent.py +4 -4
- meta_dashboard/navbars.py +2 -6
- meta_dashboard/patterns.py +1 -1
- meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/eligibility_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/screening_button.html +1 -1
- meta_dashboard/templates/meta_dashboard/subject/dashboard/sidebar.html +24 -0
- meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/dashboard/top_bar.html +1 -1
- meta_dashboard/templates/meta_dashboard/subject/dashboard.html +14 -0
- meta_dashboard/templatetags/meta_dashboard_extras.py +9 -14
- meta_dashboard/urls.py +5 -5
- meta_dashboard/view_utils/__init__.py +13 -0
- meta_dashboard/view_utils/subject_screening_button.py +13 -20
- 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/screening/listboard_view.py +2 -3
- 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 +19 -8
- meta_dashboard/views/subject/listboard/__init__.py +2 -0
- meta_dashboard/views/subject/listboard/listboard_view.py +2 -3
- meta_edc/__init__.py +5 -9
- meta_edc/admin.py +3 -4
- meta_edc/celery.py +2 -2
- meta_edc/celery_live.py +19 -0
- meta_edc/celery_uat.py +25 -0
- meta_edc/management/commands/update_forms_reference.py +16 -14
- meta_edc/meta_version.py +2 -2
- meta_edc/navbars.py +7 -5
- meta_edc/settings/debug.py +13 -4
- meta_edc/settings/defaults.py +55 -18
- meta_edc/settings/live.py +4 -1
- meta_edc/settings/logging.py +9 -4
- meta_edc/settings/minimal.py +4 -5
- meta_edc/settings/uat.py +3 -1
- meta_edc/templates/meta_edc/{bootstrap3/base.html → base.html} +1 -1
- meta_edc/templates/meta_edc/{bootstrap3/home.html → home.html} +2 -2
- meta_edc/urls.py +3 -1
- meta_edc/utils.py +3 -1
- meta_edc/views/__init__.py +2 -0
- meta_edc/views/home_view.py +1 -2
- meta_edc-1.4.0.dist-info/METADATA +174 -0
- {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.dist-info}/RECORD +578 -586
- meta_edc-1.4.0.dist-info/WHEEL +4 -0
- meta_labs/list_data.py +2 -2
- meta_labs/reportables.py +80 -11
- meta_lists/list_data.py +13 -4
- meta_lists/migrations/0008_auto_20200528_1517.py +2 -2
- meta_lists/migrations/0019_auto_20250128_0143.py +48 -0
- meta_lists/migrations/0020_alter_abnormalfootappearanceobservations_extra_value_and_more.py +404 -0
- meta_pharmacy/admin/__init__.py +5 -0
- meta_pharmacy/admin/rx_admin.py +1 -0
- meta_pharmacy/admin/substitutions_admin.py +3 -3
- meta_pharmacy/constants.py +1 -1
- meta_pharmacy/forms/__init__.py +2 -0
- meta_pharmacy/forms/rx_form.py +0 -1
- meta_pharmacy/forms/substitutions_form.py +6 -4
- meta_pharmacy/labels/__init__.py +5 -2
- meta_pharmacy/labels/draw_label_for_subject_with_barcode.py +4 -1
- 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/management/commands/update_initial_pharmacy_data.py +4 -3
- 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/rx_label.py +0 -1
- meta_pharmacy/models/substitutions.py +4 -4
- 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/action_items.py +44 -45
- meta_prn/admin/__init__.py +16 -0
- meta_prn/admin/dm_referral_admin.py +2 -1
- meta_prn/admin/end_of_study_admin.py +26 -15
- 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 +12 -11
- meta_prn/admin/offschedule_dm_referral_admin.py +11 -10
- meta_prn/admin/offschedule_postnatal_admin.py +15 -7
- meta_prn/admin/offschedule_pregnancy_admin.py +18 -9
- meta_prn/admin/onschedule_admin.py +7 -8
- meta_prn/admin/onschedule_dm_referral_admin.py +11 -12
- 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 +10 -10
- meta_prn/choices.py +11 -7
- meta_prn/constants.py +1 -0
- meta_prn/form_validators/__init__.py +5 -0
- meta_prn/form_validators/end_of_study.py +65 -20
- meta_prn/form_validators/protocol_incident.py +1 -1
- meta_prn/forms/__init__.py +13 -0
- meta_prn/forms/dm_referral_form.py +2 -8
- meta_prn/forms/end_of_study_form.py +1 -1
- meta_prn/forms/loss_to_followup_form.py +1 -1
- meta_prn/forms/off_study_medication_form.py +2 -2
- meta_prn/forms/offschedule_form.py +25 -0
- meta_prn/forms/pregnancy_notification_form.py +15 -17
- meta_prn/list_data.py +3 -3
- 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/0034_auto_20220630_1110.py +1 -1
- meta_prn/migrations/0035_auto_20220630_1140.py +1 -1
- 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/0060_alter_onschedule_managers_and_more.py +55 -0
- meta_prn/migrations/0061_auto_20250115_2025.py +56 -0
- meta_prn/migrations/0062_alter_endofstudy_offstudy_reason_and_more.py +72 -0
- meta_prn/migrations/0063_historicaloffstudymedication_singleton_field_and_more.py +37 -0
- meta_prn/migrations/0064_auto_20250602_2143.py +18 -0
- meta_prn/migrations/0065_alter_historicaloffstudymedication_subject_identifier_and_more.py +23 -0
- meta_prn/migrations/0066_alter_historicallosstofollowup_subject_identifier_and_more.py +23 -0
- meta_prn/migrations/0067_alter_offschedule_managers_and_more.py +2557 -0
- meta_prn/migrations/0068_alter_dmreferral_referral_note_and_more.py +235 -0
- meta_prn/migrations/0069_alter_historicaloffstudymedication_singleton_field_and_more.py +37 -0
- meta_prn/models/__init__.py +20 -0
- meta_prn/models/dm_referral.py +2 -2
- meta_prn/models/end_of_study.py +28 -23
- meta_prn/models/loss_to_followup.py +8 -10
- meta_prn/models/off_study_medication.py +7 -4
- meta_prn/models/offschedule.py +4 -4
- meta_prn/models/pregnancy_notification.py +3 -5
- meta_prn/models/protocol_incident.py +5 -2
- meta_prn/models/signals.py +16 -14
- meta_prn/models/subject_transfer.py +7 -0
- meta_prn/templates/meta_prn/eos/additional_instructions.html +3 -0
- meta_prn/templates/meta_prn/offschedule/additional_instructions.html +2 -0
- meta_rando/migrations/0001_initial.py +5 -5
- meta_rando/migrations/0006_alter_historicalrandomizationlist_allocated_user_and_more.py +130 -0
- meta_rando/migrations/0007_spfqlist.py +197 -0
- meta_rando/migrations/0008_delete_spfqlist.py +16 -0
- meta_rando/models/__init__.py +1 -0
- meta_rando/{models.py → models/randomization_list.py} +3 -3
- meta_rando/randomizers.py +2 -2
- 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 +7 -7
- meta_reports/admin/dbviews/imp_substitutions_admin.py +14 -13
- 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 +7 -7
- 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/on_study_missing_values_admin/unmanaged_model_admin.py +0 -1
- meta_reports/admin/dbviews/patient_history_missing_baseline_cd4_admin.py +9 -9
- 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/endpoints_all_admin.py +0 -1
- meta_reports/admin/last_imp_refill_admin.py +33 -36
- meta_reports/admin/list_filters.py +3 -3
- meta_reports/admin/modeladmin_mixins.py +10 -17
- meta_reports/death_report.py +2 -2
- meta_reports/forms/__init__.py +2 -0
- meta_reports/forms/missing_ogtt_note_form.py +3 -4
- meta_reports/management/commands/generate_endpoints.py +5 -4
- meta_reports/migrations/0035_historicalmissingogttnote_missingogttnote.py +5 -14
- meta_reports/migrations/0054_auto_20250422_2003.py +81 -0
- meta_reports/migrations/0055_alter_glucosesummary_table.py +17 -0
- meta_reports/migrations/0056_auto_20250422_2214.py +54 -0
- meta_reports/migrations/0057_auto_20250422_2224.py +54 -0
- meta_reports/migrations/0058_auto_20250422_2232.py +54 -0
- meta_reports/migrations/0059_alter_endpoints_created_and_more.py +161 -0
- meta_reports/migrations/0060_auto_20250926_0242.py +366 -0
- meta_reports/migrations/0061_auto_20251004_0043.py +21 -0
- meta_reports/migrations/0062_auto_20251004_0106.py +21 -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 +15 -3
- meta_reports/models/dbviews/glucose_summary/view_definition.py +8 -5
- meta_reports/models/dbviews/imp_substitutions/__init__.py +2 -0
- meta_reports/models/dbviews/imp_substitutions/unmanaged_model.py +1 -2
- 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 +2 -2
- 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_lab_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/on_study_missing_values/__init__.py +2 -0
- meta_reports/models/dbviews/on_study_missing_values/qa_cases.py +19 -1
- meta_reports/models/dbviews/on_study_missing_values/unmanged_model.py +0 -1
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/__init__.py +2 -0
- meta_reports/models/dbviews/patient_history_missing_baseline_cd4/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_three_in_row2/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_three_in_row2/unmanaged_model.py +0 -1
- meta_reports/models/dbviews/unattended_two_in_row/__init__.py +2 -0
- meta_reports/models/dbviews/unattended_two_in_row/unmanaged_model.py +0 -1
- meta_reports/models/endpoints.py +8 -4
- meta_reports/models/last_imp_refill.py +2 -3
- meta_reports/pdf_report.py +2 -2
- meta_reports/tasks.py +4 -3
- meta_reports/templates/meta_reports/columns/subject_identifier_column.html +1 -1
- meta_reports/templates/meta_reports/endpoints_all_change_list_note.html +1 -1
- meta_reports/templates/meta_reports/endpoints_change_list_note.html +1 -1
- meta_reports/templates/meta_reports/last_imp_refill/changelist_note.html +13 -0
- meta_screening/admin/__init__.py +8 -0
- meta_screening/admin/fieldsets.py +13 -15
- meta_screening/admin/list_filters.py +7 -5
- meta_screening/admin/screening_part_one_admin.py +1 -3
- 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 +21 -10
- meta_screening/baker_recipes.py +18 -10
- meta_screening/calculators.py +1 -1
- meta_screening/choices.py +1 -1
- meta_screening/constants.py +1 -1
- meta_screening/eligibility/__init__.py +9 -0
- meta_screening/eligibility/eligibility.py +21 -14
- meta_screening/eligibility/eligibility_part_one.py +1 -1
- meta_screening/eligibility/eligibility_part_three/__init__.py +2 -0
- meta_screening/eligibility/eligibility_part_three/base_eligibility_part_three.py +68 -49
- meta_screening/eligibility/eligibility_part_three/eligibility_part_three_phase_three.py +14 -15
- meta_screening/eligibility/eligibility_part_two.py +1 -1
- meta_screening/form_validators/__init__.py +8 -0
- meta_screening/form_validators/screening_part_one.py +1 -1
- meta_screening/form_validators/screening_part_three.py +6 -2
- meta_screening/form_validators/screening_part_two.py +1 -1
- meta_screening/form_validators/subject_refusal.py +1 -1
- meta_screening/forms/__init__.py +20 -0
- meta_screening/forms/field_lists.py +16 -18
- 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/0012_auto_20191107_0427.py +1 -1
- 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/calculated_model_mixin.py +2 -2
- meta_screening/model_mixins/creatinine_fields_model_mixin.py +1 -1
- meta_screening/model_mixins/eligibility_model_mixin.py +6 -4
- meta_screening/model_mixins/part_one_fields_model_mixin.py +16 -19
- meta_screening/model_mixins/part_three_fields_model_mixin.py +6 -7
- meta_screening/model_mixins/part_two_fields_model_mixin.py +19 -17
- meta_screening/models/__init__.py +9 -0
- meta_screening/models/icp_referral.py +5 -5
- meta_screening/models/proxy_models.py +1 -1
- meta_screening/models/signals.py +10 -11
- meta_screening/models/subject_refusal.py +1 -1
- meta_screening/models/subject_screening.py +2 -4
- meta_subject/action_items.py +18 -14
- meta_subject/admin/__init__.py +42 -0
- meta_subject/admin/birth_outcome_admin.py +7 -9
- 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 +8 -11
- 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/fields.py +5 -5
- meta_subject/admin/fieldsets.py +5 -5
- meta_subject/admin/followup_examination_admin.py +11 -9
- meta_subject/admin/followup_vitals_admin.py +31 -6
- meta_subject/admin/glucose_admin.py +4 -8
- meta_subject/admin/glucose_fbg_admin.py +18 -11
- 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/hiv_exit_review_admin.py +55 -0
- meta_subject/admin/list_filters.py +5 -5
- meta_subject/admin/mnsi_admin.py +7 -5
- meta_subject/admin/next_appointment_admin.py +19 -0
- 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 +2 -2
- 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/choices.py +4 -3
- meta_subject/form_validators/__init__.py +15 -0
- meta_subject/form_validators/delivery_form_validator.py +3 -3
- meta_subject/form_validators/dm_endpoint_form_validator.py +3 -1
- meta_subject/form_validators/dm_followup_form_validator.py +8 -7
- meta_subject/form_validators/egfr_drop_notification_form_validator.py +1 -1
- meta_subject/form_validators/followup_examination_form_validator.py +1 -1
- meta_subject/form_validators/glucose_fbg_form_validator.py +76 -0
- meta_subject/form_validators/glucose_form_validator.py +10 -67
- meta_subject/form_validators/hiv_exit_review_form_validator.py +18 -0
- meta_subject/form_validators/mixins.py +95 -0
- meta_subject/forms/__init__.py +44 -0
- meta_subject/forms/blood_results/__init__.py +9 -0
- meta_subject/forms/blood_results/blood_results_hba1c_form.py +1 -1
- meta_subject/forms/blood_results/blood_results_rft_form.py +60 -4
- meta_subject/forms/delivery_form.py +2 -0
- 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 +27 -1
- meta_subject/forms/glucose_fbg_form.py +1 -46
- meta_subject/forms/health_economics/__init__.py +2 -0
- meta_subject/forms/hepatitis_test_form.py +1 -1
- meta_subject/forms/hiv_exit_review_form.py +13 -0
- meta_subject/forms/mixins.py +1 -1
- meta_subject/forms/next_appointment_form.py +36 -0
- meta_subject/forms/other_arv_regimens_form.py +1 -1
- meta_subject/forms/patient_history_form.py +1 -1
- meta_subject/forms/physical_exam_form.py +1 -1
- meta_subject/forms/pregnancy_update_form.py +1 -1
- meta_subject/forms/slider_widget.py +1 -1
- meta_subject/forms/study_medication_form.py +18 -12
- meta_subject/forms/subject_requisition_form.py +1 -1
- meta_subject/forms/subject_visit_missed_form.py +1 -1
- meta_subject/forms/urine_dipstick_test_form.py +1 -1
- meta_subject/forms/urine_pregnancy_form.py +1 -1
- meta_subject/management/commands/create_missing_refills.py +3 -3
- meta_subject/management/commands/create_missing_rx.py +2 -2
- meta_subject/management/commands/missed.py +20 -23
- meta_subject/metadata_rules/__init__.py +2 -0
- meta_subject/metadata_rules/metadata_rules.py +14 -0
- meta_subject/metadata_rules/predicates.py +44 -25
- 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/0107_auto_20220415_0043.py +1 -1
- meta_subject/migrations/0115_historicalegfrnotification_egfrnotification.py +5 -13
- meta_subject/migrations/0128_auto_20220720_0055.py +1 -1
- meta_subject/migrations/0131_auto_20220722_0411.py +1 -1
- meta_subject/migrations/0135_auto_20220722_2212.py +2 -1
- 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/0199_auto_20240516_0247.py +1 -1
- meta_subject/migrations/0209_remove_historicaldmdxresult_dm_diagnosis_and_more.py +1 -2
- meta_subject/migrations/0212_auto_20240827_2222.py +1 -1
- meta_subject/migrations/0216_historicalnextappointment_nextappointment.py +553 -0
- meta_subject/migrations/0217_alter_historicalnextappointment_appt_datetime_and_more.py +42 -0
- meta_subject/migrations/0218_alter_historicalnextappointment_appt_date_and_more.py +53 -0
- meta_subject/migrations/0219_remove_historicalnextappointment_allow_create_interim_and_more.py +92 -0
- meta_subject/migrations/0220_historicalbloodresultsgludummy_bloodresultsgludummy.py +825 -0
- meta_subject/migrations/0221_auto_20250402_1913.py +42 -0
- meta_subject/migrations/0222_alter_historicalstudymedication_stock_codes_and_more.py +46 -0
- meta_subject/migrations/0223_bloodresultsfbc_errors_bloodresultsgludummy_errors_and_more.py +83 -0
- meta_subject/migrations/0224_bloodresultsfbc_abnormal_summary_and_more.py +153 -0
- meta_subject/migrations/0225_followupvitals_waist_circumference_and_more.py +46 -0
- meta_subject/migrations/0226_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0227_alter_followupvitals_waist_circumference_comment_and_more.py +97 -0
- meta_subject/migrations/0228_bloodresultshba1c_hba1c_datetime_and_more.py +2518 -0
- meta_subject/migrations/0229_alter_glucosefbg_consent_model_and_more.py +1918 -0
- meta_subject/migrations/0230_alter_historicaldelivery_action_identifier_and_more.py +1733 -0
- meta_subject/migrations/0231_alter_historicalmedicationadherence_consent_model_and_more.py +2054 -0
- meta_subject/migrations/0232_alter_patienthistory_concomitant_conditions_and_more.py +1170 -0
- meta_subject/migrations/0233_historicalspfq_spfq.py +1066 -0
- meta_subject/migrations/0234_remove_spfq_site_remove_spfq_subject_visit_and_more.py +27 -0
- meta_subject/migrations/0235_glucosefbg_endpoint_today_and_more.py +606 -0
- meta_subject/migrations/0236_alter_historicalhivexitreview_other_current_arv_regimen_and_more.py +58 -0
- meta_subject/migrations/0237_historicalhivexitreview_singleton_field_and_more.py +68 -0
- meta_subject/migrations/0238_historicalhivexitreview_available_and_more.py +88 -0
- meta_subject/model_mixins/__init__.py +10 -0
- meta_subject/model_mixins/arv_history_model_mixin.py +3 -44
- meta_subject/model_mixins/arv_review_model_mixin.py +53 -0
- meta_subject/model_mixins/search_slug_model_mixin.py +1 -2
- meta_subject/model_mixins/vitals_fields_model_mixin.py +33 -0
- meta_subject/models/__init__.py +52 -0
- meta_subject/models/birth_outcomes.py +3 -3
- meta_subject/models/blood_results/__init__.py +11 -0
- meta_subject/models/blood_results/blood_results_glu.py +29 -0
- meta_subject/models/blood_results/blood_results_hba1c.py +0 -1
- meta_subject/models/blood_results/blood_results_ins.py +0 -1
- meta_subject/models/blood_results/blood_results_lft.py +0 -1
- meta_subject/models/delivery.py +4 -6
- meta_subject/models/diabetes/__init__.py +2 -0
- meta_subject/models/diabetes/dm_endpoint.py +5 -5
- meta_subject/models/diabetes/dm_followup.py +7 -8
- meta_subject/models/diet_and_lifestyle.py +2 -2
- meta_subject/models/followup_examination.py +12 -14
- meta_subject/models/glucose.py +5 -5
- meta_subject/models/glucose_fbg.py +17 -4
- meta_subject/models/health_economics/__init__.py +2 -0
- meta_subject/models/health_economics/health_economics.py +8 -8
- meta_subject/models/health_economics/health_economics_simple.py +2 -2
- meta_subject/models/health_economics/health_economics_update.py +3 -2
- meta_subject/models/hepatitis_test.py +2 -2
- meta_subject/models/hiv_exit_review.py +44 -0
- meta_subject/models/next_appointment.py +15 -0
- meta_subject/models/other_arv_regimens_detail.py +1 -1
- meta_subject/models/patient_history.py +6 -7
- meta_subject/models/physical_exam.py +2 -2
- meta_subject/models/pregnancy_update.py +1 -1
- meta_subject/models/signals.py +15 -13
- meta_subject/models/subject_visit.py +2 -2
- meta_subject/models/todo.txt +1 -1
- meta_subject/models/urine_dipstick_test.py +2 -2
- meta_subject/models/urine_pregnancy.py +1 -1
- meta_subject/static/meta_subject/slider.css +1 -1
- meta_subject/templates/meta_subject/endpoint_review_instructions.html +1 -1
- meta_subject/templates/meta_subject/widgets/slider.html +0 -1
- meta_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/crfs.py +34 -1
- meta_visit_schedule/visit_schedules/phase_three/schedule.py +4 -4
- meta_visit_schedule/visit_schedules/phase_three/schedule_dm_referral.py +1 -2
- meta_visit_schedule/visit_schedules/phase_three/schedule_pregnancy.py +2 -3
- meta_ae/tests/holidays.csv +0 -15
- meta_ae/tests/tests/test_actions.py +0 -127
- meta_ae/tests/urls.py +0 -10
- meta_analytics/dataframes/enrolled/__init__.py +0 -1
- meta_analytics/dataframes/enrolled/get_glucose_df.py +0 -122
- 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/templates/meta_dashboard/bootstrap3/subject/dashboard.html +0 -11
- 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 -554
- meta_edc-0.3.39.dist-info/AUTHORS +0 -0
- meta_edc-0.3.39.dist-info/METADATA +0 -766
- meta_edc-0.3.39.dist-info/WHEEL +0 -5
- meta_edc-0.3.39.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 -16
- meta_labs/tests/urls.py +0 -4
- meta_lists/tests/__init__.py +0 -0
- meta_lists/tests/test_lists.py +0 -8
- meta_pharmacy/admin/actions.py +0 -38
- 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 -206
- 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 -216
- meta_screening/tests/options.py +0 -127
- meta_screening/tests/tests/__init__.py +0 -0
- meta_screening/tests/tests/test_forms.py +0 -397
- meta_screening/tests/tests/test_screening_part_one.py +0 -108
- meta_screening/tests/tests/test_screening_part_three.py +0 -436
- 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 -75
- meta_subject/tests/tests/test_metadata_rules.py +0 -135
- meta_subject/tests/tests/test_mnsi.py +0 -317
- 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 -173
- meta_subject/tests/tests/test_study_medication.py +0 -230
- 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 -186
- /meta_ae/templates/meta_ae/{bootstrap3/ae_initial_description.html → aeinitial_description.html} +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/add_consent_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/dashboard_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/buttons → buttons}/refusal_button.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/screening → screening}/listboard.html +0 -0
- /meta_dashboard/templates/meta_dashboard/{bootstrap3/subject → subject}/listboard.html +0 -0
- {meta_edc-0.3.39.dist-info → meta_edc-1.4.0.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_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/admin.py
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
from django.contrib.admin import AdminSite as DjangoAdminSite
|
|
2
|
-
from edc_dashboard.utils import get_bootstrap_version
|
|
3
2
|
|
|
4
3
|
from .apps import AppConfig
|
|
5
4
|
|
|
6
5
|
|
|
7
6
|
class AdminSite(DjangoAdminSite):
|
|
8
7
|
app_index_template = "edc_model_admin/admin/app_index.html"
|
|
9
|
-
login_template =
|
|
10
|
-
logout_template =
|
|
8
|
+
login_template = "edc_auth/login.html"
|
|
9
|
+
logout_template = "edc_auth/login.html"
|
|
11
10
|
enable_nav_sidebar = False # DJ 3.1
|
|
12
11
|
final_catch_all_view = True # DJ 3.2
|
|
13
12
|
site_title = AppConfig.verbose_name
|
|
@@ -19,7 +18,7 @@ class AdminSite(DjangoAdminSite):
|
|
|
19
18
|
index_title = "Site administration"
|
|
20
19
|
site_url = "/administration/"
|
|
21
20
|
|
|
22
|
-
def __init__(self, **kwargs):
|
|
21
|
+
def __init__(self, **kwargs): # noqa: ARG002
|
|
23
22
|
super().__init__(name="meta_edc")
|
|
24
23
|
|
|
25
24
|
|
meta_edc/celery.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
+
import sys
|
|
2
3
|
|
|
3
4
|
from celery import Celery
|
|
4
5
|
|
|
@@ -6,7 +7,6 @@ from celery import Celery
|
|
|
6
7
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meta_edc.settings.debug")
|
|
7
8
|
|
|
8
9
|
# config celery
|
|
9
|
-
# app = Celery("meta_edc", include=["meta_reports", "edc_pharmacy"])
|
|
10
10
|
app = Celery("meta_edc")
|
|
11
11
|
app.config_from_object("django.conf:settings", namespace="CELERY")
|
|
12
12
|
app.autodiscover_tasks()
|
|
@@ -14,4 +14,4 @@ app.autodiscover_tasks()
|
|
|
14
14
|
|
|
15
15
|
@app.task(bind=True)
|
|
16
16
|
def debug_task(self):
|
|
17
|
-
|
|
17
|
+
sys.stdout.write(f"Request: {self.request!r}\n")
|
meta_edc/celery_live.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from celery import Celery
|
|
5
|
+
|
|
6
|
+
# load settings
|
|
7
|
+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meta_edc.settings.debug")
|
|
8
|
+
|
|
9
|
+
# config celery
|
|
10
|
+
app = Celery("meta_edc")
|
|
11
|
+
app.config_from_object("django.conf:settings", namespace="CELERY")
|
|
12
|
+
app.autodiscover_tasks()
|
|
13
|
+
|
|
14
|
+
# app.conf.task_routes = {"*": {"queue": "live_queue"}}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@app.task(bind=True)
|
|
18
|
+
def debug_task(self):
|
|
19
|
+
sys.stdout.write(f"Request: {self.request!r}\n")
|
meta_edc/celery_uat.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from celery import Celery
|
|
5
|
+
|
|
6
|
+
# from kombu import Queue
|
|
7
|
+
|
|
8
|
+
# load settings
|
|
9
|
+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "meta_edc.settings.debug")
|
|
10
|
+
|
|
11
|
+
# config celery
|
|
12
|
+
app = Celery("meta_edc")
|
|
13
|
+
app.config_from_object("django.conf:settings", namespace="CELERY")
|
|
14
|
+
app.autodiscover_tasks()
|
|
15
|
+
|
|
16
|
+
# app.conf.task_default_queue = "workuatq1"
|
|
17
|
+
# app.conf.task_queues = (Queue("workuatq1", routing_key="task.#"),)
|
|
18
|
+
# app.conf.task_default_exchange = "workuatq1"
|
|
19
|
+
# app.conf.task_default_exchange_type = "topic"
|
|
20
|
+
# app.conf.task_default_routing_key = "task.workuatq1"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@app.task(bind=True)
|
|
24
|
+
def debug_task(self):
|
|
25
|
+
sys.stdout.write(f"Request: {self.request!r}\n")
|
|
@@ -1,32 +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
|
-
|
|
23
|
-
forms = FormsReference(
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
doc_folder = settings.BASE_DIR / "docs"
|
|
19
|
+
if not doc_folder.exists():
|
|
20
|
+
doc_folder.mkdir()
|
|
21
|
+
forms = FormsReference(
|
|
22
|
+
visit_schedules=[visit_schedule],
|
|
23
|
+
admin_site=meta_subject_admin,
|
|
24
|
+
add_per_form_timestamp=False,
|
|
25
|
+
)
|
|
26
|
+
path = doc_folder / "forms_reference.md"
|
|
27
|
+
forms.to_file(path=path, overwrite=True, pad=0)
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
class Command(BaseCommand):
|
|
29
31
|
help = "Update forms reference document (.md)"
|
|
30
32
|
|
|
31
|
-
def handle(self, *args, **options):
|
|
33
|
+
def handle(self, *args, **options): # noqa: ARG002
|
|
32
34
|
update_forms_reference()
|
meta_edc/meta_version.py
CHANGED
|
@@ -3,11 +3,11 @@ PHASE_THREE = 3
|
|
|
3
3
|
PHASE_THREE_ONLY = "PHASE_THREE_ONLY"
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
class InvalidMetaVersion(Exception):
|
|
6
|
+
class InvalidMetaVersion(Exception): # noqa: N818
|
|
7
7
|
pass
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def get_meta_version():
|
|
11
|
-
from django.conf import settings
|
|
11
|
+
from django.conf import settings # noqa: PLC0415
|
|
12
12
|
|
|
13
13
|
return settings.META_PHASE
|
meta_edc/navbars.py
CHANGED
|
@@ -12,19 +12,21 @@ from meta_dashboard.navbars import navbar as meta_dashboard_navbar
|
|
|
12
12
|
|
|
13
13
|
navbar = Navbar(name=settings.APP_NAME)
|
|
14
14
|
|
|
15
|
-
navbar_item = copy(
|
|
15
|
+
navbar_item = copy(next(item for item in lab_navbar.navbar_items if item.name == "specimens"))
|
|
16
16
|
navbar_item.active = False
|
|
17
17
|
navbar_item.label = "Specimens"
|
|
18
18
|
navbar.register(navbar_item)
|
|
19
19
|
|
|
20
20
|
navbar.register(
|
|
21
|
-
|
|
21
|
+
next(
|
|
22
|
+
item for item in meta_dashboard_navbar.navbar_items if item.name == "screened_subject"
|
|
23
|
+
)
|
|
22
24
|
)
|
|
23
25
|
|
|
24
26
|
navbar.register(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
next(
|
|
28
|
+
item for item in meta_dashboard_navbar.navbar_items if item.name == "consented_subject"
|
|
29
|
+
)
|
|
28
30
|
)
|
|
29
31
|
|
|
30
32
|
for navbar_item in review_navbar.navbar_items:
|
meta_edc/settings/debug.py
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
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
|
|
|
10
|
+
# clear cache after changing site, for example:
|
|
11
|
+
# from django.core.cache import cache
|
|
12
|
+
# cache.clear()
|
|
9
13
|
# TZ Sites:
|
|
10
|
-
SITE_ID = SiteID(default=20) # Amana
|
|
14
|
+
# SITE_ID = SiteID(default=20) # Amana
|
|
11
15
|
# SITE_ID = SiteID(default=10) # Hindu Mandal
|
|
12
16
|
# SITE_ID = SiteID(default=40) # Mwananyamala
|
|
13
17
|
# SITE_ID = SiteID(default=50) # Mbagala
|
|
14
18
|
# SITE_ID = SiteID(default=60) # Mnazi-Moja
|
|
15
|
-
|
|
19
|
+
SITE_ID = SiteID(default=30) # Temeke
|
|
20
|
+
|
|
16
21
|
INDEX_PAGE = "http://localhost:8000"
|
|
17
22
|
EDC_SITES_UAT_DOMAIN = False
|
|
18
23
|
DEBUG = True
|
|
@@ -36,3 +41,7 @@ if os.path.exists(BASE_DIR) and not os.path.exists(KEY_PATH): # noqa
|
|
|
36
41
|
# if debugging, run `export DJANGO_DEBUG=True` before running runserver
|
|
37
42
|
# CELERY_TASK_ALWAYS_EAGER = os.getenv("DJANGO_DEBUG", "False") == "True"
|
|
38
43
|
# CELERY_TASK_EAGER_PROPAGATES = CELERY_TASK_ALWAYS_EAGER
|
|
44
|
+
|
|
45
|
+
EDC_PDF_REPORTS_WATERMARK_WORD = "SAMPLE"
|
|
46
|
+
EDC_PDF_REPORTS_WATERMARK_FONT = ("Helvetica", 100)
|
|
47
|
+
EDC_PHARMACY_LABEL_WATERMARK_WORD = "DO NOT USE"
|
meta_edc/settings/defaults.py
CHANGED
|
@@ -2,11 +2,11 @@ import os
|
|
|
2
2
|
import sys
|
|
3
3
|
from importlib.metadata import version
|
|
4
4
|
from pathlib import Path
|
|
5
|
-
from urllib.parse import quote
|
|
5
|
+
from urllib.parse import quote, urljoin
|
|
6
6
|
|
|
7
7
|
import django
|
|
8
8
|
import environ
|
|
9
|
-
from
|
|
9
|
+
from clinicedc_constants import COMPLETE
|
|
10
10
|
from edc_constants.internationalization import EXTRA_LANG_INFO
|
|
11
11
|
from edc_protocol_incident.constants import PROTOCOL_INCIDENT
|
|
12
12
|
from edc_utils import get_datetime_from_env
|
|
@@ -19,7 +19,6 @@ env = environ.Env(
|
|
|
19
19
|
DJANGO_AUTO_CREATE_KEYS=(bool, False),
|
|
20
20
|
DJANGO_CSRF_COOKIE_SECURE=(bool, True),
|
|
21
21
|
DJANGO_DEBUG=(bool, False),
|
|
22
|
-
DJANGO_EDC_BOOTSTRAP=(int, 3),
|
|
23
22
|
DJANGO_EMAIL_ENABLED=(bool, False),
|
|
24
23
|
DJANGO_EMAIL_USE_TLS=(bool, True),
|
|
25
24
|
DJANGO_LIVE_SYSTEM=(bool, False),
|
|
@@ -33,19 +32,37 @@ env = environ.Env(
|
|
|
33
32
|
TWILIO_ENABLED=(bool, False),
|
|
34
33
|
EDC_SITES_DOMAIN_SUFFIX="meta4.clinicedc.org",
|
|
35
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.parent
|
|
36
42
|
|
|
37
|
-
|
|
38
|
-
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
|
|
39
47
|
|
|
40
48
|
# copy your .env file from .envs/ to BASE_DIR
|
|
41
49
|
if "test" in sys.argv:
|
|
42
50
|
env.read_env(ENV_DIR / ".env-tests")
|
|
43
|
-
print(f"Reading env from {(BASE_DIR /'.env-tests')}") # noqa
|
|
51
|
+
print(f"Reading env from {(BASE_DIR / '.env-tests')}") # noqa
|
|
44
52
|
else:
|
|
45
53
|
if not (ENV_DIR / ".env").exists():
|
|
46
54
|
raise FileExistsError(f"Environment file does not exist. Got `{(ENV_DIR / '.env')}`")
|
|
47
55
|
env.read_env(ENV_DIR / ".env")
|
|
48
56
|
|
|
57
|
+
# django_revision
|
|
58
|
+
GIT_DIR = Path(env.str("EDC_REVISION_GIT_DIR", default=BASE_DIR))
|
|
59
|
+
|
|
60
|
+
# django_crypto_fields
|
|
61
|
+
KEY_PATH = env.str("DJANGO_KEY_FOLDER")
|
|
62
|
+
AUTO_CREATE_KEYS = env("DJANGO_AUTO_CREATE_KEYS")
|
|
63
|
+
|
|
64
|
+
EXPORT_FOLDER = env.str("DJANGO_EXPORT_FOLDER") or Path("~/").expanduser()
|
|
65
|
+
|
|
49
66
|
|
|
50
67
|
LOGGING_ENABLED = env("DJANGO_LOGGING_ENABLED")
|
|
51
68
|
if LOGGING_ENABLED:
|
|
@@ -61,6 +78,12 @@ SECRET_KEY = env.str("DJANGO_SECRET_KEY")
|
|
|
61
78
|
|
|
62
79
|
APP_NAME = env.str("DJANGO_APP_NAME")
|
|
63
80
|
|
|
81
|
+
DJANGO_REVISION_IGNORE_WORKING_DIR = env.str("DJANGO_REVISION_IGNORE_WORKING_DIR")
|
|
82
|
+
if DJANGO_REVISION_IGNORE_WORKING_DIR:
|
|
83
|
+
# get the version from the package and not a git tag
|
|
84
|
+
# this overrides django_revision
|
|
85
|
+
REVISION = version(APP_NAME)
|
|
86
|
+
|
|
64
87
|
LIVE_SYSTEM = env.str("DJANGO_LIVE_SYSTEM")
|
|
65
88
|
|
|
66
89
|
ETC_DIR = env.str("DJANGO_ETC_FOLDER")
|
|
@@ -95,6 +118,7 @@ INSTALLED_APPS = [
|
|
|
95
118
|
# "django_celery_results",
|
|
96
119
|
"django_db_views",
|
|
97
120
|
"fontawesomefree",
|
|
121
|
+
"rangefilter",
|
|
98
122
|
"django_crypto_fields.apps.AppConfig",
|
|
99
123
|
"django_revision.apps.AppConfig",
|
|
100
124
|
# "django_extensions",
|
|
@@ -173,6 +197,7 @@ INSTALLED_APPS = [
|
|
|
173
197
|
"meta_pharmacy.apps.AppConfig",
|
|
174
198
|
"meta_screening.apps.AppConfig",
|
|
175
199
|
"meta_sites.apps.AppConfig",
|
|
200
|
+
"meta_spfq.apps.AppConfig",
|
|
176
201
|
"meta_edc.apps.AppConfig",
|
|
177
202
|
"edc_appconfig.apps.AppConfig",
|
|
178
203
|
]
|
|
@@ -375,7 +400,6 @@ EDC_DASHBOARD_APP_LABEL = "meta_dashboard"
|
|
|
375
400
|
EDC_NAVBAR_DEFAULT = env("EDC_NAVBAR_DEFAULT")
|
|
376
401
|
|
|
377
402
|
# dashboards
|
|
378
|
-
EDC_BOOTSTRAP = env("DJANGO_EDC_BOOTSTRAP")
|
|
379
403
|
DASHBOARD_URL_NAMES = env.dict("DJANGO_DASHBOARD_URL_NAMES")
|
|
380
404
|
DASHBOARD_BASE_TEMPLATES = env.dict("DJANGO_DASHBOARD_BASE_TEMPLATES")
|
|
381
405
|
LAB_DASHBOARD_BASE_TEMPLATES = env.dict("DJANGO_LAB_DASHBOARD_BASE_TEMPLATES")
|
|
@@ -398,11 +422,25 @@ EDC_LABEL_BROWSER_PRINT_PAGE_AUTO_BACK = env("EDC_LABEL_BROWSER_PRINT_PAGE_AUTO_
|
|
|
398
422
|
|
|
399
423
|
# edc_model_admin
|
|
400
424
|
EDC_MODEL_ADMIN_CSS_THEME = "edc_indigo"
|
|
425
|
+
EDC_MODEL_ADMIN_SAVE_DELAY = 3000
|
|
426
|
+
|
|
401
427
|
# edc-mnsi
|
|
402
428
|
EDC_MNSI_MODEL = "meta_subject.mnsi"
|
|
403
429
|
|
|
404
430
|
EDC_OFFSTUDY_OFFSTUDY_MODEL = "meta_prn.endofstudy"
|
|
405
431
|
|
|
432
|
+
# edc-pharmacy
|
|
433
|
+
EDC_PDF_REPORTS_WATERMARK_WORD = env.str("EDC_PDF_REPORTS_WATERMARK_WORD")
|
|
434
|
+
EDC_PDF_REPORTS_WATERMARK_FONT = env.str("EDC_PDF_REPORTS_WATERMARK_FONT")
|
|
435
|
+
EDC_PDF_REPORTS_WATERMARK_FONTSIZE = env.int("EDC_PDF_REPORTS_WATERMARK_FONTSIZE")
|
|
436
|
+
EDC_PHARMACY_LABEL_WATERMARK_WORD = env.str("EDC_PHARMACY_LABEL_WATERMARK_WORD")
|
|
437
|
+
if EDC_PDF_REPORTS_WATERMARK_FONT:
|
|
438
|
+
EDC_PDF_REPORTS_WATERMARK_FONT = (
|
|
439
|
+
EDC_PDF_REPORTS_WATERMARK_FONT,
|
|
440
|
+
EDC_PDF_REPORTS_WATERMARK_FONTSIZE,
|
|
441
|
+
)
|
|
442
|
+
else:
|
|
443
|
+
EDC_PDF_REPORTS_WATERMARK_FONT = ()
|
|
406
444
|
# edc-protocol-incident
|
|
407
445
|
EDC_PROTOCOL_VIOLATION_TYPE = PROTOCOL_INCIDENT
|
|
408
446
|
|
|
@@ -434,7 +472,7 @@ MULTISITE_REGISTER_POST_MIGRATE_SYNC_ALIAS = False
|
|
|
434
472
|
# and that redis server is running
|
|
435
473
|
DEFENDER_REDIS_NAME = "default"
|
|
436
474
|
DEFENDER_LOCK_OUT_BY_IP_AND_USERNAME = True
|
|
437
|
-
DEFENDER_LOCKOUT_TEMPLATE = "edc_auth/
|
|
475
|
+
DEFENDER_LOCKOUT_TEMPLATE = "edc_auth/login.html"
|
|
438
476
|
DEFENDER_LOGIN_FAILURE_LIMIT = 5
|
|
439
477
|
|
|
440
478
|
# edc_crf
|
|
@@ -457,15 +495,6 @@ if TWILIO_ENABLED:
|
|
|
457
495
|
TWILIO_AUTH_TOKEN = env.str("TWILIO_AUTH_TOKEN")
|
|
458
496
|
TWILIO_SENDER = env.str("TWILIO_SENDER")
|
|
459
497
|
|
|
460
|
-
# django_revision
|
|
461
|
-
GIT_DIR = BASE_DIR
|
|
462
|
-
|
|
463
|
-
# django_crypto_fields
|
|
464
|
-
KEY_PATH = env.str("DJANGO_KEY_FOLDER")
|
|
465
|
-
AUTO_CREATE_KEYS = env("DJANGO_AUTO_CREATE_KEYS")
|
|
466
|
-
|
|
467
|
-
EXPORT_FOLDER = env.str("DJANGO_EXPORT_FOLDER") or Path("~/").expanduser()
|
|
468
|
-
|
|
469
498
|
# django_simple_history
|
|
470
499
|
SIMPLE_HISTORY_ENFORCE_HISTORY_MODEL_PERMISSIONS = True
|
|
471
500
|
|
|
@@ -492,6 +521,9 @@ DATA_DICTIONARY_APP_LABELS = [
|
|
|
492
521
|
# edc_form_runners
|
|
493
522
|
EDC_FORM_RUNNERS_ENABLED = False
|
|
494
523
|
|
|
524
|
+
# edc_pdf_reports
|
|
525
|
+
EDC_PDF_REPORTS_DRAW_LOGO = False
|
|
526
|
+
|
|
495
527
|
# edc_protocol
|
|
496
528
|
EDC_PROTOCOL = env.str("EDC_PROTOCOL")
|
|
497
529
|
EDC_PROTOCOL_INSTITUTION_NAME = env.str("EDC_PROTOCOL_INSTITUTION_NAME")
|
|
@@ -522,7 +554,7 @@ if env("AWS_ENABLED"):
|
|
|
522
554
|
AWS_LOCATION = env.str("AWS_LOCATION")
|
|
523
555
|
AWS_IS_GZIPPED = True
|
|
524
556
|
STORAGES = {"staticfiles": {"BACKEND": "storages.backends.s3boto3.S3Boto3Storage"}}
|
|
525
|
-
STATIC_URL =
|
|
557
|
+
STATIC_URL = urljoin(AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION) + "/"
|
|
526
558
|
STATIC_ROOT = ""
|
|
527
559
|
elif DEBUG:
|
|
528
560
|
STATIC_URL = env.str("DJANGO_STATIC_URL")
|
|
@@ -564,3 +596,8 @@ if "test" in sys.argv:
|
|
|
564
596
|
MIGRATION_MODULES = DisableMigrations()
|
|
565
597
|
PASSWORD_HASHERS = ("django.contrib.auth.hashers.MD5PasswordHasher",)
|
|
566
598
|
DEFAULT_FILE_STORAGE = "inmemorystorage.InMemoryStorage"
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
META_SPFQ_LIST_FILENAME = env.str("META_SPFQ_LIST_FILENAME")
|
|
602
|
+
# edc_pdf_reports
|
|
603
|
+
EDC_PDF_REPORTS_DRAW_LOGO = False
|
meta_edc/settings/live.py
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
1
3
|
from multisite import SiteID
|
|
2
4
|
|
|
3
5
|
from .defaults import * # noqa
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
sys.stdout.write(f"Settings file {__file__}\n")
|
|
6
8
|
|
|
7
9
|
SITE_ID = SiteID(default=1)
|
|
8
10
|
EDC_SITES_UAT_DOMAIN = False
|
|
9
11
|
EDC_MODEL_ADMIN_CSS_THEME = "edc_indigo"
|
|
10
12
|
LIVE_SYSTEM = True
|
|
11
13
|
EDC_SITES_DOMAIN_SUFFIX = "meta4.clinicedc.org"
|
|
14
|
+
AUTO_CREATE_KEYS = False
|
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
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
{% extends 'edc_dashboard/
|
|
1
|
+
{% extends 'edc_dashboard/base.html' %}
|
|
2
2
|
{% block footer %}{{ block.super }} {% comment %}META 2/3 base.html template{% endcomment %}{% endblock footer %}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
{% extends 'meta_edc/
|
|
1
|
+
{% extends 'meta_edc/base.html' %}
|
|
2
2
|
{% load static edc_dashboard_extras %}
|
|
3
3
|
|
|
4
4
|
{% block main %}
|
|
@@ -59,7 +59,7 @@ a { cursor: pointer; }
|
|
|
59
59
|
{% if perms.meta_reports %}
|
|
60
60
|
<a href="{% url 'meta_reports:home_url' %}" class="list-group-item"><i class="fa-solid fa-stroopwafel fa-lg fa-fw"></i></i> QA Reports</a>
|
|
61
61
|
{% endif %}
|
|
62
|
-
{% if perms.
|
|
62
|
+
{% if perms.edc_pharmacy.nav_pharmacy_section %}
|
|
63
63
|
<a href="{% url 'edc_pharmacy:home_url' %}" class="list-group-item"><i class="fas fa-prescription fa-lg fa-fw"></i> Pharmacy</a>
|
|
64
64
|
{% endif %}
|
|
65
65
|
{% if perms.edc_export %}
|
meta_edc/urls.py
CHANGED
|
@@ -10,7 +10,7 @@ from edc_utils.paths_for_urlpatterns import paths_for_urlpatterns
|
|
|
10
10
|
from .views import HomeView
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
def trigger_error(request):
|
|
13
|
+
def trigger_error(request): # noqa: ARG001
|
|
14
14
|
division_by_zero = 1 / 0 # noqa
|
|
15
15
|
|
|
16
16
|
|
|
@@ -51,6 +51,7 @@ urlpatterns = [
|
|
|
51
51
|
*paths_for_urlpatterns("edc_protocol_incident"),
|
|
52
52
|
*paths_for_urlpatterns("edc_qol"),
|
|
53
53
|
*paths_for_urlpatterns("edc_randomization"),
|
|
54
|
+
*paths_for_urlpatterns("edc_reportable"),
|
|
54
55
|
*paths_for_urlpatterns("edc_refusal"),
|
|
55
56
|
*paths_for_urlpatterns("edc_registration"),
|
|
56
57
|
*paths_for_urlpatterns("edc_review_dashboard"),
|
|
@@ -68,6 +69,7 @@ urlpatterns = [
|
|
|
68
69
|
*paths_for_urlpatterns("meta_screening"),
|
|
69
70
|
*paths_for_urlpatterns("meta_subject"),
|
|
70
71
|
*paths_for_urlpatterns("meta_reports"),
|
|
72
|
+
*paths_for_urlpatterns("meta_spfq"),
|
|
71
73
|
]
|
|
72
74
|
|
|
73
75
|
if settings.DEFENDER_ENABLED:
|
meta_edc/utils.py
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
|
|
1
3
|
from django.core.exceptions import ImproperlyConfigured
|
|
2
4
|
|
|
3
5
|
|
|
4
6
|
def confirm_meta_version(phase):
|
|
5
7
|
response = input(f"This is meta phase {phase}. Type 2 or 3 to continue: ")
|
|
6
8
|
if response not in ["2", "3"]:
|
|
7
|
-
|
|
9
|
+
sys.stdout.write("settings load has been halted.\n")
|
|
8
10
|
raise ImproperlyConfigured("Check settings.META_PHASE")
|
|
9
11
|
return int(response)
|
meta_edc/views/__init__.py
CHANGED
meta_edc/views/home_view.py
CHANGED
|
@@ -2,7 +2,6 @@ from typing import Any
|
|
|
2
2
|
|
|
3
3
|
from django.conf import settings
|
|
4
4
|
from django.views.generic import TemplateView
|
|
5
|
-
from edc_dashboard.utils import get_bootstrap_version
|
|
6
5
|
from edc_dashboard.view_mixins import EdcViewMixin
|
|
7
6
|
from edc_navbar import NavbarViewMixin
|
|
8
7
|
from edc_randomization.site_randomizers import site_randomizers
|
|
@@ -11,7 +10,7 @@ from meta_edc.meta_version import get_meta_version
|
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
class HomeView(EdcViewMixin, NavbarViewMixin, TemplateView):
|
|
14
|
-
template_name =
|
|
13
|
+
template_name = "meta_edc/home.html"
|
|
15
14
|
navbar_name = settings.APP_NAME
|
|
16
15
|
navbar_selected_item = "home"
|
|
17
16
|
|