endoreg-db 0.6.3__py3-none-any.whl → 0.8.1__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/admin.py +26 -26
- endoreg_db/api_urls.py +4 -0
- endoreg_db/apps.py +12 -0
- endoreg_db/assets/dummy_model.ckpt +1 -0
- endoreg_db/codemods/readme.md +88 -0
- endoreg_db/codemods/rename_datetime_fields.py +92 -0
- endoreg_db/config/env.py +101 -0
- endoreg_db/data/__init__.py +26 -0
- endoreg_db/data/ai_model/data.yaml +1 -1
- endoreg_db/data/ai_model_label/label/polyp_classification.yaml +52 -0
- endoreg_db/data/ai_model_label/label-set/data.yaml +20 -1
- endoreg_db/data/ai_model_label/label-set/polyp_classifications.yaml +25 -0
- endoreg_db/data/center/data.yaml +13 -12
- endoreg_db/data/center_shift/ukw.yaml +9 -0
- endoreg_db/data/db_summary.csv +58 -0
- endoreg_db/data/db_summary.xlsx +0 -0
- endoreg_db/data/disease/misc.yaml +1 -2
- endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +2 -2
- endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +6 -6
- endoreg_db/data/endoscopy_processor/data.yaml +3 -0
- endoreg_db/data/event/cardiology.yaml +0 -13
- endoreg_db/data/examination/examinations/data.yaml +34 -28
- endoreg_db/data/examination/type/data.yaml +12 -0
- endoreg_db/data/examination_indication/endoscopy.yaml +418 -2
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +157 -5
- endoreg_db/data/examination_requirement_set/colonoscopy.yaml +15 -0
- endoreg_db/data/finding/anatomy_colon.yaml +128 -0
- endoreg_db/data/finding/colonoscopy.yaml +40 -0
- endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +56 -0
- endoreg_db/data/finding/complication.yaml +16 -0
- endoreg_db/data/finding/data.yaml +8 -44
- endoreg_db/data/finding/examination_setting.yaml +16 -0
- endoreg_db/data/finding/medication_related.yaml +18 -0
- endoreg_db/data/finding/outcome.yaml +12 -0
- endoreg_db/data/finding_classification/colonoscopy_bowel_preparation.yaml +95 -0
- endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +22 -0
- endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +25 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +20 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +24 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +68 -0
- endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +20 -0
- endoreg_db/data/finding_classification/colonoscopy_location.yaml +80 -0
- endoreg_db/data/finding_classification/colonoscopy_lst.yaml +21 -0
- endoreg_db/data/finding_classification/colonoscopy_nice.yaml +20 -0
- endoreg_db/data/finding_classification/colonoscopy_paris.yaml +26 -0
- endoreg_db/data/finding_classification/colonoscopy_sano.yaml +22 -0
- endoreg_db/data/finding_classification/colonoscopy_summary.yaml +53 -0
- endoreg_db/data/finding_classification/complication_generic.yaml +25 -0
- endoreg_db/data/finding_classification/examination_setting_generic.yaml +40 -0
- endoreg_db/data/finding_classification/histology_colo.yaml +51 -0
- endoreg_db/data/finding_classification/intervention_required.yaml +26 -0
- endoreg_db/data/finding_classification/medication_related.yaml +23 -0
- endoreg_db/data/finding_classification/visualized.yaml +33 -0
- endoreg_db/data/finding_classification_choice/bowel_preparation.yaml +78 -0
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_circularity_default.yaml +0 -2
- endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +15 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +23 -0
- endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +15 -0
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_nice.yaml +4 -7
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_paris.yaml +0 -8
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_planarity_default.yaml +6 -13
- endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +14 -0
- endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_surface_intact_default.yaml +3 -6
- endoreg_db/data/{finding_location_classification_choice/colonoscopy.yaml → finding_classification_choice/colonoscopy_location.yaml} +11 -22
- endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +19 -0
- endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +82 -0
- endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +15 -0
- endoreg_db/data/finding_classification_choice/complication_generic_types.yaml +15 -0
- endoreg_db/data/finding_classification_choice/examination_setting_generic_types.yaml +15 -0
- endoreg_db/data/finding_classification_choice/histology.yaml +24 -0
- endoreg_db/data/finding_classification_choice/histology_polyp.yaml +20 -0
- endoreg_db/data/finding_classification_choice/outcome.yaml +19 -0
- endoreg_db/data/finding_classification_choice/yes_no_na.yaml +11 -0
- endoreg_db/data/finding_classification_type/colonoscopy_basic.yaml +48 -0
- endoreg_db/data/finding_intervention/endoscopy.yaml +26 -121
- endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +168 -0
- endoreg_db/data/finding_intervention/endoscopy_egd.yaml +128 -0
- endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +32 -0
- endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +9 -0
- endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +36 -0
- endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +6 -6
- endoreg_db/data/finding_type/data.yaml +23 -10
- endoreg_db/data/gender/data.yaml +8 -1
- endoreg_db/data/information_source/annotation.yaml +6 -0
- endoreg_db/data/information_source/endoscopy_guidelines.yaml +7 -0
- endoreg_db/data/information_source/prediction.yaml +7 -0
- endoreg_db/data/information_source_type/data.yaml +8 -0
- endoreg_db/data/lab_value/misc.yaml +43 -0
- endoreg_db/data/medication/anticoagulation.yaml +5 -5
- endoreg_db/data/medication/tah.yaml +5 -5
- endoreg_db/data/medication_indication/anticoagulation.yaml +4 -4
- endoreg_db/data/medication_intake_time/base.yaml +4 -4
- endoreg_db/data/names_first/first_names.yaml +3 -0
- endoreg_db/data/pdf_type/data.yaml +27 -10
- endoreg_db/data/qualification/endoscopy.yaml +36 -0
- endoreg_db/data/qualification/m2.yaml +39 -0
- endoreg_db/data/qualification/outpatient_clinic.yaml +35 -0
- endoreg_db/data/qualification/sonography.yaml +36 -0
- endoreg_db/data/qualification_type/base.yaml +29 -0
- endoreg_db/data/report_reader_flag/rkh-histology-generic.yaml +10 -0
- endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +5 -0
- endoreg_db/data/requirement/age.yaml +26 -0
- endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +45 -0
- endoreg_db/data/requirement/disease_cardiovascular.yaml +79 -0
- endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +41 -0
- endoreg_db/data/requirement/disease_hepatology.yaml +12 -0
- endoreg_db/data/requirement/disease_misc.yaml +12 -0
- endoreg_db/data/requirement/disease_renal.yaml +96 -0
- endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +59 -0
- endoreg_db/data/requirement/event_cardiology.yaml +251 -0
- endoreg_db/data/requirement/event_requirements.yaml +145 -0
- endoreg_db/data/requirement/finding_colon_polyp.yaml +50 -0
- endoreg_db/data/requirement/gender.yaml +25 -0
- endoreg_db/data/requirement/lab_value.yaml +441 -0
- endoreg_db/data/requirement/medication.yaml +93 -0
- endoreg_db/data/requirement_operator/age.yaml +13 -0
- endoreg_db/data/requirement_operator/lab_operators.yaml +129 -0
- endoreg_db/data/requirement_operator/model_operators.yaml +96 -0
- endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +48 -0
- endoreg_db/data/requirement_set/colonoscopy_austria_screening.yaml +57 -0
- endoreg_db/data/requirement_set/endoscopy_bleeding_risk.yaml +52 -0
- endoreg_db/data/requirement_set_type/data.yaml +20 -0
- endoreg_db/data/requirement_type/requirement_types.yaml +165 -0
- endoreg_db/data/risk/bleeding.yaml +26 -0
- endoreg_db/data/risk/thrombosis.yaml +37 -0
- endoreg_db/data/risk_type/data.yaml +27 -0
- endoreg_db/data/shift/endoscopy.yaml +21 -0
- endoreg_db/data/shift_type/base.yaml +35 -0
- endoreg_db/data/tag/requirement_set_tags.yaml +11 -0
- endoreg_db/data/unit/concentration.yaml +23 -0
- endoreg_db/data/unit/time.yaml +36 -1
- endoreg_db/exceptions.py +19 -0
- endoreg_db/forms/patient_finding_intervention_form.py +4 -5
- endoreg_db/forms/patient_form.py +7 -6
- endoreg_db/forms/questionnaires/__init__.py +1 -1
- endoreg_db/forms/questionnaires/tto_questionnaire.py +19 -19
- endoreg_db/helpers/count_db.py +45 -0
- endoreg_db/helpers/data_loader.py +208 -0
- endoreg_db/helpers/default_objects.py +359 -0
- endoreg_db/helpers/interact.py +6 -0
- endoreg_db/helpers/test_video_helper.py +119 -0
- endoreg_db/logger_conf.py +140 -0
- endoreg_db/management/__init__.py +1 -0
- endoreg_db/management/commands/__init__.py +1 -0
- endoreg_db/management/commands/anonymize_video.py +0 -0
- endoreg_db/management/commands/check_auth.py +125 -0
- endoreg_db/management/commands/create_multilabel_model_meta.py +214 -0
- endoreg_db/management/commands/fix_missing_patient_data.py +172 -0
- endoreg_db/management/commands/fix_video_paths.py +165 -0
- endoreg_db/management/commands/import_fallback_video.py +203 -0
- endoreg_db/management/commands/import_report.py +298 -0
- endoreg_db/management/commands/import_video.py +422 -0
- endoreg_db/management/commands/import_video_with_classification.py +367 -0
- endoreg_db/management/commands/init_default_ai_model.py +112 -0
- endoreg_db/management/commands/load_ai_model_data.py +2 -7
- endoreg_db/management/commands/load_base_db_data.py +15 -1
- endoreg_db/management/commands/load_center_data.py +46 -21
- endoreg_db/management/commands/load_endoscope_data.py +2 -2
- endoreg_db/management/commands/load_examination_indication_data.py +49 -28
- endoreg_db/management/commands/load_finding_data.py +49 -92
- endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +0 -1
- endoreg_db/management/commands/load_information_source.py +13 -7
- endoreg_db/management/commands/load_qualification_data.py +59 -0
- endoreg_db/management/commands/load_requirement_data.py +180 -0
- endoreg_db/management/commands/load_risk_data.py +56 -0
- endoreg_db/management/commands/load_shift_data.py +60 -0
- endoreg_db/management/commands/load_tag_data.py +57 -0
- endoreg_db/management/commands/register_ai_model.py +1 -1
- endoreg_db/management/commands/start_filewatcher.py +106 -0
- endoreg_db/management/commands/storage_management.py +548 -0
- endoreg_db/management/commands/summarize_db_content.py +189 -0
- endoreg_db/management/commands/validate_video.py +204 -0
- endoreg_db/management/commands/validate_video_files.py +161 -0
- endoreg_db/management/commands/video_validation.py +22 -0
- endoreg_db/migrations/0001_initial.py +625 -813
- endoreg_db/migrations/0002_add_video_correction_models.py +52 -0
- endoreg_db/models/__init__.py +274 -291
- endoreg_db/models/administration/__init__.py +116 -0
- endoreg_db/models/{ai_model → administration/ai}/__init__.py +6 -1
- endoreg_db/models/administration/ai/active_model.py +35 -0
- endoreg_db/models/administration/ai/ai_model.py +156 -0
- endoreg_db/models/{ai_model → administration/ai}/model_type.py +6 -1
- endoreg_db/models/administration/case/__init__.py +19 -0
- endoreg_db/models/administration/case/case.py +114 -0
- endoreg_db/models/{case_template → administration/case/case_template}/case_template.py +3 -3
- endoreg_db/models/{case_template → administration/case/case_template}/case_template_rule.py +3 -10
- endoreg_db/models/{case_template → administration/case/case_template}/case_template_rule_value.py +2 -4
- endoreg_db/models/{case_template → administration/case/case_template}/case_template_type.py +1 -3
- endoreg_db/models/{center → administration/center}/__init__.py +3 -1
- endoreg_db/models/administration/center/center.py +61 -0
- endoreg_db/models/administration/center/center_product.py +64 -0
- endoreg_db/models/{center → administration/center}/center_resource.py +19 -3
- endoreg_db/models/administration/center/center_shift.py +88 -0
- endoreg_db/models/administration/center/center_waste.py +30 -0
- endoreg_db/models/administration/permissions/__init__.py +44 -0
- endoreg_db/models/administration/person/__init__.py +24 -0
- endoreg_db/models/administration/person/employee/__init__.py +3 -0
- endoreg_db/models/administration/person/employee/employee.py +35 -0
- endoreg_db/models/administration/person/employee/employee_qualification.py +39 -0
- endoreg_db/models/administration/person/employee/employee_type.py +42 -0
- endoreg_db/models/administration/person/examiner/__init__.py +4 -0
- endoreg_db/models/administration/person/examiner/examiner.py +54 -0
- endoreg_db/models/administration/person/names/__init__.py +0 -0
- endoreg_db/models/{persons → administration/person/names}/first_name.py +1 -1
- endoreg_db/models/{persons → administration/person/names}/last_name.py +2 -3
- endoreg_db/models/administration/person/patient/__init__.py +5 -0
- endoreg_db/models/administration/person/patient/patient.py +460 -0
- endoreg_db/models/administration/person/profession/__init__.py +24 -0
- endoreg_db/models/administration/person/user/__init__.py +5 -0
- endoreg_db/models/administration/person/user/portal_user_information.py +37 -0
- endoreg_db/models/administration/product/product.py +97 -0
- endoreg_db/models/administration/product/product_group.py +39 -0
- endoreg_db/models/administration/product/product_material.py +54 -0
- endoreg_db/models/{product → administration/product}/product_weight.py +9 -0
- endoreg_db/models/{product → administration/product}/reference_product.py +26 -11
- endoreg_db/models/administration/qualification/__init__.py +7 -0
- endoreg_db/models/administration/qualification/qualification.py +37 -0
- endoreg_db/models/administration/qualification/qualification_type.py +35 -0
- endoreg_db/models/administration/shift/__init__.py +9 -0
- endoreg_db/models/administration/shift/scheduled_days.py +69 -0
- endoreg_db/models/administration/shift/shift.py +51 -0
- endoreg_db/models/administration/shift/shift_type.py +108 -0
- endoreg_db/models/label/__init__.py +24 -1
- endoreg_db/models/label/annotation/__init__.py +12 -0
- endoreg_db/models/label/annotation/image_classification.py +84 -0
- endoreg_db/models/label/annotation/video_segmentation_annotation.py +66 -0
- endoreg_db/models/label/label.py +45 -74
- endoreg_db/models/label/label_set.py +53 -0
- endoreg_db/models/label/label_type.py +29 -0
- endoreg_db/models/label/label_video_segment/__init__.py +3 -0
- endoreg_db/models/label/label_video_segment/_create_from_video.py +41 -0
- endoreg_db/models/label/label_video_segment/label_video_segment.py +511 -0
- endoreg_db/models/label/video_segmentation_label.py +31 -0
- endoreg_db/models/{annotation → label}/video_segmentation_labelset.py +7 -0
- endoreg_db/models/media/__init__.py +14 -0
- endoreg_db/models/media/frame/__init__.py +3 -0
- endoreg_db/models/media/frame/frame.py +111 -0
- endoreg_db/models/media/pdf/__init__.py +11 -0
- endoreg_db/models/media/pdf/raw_pdf.py +608 -0
- endoreg_db/models/media/pdf/report_file.py +162 -0
- endoreg_db/models/media/pdf/report_reader/report_reader_config.py +77 -0
- endoreg_db/models/media/video/__init__.py +4 -0
- endoreg_db/models/media/video/create_from_file.py +336 -0
- endoreg_db/models/media/video/pipe_1.py +195 -0
- endoreg_db/models/media/video/pipe_2.py +105 -0
- endoreg_db/models/media/video/refactor_plan.md +0 -0
- endoreg_db/models/media/video/video_file.py +680 -0
- endoreg_db/models/media/video/video_file_ai.py +443 -0
- endoreg_db/models/media/video/video_file_anonymize.py +348 -0
- endoreg_db/models/media/video/video_file_frames/__init__.py +47 -0
- endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py +22 -0
- endoreg_db/models/media/video/video_file_frames/_create_frame_object.py +23 -0
- endoreg_db/models/media/video/video_file_frames/_delete_frames.py +104 -0
- endoreg_db/models/media/video/video_file_frames/_extract_frames.py +174 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame.py +28 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_number.py +27 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_path.py +20 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_paths.py +27 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_range.py +34 -0
- endoreg_db/models/media/video/video_file_frames/_get_frames.py +27 -0
- endoreg_db/models/media/video/video_file_frames/_initialize_frames.py +129 -0
- endoreg_db/models/media/video/video_file_frames/_manage_frame_range.py +129 -0
- endoreg_db/models/media/video/video_file_frames/_mark_frames_extracted_status.py +65 -0
- endoreg_db/models/media/video/video_file_frames.py +0 -0
- endoreg_db/models/media/video/video_file_io.py +166 -0
- endoreg_db/models/media/video/video_file_meta/__init__.py +22 -0
- endoreg_db/models/media/video/video_file_meta/get_crop_template.py +45 -0
- endoreg_db/models/media/video/video_file_meta/get_endo_roi.py +39 -0
- endoreg_db/models/media/video/video_file_meta/get_fps.py +147 -0
- endoreg_db/models/media/video/video_file_meta/initialize_video_specs.py +143 -0
- endoreg_db/models/media/video/video_file_meta/text_meta.py +134 -0
- endoreg_db/models/media/video/video_file_meta/video_meta.py +70 -0
- endoreg_db/models/media/video/video_file_meta.py +11 -0
- endoreg_db/models/media/video/video_file_segments.py +209 -0
- endoreg_db/models/medical/__init__.py +146 -0
- endoreg_db/models/{contraindication → medical/contraindication}/__init__.py +1 -5
- endoreg_db/models/medical/disease.py +156 -0
- endoreg_db/models/medical/event.py +137 -0
- endoreg_db/models/{examination → medical/examination}/__init__.py +1 -1
- endoreg_db/models/medical/examination/examination.py +148 -0
- endoreg_db/models/medical/examination/examination_indication.py +278 -0
- endoreg_db/models/{examination → medical/examination}/examination_time.py +0 -4
- endoreg_db/models/{examination → medical/examination}/examination_time_type.py +1 -8
- endoreg_db/models/{examination → medical/examination}/examination_type.py +18 -10
- endoreg_db/models/medical/finding/__init__.py +18 -0
- endoreg_db/models/medical/finding/finding.py +96 -0
- endoreg_db/models/medical/finding/finding_classification.py +142 -0
- endoreg_db/models/{finding → medical/finding}/finding_intervention.py +2 -10
- endoreg_db/models/medical/finding/finding_type.py +35 -0
- endoreg_db/models/medical/hardware/__init__.py +8 -0
- endoreg_db/models/{hardware → medical/hardware}/endoscope.py +28 -23
- endoreg_db/models/medical/laboratory/__init__.py +5 -0
- endoreg_db/models/medical/laboratory/lab_value.py +419 -0
- endoreg_db/models/{medication → medical/medication}/medication.py +1 -3
- endoreg_db/models/{medication → medical/medication}/medication_indication_type.py +8 -3
- endoreg_db/models/{medication → medical/medication}/medication_intake_time.py +21 -3
- endoreg_db/models/{medication → medical/medication}/medication_schedule.py +13 -5
- endoreg_db/models/{organ → medical/organ}/__init__.py +3 -6
- endoreg_db/models/medical/patient/__init__.py +56 -0
- endoreg_db/models/medical/patient/medication_examples.py +38 -0
- endoreg_db/models/medical/patient/patient_disease.py +63 -0
- endoreg_db/models/medical/patient/patient_event.py +75 -0
- endoreg_db/models/medical/patient/patient_examination.py +249 -0
- endoreg_db/models/{persons → medical}/patient/patient_examination_indication.py +21 -9
- endoreg_db/models/medical/patient/patient_finding.py +357 -0
- endoreg_db/models/medical/patient/patient_finding_classification.py +207 -0
- endoreg_db/models/{patient → medical/patient}/patient_finding_intervention.py +15 -1
- endoreg_db/models/medical/patient/patient_lab_sample.py +148 -0
- endoreg_db/models/{persons → medical}/patient/patient_lab_value.py +40 -15
- endoreg_db/models/medical/patient/patient_medication.py +104 -0
- endoreg_db/models/medical/patient/patient_medication_schedule.py +136 -0
- endoreg_db/models/medical/risk/__init__.py +7 -0
- endoreg_db/models/medical/risk/risk.py +72 -0
- endoreg_db/models/medical/risk/risk_type.py +51 -0
- endoreg_db/models/{data_file/metadata → metadata}/__init__.py +6 -0
- endoreg_db/models/metadata/frame_ocr_result.py +0 -0
- endoreg_db/models/metadata/model_meta.py +193 -0
- endoreg_db/models/metadata/model_meta_logic.py +236 -0
- endoreg_db/models/{data_file/metadata → metadata}/pdf_meta.py +28 -13
- endoreg_db/models/metadata/sensitive_meta.py +288 -0
- endoreg_db/models/metadata/sensitive_meta_logic.py +643 -0
- endoreg_db/models/metadata/video_meta.py +332 -0
- endoreg_db/models/metadata/video_prediction_logic.py +190 -0
- endoreg_db/models/metadata/video_prediction_meta.py +270 -0
- endoreg_db/models/other/__init__.py +17 -0
- endoreg_db/models/other/distribution/date_value_distribution.py +0 -2
- endoreg_db/models/other/distribution/numeric_value_distribution.py +30 -2
- endoreg_db/models/{emission → other/emission}/emission_factor.py +15 -6
- endoreg_db/models/{persons → other}/gender.py +8 -3
- endoreg_db/models/other/information_source.py +159 -0
- endoreg_db/models/other/material.py +10 -2
- endoreg_db/models/other/resource.py +6 -2
- endoreg_db/models/other/tag.py +27 -0
- endoreg_db/models/other/transport_route.py +13 -2
- endoreg_db/models/{unit.py → other/unit.py} +16 -6
- endoreg_db/models/other/waste.py +10 -3
- endoreg_db/models/requirement/__init__.py +11 -0
- endoreg_db/models/requirement/requirement.py +767 -0
- endoreg_db/models/requirement/requirement_evaluation/__init__.py +6 -0
- endoreg_db/models/requirement/requirement_evaluation/get_values.py +40 -0
- endoreg_db/models/requirement/requirement_evaluation/operator_evaluation_models.py +9 -0
- endoreg_db/models/requirement/requirement_evaluation/requirement_type_parser.py +95 -0
- endoreg_db/models/requirement/requirement_operator.py +176 -0
- endoreg_db/models/requirement/requirement_set.py +287 -0
- endoreg_db/models/rule/__init__.py +13 -0
- endoreg_db/models/{rules → rule}/rule.py +6 -3
- endoreg_db/models/{rules → rule}/rule_attribute_dtype.py +0 -2
- endoreg_db/models/{rules → rule}/rule_type.py +0 -2
- endoreg_db/models/{rules → rule}/ruleset.py +0 -2
- endoreg_db/models/state/__init__.py +12 -0
- endoreg_db/models/state/abstract.py +11 -0
- endoreg_db/models/state/audit_ledger.py +150 -0
- endoreg_db/models/state/label_video_segment.py +22 -0
- endoreg_db/models/state/raw_pdf.py +187 -0
- endoreg_db/models/state/sensitive_meta.py +46 -0
- endoreg_db/models/state/video.py +232 -0
- endoreg_db/models/upload_job.py +99 -0
- endoreg_db/models/utils.py +135 -0
- endoreg_db/models/video_metadata.py +66 -0
- endoreg_db/models/video_processing.py +153 -0
- endoreg_db/renames.yml +8 -0
- endoreg_db/root_urls.py +9 -0
- endoreg_db/schemas/__init__.py +0 -0
- endoreg_db/schemas/examination_evaluation.py +27 -0
- endoreg_db/serializers/Frames_NICE_and_PARIS_classifications.py +775 -0
- endoreg_db/serializers/__init__.py +147 -10
- endoreg_db/serializers/{raw_pdf_meta_validation.py → _old/raw_pdf_meta_validation.py} +3 -3
- endoreg_db/serializers/{raw_video_meta_validation.py → _old/raw_video_meta_validation.py} +18 -14
- endoreg_db/serializers/_old/video.py +71 -0
- endoreg_db/serializers/administration/__init__.py +14 -0
- endoreg_db/serializers/administration/ai/__init__.py +10 -0
- endoreg_db/serializers/administration/ai/active_model.py +10 -0
- endoreg_db/serializers/administration/ai/ai_model.py +18 -0
- endoreg_db/serializers/administration/ai/model_type.py +10 -0
- endoreg_db/serializers/administration/center.py +9 -0
- endoreg_db/serializers/administration/gender.py +9 -0
- endoreg_db/serializers/anonymization.py +66 -0
- endoreg_db/serializers/evaluation/examination_evaluation.py +1 -0
- endoreg_db/serializers/examination/__init__.py +10 -0
- endoreg_db/serializers/examination/base.py +46 -0
- endoreg_db/serializers/examination/dropdown.py +21 -0
- endoreg_db/serializers/examination_serializer.py +12 -0
- endoreg_db/serializers/finding/__init__.py +5 -0
- endoreg_db/serializers/finding/finding.py +54 -0
- endoreg_db/serializers/finding_classification/__init__.py +7 -0
- endoreg_db/serializers/finding_classification/choice.py +19 -0
- endoreg_db/serializers/finding_classification/classification.py +13 -0
- endoreg_db/serializers/label/__init__.py +7 -0
- endoreg_db/serializers/label/image_classification_annotation.py +62 -0
- endoreg_db/serializers/label/label.py +15 -0
- endoreg_db/serializers/label_video_segment/__init__.py +7 -0
- endoreg_db/serializers/label_video_segment/_lvs_create.py +149 -0
- endoreg_db/serializers/label_video_segment/_lvs_update.py +138 -0
- endoreg_db/serializers/label_video_segment/_lvs_validate.py +149 -0
- endoreg_db/serializers/label_video_segment/label_video_segment.py +344 -0
- endoreg_db/serializers/label_video_segment/label_video_segment_annotation.py +99 -0
- endoreg_db/serializers/label_video_segment/label_video_segment_update.py +163 -0
- endoreg_db/serializers/meta/__init__.py +19 -0
- endoreg_db/serializers/meta/pdf_file_meta_extraction.py +115 -0
- endoreg_db/serializers/meta/report_meta.py +53 -0
- endoreg_db/serializers/meta/sensitive_meta_detail.py +162 -0
- endoreg_db/serializers/meta/sensitive_meta_update.py +148 -0
- endoreg_db/serializers/meta/sensitive_meta_verification.py +59 -0
- endoreg_db/serializers/meta/video_meta.py +39 -0
- endoreg_db/serializers/misc/__init__.py +14 -0
- endoreg_db/serializers/misc/file_overview.py +152 -0
- endoreg_db/serializers/misc/stats.py +33 -0
- endoreg_db/serializers/misc/translatable_field_mix_in.py +44 -0
- endoreg_db/serializers/misc/upload_job.py +71 -0
- endoreg_db/serializers/misc/vop_patient_data.py +120 -0
- endoreg_db/serializers/patient/__init__.py +11 -0
- endoreg_db/serializers/patient/patient.py +86 -0
- endoreg_db/serializers/patient/patient_dropdown.py +27 -0
- endoreg_db/serializers/patient_examination/__init__.py +7 -0
- endoreg_db/serializers/patient_examination/patient_examination.py +141 -0
- endoreg_db/serializers/patient_finding/__init__.py +15 -0
- endoreg_db/serializers/patient_finding/patient_finding.py +31 -0
- endoreg_db/serializers/patient_finding/patient_finding_classification.py +39 -0
- endoreg_db/serializers/patient_finding/patient_finding_detail.py +53 -0
- endoreg_db/serializers/patient_finding/patient_finding_intervention.py +26 -0
- endoreg_db/serializers/patient_finding/patient_finding_list.py +41 -0
- endoreg_db/serializers/patient_finding/patient_finding_write.py +126 -0
- endoreg_db/serializers/pdf/__init__.py +5 -0
- endoreg_db/serializers/pdf/anony_text_validation.py +85 -0
- endoreg_db/serializers/report/__init__.py +9 -0
- endoreg_db/serializers/report/mixins.py +45 -0
- endoreg_db/serializers/report/report.py +105 -0
- endoreg_db/serializers/report/report_list.py +22 -0
- endoreg_db/serializers/report/secure_file_url.py +26 -0
- endoreg_db/serializers/requirements/requirement_schema.py +25 -0
- endoreg_db/serializers/requirements/requirement_sets.py +29 -0
- endoreg_db/serializers/sensitive_meta_serializer.py +282 -0
- endoreg_db/serializers/video/__init__.py +7 -0
- endoreg_db/serializers/video/segmentation.py +263 -0
- endoreg_db/serializers/video/video_file_brief.py +10 -0
- endoreg_db/serializers/video/video_file_detail.py +83 -0
- endoreg_db/serializers/video/video_file_list.py +67 -0
- endoreg_db/serializers/video/video_metadata.py +105 -0
- endoreg_db/serializers/video/video_processing_history.py +153 -0
- endoreg_db/services/__init__.py +5 -0
- endoreg_db/services/anonymization.py +223 -0
- endoreg_db/services/examination_evaluation.py +149 -0
- endoreg_db/services/finding_description_service.py +0 -0
- endoreg_db/services/lookup_service.py +241 -0
- endoreg_db/services/lookup_store.py +122 -0
- endoreg_db/services/ollama_api_docs.py +1528 -0
- endoreg_db/services/pdf_import.py +993 -0
- endoreg_db/services/polling_coordinator.py +288 -0
- endoreg_db/services/pseudonym_service.py +89 -0
- endoreg_db/services/requirements_object.py +147 -0
- endoreg_db/services/segment_sync.py +155 -0
- endoreg_db/services/storage_aware_video_processor.py +344 -0
- endoreg_db/services/video_import.py +915 -0
- endoreg_db/tasks/upload_tasks.py +207 -0
- endoreg_db/tasks/video_ingest.py +157 -0
- endoreg_db/tasks/video_processing_tasks.py +327 -0
- endoreg_db/urls/__init__.py +72 -0
- endoreg_db/urls/anonymization.py +32 -0
- endoreg_db/urls/auth.py +16 -0
- endoreg_db/urls/classification.py +39 -0
- endoreg_db/urls/examination.py +54 -0
- endoreg_db/urls/files.py +6 -0
- endoreg_db/urls/label_video_segment_validate.py +33 -0
- endoreg_db/urls/label_video_segments.py +44 -0
- endoreg_db/urls/media.py +32 -0
- endoreg_db/urls/patient.py +19 -0
- endoreg_db/urls/pdf.py +0 -0
- endoreg_db/urls/report.py +78 -0
- endoreg_db/urls/requirements.py +13 -0
- endoreg_db/urls/sensitive_meta.py +36 -0
- endoreg_db/urls/stats.py +46 -0
- endoreg_db/urls/upload.py +20 -0
- endoreg_db/urls/video.py +119 -0
- endoreg_db/urls.py +6 -269
- endoreg_db/utils/__init__.py +68 -16
- endoreg_db/utils/ai/__init__.py +9 -0
- endoreg_db/{models/ai_model/utils.py → utils/ai/get.py} +1 -4
- endoreg_db/{models/ai_model/lightning → utils/ai}/inference_dataset.py +0 -1
- endoreg_db/{models/ai_model/lightning → utils/ai}/multilabel_classification_net.py +14 -10
- endoreg_db/{models/ai_model/lightning → utils/ai}/postprocess.py +15 -5
- endoreg_db/utils/ai/predict.py +291 -0
- endoreg_db/{models/ai_model/lightning → utils/ai}/preprocess.py +1 -1
- endoreg_db/utils/calc_duration_seconds.py +24 -0
- endoreg_db/utils/case_generator/__init__.py +0 -0
- endoreg_db/utils/check_video_files.py +148 -0
- endoreg_db/utils/dataloader.py +88 -31
- endoreg_db/utils/dates.py +21 -0
- endoreg_db/utils/env.py +33 -0
- endoreg_db/utils/extract_specific_frames.py +72 -0
- endoreg_db/utils/file_operations.py +29 -1
- endoreg_db/utils/fix_video_path_direct.py +141 -0
- endoreg_db/utils/frame_anonymization_utils.py +463 -0
- endoreg_db/utils/hashs.py +1 -0
- endoreg_db/utils/links/__init__.py +0 -0
- endoreg_db/utils/links/requirement_link.py +193 -0
- endoreg_db/utils/mime_types.py +0 -0
- endoreg_db/utils/names.py +2 -0
- endoreg_db/utils/paths.py +104 -0
- endoreg_db/utils/permissions.py +143 -0
- endoreg_db/utils/pipelines/Readme.md +235 -0
- endoreg_db/utils/pipelines/__init__.py +0 -0
- endoreg_db/utils/pipelines/process_video_dir.py +120 -0
- endoreg_db/utils/product/__init__.py +0 -0
- endoreg_db/utils/product/sum_emissions.py +20 -0
- endoreg_db/utils/product/sum_weights.py +18 -0
- endoreg_db/utils/pydantic_models/db_config.py +1 -1
- endoreg_db/utils/requirement_helpers.py +0 -0
- endoreg_db/utils/requirement_operator_logic/__init__.py +0 -0
- endoreg_db/utils/requirement_operator_logic/lab_value_operators.py +578 -0
- endoreg_db/utils/requirement_operator_logic/model_evaluators.py +368 -0
- endoreg_db/utils/translation.py +27 -0
- endoreg_db/utils/validate_video_detailed.py +357 -0
- endoreg_db/utils/video/__init__.py +19 -6
- endoreg_db/utils/video/extract_frames.py +37 -70
- endoreg_db/utils/video/ffmpeg_wrapper.py +772 -0
- endoreg_db/utils/video/names.py +42 -0
- endoreg_db/utils/video/streaming_processor.py +312 -0
- endoreg_db/utils/video/video_splitter.py +94 -0
- endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py +238 -0
- endoreg_db/views/__init__.py +282 -2
- endoreg_db/views/anonymization/__init__.py +27 -0
- endoreg_db/views/anonymization/media_management.py +454 -0
- endoreg_db/views/anonymization/overview.py +216 -0
- endoreg_db/views/anonymization/validate.py +63 -0
- endoreg_db/views/auth/__init__.py +13 -0
- endoreg_db/views/auth/keycloak.py +113 -0
- endoreg_db/views/examination/__init__.py +33 -0
- endoreg_db/views/examination/examination.py +37 -0
- endoreg_db/views/examination/examination_manifest_cache.py +26 -0
- endoreg_db/views/examination/get_finding_classification_choices.py +59 -0
- endoreg_db/views/examination/get_finding_classifications.py +36 -0
- endoreg_db/views/examination/get_findings.py +41 -0
- endoreg_db/views/examination/get_instruments.py +18 -0
- endoreg_db/views/examination/get_interventions.py +14 -0
- endoreg_db/views/finding/__init__.py +9 -0
- endoreg_db/views/finding/finding.py +112 -0
- endoreg_db/views/finding/get_classifications.py +14 -0
- endoreg_db/views/finding/get_interventions.py +17 -0
- endoreg_db/views/finding_classification/__init__.py +13 -0
- endoreg_db/views/finding_classification/base.py +0 -0
- endoreg_db/views/finding_classification/finding_classification.py +42 -0
- endoreg_db/views/finding_classification/get_classification_choices.py +55 -0
- endoreg_db/views/label/__init__.py +5 -0
- endoreg_db/views/label/label.py +15 -0
- endoreg_db/views/label_video_segment/__init__.py +16 -0
- endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +44 -0
- endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +50 -0
- endoreg_db/views/label_video_segment/label_video_segment.py +77 -0
- endoreg_db/views/label_video_segment/label_video_segment_by_label.py +174 -0
- endoreg_db/views/label_video_segment/label_video_segment_detail.py +73 -0
- endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +46 -0
- endoreg_db/views/label_video_segment/validate.py +226 -0
- endoreg_db/views/media/__init__.py +9 -0
- endoreg_db/views/media/pdf_media.py +386 -0
- endoreg_db/views/media/video_media.py +272 -0
- endoreg_db/views/meta/__init__.py +15 -0
- endoreg_db/views/meta/available_files_list.py +146 -0
- endoreg_db/views/meta/report_meta.py +53 -0
- endoreg_db/views/meta/sensitive_meta_detail.py +148 -0
- endoreg_db/views/meta/sensitive_meta_list.py +104 -0
- endoreg_db/views/meta/sensitive_meta_verification.py +71 -0
- endoreg_db/views/misc/__init__.py +63 -0
- endoreg_db/views/misc/center.py +13 -0
- endoreg_db/views/misc/gender.py +14 -0
- endoreg_db/views/misc/secure_file_serving_view.py +80 -0
- endoreg_db/views/misc/secure_file_url_view.py +84 -0
- endoreg_db/views/misc/secure_url_validate.py +79 -0
- endoreg_db/views/misc/stats.py +220 -0
- endoreg_db/views/misc/translation.py +182 -0
- endoreg_db/views/misc/upload_views.py +240 -0
- endoreg_db/views/patient/__init__.py +5 -0
- endoreg_db/views/patient/patient.py +210 -0
- endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +164 -0
- endoreg_db/views/patient_examination/__init__.py +11 -0
- endoreg_db/views/patient_examination/patient_examination.py +140 -0
- endoreg_db/views/patient_examination/patient_examination_create.py +63 -0
- endoreg_db/views/patient_examination/patient_examination_detail.py +66 -0
- endoreg_db/views/patient_examination/patient_examination_list.py +68 -0
- endoreg_db/views/patient_examination/video.py +194 -0
- endoreg_db/views/patient_finding/__init__.py +7 -0
- endoreg_db/views/patient_finding/base.py +0 -0
- endoreg_db/views/patient_finding/patient_finding.py +64 -0
- endoreg_db/views/patient_finding/patient_finding_optimized.py +259 -0
- endoreg_db/views/patient_finding_classification/__init__.py +5 -0
- endoreg_db/views/patient_finding_classification/pfc_create.py +67 -0
- endoreg_db/views/patient_finding_location/__init__.py +5 -0
- endoreg_db/views/patient_finding_location/pfl_create.py +70 -0
- endoreg_db/views/patient_finding_morphology/__init__.py +5 -0
- endoreg_db/views/patient_finding_morphology/pfm_create.py +70 -0
- endoreg_db/views/pdf/__init__.py +11 -0
- endoreg_db/views/pdf/pdf_media.py +239 -0
- endoreg_db/views/pdf/pdf_stream_views.py +127 -0
- endoreg_db/views/pdf/reimport.py +151 -0
- endoreg_db/views/report/__init__.py +9 -0
- endoreg_db/views/report/report_list.py +112 -0
- endoreg_db/views/report/report_with_secure_url.py +28 -0
- endoreg_db/views/report/start_examination.py +7 -0
- endoreg_db/views/requirement/__init__.py +10 -0
- endoreg_db/views/requirement/evaluate.py +279 -0
- endoreg_db/views/requirement/lookup.py +483 -0
- endoreg_db/views/requirement/lookup_store.py +252 -0
- endoreg_db/views/requirement_lookup/lookup.py +0 -0
- endoreg_db/views/requirement_lookup/lookup_store.py +0 -0
- endoreg_db/views/stats/__init__.py +13 -0
- endoreg_db/views/stats/stats_views.py +229 -0
- endoreg_db/views/video/__init__.py +72 -0
- endoreg_db/views/video/correction.py +672 -0
- endoreg_db/views/video/media/__init__.py +23 -0
- endoreg_db/views/video/media/task_status.py +49 -0
- endoreg_db/views/video/media/video_analyze.py +52 -0
- endoreg_db/views/video/media/video_apply_mask.py +48 -0
- endoreg_db/views/video/media/video_correction.py +21 -0
- endoreg_db/views/video/media/video_download_processed.py +58 -0
- endoreg_db/views/video/media/video_media.py +158 -0
- endoreg_db/views/video/media/video_meta.py +29 -0
- endoreg_db/views/video/media/video_processing_history.py +24 -0
- endoreg_db/views/video/media/video_remove_frames.py +48 -0
- endoreg_db/views/video/media/video_reprocess.py +40 -0
- endoreg_db/views/video/reimport.py +192 -0
- endoreg_db/views/video/segmentation.py +274 -0
- endoreg_db/views/{views_for_timeline.py → video/timeline.py} +3 -3
- endoreg_db/views/video/video_examination_viewset.py +329 -0
- endoreg_db/views/video/video_stream.py +188 -0
- endoreg_db-0.8.1.dist-info/METADATA +384 -0
- endoreg_db-0.8.1.dist-info/RECORD +789 -0
- endoreg_db/data/agl_service/data.yaml +0 -19
- endoreg_db/data/finding_location_classification/colonoscopy.yaml +0 -46
- endoreg_db/data/finding_morphology_classification/colonoscopy.yaml +0 -48
- endoreg_db/data/finding_morphology_classification_choice/colonoscopy_size.yaml +0 -57
- endoreg_db/management/commands/_load_model_template.py +0 -41
- endoreg_db/management/commands/delete_all.py +0 -18
- endoreg_db/management/commands/fetch_legacy_image_dataset.py +0 -32
- endoreg_db/management/commands/fix_auth_permission.py +0 -20
- endoreg_db/management/commands/load_active_model_data.py +0 -45
- endoreg_db/management/commands/load_g_play_data.py +0 -113
- endoreg_db/management/commands/load_logging_data.py +0 -39
- endoreg_db/management/commands/load_lx_data.py +0 -64
- endoreg_db/management/commands/load_medication_indication_data.py +0 -63
- endoreg_db/management/commands/load_medication_indication_type_data.py +0 -41
- endoreg_db/management/commands/load_medication_intake_time_data.py +0 -41
- endoreg_db/management/commands/load_medication_schedule_data.py +0 -55
- endoreg_db/management/commands/load_network_data.py +0 -57
- endoreg_db/migrations/0002_alter_frame_image_alter_rawframe_image.py +0 -23
- endoreg_db/migrations/0003_alter_frame_image_alter_rawframe_image.py +0 -23
- endoreg_db/migrations/0004_alter_rawvideofile_file_alter_video_file.py +0 -25
- endoreg_db/migrations/0005_rawvideofile_frame_count_and_more.py +0 -33
- endoreg_db/migrations/0006_frame_extracted_rawframe_extracted.py +0 -23
- endoreg_db/migrations/0007_rename_pseudo_patient_video_patient_and_more.py +0 -24
- endoreg_db/migrations/0008_remove_reportfile_patient_examination_and_more.py +0 -48
- endoreg_db/models/ai_model/active_model.py +0 -9
- endoreg_db/models/ai_model/ai_model.py +0 -103
- endoreg_db/models/ai_model/lightning/__init__.py +0 -3
- endoreg_db/models/ai_model/lightning/predict.py +0 -172
- endoreg_db/models/ai_model/lightning/prediction_visualizer.py +0 -55
- endoreg_db/models/ai_model/lightning/run_visualizer.py +0 -21
- endoreg_db/models/ai_model/model_meta.py +0 -250
- endoreg_db/models/annotation/__init__.py +0 -32
- endoreg_db/models/annotation/anonymized_image_annotation.py +0 -115
- endoreg_db/models/annotation/binary_classification_annotation_task.py +0 -117
- endoreg_db/models/annotation/image_classification.py +0 -86
- endoreg_db/models/annotation/video_segmentation_annotation.py +0 -52
- endoreg_db/models/case/__init__.py +0 -1
- endoreg_db/models/case/case.py +0 -34
- endoreg_db/models/center/center.py +0 -51
- endoreg_db/models/center/center_product.py +0 -33
- endoreg_db/models/center/center_waste.py +0 -16
- endoreg_db/models/data_file/__init__.py +0 -39
- endoreg_db/models/data_file/base_classes/__init__.py +0 -7
- endoreg_db/models/data_file/base_classes/abstract_frame.py +0 -100
- endoreg_db/models/data_file/base_classes/abstract_pdf.py +0 -136
- endoreg_db/models/data_file/base_classes/abstract_video.py +0 -807
- endoreg_db/models/data_file/base_classes/frame_helpers.py +0 -17
- endoreg_db/models/data_file/base_classes/prepare_bulk_frames.py +0 -19
- endoreg_db/models/data_file/base_classes/utils.py +0 -80
- endoreg_db/models/data_file/frame.py +0 -29
- endoreg_db/models/data_file/import_classes/__init__.py +0 -18
- endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +0 -35
- endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +0 -28
- endoreg_db/models/data_file/import_classes/processing_functions/video.py +0 -260
- endoreg_db/models/data_file/import_classes/raw_pdf.py +0 -260
- endoreg_db/models/data_file/import_classes/raw_video.py +0 -288
- endoreg_db/models/data_file/metadata/sensitive_meta.py +0 -290
- endoreg_db/models/data_file/metadata/video_meta.py +0 -199
- endoreg_db/models/data_file/report_file.py +0 -56
- endoreg_db/models/data_file/video/__init__.py +0 -11
- endoreg_db/models/data_file/video/import_meta.py +0 -25
- endoreg_db/models/data_file/video/video.py +0 -196
- endoreg_db/models/data_file/video_segment.py +0 -214
- endoreg_db/models/disease.py +0 -79
- endoreg_db/models/event.py +0 -73
- endoreg_db/models/examination/examination.py +0 -67
- endoreg_db/models/examination/examination_indication.py +0 -170
- endoreg_db/models/finding/__init__.py +0 -11
- endoreg_db/models/finding/finding.py +0 -75
- endoreg_db/models/finding/finding_location_classification.py +0 -94
- endoreg_db/models/finding/finding_morphology_classification.py +0 -89
- endoreg_db/models/finding/finding_type.py +0 -22
- endoreg_db/models/hardware/__init__.py +0 -2
- endoreg_db/models/information_source.py +0 -29
- endoreg_db/models/laboratory/__init__.py +0 -1
- endoreg_db/models/laboratory/lab_value.py +0 -111
- endoreg_db/models/logging/__init__.py +0 -11
- endoreg_db/models/logging/agl_service.py +0 -19
- endoreg_db/models/logging/base.py +0 -22
- endoreg_db/models/logging/log_type.py +0 -23
- endoreg_db/models/logging/network_device.py +0 -27
- endoreg_db/models/lx/__init__.py +0 -4
- endoreg_db/models/lx/client.py +0 -57
- endoreg_db/models/lx/identity.py +0 -34
- endoreg_db/models/lx/permission.py +0 -18
- endoreg_db/models/lx/user.py +0 -16
- endoreg_db/models/network/__init__.py +0 -9
- endoreg_db/models/network/agl_service.py +0 -38
- endoreg_db/models/network/network_device.py +0 -58
- endoreg_db/models/network/network_device_type.py +0 -23
- endoreg_db/models/other/distribution.py +0 -5
- endoreg_db/models/patient/__init__.py +0 -24
- endoreg_db/models/patient/patient_examination.py +0 -182
- endoreg_db/models/patient/patient_finding.py +0 -143
- endoreg_db/models/patient/patient_finding_location.py +0 -120
- endoreg_db/models/patient/patient_finding_morphology.py +0 -166
- endoreg_db/models/permissions/__init__.py +0 -44
- endoreg_db/models/persons/__init__.py +0 -34
- endoreg_db/models/persons/examiner/__init__.py +0 -2
- endoreg_db/models/persons/examiner/examiner.py +0 -60
- endoreg_db/models/persons/examiner/examiner_type.py +0 -2
- endoreg_db/models/persons/patient/__init__.py +0 -8
- endoreg_db/models/persons/patient/patient.py +0 -389
- endoreg_db/models/persons/patient/patient_disease.py +0 -22
- endoreg_db/models/persons/patient/patient_event.py +0 -52
- endoreg_db/models/persons/patient/patient_lab_sample.py +0 -108
- endoreg_db/models/persons/patient/patient_medication.py +0 -59
- endoreg_db/models/persons/patient/patient_medication_schedule.py +0 -88
- endoreg_db/models/persons/portal_user_information.py +0 -27
- endoreg_db/models/prediction/__init__.py +0 -8
- endoreg_db/models/prediction/image_classification.py +0 -51
- endoreg_db/models/prediction/video_prediction_meta.py +0 -306
- endoreg_db/models/product/product.py +0 -110
- endoreg_db/models/product/product_group.py +0 -27
- endoreg_db/models/product/product_material.py +0 -28
- endoreg_db/models/questionnaires/__init__.py +0 -114
- endoreg_db/models/quiz/__init__.py +0 -9
- endoreg_db/models/quiz/quiz_answer.py +0 -41
- endoreg_db/models/quiz/quiz_question.py +0 -54
- endoreg_db/models/report_reader/report_reader_config.py +0 -53
- endoreg_db/models/rules/__init__.py +0 -5
- endoreg_db/queries/get/__init__.py +0 -6
- endoreg_db/queries/get/center.py +0 -42
- endoreg_db/queries/get/model.py +0 -13
- endoreg_db/queries/get/patient.py +0 -14
- endoreg_db/queries/get/patient_examination.py +0 -20
- endoreg_db/queries/get/report_file.py +0 -33
- endoreg_db/queries/get/video.py +0 -31
- endoreg_db/serializers/ai_model.py +0 -19
- endoreg_db/serializers/annotation.py +0 -14
- endoreg_db/serializers/center.py +0 -11
- endoreg_db/serializers/examination.py +0 -33
- endoreg_db/serializers/frame.py +0 -9
- endoreg_db/serializers/hardware.py +0 -21
- endoreg_db/serializers/label.py +0 -22
- endoreg_db/serializers/patient.py +0 -33
- endoreg_db/serializers/prediction.py +0 -10
- endoreg_db/serializers/raw_pdf_anony_text_validation.py +0 -137
- endoreg_db/serializers/report_file.py +0 -7
- endoreg_db/serializers/video.py +0 -20
- endoreg_db/serializers/video_segmentation.py +0 -587
- endoreg_db/tests.py +0 -3
- endoreg_db/utils/legacy_ocr.py +0 -201
- endoreg_db/utils/video/transcode_videofile.py +0 -111
- endoreg_db/views/patient_views.py +0 -90
- endoreg_db/views/raw_pdf_anony_text_validation_views.py +0 -95
- endoreg_db/views/raw_pdf_meta_validation_views.py +0 -111
- endoreg_db/views/raw_video_meta_validation_views.py +0 -148
- endoreg_db/views/report_views.py +0 -96
- endoreg_db/views/video_segmentation_views.py +0 -166
- endoreg_db-0.6.3.dist-info/METADATA +0 -161
- endoreg_db-0.6.3.dist-info/RECORD +0 -435
- /endoreg_db/{case_generator/__init__.py → api/serializers/finding_descriptions.py} +0 -0
- /endoreg_db/{queries/get/annotation.py → api/views/finding_descriptions.py} +0 -0
- /endoreg_db/{queries/get/prediction.py → data/shift/m2.yaml} +0 -0
- /endoreg_db/{queries/get/video_import_meta.py → factories/__init__.py} +0 -0
- /endoreg_db/{queries/get/video_prediction_meta.py → helpers/__init__.py} +0 -0
- /endoreg_db/models/{case_template → administration/case/case_template}/__init__.py +0 -0
- /endoreg_db/models/{persons → administration/person}/person.py +0 -0
- /endoreg_db/models/{product → administration/product}/__init__.py +0 -0
- /endoreg_db/models/{report_reader → media/pdf/report_reader}/__init__.py +0 -0
- /endoreg_db/models/{report_reader → media/pdf/report_reader}/report_reader_flag.py +0 -0
- /endoreg_db/models/{hardware → medical/hardware}/endoscopy_processor.py +0 -0
- /endoreg_db/models/{medication → medical/medication}/__init__.py +0 -0
- /endoreg_db/models/{medication → medical/medication}/medication_indication.py +0 -0
- /endoreg_db/models/{emission → other/emission}/__init__.py +0 -0
- /endoreg_db/models/{rules → rule}/rule_applicator.py +0 -0
- /endoreg_db/{case_generator → utils/case_generator}/case_generator.py +0 -0
- /endoreg_db/{case_generator → utils/case_generator}/lab_sample_factory.py +0 -0
- /endoreg_db/{case_generator → utils/case_generator}/utils.py +0 -0
- /endoreg_db/views/{csrf.py → misc/csrf.py} +0 -0
- {endoreg_db-0.6.3.dist-info → endoreg_db-0.8.1.dist-info}/WHEEL +0 -0
- {endoreg_db-0.6.3.dist-info → endoreg_db-0.8.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
from rest_framework import status
|
|
5
|
+
from rest_framework.response import Response
|
|
6
|
+
from rest_framework.views import APIView
|
|
7
|
+
from celery import current_app
|
|
8
|
+
|
|
9
|
+
class TaskStatusView(APIView):
|
|
10
|
+
"""
|
|
11
|
+
GET /api/task-status/{task_id}/ - Get status of async task
|
|
12
|
+
"""
|
|
13
|
+
#TODO refactor, this should be specified as video task status or moved to a more appropriate module
|
|
14
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
15
|
+
|
|
16
|
+
def get(self, request, task_id):
|
|
17
|
+
try:
|
|
18
|
+
task_result = current_app.AsyncResult(task_id)
|
|
19
|
+
|
|
20
|
+
response_data = {
|
|
21
|
+
'task_id': task_id,
|
|
22
|
+
'status': task_result.status,
|
|
23
|
+
'progress': 0,
|
|
24
|
+
'message': 'Task pending...'
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if task_result.status == 'PENDING':
|
|
28
|
+
response_data['message'] = 'Task is waiting to be processed'
|
|
29
|
+
elif task_result.status == 'PROGRESS':
|
|
30
|
+
response_data.update(task_result.result or {})
|
|
31
|
+
elif task_result.status == 'SUCCESS':
|
|
32
|
+
response_data.update({
|
|
33
|
+
'progress': 100,
|
|
34
|
+
'message': 'Task completed successfully',
|
|
35
|
+
'result': task_result.result
|
|
36
|
+
})
|
|
37
|
+
elif task_result.status == 'FAILURE':
|
|
38
|
+
response_data.update({
|
|
39
|
+
'message': str(task_result.result),
|
|
40
|
+
'error': True
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
return Response(response_data, status=status.HTTP_200_OK)
|
|
44
|
+
|
|
45
|
+
except Exception as e:
|
|
46
|
+
return Response(
|
|
47
|
+
{"error": f"Failed to get task status: {str(e)}"},
|
|
48
|
+
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
49
|
+
)
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from endoreg_db.models import VideoFile
|
|
2
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
3
|
+
|
|
4
|
+
from django.shortcuts import get_object_or_404
|
|
5
|
+
from rest_framework import status
|
|
6
|
+
from rest_framework.response import Response
|
|
7
|
+
from rest_framework.views import APIView
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class VideoAnalyzeView(APIView):
|
|
11
|
+
"""
|
|
12
|
+
POST /api/video-analyze/{id}/ - Analyze video for sensitive content
|
|
13
|
+
"""
|
|
14
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
15
|
+
|
|
16
|
+
def post(self, request, pk):
|
|
17
|
+
video = get_object_or_404(VideoFile, pk=pk)
|
|
18
|
+
use_minicpm = request.data.get('use_minicpm', True)
|
|
19
|
+
_detailed_analysis = request.data.get('detailed_analysis', True)
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
# Import FrameCleaner here to avoid circular imports
|
|
23
|
+
from lx_anonymizer.frame_cleaner import FrameCleaner
|
|
24
|
+
|
|
25
|
+
cleaner = FrameCleaner(
|
|
26
|
+
video_path=video.file.path,
|
|
27
|
+
use_minicpm=use_minicpm
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
# Perform analysis
|
|
31
|
+
analysis_result = cleaner.analyze_video_sensitivity()
|
|
32
|
+
|
|
33
|
+
# Update video metadata
|
|
34
|
+
if hasattr(video, 'sensitive_frame_count'):
|
|
35
|
+
video.sensitive_frame_count = analysis_result.get('sensitive_frames', 0)
|
|
36
|
+
if hasattr(video, 'total_frames'):
|
|
37
|
+
video.total_frames = analysis_result.get('total_frames', 0)
|
|
38
|
+
if hasattr(video, 'sensitive_ratio'):
|
|
39
|
+
video.sensitive_ratio = analysis_result.get('sensitivity_ratio', 0.0)
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
video.save()
|
|
43
|
+
except Exception as e:
|
|
44
|
+
print(f"Warning: Could not save video metadata: {e}")
|
|
45
|
+
|
|
46
|
+
return Response(analysis_result, status=status.HTTP_200_OK)
|
|
47
|
+
|
|
48
|
+
except Exception as e:
|
|
49
|
+
return Response(
|
|
50
|
+
{"error": f"Analysis failed: {str(e)}"},
|
|
51
|
+
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
52
|
+
)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from endoreg_db.models import VideoFile
|
|
2
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
from django.shortcuts import get_object_or_404
|
|
6
|
+
from rest_framework import status
|
|
7
|
+
from rest_framework.response import Response
|
|
8
|
+
from rest_framework.views import APIView
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class VideoApplyMaskView(APIView):
|
|
12
|
+
"""
|
|
13
|
+
POST /api/video-apply-mask/{id}/ - Apply mask to video using streaming processing
|
|
14
|
+
"""
|
|
15
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
16
|
+
|
|
17
|
+
def post(self, request, pk):
|
|
18
|
+
video = get_object_or_404(VideoFile, pk=pk)
|
|
19
|
+
|
|
20
|
+
mask_type = request.data.get('mask_type', 'device_default')
|
|
21
|
+
device_name = request.data.get('device_name', 'olympus_cv_1500')
|
|
22
|
+
use_streaming = request.data.get('use_streaming', True)
|
|
23
|
+
custom_mask = request.data.get('custom_mask')
|
|
24
|
+
|
|
25
|
+
try:
|
|
26
|
+
# Start async task for video masking
|
|
27
|
+
from endoreg_db.tasks.video_processing_tasks import apply_video_mask_task
|
|
28
|
+
|
|
29
|
+
task_data = {
|
|
30
|
+
'video_id': pk,
|
|
31
|
+
'mask_type': mask_type,
|
|
32
|
+
'device_name': device_name,
|
|
33
|
+
'use_streaming': use_streaming,
|
|
34
|
+
'custom_mask': custom_mask
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
task = apply_video_mask_task.delay(**task_data)
|
|
38
|
+
|
|
39
|
+
return Response(
|
|
40
|
+
{"task_id": task.id, "status": "started"},
|
|
41
|
+
status=status.HTTP_202_ACCEPTED
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
except Exception as e:
|
|
45
|
+
return Response(
|
|
46
|
+
{"error": f"Failed to start masking task: {str(e)}"},
|
|
47
|
+
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
48
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from endoreg_db.models import VideoFile
|
|
2
|
+
from endoreg_db.serializers.video.video_file_detail import VideoDetailSerializer
|
|
3
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
from django.shortcuts import get_object_or_404
|
|
7
|
+
from rest_framework import status
|
|
8
|
+
from rest_framework.response import Response
|
|
9
|
+
from rest_framework.views import APIView
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class VideoCorrectionView(APIView):
|
|
13
|
+
"""
|
|
14
|
+
GET /api/video-correction/{id}/ - Get video details for correction
|
|
15
|
+
"""
|
|
16
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
17
|
+
|
|
18
|
+
def get(self, request, pk):
|
|
19
|
+
video = get_object_or_404(VideoFile, pk=pk)
|
|
20
|
+
ser = VideoDetailSerializer(video, context={"request": request})
|
|
21
|
+
return Response(ser.data, status=status.HTTP_200_OK)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
from rest_framework import status
|
|
5
|
+
from rest_framework.response import Response
|
|
6
|
+
from rest_framework.views import APIView
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class VideoDownloadProcessedView(APIView):
|
|
13
|
+
"""
|
|
14
|
+
GET /api/video-download-processed/{id}/ - Download processed video result
|
|
15
|
+
"""
|
|
16
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
17
|
+
|
|
18
|
+
def get(self, request, pk):
|
|
19
|
+
# Remove unused 'video' variable
|
|
20
|
+
output_path = request.query_params.get('path')
|
|
21
|
+
|
|
22
|
+
# Define the allowed base directory for processed videos
|
|
23
|
+
processed_base_dir = os.path.abspath(os.getenv("PROCESSED_VIDEO_DIR", "/srv/processed_videos"))
|
|
24
|
+
if not output_path:
|
|
25
|
+
return Response(
|
|
26
|
+
{"error": "Processed file not found"},
|
|
27
|
+
status=status.HTTP_404_NOT_FOUND
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
# Resolve the absolute path and check if it's within the allowed directory
|
|
31
|
+
abs_output_path = os.path.abspath(output_path)
|
|
32
|
+
if not abs_output_path.startswith(processed_base_dir + os.sep):
|
|
33
|
+
return Response(
|
|
34
|
+
{"error": "Invalid file path"},
|
|
35
|
+
status=status.HTTP_400_BAD_REQUEST
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
if not os.path.exists(abs_output_path):
|
|
39
|
+
return Response(
|
|
40
|
+
{"error": "Processed file not found"},
|
|
41
|
+
status=status.HTTP_404_NOT_FOUND
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
try:
|
|
45
|
+
from django.http import FileResponse
|
|
46
|
+
with open(abs_output_path, 'rb') as f:
|
|
47
|
+
response = FileResponse(
|
|
48
|
+
f,
|
|
49
|
+
content_type='video/mp4'
|
|
50
|
+
)
|
|
51
|
+
response['Content-Disposition'] = f'attachment; filename="{os.path.basename(abs_output_path)}"'
|
|
52
|
+
return response
|
|
53
|
+
|
|
54
|
+
except Exception as e:
|
|
55
|
+
return Response(
|
|
56
|
+
{"error": f"Failed to serve file: {str(e)}"},
|
|
57
|
+
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
58
|
+
)
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
from endoreg_db.models import SensitiveMeta, VideoFile
|
|
2
|
+
from endoreg_db.serializers import SensitiveMetaUpdateSerializer
|
|
3
|
+
from endoreg_db.serializers.video.video_file_detail import VideoDetailSerializer
|
|
4
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
5
|
+
from endoreg_db.views.video.segmentation import _stream_video_file
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
from django.db import transaction
|
|
9
|
+
from django.shortcuts import get_object_or_404
|
|
10
|
+
from rest_framework import status
|
|
11
|
+
from rest_framework.response import Response
|
|
12
|
+
from rest_framework.views import APIView
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
import os
|
|
16
|
+
|
|
17
|
+
import logging
|
|
18
|
+
logger = logging.getLogger(__name__)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class VideoMediaView(APIView):
|
|
22
|
+
"""
|
|
23
|
+
One endpoint that does
|
|
24
|
+
GET /api/media/videos/ → next video meta
|
|
25
|
+
GET /api/media/videos/?last_id=7
|
|
26
|
+
GET /api/media/videos/42/ → meta for id 42
|
|
27
|
+
GET /api/media/videos/42/ (Accept≠JSON) → byte‐range stream
|
|
28
|
+
PATCH /api/media/videos/42/ → update sensitive meta and handle raw file deletion
|
|
29
|
+
"""
|
|
30
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
31
|
+
|
|
32
|
+
# ---------- GET ----------
|
|
33
|
+
def get(self, request, pk=None):
|
|
34
|
+
# Prüfe explizit auf Streaming-Anfrage via Query-Parameter
|
|
35
|
+
wants_stream = request.query_params.get("stream") is not None or request.query_params.get("type") is not None
|
|
36
|
+
|
|
37
|
+
if pk and wants_stream: # STREAM
|
|
38
|
+
vf = get_object_or_404(VideoFile, pk=pk)
|
|
39
|
+
file_type = (request.query_params.get("type") or "auto").lower()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
return _stream_video_file(
|
|
43
|
+
vf,
|
|
44
|
+
os.getenv("FRONTEND_ORIGIN", "*"),
|
|
45
|
+
file_type
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# META (list or single) - nur wenn kein Streaming gewünscht
|
|
49
|
+
if pk: # detail JSON
|
|
50
|
+
vf = get_object_or_404(VideoFile, pk=pk)
|
|
51
|
+
else:
|
|
52
|
+
last_id = request.query_params.get("last_id")
|
|
53
|
+
if last_id is not None:
|
|
54
|
+
try:
|
|
55
|
+
last_id = int(last_id)
|
|
56
|
+
except (ValueError, TypeError):
|
|
57
|
+
return Response(
|
|
58
|
+
{"error": "Invalid last_id parameter"},
|
|
59
|
+
status=status.HTTP_400_BAD_REQUEST
|
|
60
|
+
)
|
|
61
|
+
vf = VideoFile.objects.next_after(last_id)
|
|
62
|
+
if not vf:
|
|
63
|
+
return Response({"error": "No more videos"}, status=404)
|
|
64
|
+
|
|
65
|
+
ser = VideoDetailSerializer(vf, context={"request": request})
|
|
66
|
+
return Response(ser.data, status=status.HTTP_200_OK)
|
|
67
|
+
|
|
68
|
+
# ---------- PATCH ----------
|
|
69
|
+
@transaction.atomic
|
|
70
|
+
def patch(self, request, pk=None):
|
|
71
|
+
sm_id = request.data.get("sensitive_meta_id")
|
|
72
|
+
if not sm_id:
|
|
73
|
+
return Response(
|
|
74
|
+
{"error": "sensitive_meta_id is required"},
|
|
75
|
+
status=status.HTTP_400_BAD_REQUEST
|
|
76
|
+
)
|
|
77
|
+
try:
|
|
78
|
+
sm_id = int(sm_id)
|
|
79
|
+
except (ValueError, TypeError):
|
|
80
|
+
return Response(
|
|
81
|
+
{"error": "Invalid sensitive_meta_id"},
|
|
82
|
+
status=status.HTTP_400_BAD_REQUEST
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
sm = get_object_or_404(SensitiveMeta, pk=sm_id)
|
|
86
|
+
|
|
87
|
+
# Check if this is a validation acceptance (is_verified being set to True)
|
|
88
|
+
is_accepting_validation = request.data.get("is_verified", False)
|
|
89
|
+
delete_raw_files = request.data.get("delete_raw_files", False)
|
|
90
|
+
|
|
91
|
+
# If user is accepting validation, automatically set delete_raw_files to True
|
|
92
|
+
if is_accepting_validation:
|
|
93
|
+
delete_raw_files = True
|
|
94
|
+
logger.info(f"Validation accepted for SensitiveMeta {sm_id}, marking raw files for deletion")
|
|
95
|
+
|
|
96
|
+
ser = SensitiveMetaUpdateSerializer(sm, data=request.data, partial=True)
|
|
97
|
+
ser.is_valid(raise_exception=True)
|
|
98
|
+
updated_sm = ser.save()
|
|
99
|
+
|
|
100
|
+
# Handle raw file deletion if requested or if validation was accepted
|
|
101
|
+
if delete_raw_files and updated_sm.is_verified:
|
|
102
|
+
try:
|
|
103
|
+
# Find associated video file
|
|
104
|
+
video_file = VideoFile.objects.filter(sensitive_meta=updated_sm).first()
|
|
105
|
+
if video_file:
|
|
106
|
+
self._schedule_raw_file_deletion(video_file)
|
|
107
|
+
logger.info(f"Scheduled raw file deletion for video {video_file.uuid}")
|
|
108
|
+
else:
|
|
109
|
+
logger.warning(f"No video file found for SensitiveMeta {sm_id}")
|
|
110
|
+
except Exception as e:
|
|
111
|
+
logger.error(f"Error scheduling raw file deletion for SensitiveMeta {sm_id}: {e}")
|
|
112
|
+
# Don't fail the entire request if deletion scheduling fails
|
|
113
|
+
|
|
114
|
+
return Response(ser.data, status=status.HTTP_200_OK)
|
|
115
|
+
|
|
116
|
+
def _schedule_raw_file_deletion(self, video_file):
|
|
117
|
+
"""
|
|
118
|
+
Schedule deletion of raw video file after validation acceptance.
|
|
119
|
+
Uses the existing cleanup mechanism from the anonymization pipeline.
|
|
120
|
+
"""
|
|
121
|
+
try:
|
|
122
|
+
# Import here to avoid circular imports
|
|
123
|
+
from django.db import transaction
|
|
124
|
+
|
|
125
|
+
def cleanup_raw_files():
|
|
126
|
+
"""Cleanup function to be called after transaction commit"""
|
|
127
|
+
try:
|
|
128
|
+
if hasattr(video_file, 'raw_video_file') and video_file.raw_video_file:
|
|
129
|
+
raw_file = video_file.raw_video_file
|
|
130
|
+
if raw_file.file and os.path.exists(raw_file.file.path):
|
|
131
|
+
logger.info(f"Deleting raw video file: {raw_file.file.path}")
|
|
132
|
+
os.remove(raw_file.file.path)
|
|
133
|
+
raw_file.file = None
|
|
134
|
+
raw_file.save()
|
|
135
|
+
logger.info(f"Successfully deleted raw video file for video {video_file.uuid}")
|
|
136
|
+
else:
|
|
137
|
+
logger.info(f"Raw video file already deleted or not found for video {video_file.uuid}")
|
|
138
|
+
else:
|
|
139
|
+
logger.info(f"No raw video file found for video {video_file.uuid}")
|
|
140
|
+
|
|
141
|
+
# Also delete any associated raw frames if they exist
|
|
142
|
+
if hasattr(video_file, 'raw_frames_dir'):
|
|
143
|
+
frames_dir = getattr(video_file, 'raw_frames_dir', None)
|
|
144
|
+
if frames_dir and os.path.exists(frames_dir):
|
|
145
|
+
import shutil
|
|
146
|
+
logger.info(f"Deleting raw frames directory: {frames_dir}")
|
|
147
|
+
shutil.rmtree(frames_dir)
|
|
148
|
+
logger.info(f"Successfully deleted raw frames for video {video_file.uuid}")
|
|
149
|
+
|
|
150
|
+
except Exception as e:
|
|
151
|
+
logger.error(f"Error during raw file cleanup for video {video_file.uuid}: {e}")
|
|
152
|
+
|
|
153
|
+
# Schedule cleanup after transaction commits
|
|
154
|
+
transaction.on_commit(cleanup_raw_files)
|
|
155
|
+
|
|
156
|
+
except Exception as e:
|
|
157
|
+
logger.error(f"Error scheduling raw file deletion for video {video_file.uuid}: {e}")
|
|
158
|
+
raise
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from endoreg_db.models import VideoFile
|
|
2
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
from django.shortcuts import get_object_or_404
|
|
6
|
+
from rest_framework import status
|
|
7
|
+
from rest_framework.response import Response
|
|
8
|
+
from rest_framework.views import APIView
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class VideoMetadataView(APIView):
|
|
12
|
+
"""
|
|
13
|
+
GET /api/video-metadata/{id}/ - Get video metadata including sensitivity analysis
|
|
14
|
+
"""
|
|
15
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
16
|
+
|
|
17
|
+
def get(self, request, pk):
|
|
18
|
+
video = get_object_or_404(VideoFile, pk=pk)
|
|
19
|
+
|
|
20
|
+
# Get or calculate metadata
|
|
21
|
+
metadata = {
|
|
22
|
+
'sensitiveFrameCount': getattr(video, 'sensitive_frame_count', None),
|
|
23
|
+
'totalFrames': getattr(video, 'total_frames', None),
|
|
24
|
+
'sensitiveRatio': getattr(video, 'sensitive_ratio', None),
|
|
25
|
+
'duration': getattr(video, 'duration', None),
|
|
26
|
+
'resolution': getattr(video, 'resolution', None),
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return Response(metadata, status=status.HTTP_200_OK)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from endoreg_db.models import VideoFile
|
|
2
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
from django.shortcuts import get_object_or_404
|
|
6
|
+
from rest_framework import status
|
|
7
|
+
from rest_framework.response import Response
|
|
8
|
+
from rest_framework.views import APIView
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class VideoProcessingHistoryView(APIView):
|
|
12
|
+
"""
|
|
13
|
+
GET /api/video-processing-history/{id}/ - Get processing history for a video
|
|
14
|
+
"""
|
|
15
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
16
|
+
|
|
17
|
+
def get(self, request, pk):
|
|
18
|
+
_video = get_object_or_404(VideoFile, pk=pk)
|
|
19
|
+
|
|
20
|
+
# For now, return empty history - can be extended with actual history tracking
|
|
21
|
+
#TODO plan when to implement this
|
|
22
|
+
history = []
|
|
23
|
+
|
|
24
|
+
return Response(history, status=status.HTTP_200_OK)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from endoreg_db.models import VideoFile
|
|
2
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
from django.shortcuts import get_object_or_404
|
|
6
|
+
from rest_framework import status
|
|
7
|
+
from rest_framework.response import Response
|
|
8
|
+
from rest_framework.views import APIView
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class VideoRemoveFramesView(APIView):
|
|
12
|
+
"""
|
|
13
|
+
POST /api/video-remove-frames/{id}/ - Remove frames from video using streaming processing
|
|
14
|
+
"""
|
|
15
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
16
|
+
|
|
17
|
+
def post(self, request, pk):
|
|
18
|
+
video = get_object_or_404(VideoFile, pk=pk)
|
|
19
|
+
|
|
20
|
+
selection_method = request.data.get('selection_method', 'automatic')
|
|
21
|
+
detection_engine = request.data.get('detection_engine', 'minicpm')
|
|
22
|
+
use_streaming = request.data.get('use_streaming', True)
|
|
23
|
+
manual_frames = request.data.get('manual_frames')
|
|
24
|
+
|
|
25
|
+
try:
|
|
26
|
+
# Start async task for frame removal
|
|
27
|
+
from endoreg_db.tasks.video_processing_tasks import remove_video_frames_task
|
|
28
|
+
|
|
29
|
+
task_data = {
|
|
30
|
+
'video_id': pk,
|
|
31
|
+
'selection_method': selection_method,
|
|
32
|
+
'detection_engine': detection_engine,
|
|
33
|
+
'use_streaming': use_streaming,
|
|
34
|
+
'manual_frames': manual_frames
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
task = remove_video_frames_task.delay(**task_data)
|
|
38
|
+
|
|
39
|
+
return Response(
|
|
40
|
+
{"task_id": task.id, "status": "started"},
|
|
41
|
+
status=status.HTTP_202_ACCEPTED
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
except Exception as e:
|
|
45
|
+
return Response(
|
|
46
|
+
{"error": f"Failed to start frame removal task: {str(e)}"},
|
|
47
|
+
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
48
|
+
)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
from endoreg_db.models import VideoFile
|
|
2
|
+
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
from django.shortcuts import get_object_or_404
|
|
6
|
+
from rest_framework import status
|
|
7
|
+
from rest_framework.response import Response
|
|
8
|
+
from rest_framework.views import APIView
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class VideoReprocessView(APIView):
|
|
12
|
+
"""
|
|
13
|
+
POST /api/video-reprocess/{id}/ - Reprocess video with updated settings
|
|
14
|
+
"""
|
|
15
|
+
permission_classes = [EnvironmentAwarePermission]
|
|
16
|
+
|
|
17
|
+
def post(self, request, pk):
|
|
18
|
+
video = get_object_or_404(VideoFile, pk=pk)
|
|
19
|
+
|
|
20
|
+
try:
|
|
21
|
+
# Reset video processing status
|
|
22
|
+
if hasattr(video, 'processing_status'):
|
|
23
|
+
video.processing_status = 'not_started'
|
|
24
|
+
video.save()
|
|
25
|
+
|
|
26
|
+
# Start reprocessing task
|
|
27
|
+
from endoreg_db.tasks.video_processing_tasks import reprocess_video_task
|
|
28
|
+
|
|
29
|
+
task = reprocess_video_task.delay(video_id=pk)
|
|
30
|
+
|
|
31
|
+
return Response(
|
|
32
|
+
{"task_id": task.id, "status": "reprocessing_started"},
|
|
33
|
+
status=status.HTTP_202_ACCEPTED
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
except Exception as e:
|
|
37
|
+
return Response(
|
|
38
|
+
{"error": f"Failed to start reprocessing: {str(e)}"},
|
|
39
|
+
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
40
|
+
)
|