endoreg-db 0.8.6.1__py3-none-any.whl → 0.8.8.9__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 endoreg-db might be problematic. Click here for more details.
- endoreg_db/authz/auth.py +74 -0
- endoreg_db/authz/backends.py +168 -0
- endoreg_db/authz/management/commands/list_routes.py +18 -0
- endoreg_db/authz/middleware.py +83 -0
- endoreg_db/authz/permissions.py +127 -0
- endoreg_db/authz/policy.py +218 -0
- endoreg_db/authz/views_auth.py +66 -0
- endoreg_db/config/env.py +13 -8
- endoreg_db/data/__init__.py +2 -11
- endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +3 -3
- endoreg_db/data/event_classification/data.yaml +4 -0
- endoreg_db/data/event_classification_choice/data.yaml +9 -0
- endoreg_db/data/examination/examinations/data.yaml +114 -14
- endoreg_db/data/examination/time-type/data.yaml +0 -3
- endoreg_db/data/examination_indication/endoscopy.yaml +108 -173
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +0 -70
- endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +33 -37
- endoreg_db/data/finding/00_generic.yaml +35 -0
- endoreg_db/data/finding/00_generic_complication.yaml +9 -0
- endoreg_db/data/finding/01_gastroscopy_baseline.yaml +88 -0
- endoreg_db/data/finding/01_gastroscopy_observation.yaml +113 -0
- endoreg_db/data/finding/02_colonoscopy_baseline.yaml +53 -0
- endoreg_db/data/finding/02_colonoscopy_hidden.yaml +119 -0
- endoreg_db/data/finding/02_colonoscopy_observation.yaml +152 -0
- endoreg_db/data/finding_classification/00_generic.yaml +44 -0
- endoreg_db/data/finding_classification/00_generic_histology.yaml +28 -0
- endoreg_db/data/finding_classification/00_generic_lesion.yaml +52 -0
- endoreg_db/data/finding_classification/02_colonoscopy_baseline.yaml +83 -0
- endoreg_db/data/finding_classification/02_colonoscopy_histology.yaml +13 -0
- endoreg_db/data/finding_classification/02_colonoscopy_other.yaml +12 -0
- endoreg_db/data/finding_classification/02_colonoscopy_polyp.yaml +101 -0
- endoreg_db/data/finding_classification_choice/{yes_no_na.yaml → 00_generic.yaml} +5 -1
- endoreg_db/data/finding_classification_choice/{examination_setting_generic_types.yaml → 00_generic_baseline.yaml} +10 -2
- endoreg_db/data/finding_classification_choice/{complication_generic_types.yaml → 00_generic_complication.yaml} +1 -1
- endoreg_db/data/finding_classification_choice/{histology.yaml → 00_generic_histology.yaml} +1 -4
- endoreg_db/data/finding_classification_choice/00_generic_lesion.yaml +158 -0
- endoreg_db/data/finding_classification_choice/{bowel_preparation.yaml → 02_colonoscopy_bowel_preparation.yaml} +1 -30
- endoreg_db/data/finding_classification_choice/{colonoscopy_not_complete_reason.yaml → 02_colonoscopy_generic.yaml} +1 -1
- endoreg_db/data/finding_classification_choice/{histology_polyp.yaml → 02_colonoscopy_histology.yaml} +1 -1
- endoreg_db/data/finding_classification_choice/{colonoscopy_location.yaml → 02_colonoscopy_location.yaml} +23 -4
- endoreg_db/data/finding_classification_choice/02_colonoscopy_other.yaml +34 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_polyp_advanced_imaging.yaml +76 -0
- endoreg_db/data/finding_classification_choice/{colon_lesion_paris.yaml → 02_colonoscopy_polyp_morphology.yaml} +26 -8
- endoreg_db/data/finding_classification_choice/02_colonoscopy_size.yaml +27 -0
- endoreg_db/data/finding_classification_type/{colonoscopy_basic.yaml → 00_generic.yaml} +18 -13
- endoreg_db/data/finding_classification_type/02_colonoscopy.yaml +9 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy.yaml +59 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_ablation.yaml +44 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_bleeding.yaml +55 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_resection.yaml +85 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stenosis.yaml +17 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stent.yaml +9 -0
- endoreg_db/data/finding_intervention/01_gastroscopy.yaml +19 -0
- endoreg_db/data/finding_intervention/04_eus.yaml +39 -0
- endoreg_db/data/finding_intervention/05_ercp.yaml +3 -0
- endoreg_db/data/finding_type/data.yaml +8 -12
- endoreg_db/data/requirement/01_patient_data.yaml +93 -0
- endoreg_db/data/requirement/old/colon_polyp_intervention.yaml +49 -0
- endoreg_db/data/requirement/old/coloreg_colon_polyp.yaml +49 -0
- endoreg_db/data/requirement_operator/new_operators.yaml +36 -0
- endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +29 -12
- endoreg_db/data/requirement_set/01_laboratory.yaml +13 -0
- endoreg_db/data/requirement_set/{endoscopy_bleeding_risk.yaml → 02_endoscopy_bleeding_risk.yaml} +0 -6
- endoreg_db/data/requirement_set/90_coloreg.yaml +190 -0
- endoreg_db/data/requirement_set/_old_ +109 -0
- endoreg_db/data/requirement_set_type/data.yaml +21 -0
- endoreg_db/data/setup_config.yaml +4 -4
- endoreg_db/data/tag/requirement_set_tags.yaml +21 -0
- endoreg_db/exceptions.py +4 -2
- endoreg_db/forms/examination_form.py +1 -1
- endoreg_db/helpers/data_loader.py +125 -53
- endoreg_db/helpers/default_objects.py +116 -81
- endoreg_db/import_files/__init__.py +27 -0
- endoreg_db/import_files/context/__init__.py +7 -0
- endoreg_db/import_files/context/default_sensitive_meta.py +81 -0
- endoreg_db/import_files/context/ensure_center.py +17 -0
- endoreg_db/import_files/context/file_lock.py +66 -0
- endoreg_db/import_files/context/import_context.py +43 -0
- endoreg_db/import_files/context/validate_directories.py +56 -0
- endoreg_db/import_files/file_storage/__init__.py +15 -0
- endoreg_db/import_files/file_storage/create_report_file.py +76 -0
- endoreg_db/import_files/file_storage/create_video_file.py +75 -0
- endoreg_db/import_files/file_storage/sensitive_meta_storage.py +39 -0
- endoreg_db/import_files/file_storage/state_management.py +400 -0
- endoreg_db/import_files/file_storage/storage.py +36 -0
- endoreg_db/import_files/import_service.md +26 -0
- endoreg_db/import_files/processing/__init__.py +11 -0
- endoreg_db/import_files/processing/report_processing/report_anonymization.py +94 -0
- endoreg_db/import_files/processing/sensitive_meta_adapter.py +51 -0
- endoreg_db/import_files/processing/video_processing/video_anonymization.py +107 -0
- endoreg_db/import_files/processing/video_processing/video_cleanup_on_error.py +119 -0
- endoreg_db/import_files/pseudonymization/fake.py +52 -0
- endoreg_db/import_files/pseudonymization/k_anonymity.py +182 -0
- endoreg_db/import_files/pseudonymization/k_pseudonymity.py +128 -0
- endoreg_db/import_files/report_import_service.py +141 -0
- endoreg_db/import_files/video_import_service.py +150 -0
- endoreg_db/management/commands/create_model_meta_from_huggingface.py +21 -10
- endoreg_db/management/commands/create_multilabel_model_meta.py +299 -129
- endoreg_db/management/commands/import_report.py +130 -65
- endoreg_db/management/commands/import_video.py +9 -10
- endoreg_db/management/commands/import_video_with_classification.py +2 -2
- endoreg_db/management/commands/list_routes.py +18 -0
- endoreg_db/management/commands/load_ai_model_data.py +5 -5
- endoreg_db/management/commands/load_ai_model_label_data.py +9 -7
- endoreg_db/management/commands/load_base_db_data.py +5 -134
- endoreg_db/management/commands/load_center_data.py +12 -12
- endoreg_db/management/commands/load_contraindication_data.py +14 -16
- endoreg_db/management/commands/load_disease_classification_choices_data.py +15 -18
- endoreg_db/management/commands/load_disease_classification_data.py +15 -18
- endoreg_db/management/commands/load_disease_data.py +25 -28
- endoreg_db/management/commands/load_endoscope_data.py +20 -27
- endoreg_db/management/commands/load_event_data.py +14 -16
- endoreg_db/management/commands/load_examination_data.py +31 -44
- endoreg_db/management/commands/load_examination_indication_data.py +20 -21
- endoreg_db/management/commands/load_finding_data.py +52 -80
- endoreg_db/management/commands/load_information_source.py +21 -23
- endoreg_db/management/commands/load_lab_value_data.py +17 -26
- endoreg_db/management/commands/load_medication_data.py +13 -12
- endoreg_db/management/commands/load_organ_data.py +15 -19
- endoreg_db/management/commands/load_pdf_type_data.py +19 -18
- endoreg_db/management/commands/load_profession_data.py +14 -17
- endoreg_db/management/commands/load_qualification_data.py +20 -23
- endoreg_db/management/commands/load_report_reader_flag_data.py +17 -19
- endoreg_db/management/commands/load_requirement_data.py +62 -39
- endoreg_db/management/commands/load_requirement_set_tags.py +95 -0
- endoreg_db/management/commands/load_risk_data.py +7 -6
- endoreg_db/management/commands/load_shift_data.py +20 -23
- endoreg_db/management/commands/load_tag_data.py +8 -11
- endoreg_db/management/commands/load_unit_data.py +17 -19
- endoreg_db/management/commands/setup_endoreg_db.py +3 -3
- endoreg_db/management/commands/start_filewatcher.py +46 -37
- endoreg_db/management/commands/storage_management.py +271 -203
- endoreg_db/management/commands/validate_video_files.py +1 -5
- endoreg_db/migrations/0001_initial.py +297 -250
- endoreg_db/models/__init__.py +78 -123
- endoreg_db/models/administration/__init__.py +21 -42
- endoreg_db/models/administration/ai/active_model.py +2 -2
- endoreg_db/models/administration/ai/ai_model.py +7 -6
- endoreg_db/models/administration/case/__init__.py +1 -15
- endoreg_db/models/administration/case/case.py +3 -3
- endoreg_db/models/administration/case/case_template/__init__.py +2 -14
- endoreg_db/models/administration/case/case_template/case_template.py +2 -124
- endoreg_db/models/administration/case/case_template/case_template_rule.py +2 -268
- endoreg_db/models/administration/case/case_template/case_template_rule_value.py +2 -85
- endoreg_db/models/administration/case/case_template/case_template_type.py +2 -25
- endoreg_db/models/administration/center/center.py +33 -19
- endoreg_db/models/administration/center/center_product.py +12 -9
- endoreg_db/models/administration/center/center_resource.py +25 -19
- endoreg_db/models/administration/center/center_shift.py +21 -17
- endoreg_db/models/administration/center/center_waste.py +16 -8
- endoreg_db/models/administration/person/__init__.py +2 -0
- endoreg_db/models/administration/person/employee/employee.py +10 -5
- endoreg_db/models/administration/person/employee/employee_qualification.py +9 -4
- endoreg_db/models/administration/person/employee/employee_type.py +12 -6
- endoreg_db/models/administration/person/examiner/examiner.py +13 -11
- endoreg_db/models/administration/person/patient/__init__.py +2 -0
- endoreg_db/models/administration/person/patient/patient.py +129 -100
- endoreg_db/models/administration/person/patient/patient_external_id.py +37 -0
- endoreg_db/models/administration/person/person.py +4 -0
- endoreg_db/models/administration/person/profession/__init__.py +8 -4
- endoreg_db/models/administration/person/user/portal_user_information.py +11 -7
- endoreg_db/models/administration/product/product.py +20 -15
- endoreg_db/models/administration/product/product_material.py +17 -18
- endoreg_db/models/administration/product/product_weight.py +12 -8
- endoreg_db/models/administration/product/reference_product.py +23 -55
- endoreg_db/models/administration/qualification/qualification.py +7 -3
- endoreg_db/models/administration/qualification/qualification_type.py +7 -3
- endoreg_db/models/administration/shift/scheduled_days.py +8 -5
- endoreg_db/models/administration/shift/shift.py +16 -12
- endoreg_db/models/administration/shift/shift_type.py +23 -31
- endoreg_db/models/label/__init__.py +8 -9
- endoreg_db/models/label/annotation/image_classification.py +10 -9
- endoreg_db/models/label/annotation/video_segmentation_annotation.py +23 -28
- endoreg_db/models/label/label.py +15 -15
- endoreg_db/models/label/label_set.py +19 -6
- endoreg_db/models/label/label_type.py +1 -1
- endoreg_db/models/label/label_video_segment/_create_from_video.py +5 -8
- endoreg_db/models/label/label_video_segment/label_video_segment.py +98 -102
- endoreg_db/models/label/video_segmentation_label.py +4 -0
- endoreg_db/models/label/video_segmentation_labelset.py +4 -3
- endoreg_db/models/media/frame/frame.py +22 -22
- endoreg_db/models/media/pdf/raw_pdf.py +194 -194
- endoreg_db/models/media/pdf/report_file.py +25 -29
- endoreg_db/models/media/pdf/report_reader/report_reader_config.py +55 -47
- endoreg_db/models/media/pdf/report_reader/report_reader_flag.py +23 -7
- endoreg_db/models/media/processing_history/__init__.py +5 -0
- endoreg_db/models/media/processing_history/processing_history.py +96 -0
- endoreg_db/models/media/video/__init__.py +1 -0
- endoreg_db/models/media/video/create_from_file.py +139 -77
- endoreg_db/models/media/video/pipe_2.py +8 -9
- endoreg_db/models/media/video/video_file.py +174 -112
- endoreg_db/models/media/video/video_file_ai.py +288 -74
- endoreg_db/models/media/video/video_file_anonymize.py +38 -38
- endoreg_db/models/media/video/video_file_frames/__init__.py +3 -1
- endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py +6 -8
- endoreg_db/models/media/video/video_file_frames/_create_frame_object.py +7 -9
- endoreg_db/models/media/video/video_file_frames/_delete_frames.py +9 -8
- endoreg_db/models/media/video/video_file_frames/_extract_frames.py +38 -45
- endoreg_db/models/media/video/video_file_frames/_get_frame.py +6 -8
- endoreg_db/models/media/video/video_file_frames/_get_frame_number.py +4 -18
- endoreg_db/models/media/video/video_file_frames/_get_frame_path.py +4 -3
- endoreg_db/models/media/video/video_file_frames/_get_frame_paths.py +7 -6
- endoreg_db/models/media/video/video_file_frames/_get_frame_range.py +6 -8
- endoreg_db/models/media/video/video_file_frames/_get_frames.py +6 -8
- endoreg_db/models/media/video/video_file_frames/_initialize_frames.py +15 -25
- endoreg_db/models/media/video/video_file_frames/_manage_frame_range.py +26 -23
- endoreg_db/models/media/video/video_file_frames/_mark_frames_extracted_status.py +23 -14
- endoreg_db/models/media/video/video_file_io.py +113 -61
- endoreg_db/models/media/video/video_file_meta/get_crop_template.py +3 -3
- endoreg_db/models/media/video/video_file_meta/get_endo_roi.py +5 -3
- endoreg_db/models/media/video/video_file_meta/get_fps.py +37 -34
- endoreg_db/models/media/video/video_file_meta/initialize_video_specs.py +19 -25
- endoreg_db/models/media/video/video_file_meta/text_meta.py +41 -38
- endoreg_db/models/media/video/video_file_meta/video_meta.py +14 -7
- endoreg_db/models/media/video/video_file_segments.py +24 -17
- endoreg_db/models/media/video/video_metadata.py +19 -35
- endoreg_db/models/media/video/video_processing.py +96 -95
- endoreg_db/models/medical/contraindication/README.md +1 -0
- endoreg_db/models/medical/contraindication/__init__.py +13 -3
- endoreg_db/models/medical/disease.py +22 -16
- endoreg_db/models/medical/event.py +31 -18
- endoreg_db/models/medical/examination/__init__.py +13 -6
- endoreg_db/models/medical/examination/examination.py +39 -20
- endoreg_db/models/medical/examination/examination_indication.py +30 -95
- endoreg_db/models/medical/examination/examination_time.py +23 -8
- endoreg_db/models/medical/examination/examination_time_type.py +9 -6
- endoreg_db/models/medical/examination/examination_type.py +3 -4
- endoreg_db/models/medical/finding/finding.py +32 -40
- endoreg_db/models/medical/finding/finding_classification.py +42 -72
- endoreg_db/models/medical/finding/finding_intervention.py +25 -22
- endoreg_db/models/medical/finding/finding_type.py +13 -12
- endoreg_db/models/medical/hardware/endoscope.py +26 -26
- endoreg_db/models/medical/hardware/endoscopy_processor.py +2 -2
- endoreg_db/models/medical/laboratory/lab_value.py +62 -91
- endoreg_db/models/medical/medication/medication.py +22 -10
- endoreg_db/models/medical/medication/medication_indication.py +29 -3
- endoreg_db/models/medical/medication/medication_indication_type.py +25 -14
- endoreg_db/models/medical/medication/medication_intake_time.py +31 -19
- endoreg_db/models/medical/medication/medication_schedule.py +27 -16
- endoreg_db/models/medical/organ/__init__.py +15 -12
- endoreg_db/models/medical/patient/medication_examples.py +6 -6
- endoreg_db/models/medical/patient/patient_disease.py +20 -23
- endoreg_db/models/medical/patient/patient_event.py +19 -22
- endoreg_db/models/medical/patient/patient_examination.py +48 -54
- endoreg_db/models/medical/patient/patient_examination_indication.py +16 -14
- endoreg_db/models/medical/patient/patient_finding.py +122 -139
- endoreg_db/models/medical/patient/patient_finding_classification.py +44 -49
- endoreg_db/models/medical/patient/patient_finding_intervention.py +8 -19
- endoreg_db/models/medical/patient/patient_lab_sample.py +28 -23
- endoreg_db/models/medical/patient/patient_lab_value.py +82 -89
- endoreg_db/models/medical/patient/patient_medication.py +27 -38
- endoreg_db/models/medical/patient/patient_medication_schedule.py +28 -36
- endoreg_db/models/medical/risk/risk.py +7 -6
- endoreg_db/models/medical/risk/risk_type.py +8 -5
- endoreg_db/models/metadata/model_meta.py +60 -29
- endoreg_db/models/metadata/model_meta_logic.py +125 -18
- endoreg_db/models/metadata/pdf_meta.py +31 -24
- endoreg_db/models/metadata/sensitive_meta.py +105 -85
- endoreg_db/models/metadata/sensitive_meta_logic.py +198 -103
- endoreg_db/models/metadata/video_meta.py +51 -31
- endoreg_db/models/metadata/video_prediction_logic.py +16 -23
- endoreg_db/models/metadata/video_prediction_meta.py +29 -33
- endoreg_db/models/other/distribution/date_value_distribution.py +89 -29
- endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +21 -5
- endoreg_db/models/other/distribution/numeric_value_distribution.py +114 -53
- endoreg_db/models/other/distribution/single_categorical_value_distribution.py +4 -3
- endoreg_db/models/other/emission/emission_factor.py +18 -8
- endoreg_db/models/other/gender.py +10 -5
- endoreg_db/models/other/information_source.py +50 -29
- endoreg_db/models/other/material.py +9 -5
- endoreg_db/models/other/resource.py +6 -4
- endoreg_db/models/other/tag.py +10 -5
- endoreg_db/models/other/transport_route.py +13 -8
- endoreg_db/models/other/unit.py +10 -6
- endoreg_db/models/other/waste.py +6 -5
- endoreg_db/models/report/report.py +6 -0
- endoreg_db/models/requirement/requirement.py +329 -361
- endoreg_db/models/requirement/requirement_error.py +85 -0
- endoreg_db/models/requirement/requirement_evaluation/evaluate_with_dependencies.py +268 -0
- endoreg_db/models/requirement/requirement_evaluation/operator_evaluation_models.py +3 -6
- endoreg_db/models/requirement/requirement_evaluation/requirement_type_parser.py +90 -64
- endoreg_db/models/requirement/requirement_operator.py +103 -112
- endoreg_db/models/requirement/requirement_set.py +74 -57
- endoreg_db/models/state/__init__.py +4 -4
- endoreg_db/models/state/abstract.py +2 -2
- endoreg_db/models/state/anonymization.py +12 -0
- endoreg_db/models/state/audit_ledger.py +49 -51
- endoreg_db/models/state/label_video_segment.py +9 -0
- endoreg_db/models/state/raw_pdf.py +101 -68
- endoreg_db/models/state/sensitive_meta.py +6 -2
- endoreg_db/models/state/video.py +110 -90
- endoreg_db/models/upload_job.py +35 -34
- endoreg_db/models/utils.py +28 -25
- endoreg_db/queries/__init__.py +3 -1
- endoreg_db/root_urls.py +21 -2
- endoreg_db/schemas/examination_evaluation.py +1 -1
- endoreg_db/serializers/__init__.py +2 -10
- endoreg_db/serializers/anonymization.py +18 -10
- endoreg_db/serializers/label_video_segment/label_video_segment.py +2 -29
- endoreg_db/serializers/meta/__init__.py +1 -6
- endoreg_db/serializers/meta/sensitive_meta_detail.py +63 -118
- endoreg_db/serializers/misc/file_overview.py +11 -99
- endoreg_db/serializers/misc/sensitive_patient_data.py +50 -26
- endoreg_db/serializers/patient_examination/patient_examination.py +3 -3
- endoreg_db/serializers/pdf/anony_text_validation.py +39 -23
- endoreg_db/serializers/requirements/requirement_sets.py +92 -22
- endoreg_db/serializers/video/segmentation.py +2 -1
- endoreg_db/serializers/video/video_file_list.py +65 -34
- endoreg_db/serializers/video/video_processing_history.py +20 -5
- endoreg_db/services/__old/pdf_import.py +1487 -0
- endoreg_db/services/__old/video_import.py +1306 -0
- endoreg_db/services/anonymization.py +128 -89
- endoreg_db/services/lookup_service.py +65 -52
- endoreg_db/services/lookup_store.py +2 -2
- endoreg_db/services/pdf_import.py +0 -1382
- endoreg_db/services/report_import.py +10 -0
- endoreg_db/services/video_import.py +6 -1255
- endoreg_db/tasks/upload_tasks.py +79 -70
- endoreg_db/tasks/video_ingest.py +8 -4
- endoreg_db/urls/__init__.py +5 -32
- endoreg_db/urls/ai.py +32 -0
- endoreg_db/urls/media.py +121 -83
- endoreg_db/urls/root_urls.py +29 -0
- endoreg_db/utils/__init__.py +15 -5
- endoreg_db/utils/ai/multilabel_classification_net.py +116 -20
- endoreg_db/utils/case_generator/__init__.py +3 -0
- endoreg_db/utils/dataloader.py +142 -40
- endoreg_db/utils/defaults/set_default_center.py +32 -0
- endoreg_db/utils/names.py +22 -16
- endoreg_db/utils/paths.py +110 -46
- endoreg_db/utils/permissions.py +2 -1
- endoreg_db/utils/pipelines/Readme.md +1 -1
- endoreg_db/utils/pipelines/process_video_dir.py +1 -1
- endoreg_db/utils/requirement_operator_logic/_old/model_evaluators.py +655 -0
- endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +97 -0
- endoreg_db/utils/setup_config.py +8 -5
- endoreg_db/utils/storage.py +115 -0
- endoreg_db/utils/validate_endo_roi.py +8 -2
- endoreg_db/utils/video/ffmpeg_wrapper.py +184 -188
- endoreg_db/views/__init__.py +85 -183
- endoreg_db/views/ai/__init__.py +8 -0
- endoreg_db/views/ai/label.py +155 -0
- endoreg_db/views/anonymization/media_management.py +202 -166
- endoreg_db/views/anonymization/overview.py +99 -67
- endoreg_db/views/anonymization/validate.py +182 -44
- endoreg_db/views/media/__init__.py +7 -20
- endoreg_db/views/media/pdf_media.py +197 -174
- endoreg_db/views/media/sensitive_metadata.py +193 -138
- endoreg_db/views/media/video_media.py +89 -82
- endoreg_db/views/meta/__init__.py +0 -8
- endoreg_db/views/misc/__init__.py +1 -7
- endoreg_db/views/misc/upload_views.py +94 -93
- endoreg_db/views/patient/patient.py +5 -4
- endoreg_db/views/report/__init__.py +5 -7
- endoreg_db/views/{pdf → report}/reimport.py +22 -22
- endoreg_db/views/{pdf/pdf_stream.py → report/report_stream.py} +46 -39
- endoreg_db/views/requirement/evaluate.py +188 -187
- endoreg_db/views/requirement/lookup.py +17 -3
- endoreg_db/views/requirement/lookup_store.py +22 -90
- endoreg_db/views/requirement/requirement_utils.py +89 -0
- endoreg_db/views/video/__init__.py +23 -24
- endoreg_db/views/video/correction.py +201 -172
- endoreg_db/views/video/reimport.py +1 -1
- endoreg_db/views/{media/video_segments.py → video/segments_crud.py} +77 -40
- endoreg_db/views/video/{video_meta.py → video_meta_stats.py} +2 -2
- endoreg_db/views/video/video_stream.py +7 -8
- {endoreg_db-0.8.6.1.dist-info → endoreg_db-0.8.8.9.dist-info}/METADATA +7 -3
- {endoreg_db-0.8.6.1.dist-info → endoreg_db-0.8.8.9.dist-info}/RECORD +391 -413
- {endoreg_db-0.8.6.1.dist-info → endoreg_db-0.8.8.9.dist-info}/WHEEL +1 -1
- endoreg_db/data/finding/anatomy_colon.yaml +0 -128
- endoreg_db/data/finding/colonoscopy.yaml +0 -40
- endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +0 -56
- endoreg_db/data/finding/complication.yaml +0 -16
- endoreg_db/data/finding/data.yaml +0 -105
- endoreg_db/data/finding/examination_setting.yaml +0 -16
- endoreg_db/data/finding/medication_related.yaml +0 -18
- endoreg_db/data/finding/outcome.yaml +0 -12
- endoreg_db/data/finding_classification/colonoscopy_bowel_preparation.yaml +0 -95
- endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +0 -22
- endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +0 -25
- endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
- endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +0 -68
- endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_location.yaml +0 -80
- endoreg_db/data/finding_classification/colonoscopy_lst.yaml +0 -21
- endoreg_db/data/finding_classification/colonoscopy_nice.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_paris.yaml +0 -26
- endoreg_db/data/finding_classification/colonoscopy_sano.yaml +0 -22
- endoreg_db/data/finding_classification/colonoscopy_summary.yaml +0 -53
- endoreg_db/data/finding_classification/complication_generic.yaml +0 -25
- endoreg_db/data/finding_classification/examination_setting_generic.yaml +0 -40
- endoreg_db/data/finding_classification/histology_colo.yaml +0 -51
- endoreg_db/data/finding_classification/intervention_required.yaml +0 -26
- endoreg_db/data/finding_classification/medication_related.yaml +0 -23
- endoreg_db/data/finding_classification/visualized.yaml +0 -33
- endoreg_db/data/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
- endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
- endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
- endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +0 -15
- endoreg_db/data/finding_classification_choice/colon_lesion_nice.yaml +0 -17
- endoreg_db/data/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
- endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +0 -14
- endoreg_db/data/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
- endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +0 -82
- endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
- endoreg_db/data/finding_classification_choice/outcome.yaml +0 -19
- endoreg_db/data/finding_intervention/endoscopy.yaml +0 -43
- endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
- endoreg_db/data/finding_intervention/endoscopy_egd.yaml +0 -128
- endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +0 -32
- endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +0 -9
- endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +0 -36
- endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +0 -79
- endoreg_db/data/requirement/age.yaml +0 -26
- endoreg_db/data/requirement/gender.yaml +0 -25
- endoreg_db/management/commands/init_default_ai_model.py +0 -112
- endoreg_db/management/commands/reset_celery_schedule.py +0 -9
- endoreg_db/management/commands/validate_video.py +0 -204
- endoreg_db/migrations/0002_add_video_correction_models.py +0 -52
- endoreg_db/migrations/0003_add_center_display_name.py +0 -30
- endoreg_db/models/administration/permissions/__init__.py +0 -44
- endoreg_db/models/rule/__init__.py +0 -13
- endoreg_db/models/rule/rule.py +0 -27
- endoreg_db/models/rule/rule_applicator.py +0 -224
- endoreg_db/models/rule/rule_attribute_dtype.py +0 -17
- endoreg_db/models/rule/rule_type.py +0 -20
- endoreg_db/models/rule/ruleset.py +0 -17
- endoreg_db/renames.yml +0 -8
- endoreg_db/serializers/_old/raw_pdf_meta_validation.py +0 -223
- endoreg_db/serializers/_old/raw_video_meta_validation.py +0 -179
- endoreg_db/serializers/_old/video.py +0 -71
- endoreg_db/serializers/meta/pdf_file_meta_extraction.py +0 -115
- endoreg_db/serializers/meta/report_meta.py +0 -53
- endoreg_db/serializers/report/__init__.py +0 -9
- endoreg_db/serializers/report/mixins.py +0 -45
- endoreg_db/serializers/report/report.py +0 -105
- endoreg_db/serializers/report/report_list.py +0 -22
- endoreg_db/serializers/report/secure_file_url.py +0 -26
- endoreg_db/serializers/video/video_metadata.py +0 -105
- endoreg_db/services/requirements_object.py +0 -147
- endoreg_db/services/storage_aware_video_processor.py +0 -344
- endoreg_db/urls/files.py +0 -6
- endoreg_db/urls/label_video_segment_validate.py +0 -33
- endoreg_db/urls/label_video_segments.py +0 -46
- endoreg_db/urls/report.py +0 -48
- endoreg_db/urls/video.py +0 -61
- endoreg_db/utils/case_generator/case_generator.py +0 -159
- endoreg_db/utils/case_generator/utils.py +0 -30
- endoreg_db/utils/requirement_operator_logic/model_evaluators.py +0 -368
- endoreg_db/views/label/__init__.py +0 -5
- endoreg_db/views/label/label.py +0 -15
- endoreg_db/views/label_video_segment/__init__.py +0 -16
- endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +0 -44
- endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +0 -50
- endoreg_db/views/label_video_segment/label_video_segment.py +0 -77
- endoreg_db/views/label_video_segment/label_video_segment_by_label.py +0 -174
- endoreg_db/views/label_video_segment/label_video_segment_detail.py +0 -73
- endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +0 -46
- endoreg_db/views/label_video_segment/validate.py +0 -226
- endoreg_db/views/media/segments.py +0 -71
- endoreg_db/views/meta/available_files_list.py +0 -146
- endoreg_db/views/meta/report_meta.py +0 -53
- endoreg_db/views/meta/sensitive_meta_detail.py +0 -148
- endoreg_db/views/misc/secure_file_serving_view.py +0 -80
- endoreg_db/views/misc/secure_file_url_view.py +0 -84
- endoreg_db/views/misc/secure_url_validate.py +0 -79
- endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +0 -164
- endoreg_db/views/patient_finding_location/__init__.py +0 -5
- endoreg_db/views/patient_finding_location/pfl_create.py +0 -70
- endoreg_db/views/patient_finding_morphology/__init__.py +0 -5
- endoreg_db/views/patient_finding_morphology/pfm_create.py +0 -70
- endoreg_db/views/pdf/__init__.py +0 -8
- endoreg_db/views/report/report_list.py +0 -112
- endoreg_db/views/report/report_with_secure_url.py +0 -28
- endoreg_db/views/report/start_examination.py +0 -7
- endoreg_db/views/video/segmentation.py +0 -274
- endoreg_db/views/video/task_status.py +0 -49
- endoreg_db/views/video/timeline.py +0 -46
- endoreg_db/views/video/video_analyze.py +0 -52
- endoreg_db/views.py +0 -0
- /endoreg_db/data/requirement/{colonoscopy_baseline_austria.yaml → old/colonoscopy_baseline_austria.yaml} +0 -0
- /endoreg_db/data/requirement/{disease_cardiovascular.yaml → old/disease_cardiovascular.yaml} +0 -0
- /endoreg_db/data/requirement/{disease_classification_choice_cardiovascular.yaml → old/disease_classification_choice_cardiovascular.yaml} +0 -0
- /endoreg_db/data/requirement/{disease_hepatology.yaml → old/disease_hepatology.yaml} +0 -0
- /endoreg_db/data/requirement/{disease_misc.yaml → old/disease_misc.yaml} +0 -0
- /endoreg_db/data/requirement/{disease_renal.yaml → old/disease_renal.yaml} +0 -0
- /endoreg_db/data/requirement/{endoscopy_bleeding_risk.yaml → old/endoscopy_bleeding_risk.yaml} +0 -0
- /endoreg_db/data/requirement/{event_cardiology.yaml → old/event_cardiology.yaml} +0 -0
- /endoreg_db/data/requirement/{event_requirements.yaml → old/event_requirements.yaml} +0 -0
- /endoreg_db/data/requirement/{finding_colon_polyp.yaml → old/finding_colon_polyp.yaml} +0 -0
- /endoreg_db/{migrations/__init__.py → data/requirement/old/gender.yaml} +0 -0
- /endoreg_db/data/requirement/{lab_value.yaml → old/lab_value.yaml} +0 -0
- /endoreg_db/data/requirement/{medication.yaml → old/medication.yaml} +0 -0
- /endoreg_db/data/requirement_operator/{age.yaml → _old/age.yaml} +0 -0
- /endoreg_db/data/requirement_operator/{lab_operators.yaml → _old/lab_operators.yaml} +0 -0
- /endoreg_db/data/requirement_operator/{model_operators.yaml → _old/model_operators.yaml} +0 -0
- /endoreg_db/{models/media/video/refactor_plan.md → import_files/pseudonymization/__init__.py} +0 -0
- /endoreg_db/{models/media/video/video_file_frames.py → import_files/pseudonymization/pseudonymize.py} +0 -0
- /endoreg_db/models/{metadata/frame_ocr_result.py → report/__init__.py} +0 -0
- /endoreg_db/{urls/sensitive_meta.py → models/report/images.py} +0 -0
- /endoreg_db/utils/requirement_operator_logic/{lab_value_operators.py → _old/lab_value_operators.py} +0 -0
- {endoreg_db-0.8.6.1.dist-info → endoreg_db-0.8.8.9.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
from django.conf import settings
|
|
2
1
|
import os
|
|
3
|
-
from django.core.management.base import BaseCommand
|
|
4
2
|
|
|
5
3
|
import yaml
|
|
6
|
-
from
|
|
4
|
+
from django.conf import settings
|
|
5
|
+
from django.core.management.base import BaseCommand
|
|
7
6
|
|
|
7
|
+
from ...data import REPORT_TYPE_DATA_DIR
|
|
8
8
|
|
|
9
9
|
#### CUSTOMIZE
|
|
10
10
|
from ...models import PdfType, ReportReaderFlag
|
|
11
|
-
from ...
|
|
11
|
+
from ...utils import load_model_data_from_yaml
|
|
12
12
|
|
|
13
|
-
SOURCE_DIR =
|
|
13
|
+
SOURCE_DIR = REPORT_TYPE_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
|
|
14
14
|
|
|
15
15
|
MODEL_0 = PdfType
|
|
16
16
|
|
|
17
|
-
IMPORT_MODELS = [
|
|
17
|
+
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
18
18
|
MODEL_0.__name__,
|
|
19
19
|
]
|
|
20
20
|
|
|
21
21
|
IMPORT_METADATA = {
|
|
22
22
|
MODEL_0.__name__: {
|
|
23
|
-
"dir": SOURCE_DIR,
|
|
24
|
-
"model": MODEL_0,
|
|
23
|
+
"dir": SOURCE_DIR, # e.g. "interventions"
|
|
24
|
+
"model": MODEL_0, # e.g. Intervention
|
|
25
|
+
"dir": SOURCE_DIR, # e.g. "interventions"
|
|
26
|
+
"model": MODEL_0,
|
|
25
27
|
"foreign_keys": [
|
|
26
28
|
"patient_info_line",
|
|
27
29
|
"endoscope_info_line",
|
|
@@ -39,23 +41,22 @@ IMPORT_METADATA = {
|
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
43
|
|
|
44
|
+
|
|
42
45
|
class Command(BaseCommand):
|
|
43
46
|
help = f"""Load all .yaml files in the {SOURCE_DIR} directory"""
|
|
44
47
|
|
|
45
48
|
def add_arguments(self, parser):
|
|
46
49
|
parser.add_argument(
|
|
47
|
-
|
|
48
|
-
action=
|
|
49
|
-
help=
|
|
50
|
+
"--verbose",
|
|
51
|
+
action="store_true",
|
|
52
|
+
help="Display verbose output",
|
|
50
53
|
)
|
|
51
54
|
|
|
52
55
|
def handle(self, *args, **options):
|
|
53
|
-
verbose = options[
|
|
56
|
+
verbose = options["verbose"]
|
|
57
|
+
verbose = options["verbose"]
|
|
54
58
|
for model_name in IMPORT_MODELS:
|
|
55
59
|
_metadata = IMPORT_METADATA[model_name]
|
|
56
|
-
load_model_data_from_yaml(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
_metadata,
|
|
60
|
-
verbose
|
|
61
|
-
)
|
|
60
|
+
load_model_data_from_yaml(self, model_name, _metadata, verbose)
|
|
61
|
+
|
|
62
|
+
load_model_data_from_yaml(self, model_name, _metadata, verbose)
|
|
@@ -1,44 +1,41 @@
|
|
|
1
1
|
from django.conf import settings
|
|
2
2
|
from django.core.management.base import BaseCommand
|
|
3
|
+
|
|
4
|
+
from ...data import PROFESSION_DATA_DIR
|
|
3
5
|
from ...models import Profession
|
|
4
6
|
from ...utils import load_model_data_from_yaml
|
|
5
|
-
from ...data import PROFESSION_DATA_DIR
|
|
6
7
|
|
|
7
|
-
SOURCE_DIR = PROFESSION_DATA_DIR
|
|
8
|
+
SOURCE_DIR = PROFESSION_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
|
|
8
9
|
|
|
9
10
|
MODEL_0 = Profession
|
|
10
11
|
|
|
11
|
-
IMPORT_MODELS = [
|
|
12
|
+
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
12
13
|
MODEL_0.__name__,
|
|
13
14
|
]
|
|
14
15
|
|
|
15
16
|
IMPORT_METADATA = {
|
|
16
17
|
MODEL_0.__name__: {
|
|
17
|
-
"dir": SOURCE_DIR,
|
|
18
|
-
"model": MODEL_0,
|
|
19
|
-
"foreign_keys": [],
|
|
20
|
-
"foreign_key_models": []
|
|
18
|
+
"dir": SOURCE_DIR, # e.g. "interventions"
|
|
19
|
+
"model": MODEL_0,
|
|
20
|
+
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
21
|
+
"foreign_key_models": [], # e.g. [InterventionType]
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
|
|
24
26
|
class Command(BaseCommand):
|
|
25
27
|
help = """Load all .yaml files in the data/intervention directory
|
|
26
28
|
into the Intervention and InterventionType model"""
|
|
27
29
|
|
|
28
30
|
def add_arguments(self, parser):
|
|
29
31
|
parser.add_argument(
|
|
30
|
-
|
|
31
|
-
action=
|
|
32
|
-
help=
|
|
32
|
+
"--verbose",
|
|
33
|
+
action="store_true",
|
|
34
|
+
help="Display verbose output",
|
|
33
35
|
)
|
|
34
36
|
|
|
35
37
|
def handle(self, *args, **options):
|
|
36
|
-
verbose = options[
|
|
38
|
+
verbose = options["verbose"]
|
|
37
39
|
for model_name in IMPORT_MODELS:
|
|
38
40
|
_metadata = IMPORT_METADATA[model_name]
|
|
39
|
-
load_model_data_from_yaml(
|
|
40
|
-
self,
|
|
41
|
-
model_name,
|
|
42
|
-
_metadata,
|
|
43
|
-
verbose
|
|
44
|
-
)
|
|
41
|
+
load_model_data_from_yaml(self, model_name, _metadata, verbose)
|
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
from django.core.management.base import BaseCommand
|
|
2
|
+
|
|
3
|
+
from ...data import QUALIFICATION_DATA_DIR
|
|
2
4
|
from ...models import Qualification, QualificationType
|
|
3
5
|
from ...utils import load_model_data_from_yaml
|
|
4
|
-
from ...data import QUALIFICATION_DATA_DIR
|
|
5
6
|
|
|
6
|
-
SOURCE_DIR = QUALIFICATION_DATA_DIR
|
|
7
|
+
SOURCE_DIR = QUALIFICATION_DATA_DIR # qualification data directory
|
|
7
8
|
|
|
8
9
|
model_0 = QualificationType
|
|
9
10
|
model_1 = Qualification
|
|
10
11
|
|
|
11
|
-
IMPORT_MODELS = [
|
|
12
|
+
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
12
13
|
model_0.__name__,
|
|
13
14
|
model_1.__name__,
|
|
14
15
|
]
|
|
15
16
|
|
|
16
17
|
IMPORT_METADATA = {
|
|
17
18
|
model_0.__name__: {
|
|
18
|
-
"dir": SOURCE_DIR,
|
|
19
|
-
"model": model_0,
|
|
20
|
-
"foreign_keys": [],
|
|
21
|
-
"foreign_key_models": []
|
|
19
|
+
"dir": SOURCE_DIR, # e.g. "interventions"
|
|
20
|
+
"model": model_0,
|
|
21
|
+
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
22
|
+
"foreign_key_models": [], # e.g. [InterventionType]
|
|
22
23
|
},
|
|
23
24
|
model_1.__name__: {
|
|
24
|
-
"dir": SOURCE_DIR,
|
|
25
|
-
"model": model_1,
|
|
26
|
-
"foreign_keys": ["qualification_types"],
|
|
27
|
-
"foreign_key_models": [model_0]
|
|
28
|
-
}
|
|
25
|
+
"dir": SOURCE_DIR, # e.g. "interventions"
|
|
26
|
+
"model": model_1,
|
|
27
|
+
"foreign_keys": ["qualification_types"], # e.g. ["intervention_types"]
|
|
28
|
+
"foreign_key_models": [model_0], # e.g. [InterventionType]
|
|
29
|
+
},
|
|
29
30
|
}
|
|
30
31
|
|
|
32
|
+
|
|
31
33
|
class Command(BaseCommand):
|
|
32
34
|
help = """Load all .yaml files in the data/qualification directory
|
|
33
35
|
into the Qualification / Qualification Type model"""
|
|
@@ -37,23 +39,18 @@ class Command(BaseCommand):
|
|
|
37
39
|
Adds the --verbose flag to the command-line parser to enable detailed output.
|
|
38
40
|
"""
|
|
39
41
|
parser.add_argument(
|
|
40
|
-
|
|
41
|
-
action=
|
|
42
|
-
help=
|
|
42
|
+
"--verbose",
|
|
43
|
+
action="store_true",
|
|
44
|
+
help="Display verbose output",
|
|
43
45
|
)
|
|
44
46
|
|
|
45
47
|
def handle(self, *args, **options):
|
|
46
48
|
"""
|
|
47
49
|
Loads data from YAML files into the QualificationType and Qualification models.
|
|
48
|
-
|
|
50
|
+
|
|
49
51
|
Iterates over predefined models and imports their data from YAML files using associated metadata. Supports verbose output if enabled via command-line options.
|
|
50
52
|
"""
|
|
51
|
-
verbose = options[
|
|
53
|
+
verbose = options["verbose"]
|
|
52
54
|
for model_name in IMPORT_MODELS:
|
|
53
55
|
_metadata = IMPORT_METADATA[model_name]
|
|
54
|
-
load_model_data_from_yaml(
|
|
55
|
-
self,
|
|
56
|
-
model_name,
|
|
57
|
-
_metadata,
|
|
58
|
-
verbose
|
|
59
|
-
)
|
|
56
|
+
load_model_data_from_yaml(self, model_name, _metadata, verbose)
|
|
@@ -1,46 +1,44 @@
|
|
|
1
|
-
from django.conf import settings
|
|
2
1
|
import os
|
|
2
|
+
|
|
3
|
+
import yaml
|
|
4
|
+
from django.conf import settings
|
|
3
5
|
from django.core.management.base import BaseCommand
|
|
6
|
+
|
|
7
|
+
from ...data import REPORT_READER_FLAG_DATA_DIR
|
|
4
8
|
from ...models import ReportReaderFlag
|
|
5
|
-
import yaml
|
|
6
9
|
from ...utils import load_model_data_from_yaml
|
|
7
|
-
from ...data import REPORT_READER_FLAG_DATA_DIR
|
|
8
10
|
|
|
9
|
-
SOURCE_DIR = REPORT_READER_FLAG_DATA_DIR
|
|
11
|
+
SOURCE_DIR = REPORT_READER_FLAG_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
|
|
10
12
|
|
|
11
13
|
MODEL_0 = ReportReaderFlag
|
|
12
14
|
|
|
13
|
-
IMPORT_MODELS = [
|
|
15
|
+
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
14
16
|
MODEL_0.__name__,
|
|
15
17
|
]
|
|
16
18
|
|
|
17
19
|
IMPORT_METADATA = {
|
|
18
20
|
MODEL_0.__name__: {
|
|
19
|
-
"dir": SOURCE_DIR,
|
|
20
|
-
"model": MODEL_0,
|
|
21
|
-
"foreign_keys": [],
|
|
22
|
-
"foreign_key_models": []
|
|
21
|
+
"dir": SOURCE_DIR, # e.g. "interventions"
|
|
22
|
+
"model": MODEL_0,
|
|
23
|
+
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
24
|
+
"foreign_key_models": [], # e.g. [InterventionType]
|
|
23
25
|
}
|
|
24
26
|
}
|
|
25
27
|
|
|
28
|
+
|
|
26
29
|
class Command(BaseCommand):
|
|
27
30
|
help = """Load all .yaml files in the data/intervention directory
|
|
28
31
|
into the Intervention and InterventionType model"""
|
|
29
32
|
|
|
30
33
|
def add_arguments(self, parser):
|
|
31
34
|
parser.add_argument(
|
|
32
|
-
|
|
33
|
-
action=
|
|
34
|
-
help=
|
|
35
|
+
"--verbose",
|
|
36
|
+
action="store_true",
|
|
37
|
+
help="Display verbose output",
|
|
35
38
|
)
|
|
36
39
|
|
|
37
40
|
def handle(self, *args, **options):
|
|
38
|
-
verbose = options[
|
|
41
|
+
verbose = options["verbose"]
|
|
39
42
|
for model_name in IMPORT_MODELS:
|
|
40
43
|
_metadata = IMPORT_METADATA[model_name]
|
|
41
|
-
load_model_data_from_yaml(
|
|
42
|
-
self,
|
|
43
|
-
model_name,
|
|
44
|
-
_metadata,
|
|
45
|
-
verbose
|
|
46
|
-
)
|
|
44
|
+
load_model_data_from_yaml(self, model_name, _metadata, verbose)
|
|
@@ -1,79 +1,99 @@
|
|
|
1
1
|
from django.core.management.base import BaseCommand
|
|
2
|
+
|
|
2
3
|
from endoreg_db.models import (
|
|
3
|
-
RequirementType,
|
|
4
|
-
RequirementOperator,
|
|
5
|
-
Requirement,
|
|
6
|
-
RequirementSetType,
|
|
7
|
-
RequirementSet,
|
|
8
|
-
Examination,
|
|
9
|
-
ExaminationIndication,
|
|
10
4
|
Disease,
|
|
11
5
|
DiseaseClassificationChoice,
|
|
12
6
|
Event,
|
|
13
|
-
|
|
7
|
+
Examination,
|
|
8
|
+
ExaminationIndication,
|
|
9
|
+
ExaminationRequirementSet, # Added to avoid circular import issues
|
|
14
10
|
Finding,
|
|
15
11
|
FindingClassification,
|
|
16
12
|
FindingClassificationChoice,
|
|
17
13
|
FindingIntervention,
|
|
18
14
|
InformationSource,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
RiskType,
|
|
15
|
+
LabValue,
|
|
16
|
+
Medication, # Added Medication model
|
|
22
17
|
MedicationIndication,
|
|
23
18
|
MedicationIndicationType,
|
|
24
|
-
MedicationSchedule,
|
|
25
|
-
Medication, # Added Medication model
|
|
26
19
|
MedicationIntakeTime,
|
|
20
|
+
MedicationSchedule,
|
|
21
|
+
Requirement,
|
|
22
|
+
RequirementOperator,
|
|
23
|
+
RequirementSet,
|
|
24
|
+
RequirementSetType,
|
|
25
|
+
RequirementType,
|
|
26
|
+
Risk,
|
|
27
|
+
RiskType,
|
|
27
28
|
Tag,
|
|
28
|
-
|
|
29
|
+
Unit,
|
|
29
30
|
)
|
|
30
31
|
from endoreg_db.models.other.gender import Gender
|
|
31
|
-
|
|
32
|
+
|
|
32
33
|
from ...data import (
|
|
33
|
-
|
|
34
|
-
REQUIREMENT_OPERATOR_DATA_DIR,
|
|
34
|
+
EXAMINATION_REQUIREMENT_SET_DATA_DIR,
|
|
35
35
|
REQUIREMENT_DATA_DIR,
|
|
36
|
-
|
|
36
|
+
REQUIREMENT_OPERATOR_DATA_DIR,
|
|
37
37
|
REQUIREMENT_SET_DATA_DIR,
|
|
38
|
-
|
|
38
|
+
REQUIREMENT_SET_TYPE_DATA_DIR,
|
|
39
|
+
REQUIREMENT_TYPE_DATA_DIR,
|
|
39
40
|
)
|
|
40
|
-
|
|
41
|
+
from ...utils import load_model_data_from_yaml
|
|
41
42
|
|
|
42
43
|
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
43
44
|
RequirementType.__name__,
|
|
44
45
|
RequirementOperator.__name__,
|
|
45
46
|
Requirement.__name__,
|
|
46
47
|
RequirementSetType.__name__,
|
|
47
|
-
ExaminationRequirementSet.__name__,
|
|
48
|
+
# ExaminationRequirementSet.__name__,
|
|
48
49
|
RequirementSet.__name__,
|
|
49
50
|
]
|
|
50
51
|
|
|
52
|
+
|
|
53
|
+
def _validate_requirement_configuration(fields: dict, *, entry: dict, model):
|
|
54
|
+
"""Ensures requirement fixtures declare both requirement_types and operators."""
|
|
55
|
+
name = fields.get("name") or entry.get("pk") or "<unnamed>"
|
|
56
|
+
|
|
57
|
+
def _values_missing(key: str) -> bool:
|
|
58
|
+
value = fields.get(key)
|
|
59
|
+
if not isinstance(value, list):
|
|
60
|
+
return True
|
|
61
|
+
if not value:
|
|
62
|
+
return True
|
|
63
|
+
return any(not item for item in value)
|
|
64
|
+
|
|
65
|
+
missing = [key for key in ("requirement_types", "operators") if _values_missing(key)]
|
|
66
|
+
if missing:
|
|
67
|
+
missing_display = ", ".join(missing)
|
|
68
|
+
raise ValueError(f"{model.__name__} '{name}' is missing required configuration for: {missing_display}.")
|
|
69
|
+
|
|
70
|
+
|
|
51
71
|
IMPORT_METADATA = {
|
|
52
72
|
RequirementType.__name__: {
|
|
53
73
|
"dir": REQUIREMENT_TYPE_DATA_DIR, # e.g. "interventions"
|
|
54
|
-
"model": RequirementType,
|
|
74
|
+
"model": RequirementType,
|
|
55
75
|
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
56
76
|
"foreign_key_models": [], # e.g. [InterventionType]
|
|
57
77
|
},
|
|
58
78
|
RequirementOperator.__name__: {
|
|
59
79
|
"dir": REQUIREMENT_OPERATOR_DATA_DIR, # e.g. "interventions"
|
|
60
|
-
"model": RequirementOperator,
|
|
80
|
+
"model": RequirementOperator,
|
|
61
81
|
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
62
82
|
"foreign_key_models": [], # e.g. [InterventionType]
|
|
63
83
|
},
|
|
64
84
|
ExaminationRequirementSet.__name__: {
|
|
65
85
|
"dir": EXAMINATION_REQUIREMENT_SET_DATA_DIR, # e.g. "interventions"
|
|
66
|
-
"model": ExaminationRequirementSet,
|
|
67
|
-
"foreign_keys": [
|
|
68
|
-
"foreign_key_models": [
|
|
86
|
+
"model": ExaminationRequirementSet,
|
|
87
|
+
"foreign_keys": [], # Through model uses foreign keys of both models
|
|
88
|
+
"foreign_key_models": [],
|
|
69
89
|
},
|
|
70
90
|
# ExaminationRequirementSet.__name__,
|
|
71
91
|
Requirement.__name__: {
|
|
72
92
|
"dir": REQUIREMENT_DATA_DIR, # e.g. "interventions"
|
|
73
|
-
"model": Requirement,
|
|
93
|
+
"model": Requirement,
|
|
74
94
|
"foreign_keys": [
|
|
75
95
|
"requirement_types",
|
|
76
|
-
"
|
|
96
|
+
"operator",
|
|
77
97
|
"unit",
|
|
78
98
|
"examinations",
|
|
79
99
|
"examination_indications",
|
|
@@ -92,7 +112,7 @@ IMPORT_METADATA = {
|
|
|
92
112
|
"medication_schedules",
|
|
93
113
|
"medications", # Added medications
|
|
94
114
|
"medication_intake_times",
|
|
95
|
-
"genders"
|
|
115
|
+
"genders",
|
|
96
116
|
],
|
|
97
117
|
"foreign_key_models": [
|
|
98
118
|
RequirementType,
|
|
@@ -115,25 +135,27 @@ IMPORT_METADATA = {
|
|
|
115
135
|
MedicationSchedule,
|
|
116
136
|
Medication, # Added Medication model
|
|
117
137
|
MedicationIntakeTime,
|
|
118
|
-
Gender
|
|
138
|
+
Gender,
|
|
119
139
|
],
|
|
140
|
+
# "validators": [_validate_requirement_configuration],
|
|
120
141
|
},
|
|
121
142
|
RequirementSetType.__name__: {
|
|
122
143
|
"dir": REQUIREMENT_SET_TYPE_DATA_DIR, # e.g. "interventions"
|
|
123
|
-
"model": RequirementSetType,
|
|
144
|
+
"model": RequirementSetType,
|
|
124
145
|
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
125
146
|
"foreign_key_models": [], # e.g. [InterventionType]
|
|
126
147
|
},
|
|
127
148
|
RequirementSet.__name__: {
|
|
128
149
|
"dir": REQUIREMENT_SET_DATA_DIR, # e.g. "interventions"
|
|
129
|
-
"model": RequirementSet,
|
|
150
|
+
"model": RequirementSet,
|
|
130
151
|
"foreign_keys": [
|
|
131
152
|
"requirement_set_type",
|
|
132
153
|
"requirements", # This is a many-to-many field
|
|
133
154
|
"links_to_sets",
|
|
134
155
|
"information_sources",
|
|
135
156
|
"tags",
|
|
136
|
-
"reqset_exam_links"
|
|
157
|
+
"reqset_exam_links",
|
|
158
|
+
"depends_on",
|
|
137
159
|
], # e.g. ["intervention_types"]
|
|
138
160
|
"foreign_key_models": [
|
|
139
161
|
RequirementSetType,
|
|
@@ -141,7 +163,8 @@ IMPORT_METADATA = {
|
|
|
141
163
|
RequirementSet,
|
|
142
164
|
InformationSource,
|
|
143
165
|
Tag,
|
|
144
|
-
ExaminationRequirementSet
|
|
166
|
+
ExaminationRequirementSet,
|
|
167
|
+
RequirementSet,
|
|
145
168
|
], # e.g. [InterventionType]
|
|
146
169
|
},
|
|
147
170
|
}
|
|
@@ -155,7 +178,7 @@ class Command(BaseCommand):
|
|
|
155
178
|
def add_arguments(self, parser):
|
|
156
179
|
"""
|
|
157
180
|
Add command-line arguments to enable verbose output.
|
|
158
|
-
|
|
181
|
+
|
|
159
182
|
Adds an optional '--verbose' flag to the command parser. When specified,
|
|
160
183
|
this flag causes the command to display detailed output during execution.
|
|
161
184
|
"""
|
|
@@ -168,10 +191,10 @@ class Command(BaseCommand):
|
|
|
168
191
|
def handle(self, *args, **options):
|
|
169
192
|
"""
|
|
170
193
|
Executes data import for requirement models from YAML files.
|
|
171
|
-
|
|
172
|
-
Retrieves the verbosity setting from the command options and iterates over each model
|
|
173
|
-
listed in IMPORT_MODELS. For each model, it obtains the corresponding metadata from
|
|
174
|
-
IMPORT_METADATA and calls a helper to load the YAML data into the database. Verbose mode
|
|
194
|
+
|
|
195
|
+
Retrieves the verbosity setting from the command options and iterates over each model
|
|
196
|
+
listed in IMPORT_MODELS. For each model, it obtains the corresponding metadata from
|
|
197
|
+
IMPORT_METADATA and calls a helper to load the YAML data into the database. Verbose mode
|
|
175
198
|
enables detailed output during the process.
|
|
176
199
|
"""
|
|
177
200
|
verbose = options["verbose"]
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Management command to load default requirement set tags for role-based filtering.
|
|
3
|
+
|
|
4
|
+
⚠️ DEPRECATED: This command is deprecated. Please use 'load_tag_data' instead.
|
|
5
|
+
|
|
6
|
+
The new method loads tags from YAML configuration files, making it easier to
|
|
7
|
+
add, modify, or remove tags without changing Python code.
|
|
8
|
+
|
|
9
|
+
New Usage:
|
|
10
|
+
uv run python manage.py load_tag_data --verbose
|
|
11
|
+
|
|
12
|
+
Tags are now managed in: endoreg_db/data/tag/requirement_set_tags.yaml
|
|
13
|
+
|
|
14
|
+
This command is kept for backward compatibility but may be removed in future versions.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import logging
|
|
18
|
+
|
|
19
|
+
from django.core.management.base import BaseCommand
|
|
20
|
+
|
|
21
|
+
from endoreg_db.models import Tag
|
|
22
|
+
|
|
23
|
+
logger = logging.getLogger(__name__)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class Command(BaseCommand):
|
|
27
|
+
"""
|
|
28
|
+
⚠️ DEPRECATED: Load default requirement set tags for role-based filtering.
|
|
29
|
+
|
|
30
|
+
Please use 'load_tag_data' instead:
|
|
31
|
+
uv run python manage.py load_tag_data --verbose
|
|
32
|
+
|
|
33
|
+
This command creates or verifies the existence of default tags used
|
|
34
|
+
for filtering requirement sets by user role/expertise level.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
help = "Load default requirement set tags for role-based filtering"
|
|
38
|
+
|
|
39
|
+
def handle(self, *args, **options):
|
|
40
|
+
"""
|
|
41
|
+
Create or verify default tags for requirement set filtering.
|
|
42
|
+
|
|
43
|
+
Tags created:
|
|
44
|
+
- Gastroenterologist: For specialist-level requirements
|
|
45
|
+
- Student: For educational/basic requirements
|
|
46
|
+
- Professor: For academic/research requirements
|
|
47
|
+
- Terminology Expert: For terminology standardization
|
|
48
|
+
- Default Prototype: For baseline/reference requirements
|
|
49
|
+
"""
|
|
50
|
+
default_tags = [
|
|
51
|
+
("Gastroenterologist", "Specialist-level endoscopy requirements"),
|
|
52
|
+
("Student", "Educational and basic learning requirements"),
|
|
53
|
+
("Professor", "Academic and research-focused requirements"),
|
|
54
|
+
("Terminology Expert", "Terminology standardization requirements"),
|
|
55
|
+
("Default Prototype", "Baseline reference requirements"),
|
|
56
|
+
]
|
|
57
|
+
|
|
58
|
+
created_count = 0
|
|
59
|
+
updated_count = 0
|
|
60
|
+
|
|
61
|
+
for tag_name, description in default_tags:
|
|
62
|
+
tag, created = Tag.objects.get_or_create(
|
|
63
|
+
name=tag_name,
|
|
64
|
+
defaults={"description": description}
|
|
65
|
+
if hasattr(Tag, "description")
|
|
66
|
+
else {},
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
if created:
|
|
70
|
+
created_count += 1
|
|
71
|
+
self.stdout.write(self.style.SUCCESS(f"✓ Created tag: {tag_name}"))
|
|
72
|
+
logger.info(f"Created requirement set tag: {tag_name}")
|
|
73
|
+
else:
|
|
74
|
+
updated_count += 1
|
|
75
|
+
self.stdout.write(f" Tag already exists: {tag_name}")
|
|
76
|
+
|
|
77
|
+
# Summary
|
|
78
|
+
total_tags = len(default_tags)
|
|
79
|
+
self.stdout.write(
|
|
80
|
+
self.style.SUCCESS(
|
|
81
|
+
f"\n{'=' * 60}\n"
|
|
82
|
+
f"Tag Loading Complete\n"
|
|
83
|
+
f"{'=' * 60}\n"
|
|
84
|
+
f" New tags created: {created_count}\n"
|
|
85
|
+
f" Existing tags found: {updated_count}\n"
|
|
86
|
+
f" Total tags verified: {total_tags}\n"
|
|
87
|
+
f"{'=' * 60}"
|
|
88
|
+
)
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
logger.info(
|
|
92
|
+
f"Requirement set tag loading complete: "
|
|
93
|
+
f"{created_count} created, {updated_count} existing, "
|
|
94
|
+
f"{total_tags} total"
|
|
95
|
+
)
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from django.core.management.base import BaseCommand
|
|
2
|
+
|
|
2
3
|
from endoreg_db.models import Risk, RiskType
|
|
3
|
-
from ...utils import load_model_data_from_yaml
|
|
4
|
-
from ...data import RISK_DATA_DIR, RISK_TYPE_DATA_DIR
|
|
5
4
|
|
|
5
|
+
from ...data import RISK_DATA_DIR, RISK_TYPE_DATA_DIR
|
|
6
|
+
from ...utils import load_model_data_from_yaml
|
|
6
7
|
|
|
7
8
|
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
8
9
|
RiskType.__name__,
|
|
@@ -12,13 +13,13 @@ IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
|
12
13
|
IMPORT_METADATA = {
|
|
13
14
|
RiskType.__name__: {
|
|
14
15
|
"dir": RISK_TYPE_DATA_DIR, # e.g. "interventions"
|
|
15
|
-
"model": RiskType,
|
|
16
|
+
"model": RiskType,
|
|
16
17
|
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
17
18
|
"foreign_key_models": [], # e.g. [InterventionType]
|
|
18
19
|
},
|
|
19
20
|
Risk.__name__: {
|
|
20
21
|
"dir": RISK_DATA_DIR, # e.g. "interventions"
|
|
21
|
-
"model": Risk,
|
|
22
|
+
"model": Risk,
|
|
22
23
|
"foreign_keys": ["risk_type"], # e.g. ["intervention_types"]
|
|
23
24
|
"foreign_key_models": [RiskType], # e.g. [InterventionType]
|
|
24
25
|
},
|
|
@@ -32,7 +33,7 @@ class Command(BaseCommand):
|
|
|
32
33
|
def add_arguments(self, parser):
|
|
33
34
|
"""
|
|
34
35
|
Adds the '--verbose' flag to the argument parser for detailed output.
|
|
35
|
-
|
|
36
|
+
|
|
36
37
|
This method extends the given parser by adding an option that, when specified,
|
|
37
38
|
enables verbose output during command execution.
|
|
38
39
|
"""
|
|
@@ -45,7 +46,7 @@ class Command(BaseCommand):
|
|
|
45
46
|
def handle(self, *args, **options):
|
|
46
47
|
"""
|
|
47
48
|
Execute the command to load YAML data into configured models.
|
|
48
|
-
|
|
49
|
+
|
|
49
50
|
Retrieves the verbosity setting from the options and iterates over each model in IMPORT_MODELS.
|
|
50
51
|
For each model, it obtains the corresponding metadata from IMPORT_METADATA and calls the utility
|
|
51
52
|
function load_model_data_from_yaml to load data from the associated YAML files.
|