endoreg-db 0.8.9.32__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/__init__.py +0 -0
- endoreg_db/_version.py +34 -0
- endoreg_db/admin.py +97 -0
- endoreg_db/api/serializers/finding_descriptions.py +0 -0
- endoreg_db/api/views/finding_descriptions.py +0 -0
- endoreg_db/api_urls.py +4 -0
- endoreg_db/apps.py +17 -0
- endoreg_db/assets/dummy_model.ckpt +1 -0
- endoreg_db/authz/auth.py +78 -0
- endoreg_db/authz/backends.py +168 -0
- endoreg_db/authz/management/commands/list_routes.py +20 -0
- endoreg_db/authz/middleware.py +84 -0
- endoreg_db/authz/permissions.py +138 -0
- endoreg_db/authz/policy.py +224 -0
- endoreg_db/authz/settings.py +64 -0
- endoreg_db/authz/views_auth.py +70 -0
- endoreg_db/codemods/readme.md +88 -0
- endoreg_db/codemods/rename_datetime_fields.py +99 -0
- endoreg_db/config/__init__.py +0 -0
- endoreg_db/config/env.py +106 -0
- endoreg_db/config/settings/__init__.py +6 -0
- endoreg_db/config/settings/base.py +148 -0
- endoreg_db/config/settings/case_gen.py +32 -0
- endoreg_db/config/settings/dev.py +108 -0
- endoreg_db/config/settings/keycloak.py +177 -0
- endoreg_db/config/settings/prod.py +66 -0
- endoreg_db/config/settings/test.py +72 -0
- endoreg_db/data/__init__.py +135 -0
- endoreg_db/data/ai_model/data.yaml +7 -0
- endoreg_db/data/ai_model_label/label/data.yaml +88 -0
- endoreg_db/data/ai_model_label/label/polyp_classification.yaml +52 -0
- endoreg_db/data/ai_model_label/label-set/data.yaml +40 -0
- endoreg_db/data/ai_model_label/label-set/polyp_classifications.yaml +25 -0
- endoreg_db/data/ai_model_label/label-type/data.yaml +7 -0
- endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +27 -0
- endoreg_db/data/ai_model_type/data.yaml +7 -0
- endoreg_db/data/ai_model_video_segmentation_label/base_segmentation.yaml +176 -0
- endoreg_db/data/ai_model_video_segmentation_labelset/data.yaml +20 -0
- endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +167 -0
- endoreg_db/data/case_template/rule/01_patient-set-age.yaml +8 -0
- endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +9 -0
- endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +23 -0
- endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +19 -0
- endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +19 -0
- endoreg_db/data/case_template/rule/19_create_patient.yaml +17 -0
- endoreg_db/data/case_template/rule_type/base_types.yaml +35 -0
- endoreg_db/data/case_template/rule_value/.init +0 -0
- endoreg_db/data/case_template/rule_value_type/base_types.yaml +59 -0
- endoreg_db/data/case_template/template/base.yaml +8 -0
- endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +3 -0
- endoreg_db/data/case_template/tmp/_rule_value +13 -0
- endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -0
- endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +10 -0
- endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +7 -0
- endoreg_db/data/center/data.yaml +99 -0
- endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -0
- endoreg_db/data/center_shift/ukw.yaml +9 -0
- endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -0
- endoreg_db/data/contraindication/bleeding.yaml +11 -0
- endoreg_db/data/db_summary.csv +58 -0
- endoreg_db/data/db_summary.xlsx +0 -0
- endoreg_db/data/disease/cardiovascular.yaml +37 -0
- endoreg_db/data/disease/hepatology.yaml +5 -0
- endoreg_db/data/disease/misc.yaml +5 -0
- endoreg_db/data/disease/renal.yaml +5 -0
- endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +6 -0
- endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +6 -0
- endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +41 -0
- endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +20 -0
- endoreg_db/data/distribution/date/patient.yaml +7 -0
- endoreg_db/data/distribution/multiple_categorical/.init +0 -0
- endoreg_db/data/distribution/numeric/data.yaml +14 -0
- endoreg_db/data/distribution/single_categorical/patient.yaml +7 -0
- endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -0
- endoreg_db/data/endoscope/data.yaml +93 -0
- endoreg_db/data/endoscope_type/data.yaml +11 -0
- endoreg_db/data/endoscopy_processor/data.yaml +50 -0
- endoreg_db/data/event/cardiology.yaml +15 -0
- endoreg_db/data/event/neurology.yaml +14 -0
- endoreg_db/data/event/surgery.yaml +13 -0
- endoreg_db/data/event/thrombembolism.yaml +20 -0
- endoreg_db/data/event_classification/data.yaml +4 -0
- endoreg_db/data/event_classification_choice/data.yaml +9 -0
- endoreg_db/data/examination/examinations/data.yaml +172 -0
- endoreg_db/data/examination/time/data.yaml +48 -0
- endoreg_db/data/examination/time-type/data.yaml +5 -0
- endoreg_db/data/examination/type/data.yaml +17 -0
- endoreg_db/data/examination_indication/endoscopy.yaml +359 -0
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +90 -0
- endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +97 -0
- endoreg_db/data/examination_requirement_set/colonoscopy.yaml +15 -0
- endoreg_db/data/finding/00_generic.yaml +35 -0
- endoreg_db/data/finding/00_generic_complication.yaml +9 -0
- endoreg_db/data/finding/01_gastroscopy_baseline.yaml +88 -0
- endoreg_db/data/finding/01_gastroscopy_observation.yaml +113 -0
- endoreg_db/data/finding/02_colonoscopy_baseline.yaml +53 -0
- endoreg_db/data/finding/02_colonoscopy_hidden.yaml +119 -0
- endoreg_db/data/finding/02_colonoscopy_observation.yaml +152 -0
- endoreg_db/data/finding_classification/00_generic.yaml +44 -0
- endoreg_db/data/finding_classification/00_generic_histology.yaml +28 -0
- endoreg_db/data/finding_classification/00_generic_lesion.yaml +52 -0
- endoreg_db/data/finding_classification/02_colonoscopy_baseline.yaml +83 -0
- endoreg_db/data/finding_classification/02_colonoscopy_histology.yaml +13 -0
- endoreg_db/data/finding_classification/02_colonoscopy_other.yaml +12 -0
- endoreg_db/data/finding_classification/02_colonoscopy_polyp.yaml +101 -0
- endoreg_db/data/finding_classification_choice/00_generic.yaml +15 -0
- endoreg_db/data/finding_classification_choice/00_generic_baseline.yaml +23 -0
- endoreg_db/data/finding_classification_choice/00_generic_complication.yaml +15 -0
- endoreg_db/data/finding_classification_choice/00_generic_histology.yaml +21 -0
- endoreg_db/data/finding_classification_choice/00_generic_lesion.yaml +158 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_bowel_preparation.yaml +49 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_generic.yaml +19 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_histology.yaml +20 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_location.yaml +248 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_other.yaml +34 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_polyp_advanced_imaging.yaml +76 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_polyp_morphology.yaml +75 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_size.yaml +27 -0
- endoreg_db/data/finding_classification_type/00_generic.yaml +53 -0
- endoreg_db/data/finding_classification_type/02_colonoscopy.yaml +9 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy.yaml +59 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_ablation.yaml +44 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_bleeding.yaml +55 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_resection.yaml +85 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stenosis.yaml +17 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stent.yaml +9 -0
- endoreg_db/data/finding_intervention/01_gastroscopy.yaml +19 -0
- endoreg_db/data/finding_intervention/04_eus.yaml +39 -0
- endoreg_db/data/finding_intervention/05_ercp.yaml +3 -0
- endoreg_db/data/finding_intervention_type/endoscopy.yaml +15 -0
- endoreg_db/data/finding_type/data.yaml +39 -0
- endoreg_db/data/gender/data.yaml +42 -0
- endoreg_db/data/information_source/annotation.yaml +6 -0
- endoreg_db/data/information_source/data.yaml +30 -0
- endoreg_db/data/information_source/endoscopy_guidelines.yaml +7 -0
- endoreg_db/data/information_source/medication.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/cardiac_enzymes.yaml +37 -0
- endoreg_db/data/lab_value/coagulation.yaml +54 -0
- endoreg_db/data/lab_value/electrolytes.yaml +228 -0
- endoreg_db/data/lab_value/gastrointestinal_function.yaml +133 -0
- endoreg_db/data/lab_value/hematology.yaml +184 -0
- endoreg_db/data/lab_value/hormones.yaml +59 -0
- endoreg_db/data/lab_value/lipids.yaml +53 -0
- endoreg_db/data/lab_value/misc.yaml +76 -0
- endoreg_db/data/lab_value/renal_function.yaml +12 -0
- endoreg_db/data/log_type/data.yaml +57 -0
- endoreg_db/data/lx_client_tag/base.yaml +54 -0
- endoreg_db/data/lx_client_type/base.yaml +30 -0
- endoreg_db/data/lx_permission/base.yaml +24 -0
- endoreg_db/data/lx_permission/endoreg.yaml +52 -0
- endoreg_db/data/material/material.yaml +91 -0
- endoreg_db/data/medication/anticoagulation.yaml +65 -0
- endoreg_db/data/medication/tah.yaml +70 -0
- endoreg_db/data/medication_indication/anticoagulation.yaml +115 -0
- endoreg_db/data/medication_indication_type/data.yaml +11 -0
- endoreg_db/data/medication_indication_type/thrombembolism.yaml +41 -0
- endoreg_db/data/medication_intake_time/base.yaml +31 -0
- endoreg_db/data/medication_schedule/apixaban.yaml +95 -0
- endoreg_db/data/medication_schedule/ass.yaml +12 -0
- endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -0
- endoreg_db/data/names_first/first_names.yaml +54 -0
- endoreg_db/data/names_last/last_names.yaml +51 -0
- endoreg_db/data/network_device/data.yaml +59 -0
- endoreg_db/data/network_device_type/data.yaml +12 -0
- endoreg_db/data/organ/data.yaml +29 -0
- endoreg_db/data/patient_lab_sample_type/generic.yaml +6 -0
- endoreg_db/data/pdf_type/data.yaml +46 -0
- endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -0
- endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -0
- endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -0
- endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -0
- endoreg_db/data/profession/data.yaml +70 -0
- 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/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -0
- endoreg_db/data/report_reader_flag/rkh-histology-generic.yaml +10 -0
- endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +30 -0
- endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +24 -0
- endoreg_db/data/requirement/01_patient_data.yaml +93 -0
- endoreg_db/data/requirement/old/colon_polyp_intervention.yaml +49 -0
- endoreg_db/data/requirement/old/colonoscopy_baseline_austria.yaml +45 -0
- endoreg_db/data/requirement/old/coloreg_colon_polyp.yaml +49 -0
- endoreg_db/data/requirement/old/disease_cardiovascular.yaml +79 -0
- endoreg_db/data/requirement/old/disease_classification_choice_cardiovascular.yaml +41 -0
- endoreg_db/data/requirement/old/disease_hepatology.yaml +12 -0
- endoreg_db/data/requirement/old/disease_misc.yaml +12 -0
- endoreg_db/data/requirement/old/disease_renal.yaml +96 -0
- endoreg_db/data/requirement/old/endoscopy_bleeding_risk.yaml +59 -0
- endoreg_db/data/requirement/old/event_cardiology.yaml +251 -0
- endoreg_db/data/requirement/old/event_requirements.yaml +145 -0
- endoreg_db/data/requirement/old/finding_colon_polyp.yaml +50 -0
- endoreg_db/data/requirement/old/gender.yaml +0 -0
- endoreg_db/data/requirement/old/lab_value.yaml +441 -0
- endoreg_db/data/requirement/old/medication.yaml +93 -0
- endoreg_db/data/requirement_operator/_old/age.yaml +13 -0
- endoreg_db/data/requirement_operator/_old/lab_operators.yaml +129 -0
- endoreg_db/data/requirement_operator/_old/model_operators.yaml +96 -0
- endoreg_db/data/requirement_operator/new_operators.yaml +36 -0
- endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +65 -0
- endoreg_db/data/requirement_set/01_laboratory.yaml +13 -0
- endoreg_db/data/requirement_set/02_endoscopy_bleeding_risk.yaml +46 -0
- endoreg_db/data/requirement_set/90_coloreg.yaml +190 -0
- endoreg_db/data/requirement_set/_old_ +109 -0
- endoreg_db/data/requirement_set/colonoscopy_austria_screening.yaml +57 -0
- endoreg_db/data/requirement_set_type/data.yaml +41 -0
- endoreg_db/data/requirement_type/requirement_types.yaml +165 -0
- endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -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/setup_config.yaml +38 -0
- endoreg_db/data/shift/endoscopy.yaml +21 -0
- endoreg_db/data/shift/m2.yaml +0 -0
- endoreg_db/data/shift_type/base.yaml +35 -0
- endoreg_db/data/tag/requirement_set_tags.yaml +32 -0
- endoreg_db/data/tmp/chronic_kidney_disease.yaml +0 -0
- endoreg_db/data/tmp/congestive_heart_failure.yaml +0 -0
- endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -0
- endoreg_db/data/unit/concentration.yaml +115 -0
- endoreg_db/data/unit/data.yaml +17 -0
- endoreg_db/data/unit/length.yaml +31 -0
- endoreg_db/data/unit/misc.yaml +20 -0
- endoreg_db/data/unit/rate.yaml +6 -0
- endoreg_db/data/unit/time.yaml +48 -0
- endoreg_db/data/unit/volume.yaml +35 -0
- endoreg_db/data/unit/weight.yaml +38 -0
- endoreg_db/data/waste/data.yaml +12 -0
- endoreg_db/exceptions.py +24 -0
- endoreg_db/export/frames/export.py +6 -0
- endoreg_db/export/frames/export_frames_with_labels.py +616 -0
- endoreg_db/factories/__init__.py +0 -0
- endoreg_db/forms/__init__.py +4 -0
- endoreg_db/forms/examination_form.py +12 -0
- endoreg_db/forms/patient_finding_intervention_form.py +40 -0
- endoreg_db/forms/patient_form.py +23 -0
- endoreg_db/forms/questionnaires/__init__.py +1 -0
- endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -0
- endoreg_db/forms/settings/__init__.py +11 -0
- endoreg_db/forms/unit.py +7 -0
- endoreg_db/helpers/__init__.py +0 -0
- endoreg_db/helpers/count_db.py +48 -0
- endoreg_db/helpers/data_loader.py +280 -0
- endoreg_db/helpers/default_objects.py +414 -0
- endoreg_db/helpers/download_segmentation_model.py +32 -0
- endoreg_db/helpers/interact.py +1 -0
- endoreg_db/helpers/test_video_helper.py +127 -0
- endoreg_db/import_files/__init__.py +27 -0
- endoreg_db/import_files/context/__init__.py +7 -0
- endoreg_db/import_files/context/default_sensitive_meta.py +83 -0
- endoreg_db/import_files/context/ensure_center.py +17 -0
- endoreg_db/import_files/context/file_lock.py +66 -0
- endoreg_db/import_files/context/import_context.py +42 -0
- endoreg_db/import_files/context/validate_directories.py +57 -0
- endoreg_db/import_files/file_storage/__init__.py +15 -0
- endoreg_db/import_files/file_storage/create_report_file.py +99 -0
- endoreg_db/import_files/file_storage/create_video_file.py +104 -0
- endoreg_db/import_files/file_storage/sensitive_meta_storage.py +42 -0
- endoreg_db/import_files/file_storage/state_management.py +463 -0
- endoreg_db/import_files/file_storage/storage.py +42 -0
- endoreg_db/import_files/import_service.md +26 -0
- endoreg_db/import_files/processing/__init__.py +11 -0
- endoreg_db/import_files/processing/report_processing/report_anonymization.py +99 -0
- endoreg_db/import_files/processing/sensitive_meta_adapter.py +51 -0
- endoreg_db/import_files/processing/video_processing/video_anonymization.py +107 -0
- endoreg_db/import_files/pseudonymization/__init__.py +0 -0
- endoreg_db/import_files/pseudonymization/fake.py +52 -0
- endoreg_db/import_files/pseudonymization/k_anonymity.py +181 -0
- endoreg_db/import_files/pseudonymization/k_pseudonymity.py +139 -0
- endoreg_db/import_files/pseudonymization/pseudonymize.py +0 -0
- endoreg_db/import_files/report_import_service.py +147 -0
- endoreg_db/import_files/video_import_service.py +154 -0
- endoreg_db/logger_conf.py +156 -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 +132 -0
- endoreg_db/management/commands/create_model_meta_from_huggingface.py +177 -0
- endoreg_db/management/commands/create_multilabel_model_meta.py +419 -0
- endoreg_db/management/commands/export_frame_annot.py +196 -0
- endoreg_db/management/commands/fix_missing_patient_data.py +206 -0
- endoreg_db/management/commands/fix_video_paths.py +186 -0
- endoreg_db/management/commands/import_report.py +361 -0
- endoreg_db/management/commands/list_routes.py +20 -0
- endoreg_db/management/commands/load_ai_model_data.py +83 -0
- endoreg_db/management/commands/load_ai_model_label_data.py +60 -0
- endoreg_db/management/commands/load_base_db_data.py +63 -0
- endoreg_db/management/commands/load_center_data.py +68 -0
- endoreg_db/management/commands/load_contraindication_data.py +39 -0
- endoreg_db/management/commands/load_disease_classification_choices_data.py +38 -0
- endoreg_db/management/commands/load_disease_classification_data.py +38 -0
- endoreg_db/management/commands/load_disease_data.py +59 -0
- endoreg_db/management/commands/load_distribution_data.py +63 -0
- endoreg_db/management/commands/load_endoscope_data.py +58 -0
- endoreg_db/management/commands/load_event_data.py +39 -0
- endoreg_db/management/commands/load_examination_data.py +78 -0
- endoreg_db/management/commands/load_examination_indication_data.py +85 -0
- endoreg_db/management/commands/load_finding_data.py +115 -0
- endoreg_db/management/commands/load_gender_data.py +37 -0
- endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +142 -0
- endoreg_db/management/commands/load_information_source.py +46 -0
- endoreg_db/management/commands/load_lab_value_data.py +52 -0
- endoreg_db/management/commands/load_legacy_data.py +303 -0
- endoreg_db/management/commands/load_medication_data.py +104 -0
- endoreg_db/management/commands/load_name_data.py +36 -0
- endoreg_db/management/commands/load_organ_data.py +39 -0
- endoreg_db/management/commands/load_pdf_type_data.py +58 -0
- endoreg_db/management/commands/load_profession_data.py +40 -0
- endoreg_db/management/commands/load_qualification_data.py +56 -0
- endoreg_db/management/commands/load_report_reader_flag_data.py +40 -0
- endoreg_db/management/commands/load_requirement_data.py +207 -0
- endoreg_db/management/commands/load_requirement_set_tags.py +95 -0
- endoreg_db/management/commands/load_risk_data.py +57 -0
- endoreg_db/management/commands/load_shift_data.py +57 -0
- endoreg_db/management/commands/load_tag_data.py +54 -0
- endoreg_db/management/commands/load_unit_data.py +40 -0
- endoreg_db/management/commands/load_user_groups.py +26 -0
- endoreg_db/management/commands/model_input.py +169 -0
- endoreg_db/management/commands/register_ai_model.py +70 -0
- endoreg_db/management/commands/setup_endoreg_db.py +459 -0
- endoreg_db/management/commands/start_filewatcher.py +115 -0
- endoreg_db/management/commands/storage_management.py +622 -0
- endoreg_db/management/commands/summarize_db_content.py +280 -0
- endoreg_db/management/commands/train_image_multilabel_model.py +144 -0
- endoreg_db/management/commands/validate_video_files.py +189 -0
- endoreg_db/management/commands/video_validation.py +20 -0
- endoreg_db/mermaid/Overall_flow_patient_finding_intervention.md +10 -0
- endoreg_db/mermaid/anonymized_image_annotation.md +20 -0
- endoreg_db/mermaid/binary_classification_annotation.md +50 -0
- endoreg_db/mermaid/classification.md +8 -0
- endoreg_db/mermaid/examination.md +8 -0
- endoreg_db/mermaid/findings.md +7 -0
- endoreg_db/mermaid/image_classification.md +28 -0
- endoreg_db/mermaid/interventions.md +8 -0
- endoreg_db/mermaid/morphology.md +8 -0
- endoreg_db/mermaid/patient_creation.md +14 -0
- endoreg_db/mermaid/video_segmentation_annotation.md +17 -0
- endoreg_db/migrations/0001_initial.py +1953 -0
- endoreg_db/migrations/__init__.py +0 -0
- endoreg_db/models/__init__.py +322 -0
- endoreg_db/models/administration/__init__.py +95 -0
- endoreg_db/models/administration/ai/__init__.py +9 -0
- endoreg_db/models/administration/ai/active_model.py +35 -0
- endoreg_db/models/administration/ai/ai_model.py +180 -0
- endoreg_db/models/administration/ai/model_type.py +42 -0
- endoreg_db/models/administration/case/__init__.py +5 -0
- endoreg_db/models/administration/case/case.py +114 -0
- endoreg_db/models/administration/case/case_template/__init__.py +3 -0
- endoreg_db/models/administration/case/case_template/case_template.py +3 -0
- endoreg_db/models/administration/case/case_template/case_template_rule.py +3 -0
- endoreg_db/models/administration/case/case_template/case_template_rule_value.py +3 -0
- endoreg_db/models/administration/case/case_template/case_template_type.py +3 -0
- endoreg_db/models/administration/center/__init__.py +13 -0
- endoreg_db/models/administration/center/center.py +85 -0
- endoreg_db/models/administration/center/center_product.py +67 -0
- endoreg_db/models/administration/center/center_resource.py +69 -0
- endoreg_db/models/administration/center/center_shift.py +94 -0
- endoreg_db/models/administration/center/center_waste.py +42 -0
- endoreg_db/models/administration/person/__init__.py +26 -0
- endoreg_db/models/administration/person/employee/__init__.py +3 -0
- endoreg_db/models/administration/person/employee/employee.py +40 -0
- endoreg_db/models/administration/person/employee/employee_qualification.py +44 -0
- endoreg_db/models/administration/person/employee/employee_type.py +50 -0
- endoreg_db/models/administration/person/examiner/__init__.py +4 -0
- endoreg_db/models/administration/person/examiner/examiner.py +64 -0
- endoreg_db/models/administration/person/names/__init__.py +0 -0
- endoreg_db/models/administration/person/names/first_name.py +20 -0
- endoreg_db/models/administration/person/names/last_name.py +20 -0
- endoreg_db/models/administration/person/patient/__init__.py +7 -0
- endoreg_db/models/administration/person/patient/patient.py +488 -0
- endoreg_db/models/administration/person/patient/patient_external_id.py +36 -0
- endoreg_db/models/administration/person/person.py +35 -0
- endoreg_db/models/administration/person/profession/__init__.py +28 -0
- endoreg_db/models/administration/person/user/__init__.py +5 -0
- endoreg_db/models/administration/person/user/portal_user_information.py +41 -0
- endoreg_db/models/administration/product/__init__.py +15 -0
- endoreg_db/models/administration/product/product.py +106 -0
- endoreg_db/models/administration/product/product_group.py +41 -0
- endoreg_db/models/administration/product/product_material.py +60 -0
- endoreg_db/models/administration/product/product_weight.py +51 -0
- endoreg_db/models/administration/product/reference_product.py +147 -0
- endoreg_db/models/administration/qualification/__init__.py +7 -0
- endoreg_db/models/administration/qualification/qualification.py +43 -0
- endoreg_db/models/administration/qualification/qualification_type.py +39 -0
- endoreg_db/models/administration/shift/__init__.py +9 -0
- endoreg_db/models/administration/shift/scheduled_days.py +72 -0
- endoreg_db/models/administration/shift/shift.py +57 -0
- endoreg_db/models/administration/shift/shift_type.py +108 -0
- endoreg_db/models/aidataset/__init__.py +5 -0
- endoreg_db/models/aidataset/aidataset.py +193 -0
- endoreg_db/models/label/__init__.py +23 -0
- endoreg_db/models/label/annotation/__init__.py +12 -0
- endoreg_db/models/label/annotation/image_classification.py +85 -0
- endoreg_db/models/label/annotation/video_segmentation_annotation.py +61 -0
- endoreg_db/models/label/label.py +91 -0
- endoreg_db/models/label/label_set.py +68 -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 +42 -0
- endoreg_db/models/label/label_video_segment/label_video_segment.py +611 -0
- endoreg_db/models/label/video_segmentation_label.py +35 -0
- endoreg_db/models/label/video_segmentation_labelset.py +28 -0
- endoreg_db/models/media/__init__.py +23 -0
- endoreg_db/models/media/frame/__init__.py +3 -0
- endoreg_db/models/media/frame/frame.py +137 -0
- endoreg_db/models/media/pdf/__init__.py +12 -0
- endoreg_db/models/media/pdf/raw_pdf.py +764 -0
- endoreg_db/models/media/pdf/report_file.py +162 -0
- endoreg_db/models/media/pdf/report_reader/__init__.py +7 -0
- endoreg_db/models/media/pdf/report_reader/report_reader_config.py +85 -0
- endoreg_db/models/media/pdf/report_reader/report_reader_flag.py +46 -0
- endoreg_db/models/media/video/__init__.py +9 -0
- endoreg_db/models/media/video/create_from_file.py +402 -0
- endoreg_db/models/media/video/pipe_1.py +258 -0
- endoreg_db/models/media/video/pipe_2.py +129 -0
- endoreg_db/models/media/video/video_file.py +907 -0
- endoreg_db/models/media/video/video_file_ai.py +828 -0
- endoreg_db/models/media/video/video_file_anonymize.py +524 -0
- endoreg_db/models/media/video/video_file_frames/__init__.py +49 -0
- endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py +25 -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 +126 -0
- endoreg_db/models/media/video/video_file_frames/_extract_frames.py +233 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame.py +36 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_number.py +13 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_path.py +24 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_paths.py +40 -0
- endoreg_db/models/media/video/video_file_frames/_get_frame_range.py +44 -0
- endoreg_db/models/media/video/video_file_frames/_get_frames.py +30 -0
- endoreg_db/models/media/video/video_file_frames/_initialize_frames.py +205 -0
- endoreg_db/models/media/video/video_file_frames/_manage_frame_range.py +228 -0
- endoreg_db/models/media/video/video_file_frames/_mark_frames_extracted_status.py +107 -0
- endoreg_db/models/media/video/video_file_io.py +272 -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 +58 -0
- endoreg_db/models/media/video/video_file_meta/get_endo_roi.py +62 -0
- endoreg_db/models/media/video/video_file_meta/get_fps.py +183 -0
- endoreg_db/models/media/video/video_file_meta/initialize_video_specs.py +198 -0
- endoreg_db/models/media/video/video_file_meta/text_meta.py +178 -0
- endoreg_db/models/media/video/video_file_meta/video_meta.py +105 -0
- endoreg_db/models/media/video/video_file_segments.py +317 -0
- endoreg_db/models/media/video/video_metadata.py +67 -0
- endoreg_db/models/media/video/video_processing.py +192 -0
- endoreg_db/models/medical/__init__.py +136 -0
- endoreg_db/models/medical/contraindication/README.md +1 -0
- endoreg_db/models/medical/contraindication/__init__.py +29 -0
- endoreg_db/models/medical/disease.py +174 -0
- endoreg_db/models/medical/event.py +154 -0
- endoreg_db/models/medical/examination/__init__.py +20 -0
- endoreg_db/models/medical/examination/examination.py +183 -0
- endoreg_db/models/medical/examination/examination_indication.py +229 -0
- endoreg_db/models/medical/examination/examination_time.py +68 -0
- endoreg_db/models/medical/examination/examination_time_type.py +44 -0
- endoreg_db/models/medical/examination/examination_type.py +47 -0
- endoreg_db/models/medical/finding/__init__.py +20 -0
- endoreg_db/models/medical/finding/finding.py +113 -0
- endoreg_db/models/medical/finding/finding_classification.py +131 -0
- endoreg_db/models/medical/finding/finding_intervention.py +68 -0
- endoreg_db/models/medical/finding/finding_type.py +38 -0
- endoreg_db/models/medical/hardware/__init__.py +8 -0
- endoreg_db/models/medical/hardware/endoscope.py +77 -0
- endoreg_db/models/medical/hardware/endoscopy_processor.py +182 -0
- endoreg_db/models/medical/laboratory/__init__.py +5 -0
- endoreg_db/models/medical/laboratory/lab_value.py +490 -0
- endoreg_db/models/medical/medication/__init__.py +23 -0
- endoreg_db/models/medical/medication/medication.py +45 -0
- endoreg_db/models/medical/medication/medication_indication.py +78 -0
- endoreg_db/models/medical/medication/medication_indication_type.py +58 -0
- endoreg_db/models/medical/medication/medication_intake_time.py +58 -0
- endoreg_db/models/medical/medication/medication_schedule.py +58 -0
- endoreg_db/models/medical/organ/__init__.py +38 -0
- endoreg_db/models/medical/patient/__init__.py +48 -0
- endoreg_db/models/medical/patient/medication_examples.py +56 -0
- endoreg_db/models/medical/patient/patient_disease.py +72 -0
- endoreg_db/models/medical/patient/patient_event.py +80 -0
- endoreg_db/models/medical/patient/patient_examination.py +280 -0
- endoreg_db/models/medical/patient/patient_examination_indication.py +57 -0
- endoreg_db/models/medical/patient/patient_finding.py +416 -0
- endoreg_db/models/medical/patient/patient_finding_classification.py +231 -0
- endoreg_db/models/medical/patient/patient_finding_intervention.py +37 -0
- endoreg_db/models/medical/patient/patient_lab_sample.py +157 -0
- endoreg_db/models/medical/patient/patient_lab_value.py +247 -0
- endoreg_db/models/medical/patient/patient_medication.py +111 -0
- endoreg_db/models/medical/patient/patient_medication_schedule.py +152 -0
- endoreg_db/models/medical/risk/__init__.py +7 -0
- endoreg_db/models/medical/risk/risk.py +73 -0
- endoreg_db/models/medical/risk/risk_type.py +54 -0
- endoreg_db/models/metadata/__init__.py +19 -0
- endoreg_db/models/metadata/model_meta.py +266 -0
- endoreg_db/models/metadata/model_meta_logic.py +485 -0
- endoreg_db/models/metadata/pdf_meta.py +96 -0
- endoreg_db/models/metadata/sensitive_meta.py +345 -0
- endoreg_db/models/metadata/sensitive_meta_logic.py +1161 -0
- endoreg_db/models/metadata/video_meta.py +459 -0
- endoreg_db/models/metadata/video_prediction_logic.py +232 -0
- endoreg_db/models/metadata/video_prediction_meta.py +319 -0
- endoreg_db/models/operation_log.py +63 -0
- endoreg_db/models/other/__init__.py +40 -0
- endoreg_db/models/other/distribution/__init__.py +46 -0
- endoreg_db/models/other/distribution/base_value_distribution.py +22 -0
- endoreg_db/models/other/distribution/date_value_distribution.py +163 -0
- endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +50 -0
- endoreg_db/models/other/distribution/numeric_value_distribution.py +211 -0
- endoreg_db/models/other/distribution/single_categorical_value_distribution.py +23 -0
- endoreg_db/models/other/emission/__init__.py +5 -0
- endoreg_db/models/other/emission/emission_factor.py +110 -0
- endoreg_db/models/other/gender.py +32 -0
- endoreg_db/models/other/information_source.py +190 -0
- endoreg_db/models/other/material.py +34 -0
- endoreg_db/models/other/resource.py +24 -0
- endoreg_db/models/other/tag.py +32 -0
- endoreg_db/models/other/transport_route.py +40 -0
- endoreg_db/models/other/unit.py +40 -0
- endoreg_db/models/other/waste.py +28 -0
- endoreg_db/models/report/__init__.py +0 -0
- endoreg_db/models/report/images.py +0 -0
- endoreg_db/models/report/report.py +5 -0
- endoreg_db/models/requirement/__init__.py +11 -0
- endoreg_db/models/requirement/requirement.py +792 -0
- endoreg_db/models/requirement/requirement_error.py +84 -0
- endoreg_db/models/requirement/requirement_evaluation/__init__.py +6 -0
- endoreg_db/models/requirement/requirement_evaluation/evaluate_with_dependencies.py +268 -0
- endoreg_db/models/requirement/requirement_evaluation/get_values.py +40 -0
- endoreg_db/models/requirement/requirement_evaluation/operator_evaluation_models.py +6 -0
- endoreg_db/models/requirement/requirement_evaluation/requirement_type_parser.py +137 -0
- endoreg_db/models/requirement/requirement_operator.py +187 -0
- endoreg_db/models/requirement/requirement_set.py +327 -0
- endoreg_db/models/state/__init__.py +13 -0
- endoreg_db/models/state/abstract.py +11 -0
- endoreg_db/models/state/anonymization.py +30 -0
- endoreg_db/models/state/audit_ledger.py +155 -0
- endoreg_db/models/state/label_video_segment.py +31 -0
- endoreg_db/models/state/processing_history/__init__.py +3 -0
- endoreg_db/models/state/processing_history/processing_history.py +136 -0
- endoreg_db/models/state/raw_pdf.py +219 -0
- endoreg_db/models/state/sensitive_meta.py +50 -0
- endoreg_db/models/state/video.py +251 -0
- endoreg_db/models/upload_job.py +100 -0
- endoreg_db/models/utils.py +138 -0
- endoreg_db/queries/__init__.py +3 -0
- endoreg_db/queries/annotations/__init__.py +1 -0
- endoreg_db/queries/annotations/legacy.py +169 -0
- endoreg_db/queries/sanity/__init_.py +0 -0
- endoreg_db/root_urls.py +27 -0
- endoreg_db/schemas/__init__.py +0 -0
- endoreg_db/schemas/examination_evaluation.py +30 -0
- endoreg_db/serializers/Frames_NICE_and_PARIS_classifications.py +861 -0
- endoreg_db/serializers/__init__.py +104 -0
- endoreg_db/serializers/administration/__init__.py +13 -0
- endoreg_db/serializers/administration/ai/__init__.py +9 -0
- endoreg_db/serializers/administration/ai/active_model.py +12 -0
- endoreg_db/serializers/administration/ai/ai_model.py +20 -0
- endoreg_db/serializers/administration/ai/model_type.py +12 -0
- endoreg_db/serializers/administration/center.py +14 -0
- endoreg_db/serializers/administration/gender.py +11 -0
- endoreg_db/serializers/anonymization.py +77 -0
- endoreg_db/serializers/evaluation/examination_evaluation.py +0 -0
- endoreg_db/serializers/examination/__init__.py +10 -0
- endoreg_db/serializers/examination/base.py +45 -0
- endoreg_db/serializers/examination/dropdown.py +20 -0
- endoreg_db/serializers/examination_serializer.py +9 -0
- endoreg_db/serializers/finding/__init__.py +5 -0
- endoreg_db/serializers/finding/finding.py +61 -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 +11 -0
- endoreg_db/serializers/label_video_segment/__init__.py +9 -0
- endoreg_db/serializers/label_video_segment/image_classification_annotation.py +62 -0
- endoreg_db/serializers/label_video_segment/label/__init__.py +6 -0
- endoreg_db/serializers/label_video_segment/label/label.py +15 -0
- endoreg_db/serializers/label_video_segment/label_video_segment.py +427 -0
- endoreg_db/serializers/meta/__init__.py +13 -0
- endoreg_db/serializers/meta/sensitive_meta_detail.py +122 -0
- endoreg_db/serializers/meta/sensitive_meta_update.py +153 -0
- endoreg_db/serializers/meta/sensitive_meta_verification.py +62 -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 +72 -0
- endoreg_db/serializers/misc/sensitive_patient_data.py +144 -0
- endoreg_db/serializers/misc/stats.py +35 -0
- endoreg_db/serializers/misc/translatable_field_mix_in.py +44 -0
- endoreg_db/serializers/misc/upload_job.py +74 -0
- endoreg_db/serializers/patient/__init__.py +12 -0
- endoreg_db/serializers/patient/patient.py +103 -0
- endoreg_db/serializers/patient/patient_dropdown.py +35 -0
- endoreg_db/serializers/patient_examination/__init__.py +7 -0
- endoreg_db/serializers/patient_examination/patient_examination.py +168 -0
- endoreg_db/serializers/patient_finding/__init__.py +15 -0
- endoreg_db/serializers/patient_finding/patient_finding.py +32 -0
- endoreg_db/serializers/patient_finding/patient_finding_classification.py +47 -0
- endoreg_db/serializers/patient_finding/patient_finding_detail.py +62 -0
- endoreg_db/serializers/patient_finding/patient_finding_intervention.py +28 -0
- endoreg_db/serializers/patient_finding/patient_finding_list.py +40 -0
- endoreg_db/serializers/patient_finding/patient_finding_write.py +135 -0
- endoreg_db/serializers/pdf/__init__.py +3 -0
- endoreg_db/serializers/pdf/anony_text_validation.py +101 -0
- endoreg_db/serializers/requirements/requirement_schema.py +20 -0
- endoreg_db/serializers/requirements/requirement_sets.py +99 -0
- endoreg_db/serializers/sensitive_meta_serializer.py +301 -0
- endoreg_db/serializers/video/__init__.py +7 -0
- endoreg_db/serializers/video/video_file.py +283 -0
- endoreg_db/serializers/video/video_file_brief.py +14 -0
- endoreg_db/serializers/video/video_file_detail.py +96 -0
- endoreg_db/serializers/video/video_file_list.py +100 -0
- endoreg_db/serializers/video/video_processing_history.py +172 -0
- endoreg_db/serializers/video_examination.py +198 -0
- endoreg_db/services/__init__.py +5 -0
- endoreg_db/services/anonymization.py +274 -0
- endoreg_db/services/examination_evaluation.py +172 -0
- endoreg_db/services/finding_description_service.py +0 -0
- endoreg_db/services/lookup_service.py +424 -0
- endoreg_db/services/lookup_store.py +266 -0
- endoreg_db/services/model_meta_from_hf.py +76 -0
- endoreg_db/services/pdf_import.py +0 -0
- endoreg_db/services/polling_coordinator.py +319 -0
- endoreg_db/services/pseudonym_service.py +94 -0
- endoreg_db/services/report_import.py +13 -0
- endoreg_db/services/segment_sync.py +171 -0
- endoreg_db/services/video_import.py +9 -0
- endoreg_db/templates/admin/patient_finding_intervention.html +253 -0
- endoreg_db/templates/admin/start_examination.html +12 -0
- endoreg_db/templates/timeline.html +176 -0
- endoreg_db/urls/__init__.py +56 -0
- endoreg_db/urls/ai.py +14 -0
- endoreg_db/urls/anonymization.py +78 -0
- endoreg_db/urls/auth.py +16 -0
- endoreg_db/urls/classification.py +34 -0
- endoreg_db/urls/examination.py +63 -0
- endoreg_db/urls/media.py +251 -0
- endoreg_db/urls/patient.py +23 -0
- endoreg_db/urls/requirements.py +15 -0
- endoreg_db/urls/root_urls.py +28 -0
- endoreg_db/urls/stats.py +54 -0
- endoreg_db/urls/upload.py +12 -0
- endoreg_db/urls.py +9 -0
- endoreg_db/utils/__init__.py +97 -0
- endoreg_db/utils/ai/__init__.py +9 -0
- endoreg_db/utils/ai/data_loader_for_model_input.py +262 -0
- endoreg_db/utils/ai/data_loader_for_model_training.py +262 -0
- endoreg_db/utils/ai/get.py +6 -0
- endoreg_db/utils/ai/inference_dataset.py +51 -0
- endoreg_db/utils/ai/model_training/config.py +117 -0
- endoreg_db/utils/ai/model_training/dataset.py +74 -0
- endoreg_db/utils/ai/model_training/losses.py +68 -0
- endoreg_db/utils/ai/model_training/metrics.py +78 -0
- endoreg_db/utils/ai/model_training/model_backbones.py +155 -0
- endoreg_db/utils/ai/model_training/model_gastronet_resnet.py +118 -0
- endoreg_db/utils/ai/model_training/trainer_gastronet_multilabel.py +771 -0
- endoreg_db/utils/ai/multilabel_classification_net.py +270 -0
- endoreg_db/utils/ai/postprocess.py +63 -0
- endoreg_db/utils/ai/predict.py +293 -0
- endoreg_db/utils/ai/preprocess.py +76 -0
- endoreg_db/utils/calc_duration_seconds.py +24 -0
- endoreg_db/utils/case_generator/__init__.py +3 -0
- endoreg_db/utils/case_generator/lab_sample_factory.py +32 -0
- endoreg_db/utils/check_video_files.py +175 -0
- endoreg_db/utils/cropping.py +30 -0
- endoreg_db/utils/dataloader.py +285 -0
- endoreg_db/utils/dates.py +59 -0
- endoreg_db/utils/defaults/set_default_center.py +33 -0
- endoreg_db/utils/env.py +37 -0
- endoreg_db/utils/extract_specific_frames.py +87 -0
- endoreg_db/utils/file_operations.py +70 -0
- endoreg_db/utils/fix_video_path_direct.py +157 -0
- endoreg_db/utils/frame_anonymization_utils.py +463 -0
- endoreg_db/utils/hashs.py +138 -0
- endoreg_db/utils/links/__init__.py +0 -0
- endoreg_db/utils/links/requirement_link.py +237 -0
- endoreg_db/utils/mime_types.py +0 -0
- endoreg_db/utils/names.py +82 -0
- endoreg_db/utils/ocr.py +195 -0
- endoreg_db/utils/operation_log.py +87 -0
- endoreg_db/utils/parse_and_generate_yaml.py +45 -0
- endoreg_db/utils/paths.py +159 -0
- endoreg_db/utils/permissions.py +160 -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 +144 -0
- endoreg_db/utils/product/__init__.py +0 -0
- endoreg_db/utils/product/sum_emissions.py +22 -0
- endoreg_db/utils/product/sum_weights.py +20 -0
- endoreg_db/utils/pydantic_models/__init__.py +5 -0
- endoreg_db/utils/pydantic_models/db_config.py +57 -0
- endoreg_db/utils/requirement_helpers.py +0 -0
- endoreg_db/utils/requirement_operator_logic/__init__.py +0 -0
- endoreg_db/utils/requirement_operator_logic/_old/lab_value_operators.py +678 -0
- endoreg_db/utils/requirement_operator_logic/_old/model_evaluators.py +842 -0
- endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +114 -0
- endoreg_db/utils/setup_config.py +196 -0
- endoreg_db/utils/storage.py +117 -0
- endoreg_db/utils/translation.py +31 -0
- endoreg_db/utils/uuid.py +5 -0
- endoreg_db/utils/validate_endo_roi.py +33 -0
- endoreg_db/utils/validate_subcategory_dict.py +93 -0
- endoreg_db/utils/validate_video_detailed.py +415 -0
- endoreg_db/utils/video/__init__.py +30 -0
- endoreg_db/utils/video/extract_frames.py +100 -0
- endoreg_db/utils/video/ffmpeg_wrapper.py +996 -0
- endoreg_db/utils/video/names.py +47 -0
- endoreg_db/utils/video/streaming_processor.py +386 -0
- endoreg_db/utils/video/video_splitter.py +105 -0
- endoreg_db/versioning.md +79 -0
- endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py +247 -0
- endoreg_db/views/__init__.py +157 -0
- endoreg_db/views/anonymization/__init__.py +31 -0
- endoreg_db/views/anonymization/media_management.py +486 -0
- endoreg_db/views/anonymization/overview.py +307 -0
- endoreg_db/views/anonymization/validate.py +310 -0
- endoreg_db/views/auth/__init__.py +13 -0
- endoreg_db/views/auth/keycloak.py +146 -0
- endoreg_db/views/examination/__init__.py +30 -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 +62 -0
- endoreg_db/views/examination/get_finding_classifications.py +38 -0
- endoreg_db/views/examination/get_findings.py +39 -0
- endoreg_db/views/examination/get_instruments.py +19 -0
- endoreg_db/views/examination/get_interventions.py +14 -0
- endoreg_db/views/finding/__init__.py +9 -0
- endoreg_db/views/finding/finding.py +116 -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 +41 -0
- endoreg_db/views/finding_classification/get_classification_choices.py +54 -0
- endoreg_db/views/media/__init__.py +32 -0
- endoreg_db/views/media/pdf_media.py +411 -0
- endoreg_db/views/media/sensitive_metadata.py +372 -0
- endoreg_db/views/media/video_media.py +275 -0
- endoreg_db/views/meta/__init__.py +7 -0
- endoreg_db/views/meta/sensitive_meta_list.py +102 -0
- endoreg_db/views/meta/sensitive_meta_verification.py +74 -0
- endoreg_db/views/misc/__init__.py +29 -0
- endoreg_db/views/misc/center.py +14 -0
- endoreg_db/views/misc/csrf.py +8 -0
- endoreg_db/views/misc/gender.py +15 -0
- endoreg_db/views/misc/stats.py +255 -0
- endoreg_db/views/misc/upload_views.py +241 -0
- endoreg_db/views/patient/__init__.py +3 -0
- endoreg_db/views/patient/patient.py +253 -0
- endoreg_db/views/patient_examination/__init__.py +11 -0
- endoreg_db/views/patient_examination/patient_examination.py +141 -0
- endoreg_db/views/patient_examination/patient_examination_create.py +58 -0
- endoreg_db/views/patient_examination/patient_examination_detail.py +63 -0
- endoreg_db/views/patient_examination/patient_examination_list.py +72 -0
- endoreg_db/views/patient_examination/video.py +228 -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 +71 -0
- endoreg_db/views/patient_finding/patient_finding_optimized.py +291 -0
- endoreg_db/views/patient_finding_classification/__init__.py +5 -0
- endoreg_db/views/patient_finding_classification/pfc_create.py +75 -0
- endoreg_db/views/report/__init__.py +7 -0
- endoreg_db/views/report/reimport.py +177 -0
- endoreg_db/views/report/report_stream.py +191 -0
- endoreg_db/views/requirement/__init__.py +11 -0
- endoreg_db/views/requirement/evaluate.py +278 -0
- endoreg_db/views/requirement/lookup.py +380 -0
- endoreg_db/views/requirement/lookup_store.py +183 -0
- endoreg_db/views/requirement/requirement_utils.py +87 -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 +266 -0
- endoreg_db/views/video/__init__.py +49 -0
- endoreg_db/views/video/ai/__init__.py +8 -0
- endoreg_db/views/video/ai/label.py +159 -0
- endoreg_db/views/video/correction.py +529 -0
- endoreg_db/views/video/reimport.py +230 -0
- endoreg_db/views/video/segments_crud.py +709 -0
- endoreg_db/views/video/video_apply_mask.py +49 -0
- endoreg_db/views/video/video_correction.py +22 -0
- endoreg_db/views/video/video_download_processed.py +58 -0
- endoreg_db/views/video/video_examination_viewset.py +242 -0
- endoreg_db/views/video/video_metadata.py +101 -0
- endoreg_db/views/video/video_processing_history.py +25 -0
- endoreg_db/views/video/video_remove_frames.py +49 -0
- endoreg_db/views/video/video_stream.py +334 -0
- endoreg_db-0.8.9.32.dist-info/METADATA +404 -0
- endoreg_db-0.8.9.32.dist-info/RECORD +787 -0
- endoreg_db-0.8.9.32.dist-info/WHEEL +4 -0
- endoreg_db-0.8.9.32.dist-info/licenses/LICENSE +674 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
from django.core.management import BaseCommand
|
|
6
|
+
from icecream import ic
|
|
7
|
+
|
|
8
|
+
from endoreg_db.helpers.data_loader import load_data
|
|
9
|
+
from endoreg_db.models import PdfType, RawPdfFile
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# python manage.py import_report tests/assets/lux-gastro-report.pdf --verbose --start_ollama
|
|
13
|
+
# Dynamic import path manipulation to ensure local development version is used
|
|
14
|
+
def ensure_local_lx_anonymizer():
|
|
15
|
+
"""
|
|
16
|
+
Checks for a local development version of the lx-anonymizer package and adds it to sys.path if available.
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
True if the local lx-anonymizer directory was found and added to sys.path; False otherwise.
|
|
20
|
+
"""
|
|
21
|
+
script_dir = Path(
|
|
22
|
+
__file__
|
|
23
|
+
).parent.parent.parent.parent.parent # /home/admin/dev/lx-annotate/endoreg-db
|
|
24
|
+
local_lx_anonymizer_path = script_dir / "lx-anonymizer"
|
|
25
|
+
|
|
26
|
+
if local_lx_anonymizer_path.exists() and local_lx_anonymizer_path.is_dir():
|
|
27
|
+
# Add the directory containing lx_anonymizer to the Python path
|
|
28
|
+
if str(local_lx_anonymizer_path) not in sys.path:
|
|
29
|
+
sys.path.insert(0, str(local_lx_anonymizer_path))
|
|
30
|
+
print(f"Using local lx-anonymizer from: {local_lx_anonymizer_path}")
|
|
31
|
+
return True
|
|
32
|
+
return False
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# Try to use local version, fall back to installed version
|
|
36
|
+
local_version_available = ensure_local_lx_anonymizer()
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# Now import from lx_anonymizer
|
|
40
|
+
try:
|
|
41
|
+
from lx_anonymizer.ollama.ollama_service import ollama_service
|
|
42
|
+
except ImportError:
|
|
43
|
+
print("Could not import init_ollama_service from local or installed lx_anonymizer")
|
|
44
|
+
raise
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class Command(BaseCommand):
|
|
48
|
+
"""Management Command to import a report file to the database"""
|
|
49
|
+
|
|
50
|
+
help = """
|
|
51
|
+
Imports a .pdf file to the database.
|
|
52
|
+
1. Get center by center name from db (default: university_hospital_wuerzburg)
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
def add_arguments(self, parser):
|
|
56
|
+
"""
|
|
57
|
+
Defines command-line arguments for the import_report management command.
|
|
58
|
+
|
|
59
|
+
Adds options for specifying the report file path, center name, report directory, deletion and save behavior, and controls for initializing the Ollama LLM service.
|
|
60
|
+
"""
|
|
61
|
+
parser.add_argument(
|
|
62
|
+
"--verbose",
|
|
63
|
+
action="store_true",
|
|
64
|
+
help="Display verbose output for all commands",
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
parser.add_argument(
|
|
68
|
+
"file_path",
|
|
69
|
+
type=str,
|
|
70
|
+
help="Path to the Report file to import",
|
|
71
|
+
)
|
|
72
|
+
parser.add_argument(
|
|
73
|
+
"--center_name",
|
|
74
|
+
type=str,
|
|
75
|
+
default="university_hospital_wuerzburg",
|
|
76
|
+
help="Name of the center to associate with the report",
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
parser.add_argument(
|
|
80
|
+
"--report_dir_root",
|
|
81
|
+
type=str,
|
|
82
|
+
default="~/test-data/db_report_dir",
|
|
83
|
+
help="Path to the report directory",
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
parser.add_argument(
|
|
87
|
+
"--delete_source",
|
|
88
|
+
action="store_true",
|
|
89
|
+
default=False,
|
|
90
|
+
help="Delete the source report file after importing",
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
parser.add_argument(
|
|
94
|
+
"--save",
|
|
95
|
+
action="store_true",
|
|
96
|
+
default=False,
|
|
97
|
+
help="Save the report object to the database",
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
parser.add_argument(
|
|
101
|
+
"--start_ollama",
|
|
102
|
+
action="store_true",
|
|
103
|
+
default=False,
|
|
104
|
+
help="Start Ollama server for LLM processing",
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
parser.add_argument(
|
|
108
|
+
"--ollama_debug",
|
|
109
|
+
action="store_true",
|
|
110
|
+
default=False,
|
|
111
|
+
help="Enable debug mode for Ollama",
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
parser.add_argument(
|
|
115
|
+
"--ollama_timeout",
|
|
116
|
+
type=int,
|
|
117
|
+
default=30,
|
|
118
|
+
help="Maximum time to wait for Ollama to start in seconds",
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
def handle(self, *args, **options):
|
|
122
|
+
"""
|
|
123
|
+
Handles the import of a report report file into the database, with optional LLM service initialization and anonymization.
|
|
124
|
+
|
|
125
|
+
This method validates input options, optionally starts the Ollama LLM service, ensures the existence of required files and directories, determines the report type, processes the report for text and metadata extraction, anonymizes content, and saves the resulting data to the database. Provides verbose output and error handling throughout the process.
|
|
126
|
+
"""
|
|
127
|
+
# Load initial or prerequisite data for the application.
|
|
128
|
+
# This may include loading default values, configurations, or lookup table data
|
|
129
|
+
# necessary for the import process or other application functionalities.
|
|
130
|
+
try:
|
|
131
|
+
load_data()
|
|
132
|
+
self.stdout.write(self.style.SUCCESS("Successfully loaded initial data."))
|
|
133
|
+
except Exception as e:
|
|
134
|
+
self.stdout.write(self.style.ERROR(f"Failed to load initial data: {e}"))
|
|
135
|
+
# Depending on the criticality of load_data(), you might want to exit or handle differently.
|
|
136
|
+
# For now, we'll just log the error and continue.
|
|
137
|
+
|
|
138
|
+
verbose = options["verbose"]
|
|
139
|
+
center_name = options["center_name"]
|
|
140
|
+
report_dir_root = options["report_dir_root"]
|
|
141
|
+
file_path = options["file_path"]
|
|
142
|
+
delete_source = options["delete_source"]
|
|
143
|
+
save = options["save"]
|
|
144
|
+
start_ollama = options["start_ollama"]
|
|
145
|
+
ollama_debug = options["ollama_debug"]
|
|
146
|
+
ollama_timeout = options["ollama_timeout"]
|
|
147
|
+
|
|
148
|
+
if not isinstance(delete_source, bool):
|
|
149
|
+
raise ValueError("delete_source must be a boolean")
|
|
150
|
+
|
|
151
|
+
self.stdout.write(
|
|
152
|
+
self.style.SUCCESS(f"Starting report import for {file_path}...")
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
if local_version_available:
|
|
156
|
+
self.stdout.write(
|
|
157
|
+
self.style.SUCCESS("Using local development version of lx-anonymizer")
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
ollama_proc = None # Track Ollama process if started
|
|
161
|
+
try:
|
|
162
|
+
# Initialize Ollama service if requested
|
|
163
|
+
if start_ollama:
|
|
164
|
+
self.stdout.write(self.style.SUCCESS("Initializing Ollama service..."))
|
|
165
|
+
try:
|
|
166
|
+
# Set Ollama environment variables
|
|
167
|
+
os.environ["OLLAMA_MAX_WAIT_TIME"] = str(ollama_timeout)
|
|
168
|
+
os.environ["OLLAMA_DEBUG"] = "true" if ollama_debug else "false"
|
|
169
|
+
|
|
170
|
+
# Try to find Ollama binary location from env or common paths
|
|
171
|
+
ollama_bin = os.environ.get("OLLAMA_BIN")
|
|
172
|
+
if not ollama_bin:
|
|
173
|
+
# Try common Nix store paths first
|
|
174
|
+
for path in [
|
|
175
|
+
"/run/current-system/sw/bin/ollama",
|
|
176
|
+
"/nix/store/*/bin/ollama",
|
|
177
|
+
]:
|
|
178
|
+
import glob
|
|
179
|
+
|
|
180
|
+
matches = glob.glob(path)
|
|
181
|
+
if matches:
|
|
182
|
+
ollama_bin = matches[0]
|
|
183
|
+
break
|
|
184
|
+
|
|
185
|
+
if ollama_bin:
|
|
186
|
+
self.stdout.write(
|
|
187
|
+
self.style.SUCCESS(f"Using Ollama binary at: {ollama_bin}")
|
|
188
|
+
)
|
|
189
|
+
os.environ["OLLAMA_BIN"] = ollama_bin
|
|
190
|
+
|
|
191
|
+
# Start Ollama server process if not already running
|
|
192
|
+
import shutil
|
|
193
|
+
import subprocess
|
|
194
|
+
|
|
195
|
+
# Check if ollama is already running
|
|
196
|
+
try:
|
|
197
|
+
import requests
|
|
198
|
+
|
|
199
|
+
resp = requests.get(
|
|
200
|
+
"http://127.0.0.1:11434/api/version", timeout=1
|
|
201
|
+
)
|
|
202
|
+
if resp.status_code == 200:
|
|
203
|
+
self.stdout.write(
|
|
204
|
+
self.style.SUCCESS("Ollama is already running")
|
|
205
|
+
)
|
|
206
|
+
else:
|
|
207
|
+
self.stdout.write(
|
|
208
|
+
self.style.WARNING(
|
|
209
|
+
f"Ollama returned status code {resp.status_code}"
|
|
210
|
+
)
|
|
211
|
+
)
|
|
212
|
+
except requests.exceptions.RequestException:
|
|
213
|
+
self.stdout.write(
|
|
214
|
+
self.style.WARNING(
|
|
215
|
+
"Ollama is not running, attempting to start..."
|
|
216
|
+
)
|
|
217
|
+
)
|
|
218
|
+
# Find ollama binary
|
|
219
|
+
ollama_path = ollama_bin or shutil.which("ollama")
|
|
220
|
+
if ollama_path:
|
|
221
|
+
self.stdout.write(
|
|
222
|
+
self.style.SUCCESS(
|
|
223
|
+
f"Starting Ollama using {ollama_path}"
|
|
224
|
+
)
|
|
225
|
+
)
|
|
226
|
+
# Start ollama serve in background
|
|
227
|
+
ollama_proc = subprocess.Popen(
|
|
228
|
+
[ollama_path, "serve"],
|
|
229
|
+
stdout=subprocess.PIPE,
|
|
230
|
+
stderr=subprocess.STDOUT,
|
|
231
|
+
start_new_session=True,
|
|
232
|
+
)
|
|
233
|
+
self.stdout.write(
|
|
234
|
+
self.style.SUCCESS(
|
|
235
|
+
"Ollama server started in background"
|
|
236
|
+
)
|
|
237
|
+
)
|
|
238
|
+
else:
|
|
239
|
+
self.stdout.write(
|
|
240
|
+
self.style.ERROR("Ollama binary not found in PATH")
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
# Start the service with explicit initialization
|
|
244
|
+
ollama_service(auto_start=True)
|
|
245
|
+
self.stdout.write(
|
|
246
|
+
self.style.SUCCESS("Ollama service initialized successfully")
|
|
247
|
+
)
|
|
248
|
+
except Exception as e:
|
|
249
|
+
self.stdout.write(
|
|
250
|
+
self.style.ERROR(f"Failed to initialize Ollama service: {e}")
|
|
251
|
+
)
|
|
252
|
+
self.stdout.write(
|
|
253
|
+
self.style.WARNING(
|
|
254
|
+
"Continuing without Ollama - some features may not work"
|
|
255
|
+
)
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
# Ensure the report file exists
|
|
259
|
+
file_path = Path(file_path).expanduser()
|
|
260
|
+
if not file_path.exists():
|
|
261
|
+
self.stdout.write(
|
|
262
|
+
self.style.ERROR(f"Report file not found: {file_path}")
|
|
263
|
+
)
|
|
264
|
+
return
|
|
265
|
+
|
|
266
|
+
# Ensure the report directory exists
|
|
267
|
+
report_dir_root = Path(report_dir_root).expanduser()
|
|
268
|
+
report_dir_root.mkdir(parents=True, exist_ok=True)
|
|
269
|
+
|
|
270
|
+
# Create the report file object
|
|
271
|
+
self.stdout.write(
|
|
272
|
+
self.style.SUCCESS(f"Creating RawPdfFile object from {file_path}...")
|
|
273
|
+
)
|
|
274
|
+
report_file_obj = RawPdfFile.create_from_file(
|
|
275
|
+
file_path=file_path,
|
|
276
|
+
center_name=center_name,
|
|
277
|
+
delete_source=delete_source,
|
|
278
|
+
save=save,
|
|
279
|
+
)
|
|
280
|
+
if not report_file_obj:
|
|
281
|
+
self.stdout.write(
|
|
282
|
+
self.style.ERROR("Failed to create RawPdfFile object.")
|
|
283
|
+
)
|
|
284
|
+
return
|
|
285
|
+
|
|
286
|
+
report_file_obj.anonymized = False
|
|
287
|
+
|
|
288
|
+
# Assign pdfType to the report file object
|
|
289
|
+
if "report" in file_path.name:
|
|
290
|
+
pdf_type_name = "ukw-endoscopy-examination-report-generic"
|
|
291
|
+
elif "histo" in file_path.name:
|
|
292
|
+
pdf_type_name = "ukw-endoscopy-histology-report-generic"
|
|
293
|
+
elif "AW_PA" in file_path.name:
|
|
294
|
+
pdf_type_name = "rkh-endoscopy-histology-report-generic"
|
|
295
|
+
elif "AW" in file_path.name:
|
|
296
|
+
pdf_type_name = "rkh-endoscopy-examination-report-generic"
|
|
297
|
+
else:
|
|
298
|
+
raise ValueError(f"Unknown report type: {file_path.name}")
|
|
299
|
+
|
|
300
|
+
self.stdout.write(self.style.SUCCESS(f"Using report type: {pdf_type_name}"))
|
|
301
|
+
try:
|
|
302
|
+
pdf_type = PdfType.objects.get(name=pdf_type_name)
|
|
303
|
+
except PdfType.DoesNotExist:
|
|
304
|
+
self.stdout.write(
|
|
305
|
+
self.style.ERROR(
|
|
306
|
+
f"PdfType with name '{pdf_type_name}' does not exist."
|
|
307
|
+
)
|
|
308
|
+
)
|
|
309
|
+
return
|
|
310
|
+
report_file_obj.pdf_type = pdf_type
|
|
311
|
+
|
|
312
|
+
rr_config = report_file_obj.get_report_reader_config()
|
|
313
|
+
pdf_path = report_file_obj.file.path
|
|
314
|
+
|
|
315
|
+
# Import at this point to avoid initializing the module too early
|
|
316
|
+
from lx_anonymizer import ReportReader
|
|
317
|
+
|
|
318
|
+
self.stdout.write(self.style.SUCCESS("Creating ReportReader..."))
|
|
319
|
+
rr = ReportReader(**rr_config)
|
|
320
|
+
|
|
321
|
+
self.stdout.write(self.style.SUCCESS(f"Processing report: {pdf_path}"))
|
|
322
|
+
text, anonymized_text, report_meta = rr.process_report(
|
|
323
|
+
pdf_path, verbose=verbose
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
if verbose:
|
|
327
|
+
ic(text, anonymized_text, report_meta)
|
|
328
|
+
|
|
329
|
+
self.stdout.write(self.style.SUCCESS("Processing file..."))
|
|
330
|
+
report_file_obj.process_file(
|
|
331
|
+
text, anonymized_text, report_meta, verbose=verbose
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
sensitive_meta = report_file_obj.sensitive_meta
|
|
335
|
+
if verbose:
|
|
336
|
+
ic(report_file_obj.sensitive_meta)
|
|
337
|
+
|
|
338
|
+
self.stdout.write(self.style.SUCCESS("Saving..."))
|
|
339
|
+
sensitive_meta.save()
|
|
340
|
+
if verbose:
|
|
341
|
+
ic(sensitive_meta)
|
|
342
|
+
|
|
343
|
+
report_file_obj.state.anonymization_status.mark_anonymized()
|
|
344
|
+
finally:
|
|
345
|
+
# Clean up Ollama process if we started it
|
|
346
|
+
if ollama_proc is not None:
|
|
347
|
+
self.stdout.write(
|
|
348
|
+
self.style.SUCCESS("Cleaning up Ollama server process...")
|
|
349
|
+
)
|
|
350
|
+
try:
|
|
351
|
+
ollama_proc.terminate()
|
|
352
|
+
ollama_proc.wait(timeout=10)
|
|
353
|
+
self.stdout.write(
|
|
354
|
+
self.style.SUCCESS("Ollama server process terminated.")
|
|
355
|
+
)
|
|
356
|
+
except Exception as e:
|
|
357
|
+
self.stdout.write(
|
|
358
|
+
self.style.WARNING(
|
|
359
|
+
f"Failed to terminate Ollama server process: {e}"
|
|
360
|
+
)
|
|
361
|
+
)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from django.core.management.base import BaseCommand
|
|
2
|
+
from django.urls import get_resolver, URLPattern, URLResolver
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def iter_patterns(prefix, patterns):
|
|
6
|
+
for p in patterns:
|
|
7
|
+
if isinstance(p, URLPattern):
|
|
8
|
+
yield p
|
|
9
|
+
elif isinstance(p, URLResolver):
|
|
10
|
+
yield from iter_patterns(prefix, p.url_patterns)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Command(BaseCommand):
|
|
14
|
+
help = "List all URL names (useful to fill policy.py)"
|
|
15
|
+
|
|
16
|
+
def handle(self, *args, **options):
|
|
17
|
+
resolver = get_resolver()
|
|
18
|
+
for p in iter_patterns("", resolver.url_patterns):
|
|
19
|
+
if p.name:
|
|
20
|
+
self.stdout.write(p.name)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from django.core.management.base import BaseCommand
|
|
2
|
+
|
|
3
|
+
from ...data import (
|
|
4
|
+
AI_MODEL_DATA_DIR,
|
|
5
|
+
AI_MODEL_META_DATA_DIR, # Add this import
|
|
6
|
+
MODEL_TYPE_DATA_DIR,
|
|
7
|
+
VIDEO_SEGMENTATION_LABEL_DATA_DIR,
|
|
8
|
+
VIDEO_SEGMENTATION_LABELSET_DATA_DIR,
|
|
9
|
+
)
|
|
10
|
+
from ...models import (
|
|
11
|
+
AiModel,
|
|
12
|
+
LabelSet, # Add LabelSet import
|
|
13
|
+
ModelMeta, # Add ModelMeta back to imports
|
|
14
|
+
ModelType,
|
|
15
|
+
VideoSegmentationLabel,
|
|
16
|
+
VideoSegmentationLabelSet,
|
|
17
|
+
)
|
|
18
|
+
from ...utils import load_model_data_from_yaml
|
|
19
|
+
|
|
20
|
+
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
21
|
+
ModelType.__name__,
|
|
22
|
+
VideoSegmentationLabel.__name__,
|
|
23
|
+
VideoSegmentationLabelSet.__name__,
|
|
24
|
+
AiModel.__name__,
|
|
25
|
+
# ModelMeta.__name__, # Disable automatic model meta loading
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
IMPORT_METADATA = {
|
|
29
|
+
ModelType.__name__: {
|
|
30
|
+
"dir": MODEL_TYPE_DATA_DIR, # e.g. "intervention_types"
|
|
31
|
+
"model": ModelType,
|
|
32
|
+
"foreign_keys": [], # e.g. ["interventions"]
|
|
33
|
+
"foreign_key_models": [], # e.g. [Intervention]
|
|
34
|
+
},
|
|
35
|
+
ModelMeta.__name__: {
|
|
36
|
+
"dir": AI_MODEL_META_DATA_DIR, # e.g. "ai_model_meta"
|
|
37
|
+
"model": ModelMeta, # e.g. ModelMeta
|
|
38
|
+
"foreign_keys": ["labelset", "model"], # Foreign key relationships
|
|
39
|
+
"foreign_key_models": [LabelSet, AiModel], # Actual model classes
|
|
40
|
+
},
|
|
41
|
+
VideoSegmentationLabel.__name__: {
|
|
42
|
+
"dir": VIDEO_SEGMENTATION_LABEL_DATA_DIR, # e.g. "interventions"
|
|
43
|
+
"model": VideoSegmentationLabel,
|
|
44
|
+
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
45
|
+
"foreign_key_models": [], # e.g. [InterventionType]
|
|
46
|
+
},
|
|
47
|
+
VideoSegmentationLabelSet.__name__: {
|
|
48
|
+
"dir": VIDEO_SEGMENTATION_LABELSET_DATA_DIR, # e.g. "interventions"
|
|
49
|
+
"model": VideoSegmentationLabelSet,
|
|
50
|
+
"foreign_keys": ["labels"], # e.g. ["intervention_types"]
|
|
51
|
+
"foreign_key_models": [VideoSegmentationLabel], # e.g. [Intervention]
|
|
52
|
+
},
|
|
53
|
+
AiModel.__name__: {
|
|
54
|
+
"dir": AI_MODEL_DATA_DIR, # e.g. "intervention_types"
|
|
55
|
+
"model": AiModel,
|
|
56
|
+
"foreign_keys": [
|
|
57
|
+
"video_segmentation_labelset",
|
|
58
|
+
"model_type",
|
|
59
|
+
], # e.g. ["interventions"]
|
|
60
|
+
"foreign_key_models": [
|
|
61
|
+
VideoSegmentationLabelSet,
|
|
62
|
+
ModelType,
|
|
63
|
+
], # e.g. [Intervention]
|
|
64
|
+
},
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class Command(BaseCommand):
|
|
69
|
+
help = """Load all .yaml files in the data/intervention directory
|
|
70
|
+
into the Intervention and InterventionType model"""
|
|
71
|
+
|
|
72
|
+
def add_arguments(self, parser):
|
|
73
|
+
parser.add_argument(
|
|
74
|
+
"--verbose",
|
|
75
|
+
action="store_true",
|
|
76
|
+
help="Display verbose output",
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
def handle(self, *args, **options):
|
|
80
|
+
verbose = options["verbose"]
|
|
81
|
+
for model_name in IMPORT_MODELS:
|
|
82
|
+
_metadata = IMPORT_METADATA[model_name]
|
|
83
|
+
load_model_data_from_yaml(self, model_name, _metadata, verbose)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from django.core.management.base import BaseCommand
|
|
4
|
+
|
|
5
|
+
from ...data import LABEL_DATA_DIR
|
|
6
|
+
from ...models import Label, LabelSet, LabelType
|
|
7
|
+
from ...utils import load_model_data_from_yaml
|
|
8
|
+
|
|
9
|
+
SOURCE_DIR = LABEL_DATA_DIR
|
|
10
|
+
|
|
11
|
+
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
12
|
+
"LabelType",
|
|
13
|
+
"Label",
|
|
14
|
+
"LabelSet",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
IMPORT_METADATA = {
|
|
18
|
+
# "": { # same as model name in "import models", e.g. "Intervention"
|
|
19
|
+
# "subdir": os.path.join(SOURCE_DIR,""), # e.g. "interventions"
|
|
20
|
+
# "model": None,
|
|
21
|
+
# "foreign_keys": [], # e.g. ["intervention_types"]
|
|
22
|
+
# "foreign_key_models": [] # e.g. [InterventionType]
|
|
23
|
+
# },
|
|
24
|
+
"LabelType": {
|
|
25
|
+
"dir": os.path.join(SOURCE_DIR, "label-type"), # e.g. "interventions"
|
|
26
|
+
"model": LabelType,
|
|
27
|
+
"foreign_keys": [], # e.g. ["intervention_types"]
|
|
28
|
+
"foreign_key_models": [], # e.g. [InterventionType]
|
|
29
|
+
},
|
|
30
|
+
"Label": {
|
|
31
|
+
"dir": os.path.join(SOURCE_DIR, "label"), # e.g. "interventions"
|
|
32
|
+
"model": Label,
|
|
33
|
+
"foreign_keys": ["label_type"], # e.g. ["intervention_types"]
|
|
34
|
+
"foreign_key_models": [LabelType], # e.g. [InterventionType]
|
|
35
|
+
},
|
|
36
|
+
"LabelSet": {
|
|
37
|
+
"dir": os.path.join(SOURCE_DIR, "label-set"), # e.g. "interventions"
|
|
38
|
+
"model": LabelSet,
|
|
39
|
+
"foreign_keys": ["labels"], # e.g. ["intervention_types"]
|
|
40
|
+
"foreign_key_models": [Label], # e.g. [InterventionType]
|
|
41
|
+
},
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class Command(BaseCommand):
|
|
46
|
+
help = """Load all .yaml files in the data/intervention directory
|
|
47
|
+
into the Intervention and InterventionType model"""
|
|
48
|
+
|
|
49
|
+
def add_arguments(self, parser):
|
|
50
|
+
parser.add_argument(
|
|
51
|
+
"--verbose",
|
|
52
|
+
action="store_true",
|
|
53
|
+
help="Display verbose output",
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def handle(self, *args, **options):
|
|
57
|
+
verbose = options["verbose"]
|
|
58
|
+
for model_name in IMPORT_MODELS:
|
|
59
|
+
_metadata = IMPORT_METADATA[model_name]
|
|
60
|
+
load_model_data_from_yaml(self, model_name, _metadata, verbose)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from django.core.management import BaseCommand, call_command
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Command(BaseCommand):
|
|
5
|
+
help = "Run all data loading commands in the correct order"
|
|
6
|
+
|
|
7
|
+
def add_arguments(self, parser):
|
|
8
|
+
parser.add_argument(
|
|
9
|
+
"--verbose",
|
|
10
|
+
action="store_true",
|
|
11
|
+
help="Display verbose output for all commands",
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
def handle(self, *args, **options):
|
|
15
|
+
# verbose = options['verbose']
|
|
16
|
+
"""
|
|
17
|
+
Orchestrates the sequential execution of data loading commands to populate base database models.
|
|
18
|
+
|
|
19
|
+
This management command displays an initial message and then runs a series of data loading routines
|
|
20
|
+
(via call_command) in a specified order. It ignores any verbose setting from the command-line options
|
|
21
|
+
and forces verbose output. A final success message is printed after all commands complete.
|
|
22
|
+
"""
|
|
23
|
+
verbose = True
|
|
24
|
+
|
|
25
|
+
self.stdout.write(self.style.SUCCESS("Populating base db models with data..."))
|
|
26
|
+
|
|
27
|
+
out = self.stdout
|
|
28
|
+
|
|
29
|
+
call_command("load_tag_data", stdout=out, verbose=verbose)
|
|
30
|
+
call_command("load_information_source", stdout=out, verbose=verbose)
|
|
31
|
+
|
|
32
|
+
call_command("load_risk_data", stdout=out, verbose=verbose)
|
|
33
|
+
|
|
34
|
+
# Load Center Data
|
|
35
|
+
call_command("load_center_data", stdout=out, verbose=verbose)
|
|
36
|
+
call_command("load_endoscope_data", stdout=out, verbose=verbose)
|
|
37
|
+
call_command("load_distribution_data", stdout=out, verbose=verbose)
|
|
38
|
+
|
|
39
|
+
call_command("load_gender_data", stdout=out, verbose=verbose)
|
|
40
|
+
call_command("load_report_reader_flag_data", stdout=out, verbose=verbose)
|
|
41
|
+
call_command("load_pdf_type_data", stdout=out, verbose=verbose)
|
|
42
|
+
call_command("load_unit_data", stdout=out, verbose=verbose)
|
|
43
|
+
call_command("load_disease_data", stdout=out, verbose=verbose)
|
|
44
|
+
call_command("load_event_data", stdout=out, verbose=verbose)
|
|
45
|
+
call_command("load_organ_data", stdout=out, verbose=verbose)
|
|
46
|
+
call_command("load_contraindication_data", stdout=out, verbose=verbose)
|
|
47
|
+
call_command("load_finding_data", stdout=out, verbose=verbose)
|
|
48
|
+
call_command("load_examination_indication_data", stdout=out, verbose=verbose)
|
|
49
|
+
call_command("load_examination_data", stdout=out, verbose=verbose)
|
|
50
|
+
call_command("load_lab_value_data", stdout=out, verbose=verbose)
|
|
51
|
+
call_command("load_medication_data", stdout=out, verbose=verbose)
|
|
52
|
+
|
|
53
|
+
call_command("load_requirement_data", stdout=out, verbose=verbose)
|
|
54
|
+
|
|
55
|
+
# Load AI Model Data
|
|
56
|
+
call_command("load_ai_model_label_data", stdout=out, verbose=verbose)
|
|
57
|
+
call_command("load_ai_model_data", stdout=out, verbose=verbose)
|
|
58
|
+
|
|
59
|
+
self.stdout.write(
|
|
60
|
+
self.style.SUCCESS( # pylint: disable=no-member
|
|
61
|
+
"All data loading commands executed successfully."
|
|
62
|
+
)
|
|
63
|
+
)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
from django.core.management.base import BaseCommand
|
|
2
|
+
from ...utils import load_model_data_from_yaml
|
|
3
|
+
from ...models import Center, FirstName, LastName
|
|
4
|
+
from ...data import CENTER_DATA_DIR, NAMES_FIRST_DATA_DIR, NAMES_LAST_DATA_DIR
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
SOURCE_DIR = CENTER_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
|
|
8
|
+
|
|
9
|
+
IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
|
|
10
|
+
FirstName.__name__,
|
|
11
|
+
LastName.__name__,
|
|
12
|
+
Center.__name__,
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
IMPORT_METADATA = {
|
|
16
|
+
FirstName.__name__: {
|
|
17
|
+
"dir": NAMES_FIRST_DATA_DIR, # e.g. "first names"
|
|
18
|
+
"model": FirstName, # e.g. first name
|
|
19
|
+
"foreign_keys": [],
|
|
20
|
+
"foreign_key_models": [],
|
|
21
|
+
},
|
|
22
|
+
LastName.__name__: {
|
|
23
|
+
"dir": NAMES_LAST_DATA_DIR, # e.g. "last names"
|
|
24
|
+
"model": LastName, # e.g. last name
|
|
25
|
+
"foreign_keys": [], # e.g. ["last name_types"]
|
|
26
|
+
"foreign_key_models": [], # e.g. [last nameType]
|
|
27
|
+
},
|
|
28
|
+
Center.__name__: {
|
|
29
|
+
"dir": SOURCE_DIR, # e.g. "centers"
|
|
30
|
+
"model": Center, # e.g. center
|
|
31
|
+
"foreign_keys": ["first_names", "last_names"],
|
|
32
|
+
"foreign_key_models": [FirstName, LastName],
|
|
33
|
+
},
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class Command(BaseCommand):
|
|
38
|
+
help = """Load all .yaml files in the data/intervention directory
|
|
39
|
+
into the Intervention and InterventionType model"""
|
|
40
|
+
|
|
41
|
+
def add_arguments(self, parser):
|
|
42
|
+
"""
|
|
43
|
+
Adds the '--verbose' flag to the argument parser.
|
|
44
|
+
|
|
45
|
+
When specified, this flag enables verbose output for the management command.
|
|
46
|
+
"""
|
|
47
|
+
parser.add_argument(
|
|
48
|
+
"--verbose",
|
|
49
|
+
action="store_true",
|
|
50
|
+
help="Display verbose output",
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
def handle(self, *args, **options):
|
|
54
|
+
"""
|
|
55
|
+
Load YAML data for each predefined model.
|
|
56
|
+
|
|
57
|
+
Iterates over the models specified in IMPORT_MODELS, retrieving each model's metadata from
|
|
58
|
+
IMPORT_METADATA and invoking load_model_data_from_yaml to load YAML data. The verbosity of
|
|
59
|
+
the output is determined by the 'verbose' flag in the command options.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
*args: Additional positional arguments.
|
|
63
|
+
**options: Command options; must include a 'verbose' key to control output detail.
|
|
64
|
+
"""
|
|
65
|
+
verbose = options["verbose"]
|
|
66
|
+
for model_name in IMPORT_MODELS:
|
|
67
|
+
_metadata = IMPORT_METADATA[model_name]
|
|
68
|
+
load_model_data_from_yaml(self, model_name, _metadata, verbose)
|