endoreg-db 0.8.8.9__py3-none-any.whl → 0.8.9.10__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of endoreg-db might be problematic. Click here for more details.
- endoreg_db/admin.py +10 -5
- endoreg_db/apps.py +4 -7
- endoreg_db/authz/auth.py +1 -0
- endoreg_db/authz/backends.py +1 -1
- endoreg_db/authz/management/commands/list_routes.py +2 -0
- endoreg_db/authz/middleware.py +8 -7
- endoreg_db/authz/permissions.py +21 -10
- endoreg_db/authz/policy.py +14 -19
- endoreg_db/authz/views_auth.py +14 -10
- endoreg_db/codemods/rename_datetime_fields.py +8 -1
- endoreg_db/exceptions.py +5 -2
- endoreg_db/forms/__init__.py +0 -1
- endoreg_db/forms/examination_form.py +4 -3
- endoreg_db/forms/patient_finding_intervention_form.py +30 -8
- endoreg_db/forms/patient_form.py +9 -13
- endoreg_db/forms/questionnaires/__init__.py +1 -1
- endoreg_db/forms/settings/__init__.py +4 -1
- endoreg_db/forms/unit.py +2 -1
- endoreg_db/helpers/count_db.py +17 -14
- endoreg_db/helpers/default_objects.py +2 -1
- endoreg_db/helpers/download_segmentation_model.py +4 -3
- endoreg_db/helpers/interact.py +0 -5
- endoreg_db/helpers/test_video_helper.py +33 -25
- endoreg_db/import_files/__init__.py +1 -1
- endoreg_db/import_files/context/__init__.py +1 -1
- endoreg_db/import_files/context/default_sensitive_meta.py +11 -9
- endoreg_db/import_files/context/ensure_center.py +4 -4
- endoreg_db/import_files/context/file_lock.py +3 -3
- endoreg_db/import_files/context/import_context.py +11 -12
- endoreg_db/import_files/context/validate_directories.py +1 -0
- endoreg_db/import_files/file_storage/create_report_file.py +57 -34
- endoreg_db/import_files/file_storage/create_video_file.py +64 -35
- endoreg_db/import_files/file_storage/sensitive_meta_storage.py +5 -2
- endoreg_db/import_files/file_storage/state_management.py +146 -83
- endoreg_db/import_files/file_storage/storage.py +5 -1
- endoreg_db/import_files/processing/report_processing/report_anonymization.py +24 -19
- endoreg_db/import_files/processing/sensitive_meta_adapter.py +3 -3
- endoreg_db/import_files/processing/video_processing/video_anonymization.py +18 -18
- endoreg_db/import_files/pseudonymization/k_anonymity.py +8 -9
- endoreg_db/import_files/pseudonymization/k_pseudonymity.py +16 -5
- endoreg_db/import_files/report_import_service.py +36 -30
- endoreg_db/import_files/video_import_service.py +27 -23
- endoreg_db/logger_conf.py +56 -40
- endoreg_db/management/__init__.py +1 -1
- endoreg_db/management/commands/__init__.py +1 -1
- endoreg_db/management/commands/check_auth.py +45 -38
- endoreg_db/management/commands/create_model_meta_from_huggingface.py +53 -2
- endoreg_db/management/commands/create_multilabel_model_meta.py +54 -19
- endoreg_db/management/commands/fix_missing_patient_data.py +105 -71
- endoreg_db/management/commands/fix_video_paths.py +75 -54
- endoreg_db/management/commands/import_report.py +1 -3
- endoreg_db/management/commands/list_routes.py +2 -0
- endoreg_db/management/commands/load_ai_model_data.py +8 -2
- endoreg_db/management/commands/load_ai_model_label_data.py +0 -1
- endoreg_db/management/commands/load_center_data.py +3 -3
- endoreg_db/management/commands/load_distribution_data.py +35 -38
- endoreg_db/management/commands/load_endoscope_data.py +0 -3
- endoreg_db/management/commands/load_examination_data.py +20 -4
- endoreg_db/management/commands/load_finding_data.py +18 -3
- endoreg_db/management/commands/load_gender_data.py +17 -24
- endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +95 -85
- endoreg_db/management/commands/load_information_source.py +0 -3
- endoreg_db/management/commands/load_lab_value_data.py +14 -3
- endoreg_db/management/commands/load_legacy_data.py +303 -0
- endoreg_db/management/commands/load_name_data.py +1 -2
- endoreg_db/management/commands/load_pdf_type_data.py +4 -8
- endoreg_db/management/commands/load_profession_data.py +0 -1
- endoreg_db/management/commands/load_report_reader_flag_data.py +0 -4
- endoreg_db/management/commands/load_requirement_data.py +6 -2
- endoreg_db/management/commands/load_unit_data.py +0 -4
- endoreg_db/management/commands/load_user_groups.py +5 -7
- endoreg_db/management/commands/model_input.py +169 -0
- endoreg_db/management/commands/register_ai_model.py +22 -16
- endoreg_db/management/commands/setup_endoreg_db.py +110 -32
- endoreg_db/management/commands/storage_management.py +14 -8
- endoreg_db/management/commands/summarize_db_content.py +154 -63
- endoreg_db/management/commands/train_image_multilabel_model.py +144 -0
- endoreg_db/management/commands/validate_video_files.py +82 -50
- endoreg_db/management/commands/video_validation.py +4 -6
- endoreg_db/migrations/0001_initial.py +112 -63
- endoreg_db/migrations/__init__.py +0 -0
- endoreg_db/models/__init__.py +8 -0
- endoreg_db/models/administration/ai/active_model.py +5 -5
- endoreg_db/models/administration/ai/ai_model.py +41 -18
- endoreg_db/models/administration/ai/model_type.py +1 -0
- endoreg_db/models/administration/case/case.py +22 -22
- endoreg_db/models/administration/center/__init__.py +5 -5
- endoreg_db/models/administration/center/center.py +6 -2
- endoreg_db/models/administration/center/center_resource.py +18 -4
- endoreg_db/models/administration/center/center_shift.py +3 -1
- endoreg_db/models/administration/center/center_waste.py +6 -2
- endoreg_db/models/administration/person/__init__.py +1 -1
- endoreg_db/models/administration/person/employee/__init__.py +1 -1
- endoreg_db/models/administration/person/employee/employee_type.py +3 -1
- endoreg_db/models/administration/person/examiner/__init__.py +1 -1
- endoreg_db/models/administration/person/examiner/examiner.py +10 -2
- endoreg_db/models/administration/person/names/first_name.py +6 -4
- endoreg_db/models/administration/person/names/last_name.py +4 -3
- endoreg_db/models/administration/person/patient/__init__.py +1 -1
- endoreg_db/models/administration/person/patient/patient.py +0 -1
- endoreg_db/models/administration/person/patient/patient_external_id.py +0 -1
- endoreg_db/models/administration/person/person.py +1 -1
- endoreg_db/models/administration/product/__init__.py +7 -6
- endoreg_db/models/administration/product/product.py +6 -2
- endoreg_db/models/administration/product/product_group.py +9 -7
- endoreg_db/models/administration/product/product_material.py +9 -2
- endoreg_db/models/administration/product/reference_product.py +64 -15
- endoreg_db/models/administration/qualification/qualification.py +3 -1
- endoreg_db/models/administration/shift/shift.py +3 -1
- endoreg_db/models/administration/shift/shift_type.py +12 -4
- endoreg_db/models/aidataset/__init__.py +5 -0
- endoreg_db/models/aidataset/aidataset.py +193 -0
- endoreg_db/models/label/__init__.py +1 -1
- endoreg_db/models/label/label.py +10 -2
- endoreg_db/models/label/label_set.py +3 -1
- endoreg_db/models/label/label_video_segment/_create_from_video.py +6 -2
- endoreg_db/models/label/label_video_segment/label_video_segment.py +148 -44
- endoreg_db/models/media/__init__.py +12 -5
- endoreg_db/models/media/frame/__init__.py +1 -1
- endoreg_db/models/media/frame/frame.py +34 -8
- endoreg_db/models/media/pdf/__init__.py +2 -1
- endoreg_db/models/media/pdf/raw_pdf.py +11 -4
- endoreg_db/models/media/pdf/report_file.py +6 -2
- endoreg_db/models/media/pdf/report_reader/__init__.py +3 -3
- endoreg_db/models/media/pdf/report_reader/report_reader_flag.py +15 -5
- endoreg_db/models/media/video/create_from_file.py +20 -41
- endoreg_db/models/media/video/pipe_1.py +75 -30
- endoreg_db/models/media/video/pipe_2.py +37 -12
- endoreg_db/models/media/video/video_file.py +36 -24
- endoreg_db/models/media/video/video_file_ai.py +235 -70
- endoreg_db/models/media/video/video_file_anonymize.py +240 -65
- endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py +6 -1
- endoreg_db/models/media/video/video_file_frames/_create_frame_object.py +3 -1
- endoreg_db/models/media/video/video_file_frames/_delete_frames.py +30 -9
- endoreg_db/models/media/video/video_file_frames/_extract_frames.py +95 -29
- endoreg_db/models/media/video/video_file_frames/_get_frame.py +13 -3
- endoreg_db/models/media/video/video_file_frames/_get_frame_path.py +4 -1
- endoreg_db/models/media/video/video_file_frames/_get_frame_paths.py +15 -3
- endoreg_db/models/media/video/video_file_frames/_get_frame_range.py +15 -3
- endoreg_db/models/media/video/video_file_frames/_get_frames.py +7 -2
- endoreg_db/models/media/video/video_file_frames/_initialize_frames.py +109 -23
- endoreg_db/models/media/video/video_file_frames/_manage_frame_range.py +111 -27
- endoreg_db/models/media/video/video_file_frames/_mark_frames_extracted_status.py +46 -13
- endoreg_db/models/media/video/video_file_io.py +85 -33
- endoreg_db/models/media/video/video_file_meta/__init__.py +6 -6
- endoreg_db/models/media/video/video_file_meta/get_crop_template.py +17 -4
- endoreg_db/models/media/video/video_file_meta/get_endo_roi.py +28 -7
- endoreg_db/models/media/video/video_file_meta/get_fps.py +46 -13
- endoreg_db/models/media/video/video_file_meta/initialize_video_specs.py +81 -20
- endoreg_db/models/media/video/video_file_meta/text_meta.py +61 -20
- endoreg_db/models/media/video/video_file_meta/video_meta.py +40 -12
- endoreg_db/models/media/video/video_file_segments.py +118 -27
- endoreg_db/models/media/video/video_metadata.py +25 -6
- endoreg_db/models/media/video/video_processing.py +54 -15
- endoreg_db/models/medical/__init__.py +3 -13
- endoreg_db/models/medical/contraindication/__init__.py +3 -1
- endoreg_db/models/medical/disease.py +18 -6
- endoreg_db/models/medical/event.py +6 -2
- endoreg_db/models/medical/examination/__init__.py +5 -1
- endoreg_db/models/medical/examination/examination.py +22 -6
- endoreg_db/models/medical/examination/examination_indication.py +23 -7
- endoreg_db/models/medical/examination/examination_time.py +6 -2
- endoreg_db/models/medical/finding/__init__.py +3 -1
- endoreg_db/models/medical/finding/finding.py +37 -12
- endoreg_db/models/medical/finding/finding_classification.py +27 -8
- endoreg_db/models/medical/finding/finding_intervention.py +19 -6
- endoreg_db/models/medical/finding/finding_type.py +3 -1
- endoreg_db/models/medical/hardware/__init__.py +1 -1
- endoreg_db/models/medical/hardware/endoscope.py +14 -2
- endoreg_db/models/medical/laboratory/__init__.py +1 -1
- endoreg_db/models/medical/laboratory/lab_value.py +139 -39
- endoreg_db/models/medical/medication/__init__.py +7 -3
- endoreg_db/models/medical/medication/medication.py +3 -1
- endoreg_db/models/medical/medication/medication_indication.py +3 -1
- endoreg_db/models/medical/medication/medication_indication_type.py +11 -3
- endoreg_db/models/medical/medication/medication_intake_time.py +3 -1
- endoreg_db/models/medical/medication/medication_schedule.py +3 -1
- endoreg_db/models/medical/patient/__init__.py +2 -10
- endoreg_db/models/medical/patient/medication_examples.py +3 -14
- endoreg_db/models/medical/patient/patient_disease.py +17 -5
- endoreg_db/models/medical/patient/patient_event.py +12 -4
- endoreg_db/models/medical/patient/patient_examination.py +52 -15
- endoreg_db/models/medical/patient/patient_examination_indication.py +15 -4
- endoreg_db/models/medical/patient/patient_finding.py +105 -29
- endoreg_db/models/medical/patient/patient_finding_classification.py +41 -12
- endoreg_db/models/medical/patient/patient_finding_intervention.py +11 -3
- endoreg_db/models/medical/patient/patient_lab_sample.py +6 -2
- endoreg_db/models/medical/patient/patient_lab_value.py +42 -10
- endoreg_db/models/medical/patient/patient_medication.py +25 -7
- endoreg_db/models/medical/patient/patient_medication_schedule.py +34 -10
- endoreg_db/models/metadata/model_meta.py +40 -12
- endoreg_db/models/metadata/model_meta_logic.py +51 -16
- endoreg_db/models/metadata/sensitive_meta.py +65 -28
- endoreg_db/models/metadata/sensitive_meta_logic.py +28 -26
- endoreg_db/models/metadata/video_meta.py +146 -39
- endoreg_db/models/metadata/video_prediction_logic.py +70 -21
- endoreg_db/models/metadata/video_prediction_meta.py +80 -27
- endoreg_db/models/operation_log.py +63 -0
- endoreg_db/models/other/__init__.py +10 -10
- endoreg_db/models/other/distribution/__init__.py +9 -7
- endoreg_db/models/other/distribution/base_value_distribution.py +3 -1
- endoreg_db/models/other/distribution/date_value_distribution.py +19 -5
- endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +3 -1
- endoreg_db/models/other/distribution/numeric_value_distribution.py +34 -9
- endoreg_db/models/other/emission/__init__.py +1 -1
- endoreg_db/models/other/emission/emission_factor.py +9 -3
- endoreg_db/models/other/information_source.py +15 -5
- endoreg_db/models/other/material.py +3 -1
- endoreg_db/models/other/transport_route.py +3 -1
- endoreg_db/models/other/unit.py +6 -2
- endoreg_db/models/report/report.py +0 -1
- endoreg_db/models/requirement/requirement.py +84 -27
- endoreg_db/models/requirement/requirement_error.py +5 -6
- endoreg_db/models/requirement/requirement_evaluation/__init__.py +1 -1
- endoreg_db/models/requirement/requirement_evaluation/evaluate_with_dependencies.py +8 -8
- endoreg_db/models/requirement/requirement_evaluation/get_values.py +3 -3
- endoreg_db/models/requirement/requirement_evaluation/requirement_type_parser.py +24 -8
- endoreg_db/models/requirement/requirement_operator.py +28 -8
- endoreg_db/models/requirement/requirement_set.py +34 -11
- endoreg_db/models/state/__init__.py +1 -0
- endoreg_db/models/state/audit_ledger.py +9 -2
- endoreg_db/models/{media → state}/processing_history/__init__.py +1 -3
- endoreg_db/models/state/processing_history/processing_history.py +136 -0
- endoreg_db/models/state/raw_pdf.py +0 -1
- endoreg_db/models/state/video.py +2 -3
- endoreg_db/models/utils.py +4 -2
- endoreg_db/queries/__init__.py +2 -6
- endoreg_db/queries/annotations/__init__.py +1 -3
- endoreg_db/queries/annotations/legacy.py +37 -26
- endoreg_db/root_urls.py +3 -4
- endoreg_db/schemas/examination_evaluation.py +3 -0
- endoreg_db/serializers/Frames_NICE_and_PARIS_classifications.py +249 -163
- endoreg_db/serializers/__init__.py +2 -8
- endoreg_db/serializers/administration/__init__.py +1 -2
- endoreg_db/serializers/administration/ai/__init__.py +0 -1
- endoreg_db/serializers/administration/ai/active_model.py +3 -1
- endoreg_db/serializers/administration/ai/ai_model.py +5 -3
- endoreg_db/serializers/administration/ai/model_type.py +3 -1
- endoreg_db/serializers/administration/center.py +7 -2
- endoreg_db/serializers/administration/gender.py +4 -2
- endoreg_db/serializers/anonymization.py +13 -13
- endoreg_db/serializers/evaluation/examination_evaluation.py +0 -1
- endoreg_db/serializers/examination/__init__.py +1 -1
- endoreg_db/serializers/examination/base.py +12 -13
- endoreg_db/serializers/examination/dropdown.py +6 -7
- endoreg_db/serializers/examination_serializer.py +3 -6
- endoreg_db/serializers/finding/__init__.py +1 -1
- endoreg_db/serializers/finding/finding.py +14 -7
- endoreg_db/serializers/finding_classification/__init__.py +3 -3
- endoreg_db/serializers/finding_classification/choice.py +3 -3
- endoreg_db/serializers/finding_classification/classification.py +2 -4
- endoreg_db/serializers/label_video_segment/__init__.py +5 -3
- endoreg_db/serializers/{label → label_video_segment}/image_classification_annotation.py +5 -5
- endoreg_db/serializers/label_video_segment/label/__init__.py +6 -0
- endoreg_db/serializers/{label → label_video_segment/label}/label.py +1 -1
- endoreg_db/serializers/label_video_segment/label_video_segment.py +338 -228
- endoreg_db/serializers/meta/__init__.py +1 -2
- endoreg_db/serializers/meta/sensitive_meta_detail.py +28 -13
- endoreg_db/serializers/meta/sensitive_meta_update.py +51 -46
- endoreg_db/serializers/meta/sensitive_meta_verification.py +19 -16
- endoreg_db/serializers/misc/__init__.py +2 -2
- endoreg_db/serializers/misc/file_overview.py +11 -7
- endoreg_db/serializers/misc/stats.py +10 -8
- endoreg_db/serializers/misc/translatable_field_mix_in.py +6 -6
- endoreg_db/serializers/misc/upload_job.py +32 -29
- endoreg_db/serializers/patient/__init__.py +2 -1
- endoreg_db/serializers/patient/patient.py +32 -15
- endoreg_db/serializers/patient/patient_dropdown.py +11 -3
- endoreg_db/serializers/patient_examination/__init__.py +1 -1
- endoreg_db/serializers/patient_examination/patient_examination.py +67 -40
- endoreg_db/serializers/patient_finding/__init__.py +1 -1
- endoreg_db/serializers/patient_finding/patient_finding.py +2 -1
- endoreg_db/serializers/patient_finding/patient_finding_classification.py +17 -9
- endoreg_db/serializers/patient_finding/patient_finding_detail.py +26 -17
- endoreg_db/serializers/patient_finding/patient_finding_intervention.py +7 -5
- endoreg_db/serializers/patient_finding/patient_finding_list.py +10 -11
- endoreg_db/serializers/patient_finding/patient_finding_write.py +36 -27
- endoreg_db/serializers/pdf/__init__.py +1 -3
- endoreg_db/serializers/requirements/requirement_schema.py +1 -6
- endoreg_db/serializers/sensitive_meta_serializer.py +100 -81
- endoreg_db/serializers/video/__init__.py +2 -2
- endoreg_db/serializers/video/{segmentation.py → video_file.py} +66 -47
- endoreg_db/serializers/video/video_file_brief.py +6 -2
- endoreg_db/serializers/video/video_file_detail.py +36 -23
- endoreg_db/serializers/video/video_file_list.py +4 -2
- endoreg_db/serializers/video/video_processing_history.py +54 -50
- endoreg_db/services/__init__.py +1 -1
- endoreg_db/services/anonymization.py +2 -2
- endoreg_db/services/examination_evaluation.py +40 -17
- endoreg_db/services/model_meta_from_hf.py +76 -0
- endoreg_db/services/polling_coordinator.py +101 -70
- endoreg_db/services/pseudonym_service.py +27 -22
- endoreg_db/services/report_import.py +6 -3
- endoreg_db/services/segment_sync.py +75 -59
- endoreg_db/services/video_import.py +6 -7
- endoreg_db/urls/__init__.py +2 -2
- endoreg_db/urls/ai.py +7 -25
- endoreg_db/urls/anonymization.py +61 -15
- endoreg_db/urls/auth.py +4 -4
- endoreg_db/urls/classification.py +4 -9
- endoreg_db/urls/examination.py +27 -18
- endoreg_db/urls/media.py +27 -34
- endoreg_db/urls/patient.py +11 -7
- endoreg_db/urls/requirements.py +3 -1
- endoreg_db/urls/root_urls.py +2 -3
- endoreg_db/urls/stats.py +24 -16
- endoreg_db/urls/upload.py +3 -11
- endoreg_db/utils/__init__.py +14 -15
- endoreg_db/utils/ai/__init__.py +1 -1
- 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 +2 -1
- endoreg_db/utils/ai/inference_dataset.py +14 -15
- 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 +21 -6
- endoreg_db/utils/ai/predict.py +4 -4
- endoreg_db/utils/ai/preprocess.py +19 -11
- endoreg_db/utils/calc_duration_seconds.py +4 -4
- endoreg_db/utils/case_generator/lab_sample_factory.py +3 -4
- endoreg_db/utils/check_video_files.py +74 -47
- endoreg_db/utils/cropping.py +10 -9
- endoreg_db/utils/dataloader.py +11 -3
- endoreg_db/utils/dates.py +3 -4
- endoreg_db/utils/defaults/set_default_center.py +7 -6
- endoreg_db/utils/env.py +6 -2
- endoreg_db/utils/extract_specific_frames.py +24 -9
- endoreg_db/utils/file_operations.py +30 -18
- endoreg_db/utils/fix_video_path_direct.py +57 -41
- endoreg_db/utils/frame_anonymization_utils.py +157 -157
- endoreg_db/utils/hashs.py +3 -18
- endoreg_db/utils/links/requirement_link.py +96 -52
- endoreg_db/utils/ocr.py +30 -25
- endoreg_db/utils/operation_log.py +61 -0
- endoreg_db/utils/parse_and_generate_yaml.py +12 -13
- endoreg_db/utils/paths.py +6 -6
- endoreg_db/utils/permissions.py +40 -24
- endoreg_db/utils/pipelines/process_video_dir.py +50 -26
- endoreg_db/utils/product/sum_emissions.py +5 -3
- endoreg_db/utils/product/sum_weights.py +4 -2
- endoreg_db/utils/pydantic_models/__init__.py +3 -4
- endoreg_db/utils/requirement_operator_logic/_old/lab_value_operators.py +207 -107
- endoreg_db/utils/requirement_operator_logic/_old/model_evaluators.py +252 -65
- endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +27 -10
- endoreg_db/utils/setup_config.py +21 -5
- endoreg_db/utils/storage.py +3 -1
- endoreg_db/utils/translation.py +19 -15
- endoreg_db/utils/uuid.py +1 -0
- endoreg_db/utils/validate_endo_roi.py +12 -4
- endoreg_db/utils/validate_subcategory_dict.py +26 -24
- endoreg_db/utils/validate_video_detailed.py +207 -149
- endoreg_db/utils/video/__init__.py +7 -3
- endoreg_db/utils/video/extract_frames.py +30 -18
- endoreg_db/utils/video/ffmpeg_wrapper.py +217 -52
- endoreg_db/utils/video/names.py +11 -6
- endoreg_db/utils/video/streaming_processor.py +175 -101
- endoreg_db/utils/video/video_splitter.py +30 -19
- endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py +59 -50
- endoreg_db/views/__init__.py +0 -20
- endoreg_db/views/anonymization/__init__.py +6 -2
- endoreg_db/views/anonymization/media_management.py +2 -6
- endoreg_db/views/anonymization/overview.py +34 -1
- endoreg_db/views/anonymization/validate.py +79 -18
- endoreg_db/views/auth/__init__.py +1 -1
- endoreg_db/views/auth/keycloak.py +16 -14
- endoreg_db/views/examination/__init__.py +12 -15
- endoreg_db/views/examination/examination.py +5 -5
- endoreg_db/views/examination/examination_manifest_cache.py +5 -5
- endoreg_db/views/examination/get_finding_classification_choices.py +8 -5
- endoreg_db/views/examination/get_finding_classifications.py +9 -7
- endoreg_db/views/examination/get_findings.py +8 -10
- endoreg_db/views/examination/get_instruments.py +3 -2
- endoreg_db/views/examination/get_interventions.py +1 -1
- endoreg_db/views/finding/__init__.py +2 -2
- endoreg_db/views/finding/finding.py +58 -54
- endoreg_db/views/finding/get_classifications.py +1 -1
- endoreg_db/views/finding/get_interventions.py +1 -1
- endoreg_db/views/finding_classification/__init__.py +5 -5
- endoreg_db/views/finding_classification/finding_classification.py +5 -6
- endoreg_db/views/finding_classification/get_classification_choices.py +3 -4
- endoreg_db/views/media/__init__.py +13 -13
- endoreg_db/views/media/pdf_media.py +9 -9
- endoreg_db/views/media/sensitive_metadata.py +10 -7
- endoreg_db/views/media/video_media.py +4 -4
- endoreg_db/views/meta/__init__.py +1 -1
- endoreg_db/views/meta/sensitive_meta_list.py +20 -22
- endoreg_db/views/meta/sensitive_meta_verification.py +14 -11
- endoreg_db/views/misc/__init__.py +6 -34
- endoreg_db/views/misc/center.py +2 -1
- endoreg_db/views/misc/csrf.py +2 -1
- endoreg_db/views/misc/gender.py +2 -1
- endoreg_db/views/misc/stats.py +141 -106
- endoreg_db/views/patient/__init__.py +1 -3
- endoreg_db/views/patient/patient.py +141 -99
- endoreg_db/views/patient_examination/__init__.py +5 -5
- endoreg_db/views/patient_examination/patient_examination.py +43 -42
- endoreg_db/views/patient_examination/patient_examination_create.py +10 -15
- endoreg_db/views/patient_examination/patient_examination_detail.py +12 -15
- endoreg_db/views/patient_examination/patient_examination_list.py +21 -17
- endoreg_db/views/patient_examination/video.py +114 -80
- endoreg_db/views/patient_finding/__init__.py +1 -1
- endoreg_db/views/patient_finding/patient_finding.py +17 -10
- endoreg_db/views/patient_finding/patient_finding_optimized.py +127 -95
- endoreg_db/views/patient_finding_classification/__init__.py +1 -1
- endoreg_db/views/patient_finding_classification/pfc_create.py +35 -27
- endoreg_db/views/report/reimport.py +1 -1
- endoreg_db/views/report/report_stream.py +5 -8
- endoreg_db/views/requirement/__init__.py +2 -1
- endoreg_db/views/requirement/evaluate.py +7 -9
- endoreg_db/views/requirement/lookup.py +2 -3
- endoreg_db/views/requirement/lookup_store.py +0 -1
- endoreg_db/views/requirement/requirement_utils.py +2 -4
- endoreg_db/views/stats/__init__.py +4 -4
- endoreg_db/views/stats/stats_views.py +152 -115
- endoreg_db/views/video/__init__.py +18 -27
- endoreg_db/views/{ai → video/ai}/__init__.py +2 -2
- endoreg_db/views/{ai → video/ai}/label.py +20 -16
- endoreg_db/views/video/correction.py +5 -6
- endoreg_db/views/video/reimport.py +134 -99
- endoreg_db/views/video/segments_crud.py +134 -44
- endoreg_db/views/video/video_apply_mask.py +13 -12
- endoreg_db/views/video/video_correction.py +2 -1
- endoreg_db/views/video/video_download_processed.py +15 -15
- endoreg_db/views/video/video_meta_stats.py +7 -6
- endoreg_db/views/video/video_processing_history.py +3 -2
- endoreg_db/views/video/video_remove_frames.py +13 -12
- endoreg_db/views/video/video_stream.py +110 -82
- {endoreg_db-0.8.8.9.dist-info → endoreg_db-0.8.9.10.dist-info}/METADATA +9 -3
- {endoreg_db-0.8.8.9.dist-info → endoreg_db-0.8.9.10.dist-info}/RECORD +436 -433
- endoreg_db/import_files/processing/video_processing/video_cleanup_on_error.py +0 -119
- endoreg_db/management/commands/import_fallback_video.py +0 -203
- endoreg_db/management/commands/import_video.py +0 -422
- endoreg_db/management/commands/import_video_with_classification.py +0 -367
- endoreg_db/models/media/processing_history/processing_history.py +0 -96
- endoreg_db/serializers/label/__init__.py +0 -7
- endoreg_db/serializers/label_video_segment/_lvs_create.py +0 -149
- endoreg_db/serializers/label_video_segment/_lvs_update.py +0 -138
- endoreg_db/serializers/label_video_segment/_lvs_validate.py +0 -149
- endoreg_db/serializers/label_video_segment/label_video_segment_annotation.py +0 -99
- endoreg_db/serializers/label_video_segment/label_video_segment_update.py +0 -163
- endoreg_db/services/__old/pdf_import.py +0 -1487
- endoreg_db/services/__old/video_import.py +0 -1306
- endoreg_db/tasks/upload_tasks.py +0 -216
- endoreg_db/tasks/video_ingest.py +0 -161
- endoreg_db/tasks/video_processing_tasks.py +0 -327
- endoreg_db/views/misc/translation.py +0 -182
- {endoreg_db-0.8.8.9.dist-info → endoreg_db-0.8.9.10.dist-info}/WHEEL +0 -0
- {endoreg_db-0.8.8.9.dist-info → endoreg_db-0.8.9.10.dist-info}/licenses/LICENSE +0 -0
|
@@ -4,7 +4,7 @@ report Media Management View (Phase 1.2)
|
|
|
4
4
|
Provides standardized REST API for report files including listing, detail retrieval,
|
|
5
5
|
and streaming for the media management system.
|
|
6
6
|
|
|
7
|
-
This is separate from the existing pdf.
|
|
7
|
+
This is separate from the existing pdf.reportMediaView which handles legacy workflows.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
import logging
|
|
@@ -30,9 +30,9 @@ class PdfMediaView(APIView):
|
|
|
30
30
|
report Media Management API for CRUD operations on report files.
|
|
31
31
|
|
|
32
32
|
Endpoints:
|
|
33
|
-
- GET /api/media/pdfs/ - List all
|
|
33
|
+
- GET /api/media/pdfs/ - List all reports with filtering
|
|
34
34
|
- GET /api/media/pdfs/{id}/ - Get report details
|
|
35
|
-
- GET /api/media/pdfs/{id}/stream/ - Stream report file (same as detail for
|
|
35
|
+
- GET /api/media/pdfs/{id}/stream/ - Stream report file (same as detail for reports)
|
|
36
36
|
- PATCH /api/media/pdfs/{id}/ - Update report metadata (future)
|
|
37
37
|
- DELETE /api/media/pdfs/{id}/ - Delete report (future)
|
|
38
38
|
|
|
@@ -216,7 +216,7 @@ class PdfMediaView(APIView):
|
|
|
216
216
|
|
|
217
217
|
def _list_pdfs(self, request):
|
|
218
218
|
"""
|
|
219
|
-
List
|
|
219
|
+
List reports with filtering, search, and pagination.
|
|
220
220
|
|
|
221
221
|
Args:
|
|
222
222
|
request: HTTP request with query parameters
|
|
@@ -225,7 +225,7 @@ class PdfMediaView(APIView):
|
|
|
225
225
|
Response: JSON response with paginated report list
|
|
226
226
|
"""
|
|
227
227
|
try:
|
|
228
|
-
# Start with all
|
|
228
|
+
# Start with all reports
|
|
229
229
|
queryset = RawPdfFile.objects.select_related("sensitive_meta").all()
|
|
230
230
|
|
|
231
231
|
# Apply filters
|
|
@@ -249,7 +249,7 @@ class PdfMediaView(APIView):
|
|
|
249
249
|
total_count = queryset.count()
|
|
250
250
|
pdfs = queryset[offset : offset + limit]
|
|
251
251
|
|
|
252
|
-
# Serialize
|
|
252
|
+
# Serialize reports manually (no dedicated serializer yet)
|
|
253
253
|
results = []
|
|
254
254
|
for pdf in pdfs:
|
|
255
255
|
pdf_item = {
|
|
@@ -334,12 +334,12 @@ class PdfMediaView(APIView):
|
|
|
334
334
|
|
|
335
335
|
if status_filter:
|
|
336
336
|
if status_filter == "not_started":
|
|
337
|
-
#
|
|
337
|
+
# reports without anonymized text
|
|
338
338
|
queryset = queryset.filter(
|
|
339
339
|
Q(anonymized_text__isnull=True) | Q(anonymized_text__exact="")
|
|
340
340
|
)
|
|
341
341
|
elif status_filter == "done":
|
|
342
|
-
#
|
|
342
|
+
# reports with anonymized text but not validated
|
|
343
343
|
queryset = queryset.filter(
|
|
344
344
|
~Q(anonymized_text__isnull=True),
|
|
345
345
|
~Q(anonymized_text__exact=""),
|
|
@@ -347,7 +347,7 @@ class PdfMediaView(APIView):
|
|
|
347
347
|
| Q(sensitive_meta__isnull=True),
|
|
348
348
|
)
|
|
349
349
|
elif status_filter == "validated":
|
|
350
|
-
#
|
|
350
|
+
# reports with anonymized text and validated
|
|
351
351
|
queryset = queryset.filter(
|
|
352
352
|
~Q(anonymized_text__isnull=True),
|
|
353
353
|
~Q(anonymized_text__exact=""),
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
# Modern Media Framework: Sensitive Metadata Management
|
|
2
|
-
import string
|
|
3
2
|
|
|
4
3
|
from django.db import transaction
|
|
5
4
|
from django.db.models import Q
|
|
6
5
|
from django.shortcuts import get_object_or_404
|
|
6
|
+
import json
|
|
7
|
+
import logging
|
|
8
|
+
|
|
7
9
|
from numpy import number
|
|
8
10
|
from rest_framework import status
|
|
9
11
|
from rest_framework.decorators import api_view, permission_classes
|
|
@@ -15,7 +17,7 @@ from endoreg_db.serializers.meta import (
|
|
|
15
17
|
SensitiveMetaUpdateSerializer,
|
|
16
18
|
)
|
|
17
19
|
from endoreg_db.utils.permissions import EnvironmentAwarePermission
|
|
18
|
-
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
19
21
|
# === VIDEO SENSITIVE METADATA ===
|
|
20
22
|
|
|
21
23
|
|
|
@@ -190,7 +192,8 @@ def pdf_sensitive_metadata(request, pk):
|
|
|
190
192
|
if serializer.is_valid():
|
|
191
193
|
updated_instance = serializer.save()
|
|
192
194
|
response_serializer = SensitiveMetaDetailSerializer(updated_instance)
|
|
193
|
-
|
|
195
|
+
sensitive_meta.update_from_dict(response_serializer.data)
|
|
196
|
+
logger.info("Updated sensitive metadata: %s", json.dumps(response_serializer.data))
|
|
194
197
|
return Response(
|
|
195
198
|
{
|
|
196
199
|
"message": "Sensitive metadata updated successfully",
|
|
@@ -269,7 +272,7 @@ def sensitive_metadata_list(request):
|
|
|
269
272
|
"""
|
|
270
273
|
GET /api/media/sensitive-metadata/
|
|
271
274
|
|
|
272
|
-
List all sensitive metadata (combined
|
|
275
|
+
List all sensitive metadata (combined reports and Videos).
|
|
273
276
|
Supports filtering by content_type, status, etc.
|
|
274
277
|
|
|
275
278
|
Query parameters:
|
|
@@ -286,7 +289,7 @@ def sensitive_metadata_list(request):
|
|
|
286
289
|
# Filter by content type
|
|
287
290
|
content_type = request.query_params.get("content_type")
|
|
288
291
|
if content_type == "pdf":
|
|
289
|
-
# Only
|
|
292
|
+
# Only reports - filter by existence of related reports
|
|
290
293
|
queryset = queryset.filter(raw_pdf_files__isnull=False).distinct()
|
|
291
294
|
elif content_type == "video":
|
|
292
295
|
# Only Videos - filter by existence of related video
|
|
@@ -331,12 +334,12 @@ def pdf_sensitive_metadata_list(request):
|
|
|
331
334
|
"""
|
|
332
335
|
GET /api/media/pdfs/sensitive-metadata/
|
|
333
336
|
|
|
334
|
-
List sensitive metadata for
|
|
337
|
+
List sensitive metadata for reports only.
|
|
335
338
|
Replaces legacy /api/pdf/sensitivemeta/list/
|
|
336
339
|
"""
|
|
337
340
|
from endoreg_db.serializers.meta import SensitiveMetaDetailSerializer
|
|
338
341
|
|
|
339
|
-
# Get all
|
|
342
|
+
# Get all reports with sensitive metadata
|
|
340
343
|
queryset = (
|
|
341
344
|
SensitiveMeta.objects.select_related("state")
|
|
342
345
|
.filter(raw_pdf_files__isnull=False)
|
|
@@ -18,8 +18,8 @@ from rest_framework.views import APIView
|
|
|
18
18
|
from endoreg_db.models import VideoFile
|
|
19
19
|
from endoreg_db.serializers.video.video_file_detail import VideoDetailSerializer
|
|
20
20
|
from endoreg_db.serializers.video.video_file_list import VideoFileListSerializer
|
|
21
|
-
|
|
22
|
-
#for keycloak
|
|
21
|
+
|
|
22
|
+
# for keycloak
|
|
23
23
|
from rest_framework.permissions import IsAuthenticated
|
|
24
24
|
from endoreg_db.authz.permissions import PolicyPermission
|
|
25
25
|
|
|
@@ -54,8 +54,8 @@ class VideoMediaView(APIView):
|
|
|
54
54
|
- Integration with existing serializers
|
|
55
55
|
"""
|
|
56
56
|
|
|
57
|
-
#permission_classes = [EnvironmentAwarePermission]
|
|
58
|
-
|
|
57
|
+
# permission_classes = [EnvironmentAwarePermission]
|
|
58
|
+
# permission_classes = [EnvironmentAwarePermission]
|
|
59
59
|
permission_classes = [IsAuthenticated, PolicyPermission]
|
|
60
60
|
|
|
61
61
|
def get(self, request, pk=None):
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from endoreg_db.models import SensitiveMeta
|
|
2
|
-
from endoreg_db.serializers.meta.sensitive_meta_detail import
|
|
2
|
+
from endoreg_db.serializers.meta.sensitive_meta_detail import (
|
|
3
|
+
SensitiveMetaDetailSerializer,
|
|
4
|
+
)
|
|
3
5
|
|
|
4
6
|
from rest_framework import status
|
|
5
7
|
from rest_framework.response import Response
|
|
@@ -17,7 +19,7 @@ class SensitiveMetaListView(APIView):
|
|
|
17
19
|
GET: Returns paginated list of SensitiveMeta entries
|
|
18
20
|
"""
|
|
19
21
|
|
|
20
|
-
permission_classes = DEBUG_PERMISSIONS
|
|
22
|
+
permission_classes = DEBUG_PERMISSIONS
|
|
21
23
|
|
|
22
24
|
def get(self, request):
|
|
23
25
|
"""
|
|
@@ -32,41 +34,37 @@ class SensitiveMetaListView(APIView):
|
|
|
32
34
|
try:
|
|
33
35
|
# Base queryset with related data
|
|
34
36
|
queryset = SensitiveMeta.objects.select_related(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
'state'
|
|
38
|
-
).prefetch_related('examiners')
|
|
37
|
+
"center", "patient_gender", "state"
|
|
38
|
+
).prefetch_related("examiners")
|
|
39
39
|
|
|
40
40
|
# Apply filters
|
|
41
|
-
verified_filter = request.query_params.get(
|
|
41
|
+
verified_filter = request.query_params.get("verified")
|
|
42
42
|
if verified_filter is not None:
|
|
43
|
-
if verified_filter.lower() ==
|
|
43
|
+
if verified_filter.lower() == "true":
|
|
44
44
|
# Filter for entries where both DOB and names are verified
|
|
45
45
|
queryset = queryset.filter(
|
|
46
|
-
state__dob_verified=True,
|
|
47
|
-
state__names_verified=True
|
|
46
|
+
state__dob_verified=True, state__names_verified=True
|
|
48
47
|
)
|
|
49
|
-
elif verified_filter.lower() ==
|
|
48
|
+
elif verified_filter.lower() == "false":
|
|
50
49
|
# Filter for entries that are not fully verified
|
|
51
50
|
queryset = queryset.exclude(
|
|
52
|
-
state__dob_verified=True,
|
|
53
|
-
state__names_verified=True
|
|
51
|
+
state__dob_verified=True, state__names_verified=True
|
|
54
52
|
)
|
|
55
53
|
|
|
56
|
-
center_filter = request.query_params.get(
|
|
54
|
+
center_filter = request.query_params.get("center")
|
|
57
55
|
if center_filter:
|
|
58
56
|
queryset = queryset.filter(center__name__icontains=center_filter)
|
|
59
57
|
|
|
60
58
|
# Pagination
|
|
61
59
|
try:
|
|
62
|
-
limit = int(request.query_params.get(
|
|
60
|
+
limit = int(request.query_params.get("limit", 10))
|
|
63
61
|
if limit < 0:
|
|
64
62
|
limit = 10
|
|
65
63
|
except (ValueError, TypeError):
|
|
66
64
|
limit = 10
|
|
67
|
-
|
|
65
|
+
|
|
68
66
|
try:
|
|
69
|
-
offset = int(request.query_params.get(
|
|
67
|
+
offset = int(request.query_params.get("offset", 0))
|
|
70
68
|
if offset < 0:
|
|
71
69
|
offset = 0
|
|
72
70
|
except (ValueError, TypeError):
|
|
@@ -76,7 +74,7 @@ class SensitiveMetaListView(APIView):
|
|
|
76
74
|
if limit > 100:
|
|
77
75
|
limit = 100
|
|
78
76
|
|
|
79
|
-
paginated_queryset = queryset[offset:offset + limit]
|
|
77
|
+
paginated_queryset = queryset[offset : offset + limit]
|
|
80
78
|
|
|
81
79
|
# Serialize results
|
|
82
80
|
serializer = SensitiveMetaDetailSerializer(paginated_queryset, many=True)
|
|
@@ -86,7 +84,7 @@ class SensitiveMetaListView(APIView):
|
|
|
86
84
|
"total_count": queryset.count(),
|
|
87
85
|
"limit": limit,
|
|
88
86
|
"offset": offset,
|
|
89
|
-
"has_more": (offset + limit) < queryset.count()
|
|
87
|
+
"has_more": (offset + limit) < queryset.count(),
|
|
90
88
|
}
|
|
91
89
|
|
|
92
90
|
return Response(response_data, status=status.HTTP_200_OK)
|
|
@@ -94,11 +92,11 @@ class SensitiveMetaListView(APIView):
|
|
|
94
92
|
except ValueError as e:
|
|
95
93
|
return Response(
|
|
96
94
|
{"error": f"Invalid query parameters: {e}"},
|
|
97
|
-
status=status.HTTP_400_BAD_REQUEST
|
|
95
|
+
status=status.HTTP_400_BAD_REQUEST,
|
|
98
96
|
)
|
|
99
97
|
except Exception as e:
|
|
100
98
|
logger.error(f"Error listing SensitiveMeta entries: {e}")
|
|
101
99
|
return Response(
|
|
102
100
|
{"error": "Internal server error occurred"},
|
|
103
|
-
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
104
|
-
)
|
|
101
|
+
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
102
|
+
)
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
from endoreg_db.models import SensitiveMeta
|
|
2
|
-
from endoreg_db.serializers.meta import
|
|
2
|
+
from endoreg_db.serializers.meta import (
|
|
3
|
+
SensitiveMetaDetailSerializer,
|
|
4
|
+
SensitiveMetaVerificationSerializer,
|
|
5
|
+
)
|
|
3
6
|
|
|
4
7
|
from django.db import transaction
|
|
5
8
|
from rest_framework import status
|
|
@@ -10,6 +13,7 @@ import logging
|
|
|
10
13
|
|
|
11
14
|
logger = logging.getLogger(__name__)
|
|
12
15
|
|
|
16
|
+
|
|
13
17
|
class SensitiveMetaVerificationView(APIView):
|
|
14
18
|
"""
|
|
15
19
|
API endpoint specifically for updating verification state.
|
|
@@ -17,7 +21,9 @@ class SensitiveMetaVerificationView(APIView):
|
|
|
17
21
|
POST: Update verification flags (dob_verified, names_verified) for a SensitiveMeta
|
|
18
22
|
"""
|
|
19
23
|
|
|
20
|
-
permission_classes =
|
|
24
|
+
permission_classes = (
|
|
25
|
+
DEBUG_PERMISSIONS # Changed from IsAuthenticated for development
|
|
26
|
+
)
|
|
21
27
|
|
|
22
28
|
@transaction.atomic
|
|
23
29
|
def post(self, request):
|
|
@@ -36,7 +42,7 @@ class SensitiveMetaVerificationView(APIView):
|
|
|
36
42
|
if serializer.is_valid():
|
|
37
43
|
try:
|
|
38
44
|
state = serializer.save()
|
|
39
|
-
sensitive_meta_id = serializer.validated_data[
|
|
45
|
+
sensitive_meta_id = serializer.validated_data["sensitive_meta_id"]
|
|
40
46
|
|
|
41
47
|
# Get updated SensitiveMeta for response
|
|
42
48
|
sensitive_meta = SensitiveMeta.objects.get(id=sensitive_meta_id)
|
|
@@ -45,7 +51,7 @@ class SensitiveMetaVerificationView(APIView):
|
|
|
45
51
|
response_data = {
|
|
46
52
|
"message": "Verification state updated successfully",
|
|
47
53
|
"sensitive_meta": response_serializer.data,
|
|
48
|
-
"state_verified": state.is_verified
|
|
54
|
+
"state_verified": state.is_verified,
|
|
49
55
|
}
|
|
50
56
|
|
|
51
57
|
logger.info(
|
|
@@ -59,13 +65,10 @@ class SensitiveMetaVerificationView(APIView):
|
|
|
59
65
|
logger.error(f"Error in verification update: {e}")
|
|
60
66
|
return Response(
|
|
61
67
|
{"error": f"Failed to update verification state: {e}"},
|
|
62
|
-
status=status.HTTP_500_INTERNAL_SERVER_ERROR
|
|
68
|
+
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
63
69
|
)
|
|
64
70
|
else:
|
|
65
71
|
return Response(
|
|
66
|
-
{
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
},
|
|
70
|
-
status=status.HTTP_400_BAD_REQUEST
|
|
71
|
-
)
|
|
72
|
+
{"error": "Validation failed", "details": serializer.errors},
|
|
73
|
+
status=status.HTTP_400_BAD_REQUEST,
|
|
74
|
+
)
|
|
@@ -8,18 +8,6 @@ from .stats import (
|
|
|
8
8
|
GeneralStatsView,
|
|
9
9
|
)
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
from .translation import (
|
|
13
|
-
ExaminationTranslationOptions,
|
|
14
|
-
FindingTranslationOptions,
|
|
15
|
-
FindingClassificationTranslationOptions,
|
|
16
|
-
FindingClassificationChoiceTranslationOptions,
|
|
17
|
-
InterventionTranslationOptions,
|
|
18
|
-
TranslatedFieldMixin,
|
|
19
|
-
TranslationMigrationHelper,
|
|
20
|
-
TranslatedFixtureLoader,
|
|
21
|
-
MODELTRANSLATION_SETTINGS
|
|
22
|
-
)
|
|
23
11
|
from .upload_views import (
|
|
24
12
|
UploadFileView,
|
|
25
13
|
UploadStatusView,
|
|
@@ -27,31 +15,15 @@ from .upload_views import (
|
|
|
27
15
|
|
|
28
16
|
__all__ = [
|
|
29
17
|
"CenterViewSet",
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
"csrf_token_view",
|
|
32
19
|
# Gender view
|
|
33
20
|
"GenderViewSet",
|
|
34
|
-
|
|
35
21
|
# Stats views
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
22
|
+
"ExaminationStatsView",
|
|
23
|
+
"VideoSegmentStatsView",
|
|
24
|
+
"SensitiveMetaStatsView",
|
|
39
25
|
"GeneralStatsView",
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
# Translation options
|
|
43
|
-
'ExaminationTranslationOptions',
|
|
44
|
-
'FindingTranslationOptions',
|
|
45
|
-
'FindingClassificationTranslationOptions',
|
|
46
|
-
'FindingClassificationChoiceTranslationOptions',
|
|
47
|
-
'InterventionTranslationOptions',
|
|
48
|
-
'TranslatedFieldMixin',
|
|
49
|
-
'TranslationMigrationHelper',
|
|
50
|
-
'TranslatedFixtureLoader',
|
|
51
|
-
'MODELTRANSLATION_SETTINGS',
|
|
52
|
-
|
|
53
26
|
# Upload views
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
27
|
+
"UploadFileView",
|
|
28
|
+
"UploadStatusView",
|
|
57
29
|
]
|
endoreg_db/views/misc/center.py
CHANGED
|
@@ -8,6 +8,7 @@ from rest_framework import viewsets
|
|
|
8
8
|
|
|
9
9
|
class CenterViewSet(viewsets.ReadOnlyModelViewSet):
|
|
10
10
|
"""API endpoint für Center-Optionen (nur lesend)"""
|
|
11
|
+
|
|
11
12
|
queryset = Center.objects.all()
|
|
12
13
|
serializer_class = CenterSerializer
|
|
13
|
-
permission_classes = DEBUG_PERMISSIONS
|
|
14
|
+
permission_classes = DEBUG_PERMISSIONS
|
endoreg_db/views/misc/csrf.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from django.http import JsonResponse
|
|
2
2
|
from django.middleware.csrf import get_token
|
|
3
3
|
|
|
4
|
+
|
|
4
5
|
# New view to return the CSRF token in JSON format
|
|
5
6
|
def csrf_token_view(request):
|
|
6
7
|
token = get_token(request)
|
|
7
|
-
return JsonResponse({
|
|
8
|
+
return JsonResponse({"csrf_token": token})
|
endoreg_db/views/misc/gender.py
CHANGED
|
@@ -9,6 +9,7 @@ class GenderViewSet(viewsets.ReadOnlyModelViewSet):
|
|
|
9
9
|
API endpoint for Gender options.
|
|
10
10
|
Provides read-only access to gender choices for patient forms.
|
|
11
11
|
"""
|
|
12
|
+
|
|
12
13
|
queryset = Gender.objects.all()
|
|
13
14
|
serializer_class = GenderSerializer
|
|
14
|
-
permission_classes = [IsAuthenticatedOrReadOnly]
|
|
15
|
+
permission_classes = [IsAuthenticatedOrReadOnly]
|