endoreg-db 0.8.8.0__py3-none-any.whl → 0.8.9.2__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 +496 -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/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/pseudonymization/pseudonymize.py +0 -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 +65 -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/utils/video/ffmpeg_wrapper.py +217 -52
- 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.9.2.dist-info}/METADATA +2 -2
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/RECORD +217 -335
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.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/{urls/sensitive_meta.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/{views/pdf/pdf_stream_views.py → import_files/pseudonymization/__init__.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.9.2.dist-info}/licenses/LICENSE +0 -0
endoreg_db/tasks/upload_tasks.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import os
|
|
2
1
|
import logging
|
|
2
|
+
import os
|
|
3
3
|
from typing import Optional
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
from django.core.files.storage import default_storage
|
|
6
6
|
|
|
7
|
-
from
|
|
7
|
+
from celery_app import shared_task
|
|
8
8
|
from endoreg_db.models import SensitiveMeta, VideoFile
|
|
9
|
-
|
|
9
|
+
from endoreg_db.models.upload_job import UploadJob
|
|
10
10
|
|
|
11
11
|
logger = logging.getLogger(__name__)
|
|
12
12
|
|
|
@@ -14,8 +14,8 @@ logger = logging.getLogger(__name__)
|
|
|
14
14
|
@shared_task(bind=True)
|
|
15
15
|
def process_upload_job(self, job_id: str) -> dict:
|
|
16
16
|
"""
|
|
17
|
-
Process an uploaded file (
|
|
18
|
-
|
|
17
|
+
Process an uploaded file (report or video) asynchronously.
|
|
18
|
+
|
|
19
19
|
This task:
|
|
20
20
|
1. Updates job status to 'processing'
|
|
21
21
|
2. Determines file type and routes to appropriate processor
|
|
@@ -23,10 +23,10 @@ def process_upload_job(self, job_id: str) -> dict:
|
|
|
23
23
|
4. For videos: Uses VideoFile.create_from_file_initialized() and processing pipeline
|
|
24
24
|
5. Links the created SensitiveMeta to the job and marks as 'anonymized'
|
|
25
25
|
6. On error: marks job as 'error' with details
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
Args:
|
|
28
28
|
job_id: UUID string of the UploadJob to process
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
Returns:
|
|
31
31
|
dict: Processing result with status and details
|
|
32
32
|
"""
|
|
@@ -37,69 +37,71 @@ def process_upload_job(self, job_id: str) -> dict:
|
|
|
37
37
|
except UploadJob.DoesNotExist:
|
|
38
38
|
error_msg = f"UploadJob with id {job_id} not found"
|
|
39
39
|
logger.error(error_msg)
|
|
40
|
-
return {
|
|
41
|
-
|
|
40
|
+
return {"status": "error", "error": error_msg}
|
|
41
|
+
|
|
42
42
|
# Mark as processing
|
|
43
43
|
upload_job.mark_processing()
|
|
44
44
|
logger.info(f"Started processing upload job {job_id}")
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
# Get file path
|
|
47
47
|
file_path = upload_job.file.path
|
|
48
48
|
if not os.path.exists(file_path):
|
|
49
49
|
error_msg = f"Uploaded file not found at {file_path}"
|
|
50
50
|
upload_job.mark_error(error_msg)
|
|
51
51
|
logger.error(error_msg)
|
|
52
|
-
return {
|
|
53
|
-
|
|
52
|
+
return {"status": "error", "error": error_msg}
|
|
53
|
+
|
|
54
54
|
# Route to appropriate processor based on content type
|
|
55
55
|
sensitive_meta = None
|
|
56
|
-
|
|
57
|
-
if upload_job.content_type ==
|
|
56
|
+
|
|
57
|
+
if upload_job.content_type == "application/pdf":
|
|
58
58
|
sensitive_meta = _process_pdf_file(upload_job, file_path)
|
|
59
|
-
elif upload_job.content_type.startswith(
|
|
59
|
+
elif upload_job.content_type.startswith("video/"):
|
|
60
60
|
sensitive_meta = _process_video_file(upload_job, file_path)
|
|
61
61
|
else:
|
|
62
62
|
error_msg = f"Unsupported content type: {upload_job.content_type}"
|
|
63
63
|
upload_job.mark_error(error_msg)
|
|
64
64
|
logger.error(error_msg)
|
|
65
|
-
return {
|
|
66
|
-
|
|
65
|
+
return {"status": "error", "error": error_msg}
|
|
66
|
+
|
|
67
67
|
if sensitive_meta:
|
|
68
68
|
# Mark job as completed with the created SensitiveMeta
|
|
69
69
|
upload_job.mark_completed(sensitive_meta)
|
|
70
|
-
logger.info(
|
|
70
|
+
logger.info(
|
|
71
|
+
f"Successfully processed upload job {job_id}, created SensitiveMeta {sensitive_meta.id}"
|
|
72
|
+
)
|
|
71
73
|
return {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
"status": "anonymized",
|
|
75
|
+
"sensitive_meta_id": sensitive_meta.id,
|
|
76
|
+
"job_id": job_id,
|
|
75
77
|
}
|
|
76
78
|
else:
|
|
77
79
|
error_msg = "Processing completed but no SensitiveMeta was created"
|
|
78
80
|
upload_job.mark_error(error_msg)
|
|
79
81
|
logger.error(f"Upload job {job_id}: {error_msg}")
|
|
80
|
-
return {
|
|
81
|
-
|
|
82
|
+
return {"status": "error", "error": error_msg}
|
|
83
|
+
|
|
82
84
|
except Exception as e:
|
|
83
85
|
error_msg = f"Unexpected error processing upload job {job_id}: {str(e)}"
|
|
84
86
|
logger.exception(error_msg)
|
|
85
|
-
|
|
87
|
+
|
|
86
88
|
try:
|
|
87
89
|
upload_job = UploadJob.objects.get(id=job_id)
|
|
88
90
|
upload_job.mark_error(error_msg)
|
|
89
91
|
except Exception as inner_e:
|
|
90
92
|
logger.error(f"Failed to update job status after error: {inner_e}")
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
+
|
|
94
|
+
return {"status": "error", "error": error_msg}
|
|
93
95
|
|
|
94
96
|
|
|
95
97
|
def _process_pdf_file(upload_job: UploadJob, file_path: str) -> Optional[SensitiveMeta]:
|
|
96
98
|
"""
|
|
97
|
-
Process a
|
|
98
|
-
|
|
99
|
+
Process a report file using ReportReader.
|
|
100
|
+
|
|
99
101
|
Args:
|
|
100
102
|
upload_job: The UploadJob instance
|
|
101
|
-
file_path: Path to the uploaded
|
|
102
|
-
|
|
103
|
+
file_path: Path to the uploaded report file
|
|
104
|
+
|
|
103
105
|
Returns:
|
|
104
106
|
SensitiveMeta instance if successful, None otherwise
|
|
105
107
|
"""
|
|
@@ -108,100 +110,107 @@ def _process_pdf_file(upload_job: UploadJob, file_path: str) -> Optional[Sensiti
|
|
|
108
110
|
try:
|
|
109
111
|
from lx_anonymizer.report_reader import ReportReader
|
|
110
112
|
except ImportError as e:
|
|
111
|
-
raise ImportError(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
raise ImportError(
|
|
114
|
+
f"Could not import ReportReader: {e}. Make sure lx-anonymizer is available."
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
logger.info(f"Processing report file: {file_path}")
|
|
118
|
+
|
|
115
119
|
# Create ReportReader instance
|
|
116
|
-
reader = ReportReader(
|
|
117
|
-
|
|
118
|
-
text_date_format="%d.%m.%Y"
|
|
119
|
-
)
|
|
120
|
-
|
|
120
|
+
reader = ReportReader(locale="de_DE", text_date_format="%d.%m.%Y")
|
|
121
|
+
|
|
121
122
|
# Process the report
|
|
122
123
|
original_text, anonymized_text, metadata = reader.process_report(
|
|
123
124
|
pdf_path=file_path,
|
|
124
125
|
use_ensemble=False, # Can be made configurable
|
|
125
126
|
verbose=False,
|
|
126
|
-
use_llm_extractor=None # Use default extractor
|
|
127
|
+
use_llm_extractor=None, # Use default extractor
|
|
127
128
|
)
|
|
128
|
-
|
|
129
|
+
|
|
129
130
|
if not metadata:
|
|
130
|
-
raise ValueError("No metadata extracted from
|
|
131
|
-
|
|
131
|
+
raise ValueError("No metadata extracted from report")
|
|
132
|
+
|
|
132
133
|
# Create SensitiveMeta from extracted metadata
|
|
133
134
|
sensitive_meta = SensitiveMeta.create_from_dict(metadata)
|
|
134
135
|
sensitive_meta.save()
|
|
135
|
-
|
|
136
|
-
logger.info(f"Created SensitiveMeta {sensitive_meta.id} from
|
|
136
|
+
|
|
137
|
+
logger.info(f"Created SensitiveMeta {sensitive_meta.id} from report processing")
|
|
137
138
|
return sensitive_meta
|
|
138
|
-
|
|
139
|
+
|
|
139
140
|
except Exception as e:
|
|
140
|
-
logger.exception(f"Error processing
|
|
141
|
+
logger.exception(f"Error processing report file {file_path}: {e}")
|
|
141
142
|
raise
|
|
142
143
|
|
|
143
144
|
|
|
144
|
-
def _process_video_file(
|
|
145
|
+
def _process_video_file(
|
|
146
|
+
upload_job: UploadJob, file_path: str
|
|
147
|
+
) -> Optional[SensitiveMeta]:
|
|
145
148
|
"""
|
|
146
149
|
Process a video file using VideoFile creation and processing pipeline.
|
|
147
|
-
|
|
150
|
+
|
|
148
151
|
Args:
|
|
149
152
|
upload_job: The UploadJob instance
|
|
150
153
|
file_path: Path to the uploaded video file
|
|
151
|
-
|
|
154
|
+
|
|
152
155
|
Returns:
|
|
153
156
|
SensitiveMeta instance if successful, None otherwise
|
|
154
157
|
"""
|
|
155
158
|
try:
|
|
156
159
|
logger.info(f"Processing video file: {file_path}")
|
|
157
|
-
|
|
160
|
+
|
|
158
161
|
# Get the relative path for storage
|
|
159
162
|
relative_path = os.path.relpath(file_path, default_storage.location)
|
|
160
|
-
|
|
163
|
+
|
|
161
164
|
# Create VideoFile instance using the existing method
|
|
162
165
|
video_file = VideoFile.create_from_file_initialized(
|
|
163
166
|
file_path=relative_path,
|
|
164
167
|
skip_frame_extraction=False, # Extract frames for processing
|
|
165
|
-
skip_meta_extraction=False,
|
|
168
|
+
skip_meta_extraction=False, # Extract metadata
|
|
166
169
|
)
|
|
167
|
-
|
|
170
|
+
|
|
168
171
|
if not video_file:
|
|
169
172
|
raise ValueError("Failed to create VideoFile instance")
|
|
170
|
-
|
|
173
|
+
|
|
171
174
|
# Run the video processing pipeline (pipe_1)
|
|
172
175
|
try:
|
|
173
176
|
# Import the processing function
|
|
174
177
|
from endoreg_db.management.commands.import_video import pipe_1
|
|
175
|
-
|
|
178
|
+
|
|
176
179
|
# Run processing pipeline
|
|
177
180
|
pipe_1(
|
|
178
181
|
video_file=video_file,
|
|
179
182
|
skip_frame_extraction=False,
|
|
180
183
|
skip_meta_extraction=False,
|
|
181
|
-
skip_anonymization=False
|
|
184
|
+
skip_anonymization=False,
|
|
182
185
|
)
|
|
183
|
-
|
|
186
|
+
|
|
184
187
|
except Exception as e:
|
|
185
|
-
logger.warning(
|
|
188
|
+
logger.warning(
|
|
189
|
+
f"Video processing pipeline failed, but VideoFile was created: {e}"
|
|
190
|
+
)
|
|
186
191
|
# Continue anyway - we might still have usable metadata
|
|
187
|
-
|
|
192
|
+
|
|
188
193
|
# Get the associated SensitiveMeta
|
|
189
|
-
if hasattr(video_file,
|
|
194
|
+
if hasattr(video_file, "sensitive_meta") and video_file.sensitive_meta:
|
|
190
195
|
sensitive_meta = video_file.sensitive_meta
|
|
191
|
-
logger.info(
|
|
196
|
+
logger.info(
|
|
197
|
+
f"Found SensitiveMeta {sensitive_meta.id} from video processing"
|
|
198
|
+
)
|
|
192
199
|
return sensitive_meta
|
|
193
200
|
else:
|
|
194
201
|
# Create a basic SensitiveMeta if none exists
|
|
195
202
|
sensitive_meta = SensitiveMeta.objects.create()
|
|
196
|
-
|
|
203
|
+
|
|
197
204
|
# Link it to the video if possible
|
|
198
|
-
if hasattr(video_file,
|
|
205
|
+
if hasattr(video_file, "sensitive_meta"):
|
|
199
206
|
video_file.sensitive_meta = sensitive_meta
|
|
200
|
-
video_file.save(update_fields=[
|
|
201
|
-
|
|
202
|
-
logger.info(
|
|
207
|
+
video_file.save(update_fields=["sensitive_meta"])
|
|
208
|
+
|
|
209
|
+
logger.info(
|
|
210
|
+
f"Created basic SensitiveMeta {sensitive_meta.id} for video file"
|
|
211
|
+
)
|
|
203
212
|
return sensitive_meta
|
|
204
|
-
|
|
213
|
+
|
|
205
214
|
except Exception as e:
|
|
206
215
|
logger.exception(f"Error processing video file {file_path}: {e}")
|
|
207
|
-
raise
|
|
216
|
+
raise
|
endoreg_db/tasks/video_ingest.py
CHANGED
|
@@ -63,15 +63,19 @@ def run_import_video(file_path: str, center_name: Optional[str] = None,
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
# Use settings defaults if not provided
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
if not isinstance(center_name, str):
|
|
67
|
+
getattr(settings, 'DEFAULT_CENTER', 'university_hospital_wuerzburg')
|
|
68
|
+
assert(center_name is str)
|
|
69
|
+
if not isinstance(processor_name, str):
|
|
70
|
+
assert(processor_name is str)
|
|
71
|
+
getattr(settings, 'DEFAULT_PROCESSOR', 'olympus_cv_1500')
|
|
72
|
+
|
|
69
73
|
logger.info(f"Starting import for video: {file_path}")
|
|
70
74
|
logger.info(f"Using center: {center_name}, processor: {processor_name}")
|
|
71
75
|
|
|
72
76
|
# Try to use the service first
|
|
73
77
|
try:
|
|
74
|
-
from endoreg_db.services import video_import
|
|
78
|
+
from endoreg_db.services.__old import video_import
|
|
75
79
|
|
|
76
80
|
video_file_obj = video_import.import_and_anonymize(
|
|
77
81
|
file_path=file_path,
|
endoreg_db/urls/__init__.py
CHANGED
|
@@ -17,18 +17,8 @@ from .anonymization import url_patterns as anonymization_url_patterns
|
|
|
17
17
|
from .auth import urlpatterns as auth_url_patterns
|
|
18
18
|
from .classification import url_patterns as classification_url_patterns
|
|
19
19
|
from .examination import urlpatterns as examination_url_patterns
|
|
20
|
-
from .files import urlpatterns as files_url_patterns
|
|
21
|
-
from .label_video_segment_validate import (
|
|
22
|
-
url_patterns as label_video_segment_validate_url_patterns,
|
|
23
|
-
)
|
|
24
|
-
from .label_video_segments import url_patterns as label_video_segments_url_patterns
|
|
25
|
-
|
|
26
|
-
# Phase 1.2: Media Management URLs ✅ IMPLEMENTED
|
|
27
20
|
from .media import urlpatterns as media_url_patterns
|
|
28
21
|
from .patient import urlpatterns as patient_url_patterns
|
|
29
|
-
|
|
30
|
-
# TODO Phase 1.2: Implement VideoMediaView and PDFMediaView before enabling
|
|
31
|
-
# from .media import urlpatterns as media_url_patterns
|
|
32
22
|
from .requirements import urlpatterns as requirements_url_patterns
|
|
33
23
|
from .stats import url_patterns as stats_url_patterns
|
|
34
24
|
from .upload import urlpatterns as upload_url_patterns
|
|
@@ -38,9 +28,6 @@ api_urls += classification_url_patterns
|
|
|
38
28
|
api_urls += anonymization_url_patterns
|
|
39
29
|
api_urls += auth_url_patterns
|
|
40
30
|
api_urls += examination_url_patterns
|
|
41
|
-
api_urls += files_url_patterns
|
|
42
|
-
api_urls += label_video_segments_url_patterns
|
|
43
|
-
api_urls += label_video_segment_validate_url_patterns
|
|
44
31
|
api_urls += media_url_patterns
|
|
45
32
|
api_urls += upload_url_patterns
|
|
46
33
|
api_urls += requirements_url_patterns
|
|
@@ -49,7 +36,6 @@ api_urls += stats_url_patterns
|
|
|
49
36
|
|
|
50
37
|
router = DefaultRouter()
|
|
51
38
|
router.register(r"examinations", ExaminationViewSet)
|
|
52
|
-
|
|
53
39
|
router.register(r"findings", FindingViewSet)
|
|
54
40
|
router.register(r"classifications", FindingClassificationViewSet)
|
|
55
41
|
router.register(r"patient-findings", PatientFindingViewSet)
|
endoreg_db/urls/ai.py
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from django.urls import path
|
|
2
|
+
from endoreg_db.views.ai import (label_list, add_label, delete_label, update_label)
|
|
3
|
+
|
|
4
|
+
url_patterns=[
|
|
5
|
+
# Label interface
|
|
6
|
+
# GET, Returns list of labels
|
|
7
|
+
path(
|
|
8
|
+
"ai/label-list",
|
|
9
|
+
label_list,
|
|
10
|
+
name="label-list"
|
|
11
|
+
),
|
|
12
|
+
# POST, updates label by deleting old one and adding new one
|
|
13
|
+
path(
|
|
14
|
+
"ai/label-update",
|
|
15
|
+
update_label,
|
|
16
|
+
name="label-update"
|
|
17
|
+
),
|
|
18
|
+
# DELETE, deletes a label
|
|
19
|
+
path(
|
|
20
|
+
"ai/label-delete",
|
|
21
|
+
delete_label,
|
|
22
|
+
name="label-delete"
|
|
23
|
+
),
|
|
24
|
+
# POST, allows adding a new label
|
|
25
|
+
path(
|
|
26
|
+
"ai/label-add",
|
|
27
|
+
add_label,
|
|
28
|
+
name="label-add"
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
]
|
endoreg_db/urls/media.py
CHANGED
|
@@ -1,35 +1,37 @@
|
|
|
1
1
|
from django.urls import path
|
|
2
2
|
|
|
3
3
|
from endoreg_db.views import VideoStreamView
|
|
4
|
+
from endoreg_db.views.ai import label_list
|
|
4
5
|
from endoreg_db.views.media import (
|
|
5
6
|
PdfMediaView, # Alias to avoid conflict with legacy pdf.PDFMediaView
|
|
6
7
|
VideoMediaView,
|
|
8
|
+
get_sensitive_metadata_pk,
|
|
7
9
|
pdf_sensitive_metadata,
|
|
8
10
|
pdf_sensitive_metadata_list,
|
|
9
11
|
pdf_sensitive_metadata_verify,
|
|
10
12
|
sensitive_metadata_list,
|
|
13
|
+
video_sensitive_metadata,
|
|
14
|
+
video_sensitive_metadata_verify,
|
|
15
|
+
)
|
|
16
|
+
from endoreg_db.views.report.reimport import ReportReimportView
|
|
17
|
+
from endoreg_db.views.report.report_stream import ReportStreamView
|
|
18
|
+
from endoreg_db.views.video import (
|
|
19
|
+
VideoReimportView,
|
|
11
20
|
video_segment_detail,
|
|
12
21
|
video_segment_validate,
|
|
13
|
-
video_segments_by_pk,
|
|
14
22
|
video_segments_by_video,
|
|
15
23
|
video_segments_collection,
|
|
16
24
|
video_segments_stats,
|
|
17
25
|
video_segments_validate_bulk,
|
|
18
26
|
video_segments_validation_status,
|
|
19
|
-
video_sensitive_metadata,
|
|
20
|
-
video_sensitive_metadata_verify,
|
|
21
|
-
get_sensitive_metadata_pk
|
|
22
27
|
)
|
|
23
|
-
from endoreg_db.views.pdf.pdf_stream import PdfStreamView
|
|
24
|
-
from endoreg_db.views.pdf.reimport import PdfReimportView
|
|
25
28
|
from endoreg_db.views.video.correction import (
|
|
26
29
|
VideoApplyMaskView,
|
|
27
30
|
VideoCorrectionView,
|
|
28
|
-
|
|
31
|
+
VideoMetadataStatsView,
|
|
29
32
|
VideoProcessingHistoryView,
|
|
30
33
|
VideoRemoveFramesView,
|
|
31
34
|
)
|
|
32
|
-
from endoreg_db.views.video.reimport import VideoReimportView
|
|
33
35
|
|
|
34
36
|
# ---------------------------------------------------------------------------------------
|
|
35
37
|
# ANNOTATION API ENDPOINTS
|
|
@@ -43,9 +45,9 @@ from endoreg_db.views.video.reimport import VideoReimportView
|
|
|
43
45
|
|
|
44
46
|
urlpatterns = [
|
|
45
47
|
path(
|
|
46
|
-
"media/sensitive-media-id/<int:pk>/<str:mediaType>/",
|
|
48
|
+
"media/sensitive-media-id/<int:pk>/<str:mediaType>/",
|
|
47
49
|
get_sensitive_metadata_pk,
|
|
48
|
-
name="sm-pk"
|
|
50
|
+
name="sm-pk",
|
|
49
51
|
),
|
|
50
52
|
# Video media endpoints
|
|
51
53
|
path("media/videos/", VideoMediaView.as_view(), name="video-list"),
|
|
@@ -90,7 +92,7 @@ urlpatterns = [
|
|
|
90
92
|
# Returns analysis results (sensitive frame count, ratio, frame IDs)
|
|
91
93
|
path(
|
|
92
94
|
"media/videos/<int:pk>/metadata/",
|
|
93
|
-
|
|
95
|
+
VideoMetadataStatsView.as_view(),
|
|
94
96
|
name="video-metadata",
|
|
95
97
|
),
|
|
96
98
|
# Video Processing History API
|
|
@@ -123,14 +125,9 @@ urlpatterns = [
|
|
|
123
125
|
VideoRemoveFramesView.as_view(),
|
|
124
126
|
name="video-remove-frames",
|
|
125
127
|
),
|
|
128
|
+
path("media/videos/labels/list/", label_list, name="get_lvs_list"),
|
|
126
129
|
# ---------------------------------------------------------------------------------------
|
|
127
130
|
# VIDEO SEGMENT API ENDPOINTS (Modern Media Framework - October 14, 2025)
|
|
128
|
-
#
|
|
129
|
-
# Unified segment management endpoints replacing legacy /api/video-segments/
|
|
130
|
-
# Collection: GET/POST all segments across videos
|
|
131
|
-
# Video-scoped: GET/POST segments for specific video
|
|
132
|
-
# Detail: GET/PATCH/DELETE individual segment
|
|
133
|
-
# ---------------------------------------------------------------------------------------
|
|
134
131
|
# Video Segments Collection API
|
|
135
132
|
# GET/POST /api/media/videos/segments/
|
|
136
133
|
# List all video segments across videos or create new segment
|
|
@@ -220,9 +217,9 @@ urlpatterns = [
|
|
|
220
217
|
video_sensitive_metadata_verify,
|
|
221
218
|
name="video-sensitive-metadata-verify",
|
|
222
219
|
),
|
|
223
|
-
#
|
|
220
|
+
# report Sensitive Metadata (Resource-Scoped)
|
|
224
221
|
# GET/PATCH /api/media/pdfs/<pk>/sensitive-metadata/
|
|
225
|
-
# Get or update sensitive patient data for a
|
|
222
|
+
# Get or update sensitive patient data for a report
|
|
226
223
|
path(
|
|
227
224
|
"media/pdfs/<int:pk>/sensitive-metadata/",
|
|
228
225
|
pdf_sensitive_metadata,
|
|
@@ -252,17 +249,17 @@ urlpatterns = [
|
|
|
252
249
|
pdf_sensitive_metadata_list,
|
|
253
250
|
name="pdf-sensitive-metadata-list",
|
|
254
251
|
),
|
|
255
|
-
#
|
|
252
|
+
# report media endpoints
|
|
256
253
|
path("media/pdfs/", PdfMediaView.as_view(), name="pdf-list"),
|
|
257
254
|
path("media/pdfs/<int:pk>/", PdfMediaView.as_view(), name="pdf-detail"),
|
|
258
255
|
path(
|
|
259
|
-
"media/pdfs/<int:pk>/stream/",
|
|
256
|
+
"media/pdfs/<int:pk>/stream/", ReportStreamView.as_view(), name="pdf-stream"
|
|
260
257
|
), # Support ?type=raw|anonymized params
|
|
261
|
-
#
|
|
258
|
+
# report Re-import API endpoint (modern media framework)
|
|
262
259
|
# POST /api/media/pdfs/<int:pk>/reimport/
|
|
263
|
-
# Re-imports a
|
|
260
|
+
# Re-imports a report file to regenerate metadata when OCR failed or data is incomplete
|
|
264
261
|
path(
|
|
265
|
-
"media/pdfs/<int:pk>/reimport/",
|
|
262
|
+
"media/pdfs/<int:pk>/reimport/", ReportReimportView.as_view(), name="report-reimport"
|
|
266
263
|
),
|
|
267
264
|
]
|
|
268
265
|
# ---------------------------------------------------------------------------------------
|