endoreg-db 0.8.8.0__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/data/__init__.py +22 -8
- endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +0 -1
- 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/{colonoscopy_bowel_preparation.yaml → 02_colonoscopy_baseline.yaml} +35 -20
- 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/{_examples/finding_classification_choice/colonoscopy_not_complete_reason.yaml → finding_classification_choice/02_colonoscopy_generic.yaml} +1 -1
- endoreg_db/data/finding_classification_choice/{histology_polyp.yaml → 02_colonoscopy_histology.yaml} +1 -1
- endoreg_db/data/{_examples/finding_classification_choice/colonoscopy_location.yaml → finding_classification_choice/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/{_examples/finding_classification_choice/colon_lesion_paris.yaml → finding_classification_choice/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_operator/new_operators.yaml +36 -0
- endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +0 -2
- endoreg_db/data/requirement_set/90_coloreg.yaml +20 -8
- endoreg_db/exceptions.py +0 -1
- endoreg_db/forms/examination_form.py +1 -1
- endoreg_db/helpers/data_loader.py +124 -52
- 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/import_report.py +130 -65
- endoreg_db/management/commands/import_video_with_classification.py +1 -1
- 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_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 +14 -20
- 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/start_filewatcher.py +46 -37
- endoreg_db/management/commands/validate_video_files.py +1 -5
- endoreg_db/migrations/0001_initial.py +1360 -1812
- endoreg_db/models/administration/person/patient/patient.py +72 -46
- endoreg_db/models/label/__init__.py +2 -2
- endoreg_db/models/label/annotation/video_segmentation_annotation.py +18 -26
- endoreg_db/models/label/label_video_segment/label_video_segment.py +23 -1
- endoreg_db/models/media/pdf/raw_pdf.py +136 -64
- endoreg_db/models/media/pdf/report_reader/report_reader_config.py +34 -10
- 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/create_from_file.py +101 -31
- endoreg_db/models/media/video/video_file.py +125 -105
- endoreg_db/models/media/video/video_file_io.py +31 -26
- endoreg_db/models/medical/contraindication/README.md +1 -0
- endoreg_db/models/medical/examination/examination.py +28 -8
- endoreg_db/models/medical/examination/examination_indication.py +13 -79
- endoreg_db/models/medical/examination/examination_time.py +8 -3
- endoreg_db/models/medical/finding/finding.py +5 -12
- endoreg_db/models/medical/finding/finding_classification.py +18 -37
- endoreg_db/models/medical/finding/finding_intervention.py +7 -9
- endoreg_db/models/medical/hardware/endoscope.py +6 -0
- endoreg_db/models/medical/patient/medication_examples.py +5 -1
- endoreg_db/models/medical/patient/patient_finding.py +1 -1
- endoreg_db/models/metadata/pdf_meta.py +22 -10
- endoreg_db/models/metadata/sensitive_meta.py +3 -0
- endoreg_db/models/metadata/sensitive_meta_logic.py +200 -124
- endoreg_db/models/other/information_source.py +27 -6
- endoreg_db/models/report/__init__.py +0 -0
- endoreg_db/models/report/images.py +0 -0
- endoreg_db/models/report/report.py +6 -0
- endoreg_db/models/requirement/requirement.py +59 -399
- endoreg_db/models/requirement/requirement_operator.py +86 -98
- endoreg_db/models/state/audit_ledger.py +4 -5
- endoreg_db/models/state/raw_pdf.py +69 -30
- endoreg_db/models/state/video.py +64 -49
- endoreg_db/models/upload_job.py +33 -9
- endoreg_db/models/utils.py +27 -23
- endoreg_db/queries/__init__.py +3 -1
- endoreg_db/schemas/examination_evaluation.py +1 -1
- endoreg_db/serializers/__init__.py +2 -8
- endoreg_db/serializers/label_video_segment/label_video_segment.py +2 -29
- endoreg_db/serializers/meta/__init__.py +1 -6
- 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/video/video_file_list.py +65 -34
- endoreg_db/services/__old/pdf_import.py +1487 -0
- endoreg_db/services/__old/video_import.py +1306 -0
- endoreg_db/services/anonymization.py +63 -26
- endoreg_db/services/lookup_service.py +28 -28
- endoreg_db/services/lookup_store.py +2 -2
- endoreg_db/services/pdf_import.py +0 -1480
- endoreg_db/services/report_import.py +10 -0
- endoreg_db/services/video_import.py +6 -1165
- endoreg_db/tasks/upload_tasks.py +79 -70
- endoreg_db/tasks/video_ingest.py +8 -4
- endoreg_db/urls/__init__.py +0 -14
- endoreg_db/urls/ai.py +32 -0
- endoreg_db/urls/media.py +21 -24
- endoreg_db/utils/dataloader.py +87 -57
- endoreg_db/utils/paths.py +110 -46
- endoreg_db/utils/pipelines/Readme.md +1 -1
- endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +97 -0
- endoreg_db/views/__init__.py +85 -173
- endoreg_db/views/ai/__init__.py +8 -0
- endoreg_db/views/ai/label.py +155 -0
- endoreg_db/views/anonymization/media_management.py +8 -7
- endoreg_db/views/anonymization/overview.py +97 -68
- endoreg_db/views/anonymization/validate.py +25 -21
- endoreg_db/views/media/__init__.py +5 -20
- endoreg_db/views/media/pdf_media.py +109 -65
- endoreg_db/views/media/sensitive_metadata.py +163 -148
- 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/report/__init__.py +7 -0
- endoreg_db/views/{pdf → report}/reimport.py +45 -24
- endoreg_db/views/{pdf/pdf_stream.py → report/report_stream.py} +40 -32
- endoreg_db/views/requirement/lookup_store.py +22 -90
- endoreg_db/views/video/__init__.py +23 -22
- 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} +75 -37
- 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.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/METADATA +2 -2
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/RECORD +217 -335
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/WHEEL +1 -1
- endoreg_db/data/_examples/disease.yaml +0 -55
- endoreg_db/data/_examples/disease_classification.yaml +0 -13
- endoreg_db/data/_examples/disease_classification_choice.yaml +0 -62
- endoreg_db/data/_examples/event.yaml +0 -64
- endoreg_db/data/_examples/examination.yaml +0 -72
- endoreg_db/data/_examples/finding/anatomy_colon.yaml +0 -128
- endoreg_db/data/_examples/finding/colonoscopy.yaml +0 -40
- endoreg_db/data/_examples/finding/colonoscopy_bowel_prep.yaml +0 -56
- endoreg_db/data/_examples/finding/complication.yaml +0 -16
- endoreg_db/data/_examples/finding/data.yaml +0 -105
- endoreg_db/data/_examples/finding/examination_setting.yaml +0 -16
- endoreg_db/data/_examples/finding/medication_related.yaml +0 -18
- endoreg_db/data/_examples/finding/outcome.yaml +0 -12
- endoreg_db/data/_examples/finding_classification/colonoscopy_bowel_preparation.yaml +0 -68
- endoreg_db/data/_examples/finding_classification/colonoscopy_jnet.yaml +0 -22
- endoreg_db/data/_examples/finding_classification/colonoscopy_kudo.yaml +0 -25
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_size.yaml +0 -68
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
- endoreg_db/data/_examples/finding_classification/colonoscopy_location.yaml +0 -80
- endoreg_db/data/_examples/finding_classification/colonoscopy_lst.yaml +0 -21
- endoreg_db/data/_examples/finding_classification/colonoscopy_nice.yaml +0 -20
- endoreg_db/data/_examples/finding_classification/colonoscopy_paris.yaml +0 -26
- endoreg_db/data/_examples/finding_classification/colonoscopy_sano.yaml +0 -22
- endoreg_db/data/_examples/finding_classification/colonoscopy_summary.yaml +0 -53
- endoreg_db/data/_examples/finding_classification/complication_generic.yaml +0 -25
- endoreg_db/data/_examples/finding_classification/examination_setting_generic.yaml +0 -40
- endoreg_db/data/_examples/finding_classification/histology_colo.yaml +0 -51
- endoreg_db/data/_examples/finding_classification/intervention_required.yaml +0 -26
- endoreg_db/data/_examples/finding_classification/medication_related.yaml +0 -23
- endoreg_db/data/_examples/finding_classification/visualized.yaml +0 -33
- endoreg_db/data/_examples/finding_classification_choice/bowel_preparation.yaml +0 -78
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_lst.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_nice.yaml +0 -17
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_sano.yaml +0 -14
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
- endoreg_db/data/_examples/finding_classification_choice/colonoscopy_size.yaml +0 -82
- endoreg_db/data/_examples/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/complication_generic_types.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/examination_setting_generic_types.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/histology.yaml +0 -24
- endoreg_db/data/_examples/finding_classification_choice/histology_polyp.yaml +0 -20
- endoreg_db/data/_examples/finding_classification_choice/outcome.yaml +0 -19
- endoreg_db/data/_examples/finding_classification_choice/yes_no_na.yaml +0 -11
- endoreg_db/data/_examples/finding_classification_type/colonoscopy_basic.yaml +0 -48
- endoreg_db/data/_examples/finding_intervention/endoscopy.yaml +0 -43
- endoreg_db/data/_examples/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
- endoreg_db/data/_examples/finding_intervention/endoscopy_egd.yaml +0 -128
- endoreg_db/data/_examples/finding_intervention/endoscopy_ercp.yaml +0 -32
- endoreg_db/data/_examples/finding_intervention/endoscopy_eus_lower.yaml +0 -9
- endoreg_db/data/_examples/finding_intervention/endoscopy_eus_upper.yaml +0 -36
- endoreg_db/data/_examples/finding_intervention_type/endoscopy.yaml +0 -15
- endoreg_db/data/_examples/finding_type/data.yaml +0 -43
- endoreg_db/data/_examples/requirement/age.yaml +0 -26
- endoreg_db/data/_examples/requirement/gender.yaml +0 -25
- endoreg_db/data/_examples/requirement_set/01_endoscopy_generic.yaml +0 -48
- endoreg_db/data/_examples/requirement_set/colonoscopy_austria_screening.yaml +0 -57
- endoreg_db/data/_examples/requirement_set/endoscopy_bleeding_risk.yaml +0 -52
- endoreg_db/data/_examples/yaml_examples.xlsx +0 -0
- 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_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 -38
- endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_location.yaml +0 -49
- 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 -43
- 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_paris.yaml +0 -57
- 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_location.yaml +0 -229
- endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +0 -19
- 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/colonoscopy_baseline_austria.yaml +0 -45
- endoreg_db/data/requirement/disease_cardiovascular.yaml +0 -79
- endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +0 -41
- endoreg_db/data/requirement/disease_hepatology.yaml +0 -12
- endoreg_db/data/requirement/disease_misc.yaml +0 -12
- endoreg_db/data/requirement/disease_renal.yaml +0 -96
- endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +0 -59
- endoreg_db/data/requirement/event_cardiology.yaml +0 -251
- endoreg_db/data/requirement/event_requirements.yaml +0 -145
- endoreg_db/data/requirement/finding_colon_polyp.yaml +0 -50
- endoreg_db/data/requirement/gender.yaml +0 -25
- endoreg_db/data/requirement/lab_value.yaml +0 -441
- endoreg_db/data/requirement/medication.yaml +0 -93
- endoreg_db/data/requirement_operator/age.yaml +0 -13
- endoreg_db/data/requirement_operator/lab_operators.yaml +0 -129
- endoreg_db/data/requirement_operator/model_operators.yaml +0 -96
- 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_requirementset_depends_on.py +0 -18
- endoreg_db/migrations/_old/0001_initial.py +0 -1857
- endoreg_db/migrations/_old/0002_add_video_correction_models.py +0 -52
- endoreg_db/migrations/_old/0003_add_center_display_name.py +0 -30
- endoreg_db/migrations/_old/0004_employee_city_employee_post_code_employee_street_and_more.py +0 -68
- endoreg_db/migrations/_old/0004_remove_casetemplate_rules_and_more.py +0 -77
- endoreg_db/migrations/_old/0005_merge_20251111_1003.py +0 -14
- endoreg_db/migrations/_old/0006_sensitivemeta_anonymized_text_and_more.py +0 -68
- endoreg_db/migrations/_old/0007_remove_rule_attribute_dtype_remove_rule_rule_type_and_more.py +0 -89
- endoreg_db/migrations/_old/0008_remove_event_event_classification_and_more.py +0 -27
- endoreg_db/migrations/_old/0009_alter_modelmeta_options_and_more.py +0 -21
- 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/services/requirements_object.py +0 -147
- endoreg_db/services/storage_aware_video_processor.py +0 -370
- 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/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 -85
- 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/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/data/requirement/{colon_polyp_intervention.yaml → old/colon_polyp_intervention.yaml} +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/colonoscopy_baseline_austria.yaml +0 -0
- /endoreg_db/data/requirement/{coloreg_colon_polyp.yaml → old/coloreg_colon_polyp.yaml} +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_cardiovascular.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_classification_choice_cardiovascular.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_hepatology.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_misc.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_renal.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/endoscopy_bleeding_risk.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/event_cardiology.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/event_requirements.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/finding_colon_polyp.yaml +0 -0
- /endoreg_db/{migrations/__init__.py → data/requirement/old/gender.yaml} +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/lab_value.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/medication.yaml +0 -0
- /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/age.yaml +0 -0
- /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/lab_operators.yaml +0 -0
- /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/model_operators.yaml +0 -0
- /endoreg_db/{urls/sensitive_meta.py → import_files/pseudonymization/__init__.py} +0 -0
- /endoreg_db/{views/pdf/pdf_stream_views.py → import_files/pseudonymization/pseudonymize.py} +0 -0
- /endoreg_db/utils/requirement_operator_logic/{lab_value_operators.py → _old/lab_value_operators.py} +0 -0
- /endoreg_db/utils/requirement_operator_logic/{model_evaluators.py → _old/model_evaluators.py} +0 -0
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/licenses/LICENSE +0 -0
|
@@ -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)
|
|
@@ -45,7 +45,7 @@ IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
|
45
45
|
RequirementOperator.__name__,
|
|
46
46
|
Requirement.__name__,
|
|
47
47
|
RequirementSetType.__name__,
|
|
48
|
-
ExaminationRequirementSet.__name__,
|
|
48
|
+
# ExaminationRequirementSet.__name__,
|
|
49
49
|
RequirementSet.__name__,
|
|
50
50
|
]
|
|
51
51
|
|
|
@@ -62,46 +62,38 @@ def _validate_requirement_configuration(fields: dict, *, entry: dict, model):
|
|
|
62
62
|
return True
|
|
63
63
|
return any(not item for item in value)
|
|
64
64
|
|
|
65
|
-
missing = [
|
|
66
|
-
key for key in ("requirement_types", "operators") if _values_missing(key)
|
|
67
|
-
]
|
|
65
|
+
missing = [key for key in ("requirement_types", "operators") if _values_missing(key)]
|
|
68
66
|
if missing:
|
|
69
67
|
missing_display = ", ".join(missing)
|
|
70
|
-
raise ValueError(
|
|
71
|
-
f"{model.__name__} '{name}' is missing required configuration for: {missing_display}."
|
|
72
|
-
)
|
|
68
|
+
raise ValueError(f"{model.__name__} '{name}' is missing required configuration for: {missing_display}.")
|
|
73
69
|
|
|
74
70
|
|
|
75
71
|
IMPORT_METADATA = {
|
|
76
72
|
RequirementType.__name__: {
|
|
77
73
|
"dir": REQUIREMENT_TYPE_DATA_DIR, # e.g. "interventions"
|
|
78
|
-
"model": RequirementType,
|
|
74
|
+
"model": RequirementType,
|
|
79
75
|
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
80
76
|
"foreign_key_models": [], # e.g. [InterventionType]
|
|
81
77
|
},
|
|
82
78
|
RequirementOperator.__name__: {
|
|
83
79
|
"dir": REQUIREMENT_OPERATOR_DATA_DIR, # e.g. "interventions"
|
|
84
|
-
"model": RequirementOperator,
|
|
80
|
+
"model": RequirementOperator,
|
|
85
81
|
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
86
82
|
"foreign_key_models": [], # e.g. [InterventionType]
|
|
87
83
|
},
|
|
88
84
|
ExaminationRequirementSet.__name__: {
|
|
89
85
|
"dir": EXAMINATION_REQUIREMENT_SET_DATA_DIR, # e.g. "interventions"
|
|
90
|
-
"model": ExaminationRequirementSet,
|
|
91
|
-
"foreign_keys": [
|
|
92
|
-
|
|
93
|
-
], # Through model uses foreign keys of both models
|
|
94
|
-
"foreign_key_models": [
|
|
95
|
-
Examination,
|
|
96
|
-
],
|
|
86
|
+
"model": ExaminationRequirementSet,
|
|
87
|
+
"foreign_keys": [], # Through model uses foreign keys of both models
|
|
88
|
+
"foreign_key_models": [],
|
|
97
89
|
},
|
|
98
90
|
# ExaminationRequirementSet.__name__,
|
|
99
91
|
Requirement.__name__: {
|
|
100
92
|
"dir": REQUIREMENT_DATA_DIR, # e.g. "interventions"
|
|
101
|
-
"model": Requirement,
|
|
93
|
+
"model": Requirement,
|
|
102
94
|
"foreign_keys": [
|
|
103
95
|
"requirement_types",
|
|
104
|
-
"
|
|
96
|
+
"operator",
|
|
105
97
|
"unit",
|
|
106
98
|
"examinations",
|
|
107
99
|
"examination_indications",
|
|
@@ -149,13 +141,13 @@ IMPORT_METADATA = {
|
|
|
149
141
|
},
|
|
150
142
|
RequirementSetType.__name__: {
|
|
151
143
|
"dir": REQUIREMENT_SET_TYPE_DATA_DIR, # e.g. "interventions"
|
|
152
|
-
"model": RequirementSetType,
|
|
144
|
+
"model": RequirementSetType,
|
|
153
145
|
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
154
146
|
"foreign_key_models": [], # e.g. [InterventionType]
|
|
155
147
|
},
|
|
156
148
|
RequirementSet.__name__: {
|
|
157
149
|
"dir": REQUIREMENT_SET_DATA_DIR, # e.g. "interventions"
|
|
158
|
-
"model": RequirementSet,
|
|
150
|
+
"model": RequirementSet,
|
|
159
151
|
"foreign_keys": [
|
|
160
152
|
"requirement_set_type",
|
|
161
153
|
"requirements", # This is a many-to-many field
|
|
@@ -163,6 +155,7 @@ IMPORT_METADATA = {
|
|
|
163
155
|
"information_sources",
|
|
164
156
|
"tags",
|
|
165
157
|
"reqset_exam_links",
|
|
158
|
+
"depends_on",
|
|
166
159
|
], # e.g. ["intervention_types"]
|
|
167
160
|
"foreign_key_models": [
|
|
168
161
|
RequirementSetType,
|
|
@@ -171,6 +164,7 @@ IMPORT_METADATA = {
|
|
|
171
164
|
InformationSource,
|
|
172
165
|
Tag,
|
|
173
166
|
ExaminationRequirementSet,
|
|
167
|
+
RequirementSet,
|
|
174
168
|
], # e.g. [InterventionType]
|
|
175
169
|
},
|
|
176
170
|
}
|
|
@@ -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.
|
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
from django.core.management.base import BaseCommand
|
|
2
|
+
|
|
3
|
+
from ...data import REPORT_READER_FLAG_DATA_DIR
|
|
2
4
|
from ...models import Shift, ShiftType
|
|
3
5
|
from ...utils import load_model_data_from_yaml
|
|
4
|
-
from ...data import REPORT_READER_FLAG_DATA_DIR
|
|
5
6
|
|
|
6
|
-
SOURCE_DIR = REPORT_READER_FLAG_DATA_DIR
|
|
7
|
+
SOURCE_DIR = REPORT_READER_FLAG_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
|
|
7
8
|
|
|
8
9
|
model_0 = ShiftType
|
|
9
10
|
model_1 = Shift
|
|
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
|
model_1.__name__: {
|
|
23
|
-
"dir": SOURCE_DIR,
|
|
24
|
-
"model": model_1,
|
|
25
|
-
"foreign_keys": ["shift_types"],
|
|
26
|
-
"foreign_key_models": [model_0]
|
|
27
|
-
}
|
|
24
|
+
"dir": SOURCE_DIR, # e.g. "interventions"
|
|
25
|
+
"model": model_1,
|
|
26
|
+
"foreign_keys": ["shift_types"], # e.g. ["intervention_types"]
|
|
27
|
+
"foreign_key_models": [model_0], # e.g. [InterventionType]
|
|
28
|
+
},
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
|
|
30
32
|
class Command(BaseCommand):
|
|
31
33
|
help = """Load all .yaml files in the data/shift directory
|
|
32
34
|
into the Shift and ShiftType model"""
|
|
@@ -36,25 +38,20 @@ class Command(BaseCommand):
|
|
|
36
38
|
Adds the --verbose command-line option to enable detailed output during execution.
|
|
37
39
|
"""
|
|
38
40
|
parser.add_argument(
|
|
39
|
-
|
|
40
|
-
action=
|
|
41
|
-
help=
|
|
41
|
+
"--verbose",
|
|
42
|
+
action="store_true",
|
|
43
|
+
help="Display verbose output",
|
|
42
44
|
)
|
|
43
45
|
|
|
44
46
|
def handle(self, *args, **options):
|
|
45
47
|
"""
|
|
46
48
|
Loads YAML data files into models defined in IMPORT_MODELS using provided metadata.
|
|
47
|
-
|
|
49
|
+
|
|
48
50
|
Iterates over each model specified in IMPORT_MODELS, retrieves its import metadata,
|
|
49
51
|
and calls the data loading utility to populate the database from YAML files. Supports
|
|
50
52
|
optional verbose output if enabled via command-line options.
|
|
51
53
|
"""
|
|
52
|
-
verbose = options[
|
|
54
|
+
verbose = options["verbose"]
|
|
53
55
|
for model_name in IMPORT_MODELS:
|
|
54
56
|
_metadata = IMPORT_METADATA[model_name]
|
|
55
|
-
load_model_data_from_yaml(
|
|
56
|
-
self,
|
|
57
|
-
model_name,
|
|
58
|
-
_metadata,
|
|
59
|
-
verbose
|
|
60
|
-
)
|
|
57
|
+
load_model_data_from_yaml(self, model_name, _metadata, verbose)
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
from django.core.management.base import BaseCommand
|
|
2
|
+
|
|
2
3
|
from endoreg_db.models import (
|
|
3
4
|
Tag,
|
|
4
|
-
|
|
5
5
|
)
|
|
6
6
|
|
|
7
|
+
from ...data import TAG_DATA_DIR
|
|
7
8
|
from ...utils import load_model_data_from_yaml
|
|
8
|
-
from ...data import (
|
|
9
|
-
TAG_DATA_DIR
|
|
10
|
-
)
|
|
11
|
-
|
|
12
9
|
|
|
13
10
|
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
14
11
|
Tag.__name__,
|
|
@@ -17,7 +14,7 @@ IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
|
17
14
|
IMPORT_METADATA = {
|
|
18
15
|
Tag.__name__: {
|
|
19
16
|
"dir": TAG_DATA_DIR, # e.g. "interventions"
|
|
20
|
-
"model": Tag,
|
|
17
|
+
"model": Tag,
|
|
21
18
|
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
22
19
|
"foreign_key_models": [], # e.g. [InterventionType]
|
|
23
20
|
},
|
|
@@ -32,7 +29,7 @@ class Command(BaseCommand):
|
|
|
32
29
|
def add_arguments(self, parser):
|
|
33
30
|
"""
|
|
34
31
|
Add command-line arguments to enable verbose output.
|
|
35
|
-
|
|
32
|
+
|
|
36
33
|
Adds an optional '--verbose' flag to the command parser. When specified,
|
|
37
34
|
this flag causes the command to display detailed output during execution.
|
|
38
35
|
"""
|
|
@@ -45,10 +42,10 @@ class Command(BaseCommand):
|
|
|
45
42
|
def handle(self, *args, **options):
|
|
46
43
|
"""
|
|
47
44
|
Executes data import for requirement models from YAML files.
|
|
48
|
-
|
|
49
|
-
Retrieves the verbosity setting from the command options and iterates over each model
|
|
50
|
-
listed in IMPORT_MODELS. For each model, it obtains the corresponding metadata from
|
|
51
|
-
IMPORT_METADATA and calls a helper to load the YAML data into the database. Verbose mode
|
|
45
|
+
|
|
46
|
+
Retrieves the verbosity setting from the command options and iterates over each model
|
|
47
|
+
listed in IMPORT_MODELS. For each model, it obtains the corresponding metadata from
|
|
48
|
+
IMPORT_METADATA and calls a helper to load the YAML data into the database. Verbose mode
|
|
52
49
|
enables detailed output during the process.
|
|
53
50
|
"""
|
|
54
51
|
verbose = options["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 UNIT_DATA_DIR
|
|
4
8
|
from ...models import Unit
|
|
5
|
-
import yaml
|
|
6
9
|
from ...utils import load_model_data_from_yaml
|
|
7
|
-
from ...data import UNIT_DATA_DIR
|
|
8
10
|
|
|
9
|
-
SOURCE_DIR = UNIT_DATA_DIR
|
|
11
|
+
SOURCE_DIR = UNIT_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
|
|
10
12
|
|
|
11
13
|
MODEL_0 = Unit
|
|
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)
|
|
@@ -4,72 +4,80 @@ Django Management Command for File Watcher Service
|
|
|
4
4
|
This command provides Django integration for the file watcher service.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from django.core.management.base import BaseCommand
|
|
8
|
-
from django.conf import settings
|
|
9
|
-
import sys
|
|
10
7
|
import os
|
|
8
|
+
import sys
|
|
11
9
|
from pathlib import Path
|
|
12
10
|
|
|
11
|
+
from django.conf import settings
|
|
12
|
+
from django.core.management.base import BaseCommand
|
|
13
|
+
|
|
13
14
|
|
|
14
15
|
class Command(BaseCommand):
|
|
15
16
|
help = """
|
|
16
|
-
Start the file watcher service for automatic video and
|
|
17
|
+
Start the file watcher service for automatic video and report processing.
|
|
17
18
|
|
|
18
19
|
This command monitors:
|
|
19
20
|
- data/raw_videos/ for video files (.mp4, .avi, .mov, .mkv, .webm, .m4v)
|
|
20
|
-
- data/raw_pdfs/ for
|
|
21
|
+
- data/raw_pdfs/ for report files (.pdf)
|
|
21
22
|
|
|
22
23
|
When files are detected, they are automatically processed with:
|
|
23
24
|
- Video: Import, anonymization, and segmentation
|
|
24
|
-
-
|
|
25
|
+
- report: Import and anonymization
|
|
25
26
|
"""
|
|
26
27
|
|
|
27
28
|
def add_arguments(self, parser):
|
|
28
29
|
parser.add_argument(
|
|
29
|
-
|
|
30
|
-
action=
|
|
31
|
-
help=
|
|
30
|
+
"--test",
|
|
31
|
+
action="store_true",
|
|
32
|
+
help="Test the file watcher configuration without starting monitoring",
|
|
32
33
|
)
|
|
33
34
|
parser.add_argument(
|
|
34
|
-
|
|
35
|
-
action=
|
|
36
|
-
help=
|
|
35
|
+
"--existing",
|
|
36
|
+
action="store_true",
|
|
37
|
+
help="Process existing files in the directories before starting monitoring",
|
|
37
38
|
)
|
|
38
39
|
parser.add_argument(
|
|
39
|
-
|
|
40
|
-
choices=[
|
|
41
|
-
default=
|
|
42
|
-
help=
|
|
40
|
+
"--log-level",
|
|
41
|
+
choices=["DEBUG", "INFO", "WARNING", "ERROR"],
|
|
42
|
+
default="INFO",
|
|
43
|
+
help="Set logging level (default: INFO)",
|
|
43
44
|
)
|
|
44
45
|
|
|
45
46
|
def handle(self, *args, **options):
|
|
46
47
|
self.stdout.write(self.style.SUCCESS("Starting File Watcher Service"))
|
|
47
|
-
|
|
48
|
+
|
|
48
49
|
# Set environment variables
|
|
49
|
-
os.environ[
|
|
50
|
-
|
|
50
|
+
os.environ["WATCHER_LOG_LEVEL"] = options["log_level"]
|
|
51
|
+
|
|
51
52
|
try:
|
|
52
53
|
# Add project root to path
|
|
53
54
|
project_root = Path(settings.BASE_DIR)
|
|
54
55
|
if str(project_root) not in sys.path:
|
|
55
56
|
sys.path.insert(0, str(project_root))
|
|
56
|
-
|
|
57
|
+
|
|
57
58
|
# Import the file watcher service from the correct location
|
|
58
|
-
file_watcher_path = project_root /
|
|
59
|
-
|
|
59
|
+
file_watcher_path = project_root / "scripts" / "file_watcher.py"
|
|
60
|
+
|
|
60
61
|
if not file_watcher_path.exists():
|
|
61
|
-
self.stdout.write(
|
|
62
|
+
self.stdout.write(
|
|
63
|
+
self.style.ERROR(
|
|
64
|
+
f"❌ File watcher script not found: {file_watcher_path}"
|
|
65
|
+
)
|
|
66
|
+
)
|
|
62
67
|
return
|
|
63
|
-
|
|
68
|
+
|
|
64
69
|
# Import the module dynamically
|
|
65
70
|
import importlib.util
|
|
66
|
-
|
|
71
|
+
|
|
72
|
+
spec = importlib.util.spec_from_file_location(
|
|
73
|
+
"file_watcher", file_watcher_path
|
|
74
|
+
)
|
|
67
75
|
file_watcher_module = importlib.util.module_from_spec(spec)
|
|
68
76
|
spec.loader.exec_module(file_watcher_module)
|
|
69
|
-
|
|
77
|
+
|
|
70
78
|
FileWatcherService = file_watcher_module.FileWatcherService
|
|
71
|
-
|
|
72
|
-
if options[
|
|
79
|
+
|
|
80
|
+
if options["test"]:
|
|
73
81
|
self.stdout.write("Testing file watcher configuration...")
|
|
74
82
|
service = FileWatcherService()
|
|
75
83
|
try:
|
|
@@ -79,28 +87,29 @@ class Command(BaseCommand):
|
|
|
79
87
|
return
|
|
80
88
|
self.stdout.write(self.style.SUCCESS("✅ File watcher test passed"))
|
|
81
89
|
return
|
|
82
|
-
|
|
90
|
+
|
|
83
91
|
# Create and start the service
|
|
84
92
|
service = FileWatcherService()
|
|
85
|
-
|
|
86
|
-
if options[
|
|
93
|
+
|
|
94
|
+
if options["existing"]:
|
|
87
95
|
self.stdout.write("Processing existing files...")
|
|
88
96
|
service._process_existing_files()
|
|
89
97
|
self.stdout.write(self.style.SUCCESS("✅ Existing files processed"))
|
|
90
98
|
return
|
|
91
|
-
|
|
99
|
+
|
|
92
100
|
self.stdout.write("Starting file monitoring...")
|
|
93
101
|
self.stdout.write(f"Video directory: {service.video_dir}")
|
|
94
|
-
self.stdout.write(f"
|
|
102
|
+
self.stdout.write(f"report directory: {service.report_dir}")
|
|
95
103
|
self.stdout.write("Press Ctrl+C to stop")
|
|
96
|
-
|
|
104
|
+
|
|
97
105
|
service.start()
|
|
98
|
-
|
|
106
|
+
|
|
99
107
|
except KeyboardInterrupt:
|
|
100
108
|
self.stdout.write(self.style.WARNING("\n⚠️ File watcher stopped by user"))
|
|
101
109
|
except Exception as e:
|
|
102
110
|
self.stdout.write(self.style.ERROR(f"❌ Error: {str(e)}"))
|
|
103
|
-
if options[
|
|
111
|
+
if options["verbosity"] >= 2:
|
|
104
112
|
import traceback
|
|
113
|
+
|
|
105
114
|
self.stdout.write(traceback.format_exc())
|
|
106
|
-
sys.exit(1)
|
|
115
|
+
sys.exit(1)
|
|
@@ -9,6 +9,7 @@ import logging
|
|
|
9
9
|
|
|
10
10
|
logger = logging.getLogger(__name__)
|
|
11
11
|
|
|
12
|
+
# TODO Review if this is still used. Delete if not.
|
|
12
13
|
|
|
13
14
|
class Command(BaseCommand):
|
|
14
15
|
help = 'Validate video file existence and accessibility'
|
|
@@ -24,11 +25,6 @@ class Command(BaseCommand):
|
|
|
24
25
|
action='store_true',
|
|
25
26
|
help='Enable verbose output',
|
|
26
27
|
)
|
|
27
|
-
parser.add_argument(
|
|
28
|
-
'--fix-missing',
|
|
29
|
-
action='store_true',
|
|
30
|
-
help='Mark videos with missing files as inactive',
|
|
31
|
-
)
|
|
32
28
|
|
|
33
29
|
def handle(self, *args, **options):
|
|
34
30
|
"""Validate video files and their accessibility."""
|