endoreg-db 0.8.8.0__py3-none-any.whl → 0.8.8.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of endoreg-db might be problematic. Click here for more details.
- endoreg_db/data/__init__.py +22 -8
- endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +0 -1
- endoreg_db/data/examination/examinations/data.yaml +114 -14
- endoreg_db/data/examination/time-type/data.yaml +0 -3
- endoreg_db/data/examination_indication/endoscopy.yaml +108 -173
- endoreg_db/data/examination_indication_classification/endoscopy.yaml +0 -70
- endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +33 -37
- endoreg_db/data/finding/00_generic.yaml +35 -0
- endoreg_db/data/finding/00_generic_complication.yaml +9 -0
- endoreg_db/data/finding/01_gastroscopy_baseline.yaml +88 -0
- endoreg_db/data/finding/01_gastroscopy_observation.yaml +113 -0
- endoreg_db/data/finding/02_colonoscopy_baseline.yaml +53 -0
- endoreg_db/data/finding/02_colonoscopy_hidden.yaml +119 -0
- endoreg_db/data/finding/02_colonoscopy_observation.yaml +152 -0
- endoreg_db/data/finding_classification/00_generic.yaml +44 -0
- endoreg_db/data/finding_classification/00_generic_histology.yaml +28 -0
- endoreg_db/data/finding_classification/00_generic_lesion.yaml +52 -0
- endoreg_db/data/finding_classification/{colonoscopy_bowel_preparation.yaml → 02_colonoscopy_baseline.yaml} +35 -20
- endoreg_db/data/finding_classification/02_colonoscopy_histology.yaml +13 -0
- endoreg_db/data/finding_classification/02_colonoscopy_other.yaml +12 -0
- endoreg_db/data/finding_classification/02_colonoscopy_polyp.yaml +101 -0
- endoreg_db/data/finding_classification_choice/{yes_no_na.yaml → 00_generic.yaml} +5 -1
- endoreg_db/data/finding_classification_choice/{examination_setting_generic_types.yaml → 00_generic_baseline.yaml} +10 -2
- endoreg_db/data/finding_classification_choice/{complication_generic_types.yaml → 00_generic_complication.yaml} +1 -1
- endoreg_db/data/finding_classification_choice/{histology.yaml → 00_generic_histology.yaml} +1 -4
- endoreg_db/data/finding_classification_choice/00_generic_lesion.yaml +158 -0
- endoreg_db/data/finding_classification_choice/{bowel_preparation.yaml → 02_colonoscopy_bowel_preparation.yaml} +1 -30
- endoreg_db/data/{_examples/finding_classification_choice/colonoscopy_not_complete_reason.yaml → finding_classification_choice/02_colonoscopy_generic.yaml} +1 -1
- endoreg_db/data/finding_classification_choice/{histology_polyp.yaml → 02_colonoscopy_histology.yaml} +1 -1
- endoreg_db/data/{_examples/finding_classification_choice/colonoscopy_location.yaml → finding_classification_choice/02_colonoscopy_location.yaml} +23 -4
- endoreg_db/data/finding_classification_choice/02_colonoscopy_other.yaml +34 -0
- endoreg_db/data/finding_classification_choice/02_colonoscopy_polyp_advanced_imaging.yaml +76 -0
- endoreg_db/data/{_examples/finding_classification_choice/colon_lesion_paris.yaml → finding_classification_choice/02_colonoscopy_polyp_morphology.yaml} +26 -8
- endoreg_db/data/finding_classification_choice/02_colonoscopy_size.yaml +27 -0
- endoreg_db/data/finding_classification_type/{colonoscopy_basic.yaml → 00_generic.yaml} +18 -13
- endoreg_db/data/finding_classification_type/02_colonoscopy.yaml +9 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy.yaml +59 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_ablation.yaml +44 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_bleeding.yaml +55 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_resection.yaml +85 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stenosis.yaml +17 -0
- endoreg_db/data/finding_intervention/00_generic_endoscopy_stent.yaml +9 -0
- endoreg_db/data/finding_intervention/01_gastroscopy.yaml +19 -0
- endoreg_db/data/finding_intervention/04_eus.yaml +39 -0
- endoreg_db/data/finding_intervention/05_ercp.yaml +3 -0
- endoreg_db/data/finding_type/data.yaml +8 -12
- endoreg_db/data/requirement/01_patient_data.yaml +93 -0
- endoreg_db/data/requirement_operator/new_operators.yaml +36 -0
- endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +0 -2
- endoreg_db/data/requirement_set/90_coloreg.yaml +20 -8
- endoreg_db/exceptions.py +0 -1
- endoreg_db/forms/examination_form.py +1 -1
- endoreg_db/helpers/data_loader.py +124 -52
- endoreg_db/helpers/default_objects.py +116 -81
- endoreg_db/import_files/__init__.py +27 -0
- endoreg_db/import_files/context/__init__.py +7 -0
- endoreg_db/import_files/context/default_sensitive_meta.py +81 -0
- endoreg_db/import_files/context/ensure_center.py +17 -0
- endoreg_db/import_files/context/file_lock.py +66 -0
- endoreg_db/import_files/context/import_context.py +43 -0
- endoreg_db/import_files/context/validate_directories.py +56 -0
- endoreg_db/import_files/file_storage/__init__.py +15 -0
- endoreg_db/import_files/file_storage/create_report_file.py +76 -0
- endoreg_db/import_files/file_storage/create_video_file.py +75 -0
- endoreg_db/import_files/file_storage/sensitive_meta_storage.py +39 -0
- endoreg_db/import_files/file_storage/state_management.py +400 -0
- endoreg_db/import_files/file_storage/storage.py +36 -0
- endoreg_db/import_files/import_service.md +26 -0
- endoreg_db/import_files/processing/__init__.py +11 -0
- endoreg_db/import_files/processing/report_processing/report_anonymization.py +94 -0
- endoreg_db/import_files/processing/sensitive_meta_adapter.py +51 -0
- endoreg_db/import_files/processing/video_processing/video_anonymization.py +107 -0
- endoreg_db/import_files/processing/video_processing/video_cleanup_on_error.py +119 -0
- endoreg_db/import_files/pseudonymization/fake.py +52 -0
- endoreg_db/import_files/pseudonymization/k_anonymity.py +182 -0
- endoreg_db/import_files/pseudonymization/k_pseudonymity.py +128 -0
- endoreg_db/import_files/report_import_service.py +141 -0
- endoreg_db/import_files/video_import_service.py +150 -0
- endoreg_db/management/commands/import_report.py +130 -65
- endoreg_db/management/commands/import_video_with_classification.py +1 -1
- endoreg_db/management/commands/load_ai_model_data.py +5 -5
- endoreg_db/management/commands/load_ai_model_label_data.py +9 -7
- endoreg_db/management/commands/load_base_db_data.py +5 -134
- endoreg_db/management/commands/load_contraindication_data.py +14 -16
- endoreg_db/management/commands/load_disease_classification_choices_data.py +15 -18
- endoreg_db/management/commands/load_disease_classification_data.py +15 -18
- endoreg_db/management/commands/load_disease_data.py +25 -28
- endoreg_db/management/commands/load_endoscope_data.py +20 -27
- endoreg_db/management/commands/load_event_data.py +14 -16
- endoreg_db/management/commands/load_examination_data.py +31 -44
- endoreg_db/management/commands/load_examination_indication_data.py +20 -21
- endoreg_db/management/commands/load_finding_data.py +52 -80
- endoreg_db/management/commands/load_information_source.py +21 -23
- endoreg_db/management/commands/load_lab_value_data.py +17 -26
- endoreg_db/management/commands/load_medication_data.py +13 -12
- endoreg_db/management/commands/load_organ_data.py +15 -19
- endoreg_db/management/commands/load_pdf_type_data.py +19 -18
- endoreg_db/management/commands/load_profession_data.py +14 -17
- endoreg_db/management/commands/load_qualification_data.py +20 -23
- endoreg_db/management/commands/load_report_reader_flag_data.py +17 -19
- endoreg_db/management/commands/load_requirement_data.py +14 -20
- endoreg_db/management/commands/load_risk_data.py +7 -6
- endoreg_db/management/commands/load_shift_data.py +20 -23
- endoreg_db/management/commands/load_tag_data.py +8 -11
- endoreg_db/management/commands/load_unit_data.py +17 -19
- endoreg_db/management/commands/start_filewatcher.py +46 -37
- endoreg_db/management/commands/validate_video_files.py +1 -5
- endoreg_db/migrations/0001_initial.py +1360 -1812
- endoreg_db/models/administration/person/patient/patient.py +72 -46
- endoreg_db/models/label/__init__.py +2 -2
- endoreg_db/models/label/annotation/video_segmentation_annotation.py +18 -26
- endoreg_db/models/label/label_video_segment/label_video_segment.py +23 -1
- endoreg_db/models/media/pdf/raw_pdf.py +136 -64
- endoreg_db/models/media/pdf/report_reader/report_reader_config.py +34 -10
- endoreg_db/models/media/processing_history/__init__.py +5 -0
- endoreg_db/models/media/processing_history/processing_history.py +96 -0
- endoreg_db/models/media/video/create_from_file.py +101 -31
- endoreg_db/models/media/video/video_file.py +125 -105
- endoreg_db/models/media/video/video_file_io.py +31 -26
- endoreg_db/models/medical/contraindication/README.md +1 -0
- endoreg_db/models/medical/examination/examination.py +28 -8
- endoreg_db/models/medical/examination/examination_indication.py +13 -79
- endoreg_db/models/medical/examination/examination_time.py +8 -3
- endoreg_db/models/medical/finding/finding.py +5 -12
- endoreg_db/models/medical/finding/finding_classification.py +18 -37
- endoreg_db/models/medical/finding/finding_intervention.py +7 -9
- endoreg_db/models/medical/hardware/endoscope.py +6 -0
- endoreg_db/models/medical/patient/medication_examples.py +5 -1
- endoreg_db/models/medical/patient/patient_finding.py +1 -1
- endoreg_db/models/metadata/pdf_meta.py +22 -10
- endoreg_db/models/metadata/sensitive_meta.py +3 -0
- endoreg_db/models/metadata/sensitive_meta_logic.py +200 -124
- endoreg_db/models/other/information_source.py +27 -6
- endoreg_db/models/report/__init__.py +0 -0
- endoreg_db/models/report/images.py +0 -0
- endoreg_db/models/report/report.py +6 -0
- endoreg_db/models/requirement/requirement.py +59 -399
- endoreg_db/models/requirement/requirement_operator.py +86 -98
- endoreg_db/models/state/audit_ledger.py +4 -5
- endoreg_db/models/state/raw_pdf.py +69 -30
- endoreg_db/models/state/video.py +64 -49
- endoreg_db/models/upload_job.py +33 -9
- endoreg_db/models/utils.py +27 -23
- endoreg_db/queries/__init__.py +3 -1
- endoreg_db/schemas/examination_evaluation.py +1 -1
- endoreg_db/serializers/__init__.py +2 -8
- endoreg_db/serializers/label_video_segment/label_video_segment.py +2 -29
- endoreg_db/serializers/meta/__init__.py +1 -6
- endoreg_db/serializers/misc/sensitive_patient_data.py +50 -26
- endoreg_db/serializers/patient_examination/patient_examination.py +3 -3
- endoreg_db/serializers/pdf/anony_text_validation.py +39 -23
- endoreg_db/serializers/video/video_file_list.py +65 -34
- endoreg_db/services/__old/pdf_import.py +1487 -0
- endoreg_db/services/__old/video_import.py +1306 -0
- endoreg_db/services/anonymization.py +63 -26
- endoreg_db/services/lookup_service.py +28 -28
- endoreg_db/services/lookup_store.py +2 -2
- endoreg_db/services/pdf_import.py +0 -1480
- endoreg_db/services/report_import.py +10 -0
- endoreg_db/services/video_import.py +6 -1165
- endoreg_db/tasks/upload_tasks.py +79 -70
- endoreg_db/tasks/video_ingest.py +8 -4
- endoreg_db/urls/__init__.py +0 -14
- endoreg_db/urls/ai.py +32 -0
- endoreg_db/urls/media.py +21 -24
- endoreg_db/utils/dataloader.py +87 -57
- endoreg_db/utils/paths.py +110 -46
- endoreg_db/utils/pipelines/Readme.md +1 -1
- endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +97 -0
- endoreg_db/views/__init__.py +85 -173
- endoreg_db/views/ai/__init__.py +8 -0
- endoreg_db/views/ai/label.py +155 -0
- endoreg_db/views/anonymization/media_management.py +8 -7
- endoreg_db/views/anonymization/overview.py +97 -68
- endoreg_db/views/anonymization/validate.py +25 -21
- endoreg_db/views/media/__init__.py +5 -20
- endoreg_db/views/media/pdf_media.py +109 -65
- endoreg_db/views/media/sensitive_metadata.py +163 -148
- endoreg_db/views/meta/__init__.py +0 -8
- endoreg_db/views/misc/__init__.py +1 -7
- endoreg_db/views/misc/upload_views.py +94 -93
- endoreg_db/views/report/__init__.py +7 -0
- endoreg_db/views/{pdf → report}/reimport.py +45 -24
- endoreg_db/views/{pdf/pdf_stream.py → report/report_stream.py} +40 -32
- endoreg_db/views/requirement/lookup_store.py +22 -90
- endoreg_db/views/video/__init__.py +23 -22
- endoreg_db/views/video/correction.py +201 -172
- endoreg_db/views/video/reimport.py +1 -1
- endoreg_db/views/{media/video_segments.py → video/segments_crud.py} +75 -37
- endoreg_db/views/video/{video_meta.py → video_meta_stats.py} +2 -2
- endoreg_db/views/video/video_stream.py +7 -8
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/METADATA +2 -2
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/RECORD +217 -335
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/WHEEL +1 -1
- endoreg_db/data/_examples/disease.yaml +0 -55
- endoreg_db/data/_examples/disease_classification.yaml +0 -13
- endoreg_db/data/_examples/disease_classification_choice.yaml +0 -62
- endoreg_db/data/_examples/event.yaml +0 -64
- endoreg_db/data/_examples/examination.yaml +0 -72
- endoreg_db/data/_examples/finding/anatomy_colon.yaml +0 -128
- endoreg_db/data/_examples/finding/colonoscopy.yaml +0 -40
- endoreg_db/data/_examples/finding/colonoscopy_bowel_prep.yaml +0 -56
- endoreg_db/data/_examples/finding/complication.yaml +0 -16
- endoreg_db/data/_examples/finding/data.yaml +0 -105
- endoreg_db/data/_examples/finding/examination_setting.yaml +0 -16
- endoreg_db/data/_examples/finding/medication_related.yaml +0 -18
- endoreg_db/data/_examples/finding/outcome.yaml +0 -12
- endoreg_db/data/_examples/finding_classification/colonoscopy_bowel_preparation.yaml +0 -68
- endoreg_db/data/_examples/finding_classification/colonoscopy_jnet.yaml +0 -22
- endoreg_db/data/_examples/finding_classification/colonoscopy_kudo.yaml +0 -25
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_size.yaml +0 -68
- endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
- endoreg_db/data/_examples/finding_classification/colonoscopy_location.yaml +0 -80
- endoreg_db/data/_examples/finding_classification/colonoscopy_lst.yaml +0 -21
- endoreg_db/data/_examples/finding_classification/colonoscopy_nice.yaml +0 -20
- endoreg_db/data/_examples/finding_classification/colonoscopy_paris.yaml +0 -26
- endoreg_db/data/_examples/finding_classification/colonoscopy_sano.yaml +0 -22
- endoreg_db/data/_examples/finding_classification/colonoscopy_summary.yaml +0 -53
- endoreg_db/data/_examples/finding_classification/complication_generic.yaml +0 -25
- endoreg_db/data/_examples/finding_classification/examination_setting_generic.yaml +0 -40
- endoreg_db/data/_examples/finding_classification/histology_colo.yaml +0 -51
- endoreg_db/data/_examples/finding_classification/intervention_required.yaml +0 -26
- endoreg_db/data/_examples/finding_classification/medication_related.yaml +0 -23
- endoreg_db/data/_examples/finding_classification/visualized.yaml +0 -33
- endoreg_db/data/_examples/finding_classification_choice/bowel_preparation.yaml +0 -78
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_lst.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_nice.yaml +0 -17
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_sano.yaml +0 -14
- endoreg_db/data/_examples/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
- endoreg_db/data/_examples/finding_classification_choice/colonoscopy_size.yaml +0 -82
- endoreg_db/data/_examples/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/complication_generic_types.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/examination_setting_generic_types.yaml +0 -15
- endoreg_db/data/_examples/finding_classification_choice/histology.yaml +0 -24
- endoreg_db/data/_examples/finding_classification_choice/histology_polyp.yaml +0 -20
- endoreg_db/data/_examples/finding_classification_choice/outcome.yaml +0 -19
- endoreg_db/data/_examples/finding_classification_choice/yes_no_na.yaml +0 -11
- endoreg_db/data/_examples/finding_classification_type/colonoscopy_basic.yaml +0 -48
- endoreg_db/data/_examples/finding_intervention/endoscopy.yaml +0 -43
- endoreg_db/data/_examples/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
- endoreg_db/data/_examples/finding_intervention/endoscopy_egd.yaml +0 -128
- endoreg_db/data/_examples/finding_intervention/endoscopy_ercp.yaml +0 -32
- endoreg_db/data/_examples/finding_intervention/endoscopy_eus_lower.yaml +0 -9
- endoreg_db/data/_examples/finding_intervention/endoscopy_eus_upper.yaml +0 -36
- endoreg_db/data/_examples/finding_intervention_type/endoscopy.yaml +0 -15
- endoreg_db/data/_examples/finding_type/data.yaml +0 -43
- endoreg_db/data/_examples/requirement/age.yaml +0 -26
- endoreg_db/data/_examples/requirement/gender.yaml +0 -25
- endoreg_db/data/_examples/requirement_set/01_endoscopy_generic.yaml +0 -48
- endoreg_db/data/_examples/requirement_set/colonoscopy_austria_screening.yaml +0 -57
- endoreg_db/data/_examples/requirement_set/endoscopy_bleeding_risk.yaml +0 -52
- endoreg_db/data/_examples/yaml_examples.xlsx +0 -0
- endoreg_db/data/finding/anatomy_colon.yaml +0 -128
- endoreg_db/data/finding/colonoscopy.yaml +0 -40
- endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +0 -56
- endoreg_db/data/finding/complication.yaml +0 -16
- endoreg_db/data/finding/data.yaml +0 -105
- endoreg_db/data/finding/examination_setting.yaml +0 -16
- endoreg_db/data/finding/medication_related.yaml +0 -18
- endoreg_db/data/finding/outcome.yaml +0 -12
- endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +0 -22
- endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +0 -25
- endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
- endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +0 -38
- endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_location.yaml +0 -49
- endoreg_db/data/finding_classification/colonoscopy_lst.yaml +0 -21
- endoreg_db/data/finding_classification/colonoscopy_nice.yaml +0 -20
- endoreg_db/data/finding_classification/colonoscopy_paris.yaml +0 -26
- endoreg_db/data/finding_classification/colonoscopy_sano.yaml +0 -22
- endoreg_db/data/finding_classification/colonoscopy_summary.yaml +0 -53
- endoreg_db/data/finding_classification/complication_generic.yaml +0 -25
- endoreg_db/data/finding_classification/examination_setting_generic.yaml +0 -40
- endoreg_db/data/finding_classification/histology_colo.yaml +0 -43
- endoreg_db/data/finding_classification/intervention_required.yaml +0 -26
- endoreg_db/data/finding_classification/medication_related.yaml +0 -23
- endoreg_db/data/finding_classification/visualized.yaml +0 -33
- endoreg_db/data/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
- endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
- endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
- endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +0 -15
- endoreg_db/data/finding_classification_choice/colon_lesion_nice.yaml +0 -17
- endoreg_db/data/finding_classification_choice/colon_lesion_paris.yaml +0 -57
- endoreg_db/data/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
- endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +0 -14
- endoreg_db/data/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
- endoreg_db/data/finding_classification_choice/colonoscopy_location.yaml +0 -229
- endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +0 -19
- endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +0 -82
- endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
- endoreg_db/data/finding_classification_choice/outcome.yaml +0 -19
- endoreg_db/data/finding_intervention/endoscopy.yaml +0 -43
- endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
- endoreg_db/data/finding_intervention/endoscopy_egd.yaml +0 -128
- endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +0 -32
- endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +0 -9
- endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +0 -36
- endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +0 -79
- endoreg_db/data/requirement/age.yaml +0 -26
- endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +0 -45
- endoreg_db/data/requirement/disease_cardiovascular.yaml +0 -79
- endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +0 -41
- endoreg_db/data/requirement/disease_hepatology.yaml +0 -12
- endoreg_db/data/requirement/disease_misc.yaml +0 -12
- endoreg_db/data/requirement/disease_renal.yaml +0 -96
- endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +0 -59
- endoreg_db/data/requirement/event_cardiology.yaml +0 -251
- endoreg_db/data/requirement/event_requirements.yaml +0 -145
- endoreg_db/data/requirement/finding_colon_polyp.yaml +0 -50
- endoreg_db/data/requirement/gender.yaml +0 -25
- endoreg_db/data/requirement/lab_value.yaml +0 -441
- endoreg_db/data/requirement/medication.yaml +0 -93
- endoreg_db/data/requirement_operator/age.yaml +0 -13
- endoreg_db/data/requirement_operator/lab_operators.yaml +0 -129
- endoreg_db/data/requirement_operator/model_operators.yaml +0 -96
- endoreg_db/management/commands/init_default_ai_model.py +0 -112
- endoreg_db/management/commands/reset_celery_schedule.py +0 -9
- endoreg_db/management/commands/validate_video.py +0 -204
- endoreg_db/migrations/0002_requirementset_depends_on.py +0 -18
- endoreg_db/migrations/_old/0001_initial.py +0 -1857
- endoreg_db/migrations/_old/0002_add_video_correction_models.py +0 -52
- endoreg_db/migrations/_old/0003_add_center_display_name.py +0 -30
- endoreg_db/migrations/_old/0004_employee_city_employee_post_code_employee_street_and_more.py +0 -68
- endoreg_db/migrations/_old/0004_remove_casetemplate_rules_and_more.py +0 -77
- endoreg_db/migrations/_old/0005_merge_20251111_1003.py +0 -14
- endoreg_db/migrations/_old/0006_sensitivemeta_anonymized_text_and_more.py +0 -68
- endoreg_db/migrations/_old/0007_remove_rule_attribute_dtype_remove_rule_rule_type_and_more.py +0 -89
- endoreg_db/migrations/_old/0008_remove_event_event_classification_and_more.py +0 -27
- endoreg_db/migrations/_old/0009_alter_modelmeta_options_and_more.py +0 -21
- endoreg_db/renames.yml +0 -8
- endoreg_db/serializers/_old/raw_pdf_meta_validation.py +0 -223
- endoreg_db/serializers/_old/raw_video_meta_validation.py +0 -179
- endoreg_db/serializers/_old/video.py +0 -71
- endoreg_db/serializers/meta/pdf_file_meta_extraction.py +0 -115
- endoreg_db/serializers/meta/report_meta.py +0 -53
- endoreg_db/serializers/report/__init__.py +0 -9
- endoreg_db/serializers/report/mixins.py +0 -45
- endoreg_db/serializers/report/report.py +0 -105
- endoreg_db/serializers/report/report_list.py +0 -22
- endoreg_db/serializers/report/secure_file_url.py +0 -26
- endoreg_db/services/requirements_object.py +0 -147
- endoreg_db/services/storage_aware_video_processor.py +0 -370
- endoreg_db/urls/files.py +0 -6
- endoreg_db/urls/label_video_segment_validate.py +0 -33
- endoreg_db/urls/label_video_segments.py +0 -46
- endoreg_db/views/label/__init__.py +0 -5
- endoreg_db/views/label/label.py +0 -15
- endoreg_db/views/label_video_segment/__init__.py +0 -16
- endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +0 -44
- endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +0 -50
- endoreg_db/views/label_video_segment/label_video_segment.py +0 -77
- endoreg_db/views/label_video_segment/label_video_segment_by_label.py +0 -174
- endoreg_db/views/label_video_segment/label_video_segment_detail.py +0 -73
- endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +0 -46
- endoreg_db/views/label_video_segment/validate.py +0 -226
- endoreg_db/views/media/segments.py +0 -71
- endoreg_db/views/meta/available_files_list.py +0 -146
- endoreg_db/views/meta/report_meta.py +0 -53
- endoreg_db/views/meta/sensitive_meta_detail.py +0 -85
- endoreg_db/views/misc/secure_file_serving_view.py +0 -80
- endoreg_db/views/misc/secure_file_url_view.py +0 -84
- endoreg_db/views/misc/secure_url_validate.py +0 -79
- endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +0 -164
- endoreg_db/views/patient_finding_location/__init__.py +0 -5
- endoreg_db/views/patient_finding_location/pfl_create.py +0 -70
- endoreg_db/views/patient_finding_morphology/__init__.py +0 -5
- endoreg_db/views/patient_finding_morphology/pfm_create.py +0 -70
- endoreg_db/views/pdf/__init__.py +0 -8
- endoreg_db/views/video/segmentation.py +0 -274
- endoreg_db/views/video/task_status.py +0 -49
- endoreg_db/views/video/timeline.py +0 -46
- endoreg_db/views/video/video_analyze.py +0 -52
- /endoreg_db/data/requirement/{colon_polyp_intervention.yaml → old/colon_polyp_intervention.yaml} +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/colonoscopy_baseline_austria.yaml +0 -0
- /endoreg_db/data/requirement/{coloreg_colon_polyp.yaml → old/coloreg_colon_polyp.yaml} +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_cardiovascular.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_classification_choice_cardiovascular.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_hepatology.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_misc.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/disease_renal.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/endoscopy_bleeding_risk.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/event_cardiology.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/event_requirements.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/finding_colon_polyp.yaml +0 -0
- /endoreg_db/{migrations/__init__.py → data/requirement/old/gender.yaml} +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/lab_value.yaml +0 -0
- /endoreg_db/data/{_examples/requirement → requirement/old}/medication.yaml +0 -0
- /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/age.yaml +0 -0
- /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/lab_operators.yaml +0 -0
- /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/model_operators.yaml +0 -0
- /endoreg_db/{urls/sensitive_meta.py → import_files/pseudonymization/__init__.py} +0 -0
- /endoreg_db/{views/pdf/pdf_stream_views.py → import_files/pseudonymization/pseudonymize.py} +0 -0
- /endoreg_db/utils/requirement_operator_logic/{lab_value_operators.py → _old/lab_value_operators.py} +0 -0
- /endoreg_db/utils/requirement_operator_logic/{model_evaluators.py → _old/model_evaluators.py} +0 -0
- {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
from typing import TYPE_CHECKING, Literal
|
|
3
|
-
from django.utils import timezone
|
|
4
|
-
|
|
5
|
-
if TYPE_CHECKING:
|
|
6
|
-
from endoreg_db.models import RawPdfFile
|
|
7
|
-
|
|
8
|
-
class ReportStatusMixin:
|
|
9
|
-
"""
|
|
10
|
-
Mixin class for report serializers to provide status, updated_at, and file_type fields.
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
def get_status(self, obj:"RawPdfFile") -> Literal['approved'] | Literal['pending']:
|
|
14
|
-
"""
|
|
15
|
-
Return the report status as 'approved' if the report has been processed, otherwise 'pending'.
|
|
16
|
-
|
|
17
|
-
Parameters:
|
|
18
|
-
obj (RawPdfFile): The report file instance to check.
|
|
19
|
-
|
|
20
|
-
Returns:
|
|
21
|
-
Literal['approved'] | Literal['pending']: The status of the report based on its processing state.
|
|
22
|
-
"""
|
|
23
|
-
if obj.state_report_processed:
|
|
24
|
-
return 'approved'
|
|
25
|
-
if obj.state_report_processing_required:
|
|
26
|
-
return 'pending'
|
|
27
|
-
return 'pending'
|
|
28
|
-
|
|
29
|
-
def get_updated_at(self, obj:"RawPdfFile") -> "timezone.datetime":
|
|
30
|
-
"""
|
|
31
|
-
Return the last update time for the given RawPdfFile object.
|
|
32
|
-
|
|
33
|
-
If the object's creation date is available, it is returned; otherwise, the current time is used.
|
|
34
|
-
"""
|
|
35
|
-
return obj.date_created if obj.date_created else timezone.now()
|
|
36
|
-
|
|
37
|
-
def get_file_type(self, obj:"RawPdfFile" ) -> "str":
|
|
38
|
-
"""
|
|
39
|
-
Return the file type of the associated file as a lowercase string without the leading dot.
|
|
40
|
-
|
|
41
|
-
If the object has no file, returns 'unknown'.
|
|
42
|
-
"""
|
|
43
|
-
if obj.file:
|
|
44
|
-
return Path(obj.file.name).suffix.lower().lstrip('.')
|
|
45
|
-
return 'unknown'
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
from endoreg_db.models import RawPdfFile
|
|
2
|
-
from endoreg_db.serializers.meta.report_meta import ReportMetaSerializer
|
|
3
|
-
from endoreg_db.serializers.report.secure_file_url import SecureFileUrlSerializer
|
|
4
|
-
from endoreg_db.serializers.report.mixins import ReportStatusMixin
|
|
5
|
-
|
|
6
|
-
from django.utils import timezone
|
|
7
|
-
from rest_framework import serializers
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
import uuid
|
|
11
|
-
from datetime import timedelta
|
|
12
|
-
from pathlib import Path
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class ReportDataSerializer(ReportStatusMixin, serializers.ModelSerializer):
|
|
16
|
-
"""
|
|
17
|
-
Hauptserializer für Report-Daten mit sicherer URL
|
|
18
|
-
"""
|
|
19
|
-
report_meta = ReportMetaSerializer(source='sensitive_meta', read_only=True)
|
|
20
|
-
secure_file_url = SecureFileUrlSerializer(read_only=True)
|
|
21
|
-
file_type = serializers.SerializerMethodField()
|
|
22
|
-
|
|
23
|
-
# Status und updated_at hinzufügen (da sie im RawPdfFile Model fehlen)
|
|
24
|
-
status = serializers.SerializerMethodField()
|
|
25
|
-
updated_at = serializers.SerializerMethodField()
|
|
26
|
-
|
|
27
|
-
class Meta:
|
|
28
|
-
model = RawPdfFile
|
|
29
|
-
fields = [
|
|
30
|
-
'id', 'anonymized_text', 'status', 'report_meta',
|
|
31
|
-
'secure_file_url', 'file_type', 'created_at', 'updated_at'
|
|
32
|
-
]
|
|
33
|
-
|
|
34
|
-
def get_updated_at(self, obj):
|
|
35
|
-
"""
|
|
36
|
-
Return the updated timestamp for the object, using `created_at` if available or the current time otherwise.
|
|
37
|
-
"""
|
|
38
|
-
return obj.created_at if obj.created_at else timezone.now()
|
|
39
|
-
|
|
40
|
-
def get_file_type(self, obj):
|
|
41
|
-
"""
|
|
42
|
-
Return the file extension of the associated file in lowercase, or 'unknown' if no file is present.
|
|
43
|
-
|
|
44
|
-
Parameters:
|
|
45
|
-
obj: The object instance containing the file.
|
|
46
|
-
|
|
47
|
-
Returns:
|
|
48
|
-
str: The file extension without the leading dot, or 'unknown' if the file is missing.
|
|
49
|
-
"""
|
|
50
|
-
if obj.file:
|
|
51
|
-
return Path(obj.file.name).suffix.lower().lstrip('.')
|
|
52
|
-
return 'unknown'
|
|
53
|
-
|
|
54
|
-
def to_representation(self, instance):
|
|
55
|
-
"""
|
|
56
|
-
Returns the serialized representation of the instance, including a secure file URL if a file exists and a request context is available.
|
|
57
|
-
"""
|
|
58
|
-
data = super().to_representation(instance)
|
|
59
|
-
|
|
60
|
-
# Sichere URL generieren wenn file vorhanden
|
|
61
|
-
if instance.file and hasattr(instance.file, 'url'):
|
|
62
|
-
request = self.context.get('request')
|
|
63
|
-
if request:
|
|
64
|
-
# Sichere URL mit Token generieren
|
|
65
|
-
secure_url_data = self._generate_secure_url(instance, request)
|
|
66
|
-
data['secure_file_url'] = secure_url_data
|
|
67
|
-
|
|
68
|
-
return data
|
|
69
|
-
|
|
70
|
-
def _generate_secure_url(self, instance, request):
|
|
71
|
-
"""
|
|
72
|
-
Generate a secure URL for downloading the file associated with the given instance, including an expiration time and file metadata.
|
|
73
|
-
|
|
74
|
-
Parameters:
|
|
75
|
-
instance: The model instance containing the file.
|
|
76
|
-
request: The HTTP request object used to build the absolute URL.
|
|
77
|
-
|
|
78
|
-
Returns:
|
|
79
|
-
dict: A dictionary containing the secure URL, expiration timestamp, file type, original filename, and file size in bytes.
|
|
80
|
-
"""
|
|
81
|
-
# Token für sichere URL generieren
|
|
82
|
-
token = str(uuid.uuid4())
|
|
83
|
-
expires_at = timezone.now() + timedelta(hours=2) # 2 Stunden gültig
|
|
84
|
-
|
|
85
|
-
# URL zusammenbauen
|
|
86
|
-
secure_url = request.build_absolute_uri(
|
|
87
|
-
f"/api/reports/{instance.id}/secure-file/?token={token}"
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
# Dateigröße ermitteln
|
|
91
|
-
file_size = 0
|
|
92
|
-
try:
|
|
93
|
-
if instance.file:
|
|
94
|
-
file_size = instance.file.size
|
|
95
|
-
except OSError:
|
|
96
|
-
# Datei nicht verfügbar oder Berechtigung fehlt
|
|
97
|
-
file_size = 0
|
|
98
|
-
|
|
99
|
-
return {
|
|
100
|
-
'url': secure_url,
|
|
101
|
-
'expires_at': expires_at,
|
|
102
|
-
'file_type': self.get_file_type(instance),
|
|
103
|
-
'original_filename': Path(instance.file.name).name if instance.file else 'unknown',
|
|
104
|
-
'file_size': file_size
|
|
105
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
from endoreg_db.models import RawPdfFile
|
|
2
|
-
from endoreg_db.serializers.meta import ReportMetaSerializer
|
|
3
|
-
from endoreg_db.serializers.report.mixins import ReportStatusMixin
|
|
4
|
-
|
|
5
|
-
from django.utils import timezone
|
|
6
|
-
from rest_framework import serializers
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class ReportListSerializer(ReportStatusMixin, serializers.ModelSerializer):
|
|
13
|
-
"""
|
|
14
|
-
Vereinfachter Serializer für Report-Listen
|
|
15
|
-
"""
|
|
16
|
-
report_meta = ReportMetaSerializer(source='sensitive_meta', read_only=True)
|
|
17
|
-
file_type = serializers.SerializerMethodField()
|
|
18
|
-
updated_at = serializers.SerializerMethodField()
|
|
19
|
-
|
|
20
|
-
class Meta:
|
|
21
|
-
model = RawPdfFile
|
|
22
|
-
fields = ['id', 'status', 'report_meta', 'file_type', 'created_at', 'updated_at']
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
from rest_framework import serializers
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class SecureFileUrlSerializer(serializers.Serializer):
|
|
5
|
-
"""
|
|
6
|
-
Serializer für sichere File-URLs mit Ablaufzeit
|
|
7
|
-
"""
|
|
8
|
-
url = serializers.URLField()
|
|
9
|
-
expires_at = serializers.DateTimeField()
|
|
10
|
-
file_type = serializers.CharField(max_length=20)
|
|
11
|
-
original_filename = serializers.CharField(max_length=255)
|
|
12
|
-
file_size = serializers.IntegerField()
|
|
13
|
-
|
|
14
|
-
def create(self, validated_data):
|
|
15
|
-
# Nicht implementiert, da nur für Ausgabe verwendet
|
|
16
|
-
"""
|
|
17
|
-
Raises NotImplementedError to indicate that instance creation is not supported for this serializer.
|
|
18
|
-
"""
|
|
19
|
-
raise NotImplementedError("SecureFileUrlSerializer ist nur für Ausgabe gedacht")
|
|
20
|
-
|
|
21
|
-
def update(self, instance, validated_data):
|
|
22
|
-
# Nicht implementiert, da nur für Ausgabe verwendet
|
|
23
|
-
"""
|
|
24
|
-
Raises NotImplementedError to indicate that updating is not supported, as this serializer is intended for output only.
|
|
25
|
-
"""
|
|
26
|
-
raise NotImplementedError("SecureFileUrlSerializer ist nur für Ausgabe gedacht")
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
from ast import List
|
|
2
|
-
import pickle
|
|
3
|
-
from endoreg_db.models import Requirement, Examination, PatientExamination
|
|
4
|
-
from endoreg_db.serializers import PatientExaminationSerializer, ExaminationSerializer, FindingClassificationSerializer, RequirementSerializer
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class LookupService:
|
|
8
|
-
def __init__(self, db_session):
|
|
9
|
-
self.db_session = db_session
|
|
10
|
-
self.hexdict = int()
|
|
11
|
-
|
|
12
|
-
def hash_lookup(self, key, value):
|
|
13
|
-
"""
|
|
14
|
-
Store a key-value pair in the lookup dictionary.
|
|
15
|
-
"""
|
|
16
|
-
lookup_dict = pickle.loads(bytes.fromhex(self.hexdict))
|
|
17
|
-
lookup_dict[key] = value
|
|
18
|
-
self.hexdict = pickle.dumps(dict).hex()
|
|
19
|
-
return True
|
|
20
|
-
def hash_retrieve(self, key):
|
|
21
|
-
"""
|
|
22
|
-
Retrieve a value by key from the lookup dictionary.
|
|
23
|
-
"""
|
|
24
|
-
lookup_dict = pickle.loads(bytes.fromhex(self.hexdict))
|
|
25
|
-
return lookup_dict.get(key, None)
|
|
26
|
-
|
|
27
|
-
def hash_add_key_value(self, key, value):
|
|
28
|
-
"""
|
|
29
|
-
Add a key-value pair to the lookup dictionary.
|
|
30
|
-
"""
|
|
31
|
-
lookup_dict = pickle.loads(bytes.fromhex(self.hexdict))
|
|
32
|
-
lookup_dict[key] = value
|
|
33
|
-
self.hexdict = pickle.dumps(lookup_dict).hex()
|
|
34
|
-
return True
|
|
35
|
-
|
|
36
|
-
def hash_dehash(self):
|
|
37
|
-
"""
|
|
38
|
-
Retrieve the entire lookup dictionary.
|
|
39
|
-
"""
|
|
40
|
-
lookup_dict = pickle.loads(bytes.fromhex(self.hexdict))
|
|
41
|
-
return lookup_dict
|
|
42
|
-
|
|
43
|
-
def fetch_examination_dict(self, patient_id, tags: List[str] = None):
|
|
44
|
-
"""
|
|
45
|
-
Fetch examinations for a given patient ID, optionally filtered by tags.
|
|
46
|
-
"""
|
|
47
|
-
query = self.db_session.query(Examination).filter(Examination.patient_id == patient_id)
|
|
48
|
-
if tags:
|
|
49
|
-
query = query.filter(Examination.tags.any(Examination.tags.in_(tags)))
|
|
50
|
-
examinations = query.all()
|
|
51
|
-
return [ExaminationSerializer(exam).data for exam in examinations]
|
|
52
|
-
|
|
53
|
-
def fetch_patient_examination_by_id(self, patient_id, examination_id):
|
|
54
|
-
"""
|
|
55
|
-
Fetch a patient examination object from the database by its ID.
|
|
56
|
-
"""
|
|
57
|
-
return self.db_session.query(PatientExamination).filter(PatientExamination.id == patient_examination_id).first()
|
|
58
|
-
|
|
59
|
-
def fetch_patient_examinations(self, patient_id):
|
|
60
|
-
"""
|
|
61
|
-
Fetch all patient examinations for a given patient ID.
|
|
62
|
-
"""
|
|
63
|
-
examinations = self.db_session.query(PatientExamination).filter(PatientExamination.patient_id == patient_id).all()
|
|
64
|
-
return [PatientExaminationSerializer(exam).data for exam in examinations]
|
|
65
|
-
|
|
66
|
-
def fetch_findings_by_patient_examination(self, patient_examination_id):
|
|
67
|
-
"""
|
|
68
|
-
Fetch findings associated with a given patient examination ID.
|
|
69
|
-
"""
|
|
70
|
-
patient_examination = self.db_session.query(PatientExamination).filter(PatientExamination.id == patient_examination_id).first()
|
|
71
|
-
if not patient_examination:
|
|
72
|
-
return []
|
|
73
|
-
return [finding.serialize() for finding in patient_examination.findings]
|
|
74
|
-
|
|
75
|
-
def fetch_classifications_by_finding(self, finding_id):
|
|
76
|
-
"""
|
|
77
|
-
Fetch classifications associated with a given finding ID.
|
|
78
|
-
"""
|
|
79
|
-
finding = self.db_session.query(Finding).filter(Finding.id == finding_id).first()
|
|
80
|
-
if not finding:
|
|
81
|
-
return []
|
|
82
|
-
return [classification.serialize() for classification in finding.classifications]
|
|
83
|
-
|
|
84
|
-
def fetch_default_finding_classification(self):
|
|
85
|
-
"""
|
|
86
|
-
Fetch the default finding classification from the database.
|
|
87
|
-
"""
|
|
88
|
-
return self.db_session.query(FindingClassification).filter(FindingClassification.is_default == True).first()
|
|
89
|
-
|
|
90
|
-
def fetch_finding_classification_choice_by_requirement(self, requirement_id):
|
|
91
|
-
"""
|
|
92
|
-
Retrieve finding classification choices based on the provided requirement ID.
|
|
93
|
-
"""
|
|
94
|
-
requirement = self.get_requirement_by_id(requirement_id)
|
|
95
|
-
if not requirement:
|
|
96
|
-
return []
|
|
97
|
-
return [choice.serialize() for choice in requirement.finding_classification_choices]
|
|
98
|
-
|
|
99
|
-
def fetch_requirement_choices_by_requirement(self, requirement_id):
|
|
100
|
-
"""
|
|
101
|
-
Retrieve requirement choices based on the provided requirement ID.
|
|
102
|
-
"""
|
|
103
|
-
requirement = self.get_requirement_by_id(requirement_id)
|
|
104
|
-
if not requirement:
|
|
105
|
-
return []
|
|
106
|
-
return [choice.serialize() for choice in requirement.requirement_choices]
|
|
107
|
-
|
|
108
|
-
def available_finding_classification_choices_by_finding_classification(self, finding_classification):
|
|
109
|
-
"""
|
|
110
|
-
Retrieve available finding classification choices based on the provided finding classification.
|
|
111
|
-
"""
|
|
112
|
-
return self.db_session.query(FindingClassificationChoice).filter(
|
|
113
|
-
FindingClassificationChoice.finding_classification_id == finding_classification.id
|
|
114
|
-
).all()
|
|
115
|
-
|
|
116
|
-
def get_requirement_by_id(self, requirement_id):
|
|
117
|
-
"""
|
|
118
|
-
Fetch a requirement object from the database by its ID.
|
|
119
|
-
"""
|
|
120
|
-
return self.db_session.query(Requirement).filter(Requirement.id == requirement_id).first()
|
|
121
|
-
|
|
122
|
-
def get_all_requirements_for_requirement_sets(self, requirement_set_ids: List[int]):
|
|
123
|
-
"""
|
|
124
|
-
Fetch all requirements associated with the given requirement set IDs.
|
|
125
|
-
"""
|
|
126
|
-
return self.db_session.query(Requirement).filter(Requirement.requirement_set_id.in_(requirement_set_ids)).all()
|
|
127
|
-
|
|
128
|
-
def get_all_requirement_sets_for_examination(self, examination_id):
|
|
129
|
-
"""
|
|
130
|
-
Fetch all requirement sets associated with the given examination ID.
|
|
131
|
-
"""
|
|
132
|
-
examination = self.db_session.query(Examination).filter(Examination.id == examination_id).first()
|
|
133
|
-
if not examination:
|
|
134
|
-
return []
|
|
135
|
-
return [req_set.serialize() for req_set in examination.requirement_sets]
|
|
136
|
-
|
|
137
|
-
def serialize_requirement(self, requirement):
|
|
138
|
-
"""
|
|
139
|
-
Serialize a requirement object to a byte stream.
|
|
140
|
-
"""
|
|
141
|
-
return pickle.dumps(requirement)
|
|
142
|
-
|
|
143
|
-
def deserialize_requirement(self, serialized_requirement):
|
|
144
|
-
"""
|
|
145
|
-
Deserialize a byte stream back to a requirement object.
|
|
146
|
-
"""
|
|
147
|
-
return pickle.loads(serialized_requirement)
|