endoreg-db 0.6.4__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 +12 -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/endoscopy_processor/data.yaml +3 -0
- endoreg_db/data/event/cardiology.yaml +0 -13
- endoreg_db/data/examination/examinations/data.yaml +14 -9
- endoreg_db/data/examination_indication/endoscopy.yaml +30 -30
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +11 -11
- 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 +3 -46
- 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_colonoscopy.yaml +8 -3
- 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/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_intake_time/base.yaml +4 -4
- endoreg_db/data/names_first/first_names.yaml +3 -0
- endoreg_db/data/pdf_type/data.yaml +26 -2
- 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 +6 -6
- endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +9 -6
- endoreg_db/data/requirement/disease_hepatology.yaml +1 -1
- endoreg_db/data/requirement/disease_misc.yaml +3 -3
- endoreg_db/data/requirement/disease_renal.yaml +18 -2
- endoreg_db/data/requirement/{colonoscopy_indications.yaml → endoscopy_bleeding_risk.yaml} +6 -3
- endoreg_db/data/requirement/event_cardiology.yaml +17 -17
- 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 +352 -31
- 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 +36 -35
- endoreg_db/data/requirement_operator/model_operators.yaml +13 -7
- 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 +42 -2
- endoreg_db/data/requirement_type/requirement_types.yaml +82 -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/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 +1 -0
- endoreg_db/management/commands/load_endoscope_data.py +2 -2
- endoreg_db/management/commands/load_examination_indication_data.py +2 -3
- 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_name_data.py +37 -0
- endoreg_db/management/commands/load_qualification_data.py +59 -0
- endoreg_db/management/commands/load_requirement_data.py +30 -6
- 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 +270 -307
- 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/{disease.py → medical/disease.py} +60 -52
- endoreg_db/models/{event.py → medical/event.py} +31 -54
- endoreg_db/models/{examination → medical/examination}/__init__.py +1 -1
- endoreg_db/models/medical/examination/examination.py +148 -0
- endoreg_db/models/{examination → medical/examination}/examination_indication.py +64 -35
- 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 +1 -7
- 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/{risk → medical/risk}/risk_type.py +0 -4
- 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/requirement.py +556 -114
- endoreg_db/models/requirement/requirement_evaluation/__init__.py +4 -132
- 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 +80 -87
- endoreg_db/models/requirement/requirement_operator.py +132 -14
- endoreg_db/models/requirement/requirement_set.py +181 -21
- 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 -283
- endoreg_db/utils/__init__.py +66 -57
- 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 +50 -12
- 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/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 +100 -82
- 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/{views.py → auth/keycloak.py} +19 -13
- 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/migrations/0009_requirementoperator_requirementsettype_and_more.py +0 -154
- endoreg_db/models/ai_model/active_model.py +0 -9
- endoreg_db/models/ai_model/ai_model.py +0 -90
- 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 -240
- 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 -98
- endoreg_db/models/data_file/base_classes/abstract_pdf.py +0 -127
- endoreg_db/models/data_file/base_classes/abstract_video.py +0 -806
- 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 -58
- 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 -254
- endoreg_db/models/data_file/import_classes/raw_video.py +0 -290
- 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/examination/examination.py +0 -67
- 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 -65
- endoreg_db/models/laboratory/__init__.py +0 -1
- endoreg_db/models/laboratory/lab_value.py +0 -162
- 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 -574
- 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.4.dist-info/METADATA +0 -161
- endoreg_db-0.6.4.dist-info/RECORD +0 -470
- /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/{risk → medical/risk}/__init__.py +0 -0
- /endoreg_db/models/{risk → medical/risk}/risk.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.4.dist-info → endoreg_db-0.8.1.dist-info}/WHEEL +0 -0
- {endoreg_db-0.6.4.dist-info → endoreg_db-0.8.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
from rest_framework.views import APIView
|
|
2
|
-
from rest_framework.response import Response
|
|
3
|
-
from rest_framework import status
|
|
4
|
-
from django.http import FileResponse, Http404
|
|
5
|
-
import mimetypes
|
|
6
|
-
import os
|
|
7
|
-
from ..models import RawVideoFile
|
|
8
|
-
from ..serializers.raw_video_meta_validation import VideoFileForMetaSerializer,SensitiveMetaUpdateSerializer
|
|
9
|
-
from ..models import SensitiveMeta
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class VideoFileForMetaView(APIView):
|
|
13
|
-
"""
|
|
14
|
-
API endpoint to fetch video metadata step-by-step.
|
|
15
|
-
Uses the serializer to get the first or next available video.
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
def get(self, request):
|
|
19
|
-
"""
|
|
20
|
-
- Fetches the **first available video** if `last_id` is NOT provided.
|
|
21
|
-
- Fetches the **next available video** where `id > last_id` if provided.
|
|
22
|
-
- If no video is available, returns a structured error response.
|
|
23
|
-
"""
|
|
24
|
-
last_id = request.GET.get("last_id") # Get last_id from query params
|
|
25
|
-
|
|
26
|
-
# Get the next video as a model instance
|
|
27
|
-
video_entry = VideoFileForMetaSerializer.get_next_video(last_id)
|
|
28
|
-
|
|
29
|
-
if video_entry is None:
|
|
30
|
-
return Response({"error": "No more videos available."}, status=status.HTTP_404_NOT_FOUND)
|
|
31
|
-
|
|
32
|
-
serialized_video = VideoFileForMetaSerializer(video_entry, context={'request': request})
|
|
33
|
-
|
|
34
|
-
# Check if required fields are missing
|
|
35
|
-
response_data = serialized_video.data
|
|
36
|
-
missing_fields = {}
|
|
37
|
-
|
|
38
|
-
if response_data.get('file') is None:
|
|
39
|
-
missing_fields['file'] = "No file associated with this entry."
|
|
40
|
-
|
|
41
|
-
if response_data.get('video_url') is None:
|
|
42
|
-
missing_fields['video_url'] = "Video file is missing."
|
|
43
|
-
|
|
44
|
-
if response_data.get('full_video_path') is None:
|
|
45
|
-
missing_fields['full_video_path'] = "No file path found on server."
|
|
46
|
-
|
|
47
|
-
if not response_data.get('patient_first_name'):
|
|
48
|
-
missing_fields['patient_first_name'] = "Patient first name is missing."
|
|
49
|
-
|
|
50
|
-
if not response_data.get('patient_last_name'):
|
|
51
|
-
missing_fields['patient_last_name'] = "Patient last name is missing."
|
|
52
|
-
|
|
53
|
-
if not response_data.get('patient_dob'):
|
|
54
|
-
missing_fields['patient_dob'] = "Patient date of birth is missing."
|
|
55
|
-
|
|
56
|
-
if not response_data.get('examination_date'):
|
|
57
|
-
missing_fields['examination_date'] = "Examination date is missing."
|
|
58
|
-
|
|
59
|
-
if response_data.get('duration') is None:
|
|
60
|
-
missing_fields['duration'] = "Unable to determine video duration. The file might be corrupted or unreadable."
|
|
61
|
-
|
|
62
|
-
if missing_fields:
|
|
63
|
-
return Response({"error": "Missing required data.", "details": missing_fields},
|
|
64
|
-
status=status.HTTP_400_BAD_REQUEST)
|
|
65
|
-
|
|
66
|
-
return Response(serialized_video.data, status=status.HTTP_200_OK)
|
|
67
|
-
|
|
68
|
-
def serve_video_file(self, video_entry):
|
|
69
|
-
"""
|
|
70
|
-
Streams the video file dynamically.
|
|
71
|
-
"""
|
|
72
|
-
try:
|
|
73
|
-
full_video_path = video_entry.file.path # Get file path
|
|
74
|
-
|
|
75
|
-
if not os.path.exists(full_video_path):
|
|
76
|
-
raise Http404("Video file not found.")
|
|
77
|
-
|
|
78
|
-
mime_type, _ = mimetypes.guess_type(full_video_path) # Detects file type
|
|
79
|
-
response = FileResponse(open(full_video_path, "rb"), content_type=mime_type or "video/mp4")
|
|
80
|
-
|
|
81
|
-
response["Content-Disposition"] = f'inline; filename="{os.path.basename(full_video_path)}"' # Allows direct streaming
|
|
82
|
-
|
|
83
|
-
return response # Sends the video file as a stream
|
|
84
|
-
|
|
85
|
-
except Exception as e:
|
|
86
|
-
return Response({"error": f"Internal error: {str(e)}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def patch(self, request, *args, **kwargs):
|
|
90
|
-
"""
|
|
91
|
-
Calls the serializer to update `SensitiveMeta` data.
|
|
92
|
-
"""
|
|
93
|
-
|
|
94
|
-
# Ensure all required fields are provided
|
|
95
|
-
required_fields = ["sensitive_meta_id", "patient_first_name", "patient_last_name", "patient_dob", "examination_date"]
|
|
96
|
-
missing_fields = [field for field in required_fields if field not in request.data]
|
|
97
|
-
|
|
98
|
-
if missing_fields:
|
|
99
|
-
return Response({"error": "Missing required fields", "missing_fields": missing_fields}, status=status.HTTP_400_BAD_REQUEST)
|
|
100
|
-
|
|
101
|
-
# Call serializer for validation
|
|
102
|
-
serializer = SensitiveMetaUpdateSerializer(data=request.data, partial=True)
|
|
103
|
-
|
|
104
|
-
if serializer.is_valid():
|
|
105
|
-
# Get the instance and update it
|
|
106
|
-
sensitive_meta = SensitiveMeta.objects.get(id=request.data["sensitive_meta_id"])
|
|
107
|
-
updated_instance = serializer.update(sensitive_meta, serializer.validated_data)
|
|
108
|
-
|
|
109
|
-
return Response({
|
|
110
|
-
"message": "Patient information updated successfully.",
|
|
111
|
-
"updated_data": SensitiveMetaUpdateSerializer(updated_instance).data
|
|
112
|
-
}, status=status.HTTP_200_OK)
|
|
113
|
-
|
|
114
|
-
# Return validation errors
|
|
115
|
-
return Response({"error": "Invalid data.", "details": serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
"""
|
|
119
|
-
await import('https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js');
|
|
120
|
-
const updatePatientInfo = async () => {
|
|
121
|
-
const updatedData = {
|
|
122
|
-
sensitive_meta_id: 2,
|
|
123
|
-
patient_first_name: "Placeholder",
|
|
124
|
-
patient_last_name: "Placeholder",
|
|
125
|
-
patient_dob: "1994-06-15",
|
|
126
|
-
examination_date: "2024-06-15"
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
try {
|
|
130
|
-
const response = await axios.patch("http://localhost:8000/api/video/update_sensitivemeta/", updatedData, {
|
|
131
|
-
headers: { "Content-Type": "application/json" }
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
console.log("Update Success:", response.data);
|
|
135
|
-
alert("Patient information updated successfully!");
|
|
136
|
-
|
|
137
|
-
return response.data;
|
|
138
|
-
} catch (error) {
|
|
139
|
-
console.error("Update Error:", error.response?.data || error);
|
|
140
|
-
alert("Failed to update patient information.");
|
|
141
|
-
return error.response?.data || { error: "Unknown error" };
|
|
142
|
-
}
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
updatePatientInfo().then(response => console.log("Final Response:", response));
|
|
147
|
-
|
|
148
|
-
"""
|
endoreg_db/views/report_views.py
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
from django.shortcuts import render
|
|
2
|
-
from django.contrib.admin.views.decorators import staff_member_required
|
|
3
|
-
|
|
4
|
-
@staff_member_required # Ensures only staff members can access the page
|
|
5
|
-
def start_examination(request):
|
|
6
|
-
return render(request, 'admin/start_examination.html') # Loads the simple HTML page
|
|
7
|
-
|
|
8
|
-
from django.shortcuts import render
|
|
9
|
-
#from ..models.patient.patient_finding_location import PatientFindingLocation
|
|
10
|
-
from ..models import FindingLocationClassification, FindingLocationClassificationChoice # Correct models
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
#need to implement one with json data after tesing whethe rthis works or not
|
|
14
|
-
"""def get_location_choices(request, location_id):
|
|
15
|
-
|
|
16
|
-
try:
|
|
17
|
-
# Ensure the location exists
|
|
18
|
-
location = FindingLocationClassification.objects.get(id=location_id)
|
|
19
|
-
# Get only choices related to the selected location classification
|
|
20
|
-
#location_choices = FindingLocationClassificationChoice.objects.filter(location_classification=location)
|
|
21
|
-
#its many to may relation so
|
|
22
|
-
location_choices = location.choices.all()
|
|
23
|
-
|
|
24
|
-
except FindingLocationClassification.DoesNotExist:
|
|
25
|
-
location_choices = []
|
|
26
|
-
|
|
27
|
-
# Get previously selected values to retain them after reloading
|
|
28
|
-
selected_location = int(location_id) if location_id else None
|
|
29
|
-
|
|
30
|
-
return render(request, 'admin/patient_finding_intervention.html', {
|
|
31
|
-
"location_choices": location_choices, # Pass updated choices to the template
|
|
32
|
-
"selected_location": location_id, # Keep previous selection
|
|
33
|
-
})
|
|
34
|
-
"""
|
|
35
|
-
from django.shortcuts import render
|
|
36
|
-
from rest_framework import viewsets
|
|
37
|
-
from ..models import Patient
|
|
38
|
-
from ..serializers import PatientSerializer
|
|
39
|
-
from rest_framework.permissions import IsAuthenticatedOrReadOnly
|
|
40
|
-
|
|
41
|
-
class PatientViewSet(viewsets.ModelViewSet):
|
|
42
|
-
"""API endpoint for managing patients."""
|
|
43
|
-
queryset = Patient.objects.all()
|
|
44
|
-
serializer_class = PatientSerializer
|
|
45
|
-
permission_classes = [IsAuthenticatedOrReadOnly]
|
|
46
|
-
|
|
47
|
-
def perform_create(self, serializer):
|
|
48
|
-
serializer.save()
|
|
49
|
-
|
|
50
|
-
from django.http import JsonResponse
|
|
51
|
-
from ..models import FindingLocationClassification, FindingLocationClassificationChoice
|
|
52
|
-
|
|
53
|
-
def get_location_choices(request, location_id):
|
|
54
|
-
"""
|
|
55
|
-
Fetch location choices dynamically based on the selected FindingLocationClassification (Location).
|
|
56
|
-
"""
|
|
57
|
-
try:
|
|
58
|
-
location = FindingLocationClassification.objects.get(id=location_id)
|
|
59
|
-
location_choices = location.choices.all() # Get choices via Many-to-Many relationship
|
|
60
|
-
data = [{"id": choice.id, "name": choice.name} for choice in location_choices]
|
|
61
|
-
except FindingLocationClassification.DoesNotExist:
|
|
62
|
-
data = []
|
|
63
|
-
|
|
64
|
-
return JsonResponse({"location_choices": data})
|
|
65
|
-
|
|
66
|
-
from django.http import JsonResponse
|
|
67
|
-
from ..models import FindingMorphologyClassification, FindingMorphologyClassificationChoice, FindingMorphologyClassificationType
|
|
68
|
-
from django.core.exceptions import ObjectDoesNotExist
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def get_morphology_choices(request, morphology_id):
|
|
73
|
-
"""
|
|
74
|
-
Fetch morphology choices dynamically based on the selected FindingMorphologyClassification.
|
|
75
|
-
"""
|
|
76
|
-
try:
|
|
77
|
-
# Find the selected Morphology Classification
|
|
78
|
-
morphology_classification = FindingMorphologyClassification.objects.get(id=morphology_id)
|
|
79
|
-
|
|
80
|
-
# Fetch choices from FindingMorphologyClassificationType using classification_type_id
|
|
81
|
-
morphology_choices = FindingMorphologyClassificationType.objects.filter(
|
|
82
|
-
id=morphology_classification.classification_type_id
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
# Cpnvert QuerySet to JSON
|
|
86
|
-
data = [{"id": choice.id, "name": choice.name} for choice in morphology_choices]
|
|
87
|
-
|
|
88
|
-
return JsonResponse({"morphology_choices": data}) # Always return JSON
|
|
89
|
-
|
|
90
|
-
except ObjectDoesNotExist:
|
|
91
|
-
return JsonResponse({"error": "Morphology classification not found", "morphology_choices": []}, status=404)
|
|
92
|
-
|
|
93
|
-
except Exception as e:
|
|
94
|
-
print(f"Error fetching morphology choices: {e}") # Debugging Log
|
|
95
|
-
return JsonResponse({"error": "Internal server error", "morphology_choices": []}, status=500)
|
|
96
|
-
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
from rest_framework.views import APIView
|
|
2
|
-
from rest_framework.response import Response
|
|
3
|
-
from rest_framework import status
|
|
4
|
-
from django.http import FileResponse, Http404
|
|
5
|
-
from ..models import RawVideoFile, Label
|
|
6
|
-
from ..serializers.video_segmentation import VideoFileSerializer,VideoListSerializer,LabelSerializer
|
|
7
|
-
import mimetypes
|
|
8
|
-
import os
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
class VideoView(APIView):
|
|
12
|
-
"""
|
|
13
|
-
API endpoint to:
|
|
14
|
-
- Fetch video metadata (JSON)
|
|
15
|
-
- Serve the actual video file dynamically
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
def get(self, request, video_id=None):
|
|
19
|
-
"""
|
|
20
|
-
Handles GET requests:
|
|
21
|
-
- If no `video_id` is provided, return a list of all videos for frontend dropdown.
|
|
22
|
-
- If `Accept: application/json` is in the request headers, return metadata for a specific video.
|
|
23
|
-
- Otherwise, return the video file.
|
|
24
|
-
"""
|
|
25
|
-
if video_id is None:
|
|
26
|
-
return self.get_all_videos()
|
|
27
|
-
return self.get_video_details(request, video_id)
|
|
28
|
-
|
|
29
|
-
def get_all_videos(self):
|
|
30
|
-
"""
|
|
31
|
-
Returns a list of all available videos along with available labels.
|
|
32
|
-
Used to populate the video selection dropdown in Vue.js.
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
videos = RawVideoFile.objects.all()
|
|
36
|
-
labels = Label.objects.all() # Fetch all labels
|
|
37
|
-
|
|
38
|
-
if not videos.exists():
|
|
39
|
-
return Response({"error": "No videos found in the database."}, status=status.HTTP_404_NOT_FOUND)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
video_serializer = VideoListSerializer(videos, many=True)
|
|
43
|
-
label_serializer = LabelSerializer(labels, many=True) # Serialize labels
|
|
44
|
-
|
|
45
|
-
return Response({
|
|
46
|
-
"videos": video_serializer.data, # List of videos
|
|
47
|
-
"labels": label_serializer.data # List of labels
|
|
48
|
-
}, status=status.HTTP_200_OK)
|
|
49
|
-
|
|
50
|
-
def get_video_details(self, request, video_id):
|
|
51
|
-
"""
|
|
52
|
-
Returns metadata for a specific video if `Accept: application/json` is set.
|
|
53
|
-
Otherwise, streams the video file.
|
|
54
|
-
"""
|
|
55
|
-
try:
|
|
56
|
-
video_entry = RawVideoFile.objects.get(id=video_id)
|
|
57
|
-
serializer = VideoFileSerializer(video_entry, context={'request': request})
|
|
58
|
-
|
|
59
|
-
accept_header = request.headers.get('Accept', '')
|
|
60
|
-
|
|
61
|
-
if "application/json" in accept_header:
|
|
62
|
-
return Response(serializer.data, status=status.HTTP_200_OK)
|
|
63
|
-
|
|
64
|
-
return self.serve_video_file(video_entry)
|
|
65
|
-
|
|
66
|
-
except RawVideoFile.DoesNotExist:
|
|
67
|
-
return Response({"error": "Video not found in the database."}, status=status.HTTP_404_NOT_FOUND)
|
|
68
|
-
except Exception as e:
|
|
69
|
-
return Response({"error": f"Internal error: {str(e)}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
70
|
-
|
|
71
|
-
def serve_video_file(self, video_entry):
|
|
72
|
-
"""
|
|
73
|
-
Serves the video file dynamically.
|
|
74
|
-
"""
|
|
75
|
-
try:
|
|
76
|
-
full_video_path = video_entry.file.path # Get the correct file path
|
|
77
|
-
|
|
78
|
-
if not os.path.exists(full_video_path):
|
|
79
|
-
raise Http404("Video file not found.")
|
|
80
|
-
|
|
81
|
-
mime_type, _ = mimetypes.guess_type(full_video_path) # Determine the content type (e.g., video/mp4, video/avi)
|
|
82
|
-
response = FileResponse(open(full_video_path, "rb"), content_type=mime_type or "video/mp4")
|
|
83
|
-
|
|
84
|
-
# Enable video streaming and CORS
|
|
85
|
-
response["Access-Control-Allow-Origin"] = "*" # Allow frontend access
|
|
86
|
-
response["Access-Control-Allow-Credentials"] = "true"
|
|
87
|
-
response["Accept-Ranges"] = "bytes" # Enable seeking in video player
|
|
88
|
-
response["Content-Disposition"] = f'inline; filename="{os.path.basename(full_video_path)}"' # Instructs the browser to play the video instead of downloading it.
|
|
89
|
-
|
|
90
|
-
return response
|
|
91
|
-
|
|
92
|
-
except Exception as e:
|
|
93
|
-
return Response({"error": f"Internal error: {str(e)}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
from ..serializers.video_segmentation import VideoFileSerializer
|
|
98
|
-
|
|
99
|
-
class VideoLabelView(APIView):
|
|
100
|
-
"""
|
|
101
|
-
API to fetch time segments (start & end times in seconds) for a specific label.
|
|
102
|
-
"""
|
|
103
|
-
|
|
104
|
-
def get(self, request, video_id, label_name):
|
|
105
|
-
"""
|
|
106
|
-
Handles GET request to return:
|
|
107
|
-
- Time segments for the selected label.
|
|
108
|
-
- Frame-wise predictions within those segments.
|
|
109
|
-
"""
|
|
110
|
-
try:
|
|
111
|
-
video_entry = RawVideoFile.objects.get(id=video_id)
|
|
112
|
-
|
|
113
|
-
serializer = VideoFileSerializer(video_entry, context={'request': request})
|
|
114
|
-
label_data = serializer.get_label_time_segments(video_entry)
|
|
115
|
-
|
|
116
|
-
# Ensure the requested label exists
|
|
117
|
-
if label_name not in label_data:
|
|
118
|
-
return Response({"error": f"Label '{label_name}' not found"}, status=status.HTTP_404_NOT_FOUND)
|
|
119
|
-
|
|
120
|
-
return Response({
|
|
121
|
-
"label": label_name,
|
|
122
|
-
"time_segments": label_data[label_name]["time_ranges"],
|
|
123
|
-
"frame_predictions": label_data[label_name]["frame_predictions"]
|
|
124
|
-
}, status=status.HTTP_200_OK)
|
|
125
|
-
|
|
126
|
-
except RawVideoFile.DoesNotExist:
|
|
127
|
-
return Response({"error": "Video not found"}, status=status.HTTP_404_NOT_FOUND)
|
|
128
|
-
|
|
129
|
-
except Exception as e:
|
|
130
|
-
return Response({"error": f"Internal error: {str(e)}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
from ..serializers.video_segmentation import LabelSegmentUpdateSerializer, LabelSegmentSerializer
|
|
134
|
-
|
|
135
|
-
class UpdateLabelSegmentsView(APIView):
|
|
136
|
-
"""
|
|
137
|
-
API to update or create label segments for a video.
|
|
138
|
-
"""
|
|
139
|
-
|
|
140
|
-
def put(self, request, video_id, label_id):
|
|
141
|
-
"""
|
|
142
|
-
Updates segments for a given video & label.
|
|
143
|
-
"""
|
|
144
|
-
|
|
145
|
-
# Ensure required fields are provided
|
|
146
|
-
required_fields = ["video_id", "label_id", "segments"]
|
|
147
|
-
missing_fields = [field for field in required_fields if field not in request.data]
|
|
148
|
-
|
|
149
|
-
if missing_fields:
|
|
150
|
-
return Response({"error": "Missing required fields", "missing": missing_fields}, status=status.HTTP_400_BAD_REQUEST)
|
|
151
|
-
|
|
152
|
-
# Validate input data
|
|
153
|
-
serializer = LabelSegmentUpdateSerializer(data=request.data, partial=True)
|
|
154
|
-
|
|
155
|
-
if not serializer.is_valid():
|
|
156
|
-
return Response({"error": "Invalid segment data", "details": serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
|
|
157
|
-
|
|
158
|
-
# Process and save segment updates
|
|
159
|
-
result = serializer.save()
|
|
160
|
-
|
|
161
|
-
return Response({
|
|
162
|
-
"message": "Segments updated successfully.",
|
|
163
|
-
"updated_segments": result["updated_segments"],
|
|
164
|
-
"new_segments": result["new_segments"],
|
|
165
|
-
"deleted_segments": result["deleted_segments"]
|
|
166
|
-
}, status=status.HTTP_200_OK)
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: endoreg-db
|
|
3
|
-
Version: 0.6.4
|
|
4
|
-
Summary: EndoReg Db Django App
|
|
5
|
-
Project-URL: Homepage, https://info.coloreg.de
|
|
6
|
-
Project-URL: Repository, https://github.com/wg-lux/endoreg-db
|
|
7
|
-
Author: Max Hild, Hamza Zahid, Peter Kowalczyk
|
|
8
|
-
Author-email: "Thomas J. Lux" <lux_t1@ukw.de>
|
|
9
|
-
Maintainer: Max Hild, Hamza Zahid, Peter Kowalczyk
|
|
10
|
-
Maintainer-email: "Thomas J. Lux" <lux_t1@ukw.de>
|
|
11
|
-
License-File: LICENSE
|
|
12
|
-
Classifier: Development Status :: 3 - Alpha
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
-
Classifier: Topic :: Scientific/Engineering :: Medical Science Apps.
|
|
16
|
-
Requires-Python: >=3.11
|
|
17
|
-
Requires-Dist: agl-report-reader>=0.4.0
|
|
18
|
-
Requires-Dist: django-bootstrap5>=24.3
|
|
19
|
-
Requires-Dist: django-cors-headers>=4.7.0
|
|
20
|
-
Requires-Dist: django-extensions>=3.2.3
|
|
21
|
-
Requires-Dist: django>=5.1.3
|
|
22
|
-
Requires-Dist: djangorestframework>=3.15.2
|
|
23
|
-
Requires-Dist: faker>=32.1.0
|
|
24
|
-
Requires-Dist: icecream>=2.1.4
|
|
25
|
-
Requires-Dist: numpy>=2.1.3
|
|
26
|
-
Requires-Dist: opencv-python>=4.10.0.84
|
|
27
|
-
Requires-Dist: pandas>=2.2.3
|
|
28
|
-
Requires-Dist: pillow>=11.0.0
|
|
29
|
-
Requires-Dist: pydantic>=2.10.6
|
|
30
|
-
Requires-Dist: pytesseract>=0.3.13
|
|
31
|
-
Requires-Dist: python-ffmpeg>=2.0.12
|
|
32
|
-
Requires-Dist: pytorch-lightning>=2.4.0
|
|
33
|
-
Requires-Dist: pyyaml>=6.0.2
|
|
34
|
-
Requires-Dist: scikit-learn>=1.5.2
|
|
35
|
-
Requires-Dist: scipy>=1.14.1
|
|
36
|
-
Requires-Dist: tesseract>=0.1.3
|
|
37
|
-
Requires-Dist: tqdm>=4.67.0
|
|
38
|
-
Requires-Dist: urllib3>=2.2.3
|
|
39
|
-
Description-Content-Type: text/markdown
|
|
40
|
-
|
|
41
|
-
# EndoregDB - Professional Data Infrastructure for Clinical Research
|
|
42
|
-
|
|
43
|
-
EndoregDB is a comprehensive database framework designed to manage medical and research-related data for clinical trials. This repository focuses on efficient data processing, automated deployment, security, and reproducibility, offering a flexible setup for local development environments as well as distributed systems. It supports the integration of AI/ML tools and advanced image and report processing.
|
|
44
|
-
|
|
45
|
-
This infrastructure was originally designed for clinical research studies and is optimized for handling large data volumes, including:
|
|
46
|
-
|
|
47
|
-
- Medical reports,
|
|
48
|
-
- Patient imaging and video data,
|
|
49
|
-
- Clinical product and treatment data,
|
|
50
|
-
and more.
|
|
51
|
-
|
|
52
|
-
## 🚀 Key Features
|
|
53
|
-
|
|
54
|
-
### System Architecture
|
|
55
|
-
|
|
56
|
-
- **Modular Design**: Built on scalable and reusable components to simplify integration into various environments.
|
|
57
|
-
- **Multi-System Support**: Manages configurations for local workstations and production servers.
|
|
58
|
-
- **Role-Specific Configuration**: Predefined roles for common use cases:
|
|
59
|
-
- Medical data processing systems
|
|
60
|
-
- AI/ML model deployment
|
|
61
|
-
- Research workstation configuration
|
|
62
|
-
|
|
63
|
-
### Security & Data Management
|
|
64
|
-
|
|
65
|
-
- **Data Encryption**: All sensitive data is encrypted, and privacy policies are enforced.
|
|
66
|
-
- **Impermanence**: Stateless system configuration with persistence for critical data.
|
|
67
|
-
- **Access Control**: Role-based access and identity management integration.
|
|
68
|
-
|
|
69
|
-
### Data and Processing Environment
|
|
70
|
-
|
|
71
|
-
- **Data Processing**: Optimized for processing medical datasets with preprocessing tools.
|
|
72
|
-
- **AI/ML Support**:
|
|
73
|
-
- Integration of machine learning tools for predictive analysis.
|
|
74
|
-
- TensorFlow, PyTorch, and other frameworks supported for model training.
|
|
75
|
-
- **Image/Video Processing**: Support for analyzing patient images and clinical videos.
|
|
76
|
-
|
|
77
|
-
### Development Tools & Infrastructure
|
|
78
|
-
|
|
79
|
-
- **Data Science Toolchains**: Pre-configured environments for data processing, analysis, and visualization.
|
|
80
|
-
- **Monitoring & Logging**: Setup for continuous monitoring and logging to ensure system stability and performance.
|
|
81
|
-
|
|
82
|
-
---
|
|
83
|
-
|
|
84
|
-
## 🛠 Getting Started
|
|
85
|
-
|
|
86
|
-
### Prerequisites
|
|
87
|
-
|
|
88
|
-
- A Linux-based system (Ubuntu/Debian recommended) or NixOS
|
|
89
|
-
- Hardware with sufficient storage for data processing (at least 1 TB recommended)
|
|
90
|
-
|
|
91
|
-
### Quick Start
|
|
92
|
-
|
|
93
|
-
1. Clone the repository:
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
git clone https://github.com/wg-lux/endoreg-db.git
|
|
97
|
-
cd endoreg-db
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
2. Set up your Python environment:
|
|
101
|
-
_TODO_: Explain Devenv / point to other docs
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
direnv allow
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
3. Run tests:
|
|
108
|
-
Call Devenv Script to run tests
|
|
109
|
-
|
|
110
|
-
```bash
|
|
111
|
-
runtests
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
## 📁 Repository Structure
|
|
117
|
-
|
|
118
|
-
```
|
|
119
|
-
endoreg-db/
|
|
120
|
-
├── endoreg_db/ # Main Django app for medical data
|
|
121
|
-
│ ├── case_generator/ # Sample case generator
|
|
122
|
-
│ ├── data/ # Medical knowledge base
|
|
123
|
-
│ ├── management/ # Data wrangling operations
|
|
124
|
-
│ ├── models/ # Data models
|
|
125
|
-
│ ├── migrations/ # Database migrations
|
|
126
|
-
│ └── serializers/ # Serializers for data
|
|
127
|
-
├── .gitignore # Git ignore file for unnecessary files
|
|
128
|
-
└── README.md # Project description and setup instructions
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## 🔒 Security Features
|
|
134
|
-
|
|
135
|
-
- **Data Encryption**: All sensitive patient data is encrypted.
|
|
136
|
-
- **Role-Based Access Control**: Configurable roles for managing access to various parts of the system.
|
|
137
|
-
- **Logging & Auditing**: Comprehensive logging system that tracks user activities and data changes.
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## 🖥️ Supported Systems
|
|
142
|
-
|
|
143
|
-
- **Workstations**: Local development or research workstations with low data processing demands.
|
|
144
|
-
- **Servers**: Scalable server infrastructure for processing large data volumes, integrated with cloud services for scalability.
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## 🛟 Support
|
|
149
|
-
|
|
150
|
-
For issues and questions:
|
|
151
|
-
|
|
152
|
-
- Create an issue in the repository
|
|
153
|
-
- Review the Deployment Guide for common issues
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## 📜 License
|
|
158
|
-
|
|
159
|
-
MIT - see LICENSE
|
|
160
|
-
|
|
161
|
-
---
|