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.

Files changed (402) hide show
  1. endoreg_db/data/__init__.py +22 -8
  2. endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +0 -1
  3. endoreg_db/data/examination/examinations/data.yaml +114 -14
  4. endoreg_db/data/examination/time-type/data.yaml +0 -3
  5. endoreg_db/data/examination_indication/endoscopy.yaml +108 -173
  6. endoreg_db/data/examination_indication_classification/endoscopy.yaml +0 -70
  7. endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +33 -37
  8. endoreg_db/data/finding/00_generic.yaml +35 -0
  9. endoreg_db/data/finding/00_generic_complication.yaml +9 -0
  10. endoreg_db/data/finding/01_gastroscopy_baseline.yaml +88 -0
  11. endoreg_db/data/finding/01_gastroscopy_observation.yaml +113 -0
  12. endoreg_db/data/finding/02_colonoscopy_baseline.yaml +53 -0
  13. endoreg_db/data/finding/02_colonoscopy_hidden.yaml +119 -0
  14. endoreg_db/data/finding/02_colonoscopy_observation.yaml +152 -0
  15. endoreg_db/data/finding_classification/00_generic.yaml +44 -0
  16. endoreg_db/data/finding_classification/00_generic_histology.yaml +28 -0
  17. endoreg_db/data/finding_classification/00_generic_lesion.yaml +52 -0
  18. endoreg_db/data/finding_classification/{colonoscopy_bowel_preparation.yaml → 02_colonoscopy_baseline.yaml} +35 -20
  19. endoreg_db/data/finding_classification/02_colonoscopy_histology.yaml +13 -0
  20. endoreg_db/data/finding_classification/02_colonoscopy_other.yaml +12 -0
  21. endoreg_db/data/finding_classification/02_colonoscopy_polyp.yaml +101 -0
  22. endoreg_db/data/finding_classification_choice/{yes_no_na.yaml → 00_generic.yaml} +5 -1
  23. endoreg_db/data/finding_classification_choice/{examination_setting_generic_types.yaml → 00_generic_baseline.yaml} +10 -2
  24. endoreg_db/data/finding_classification_choice/{complication_generic_types.yaml → 00_generic_complication.yaml} +1 -1
  25. endoreg_db/data/finding_classification_choice/{histology.yaml → 00_generic_histology.yaml} +1 -4
  26. endoreg_db/data/finding_classification_choice/00_generic_lesion.yaml +158 -0
  27. endoreg_db/data/finding_classification_choice/{bowel_preparation.yaml → 02_colonoscopy_bowel_preparation.yaml} +1 -30
  28. endoreg_db/data/{_examples/finding_classification_choice/colonoscopy_not_complete_reason.yaml → finding_classification_choice/02_colonoscopy_generic.yaml} +1 -1
  29. endoreg_db/data/finding_classification_choice/{histology_polyp.yaml → 02_colonoscopy_histology.yaml} +1 -1
  30. endoreg_db/data/{_examples/finding_classification_choice/colonoscopy_location.yaml → finding_classification_choice/02_colonoscopy_location.yaml} +23 -4
  31. endoreg_db/data/finding_classification_choice/02_colonoscopy_other.yaml +34 -0
  32. endoreg_db/data/finding_classification_choice/02_colonoscopy_polyp_advanced_imaging.yaml +76 -0
  33. endoreg_db/data/{_examples/finding_classification_choice/colon_lesion_paris.yaml → finding_classification_choice/02_colonoscopy_polyp_morphology.yaml} +26 -8
  34. endoreg_db/data/finding_classification_choice/02_colonoscopy_size.yaml +27 -0
  35. endoreg_db/data/finding_classification_type/{colonoscopy_basic.yaml → 00_generic.yaml} +18 -13
  36. endoreg_db/data/finding_classification_type/02_colonoscopy.yaml +9 -0
  37. endoreg_db/data/finding_intervention/00_generic_endoscopy.yaml +59 -0
  38. endoreg_db/data/finding_intervention/00_generic_endoscopy_ablation.yaml +44 -0
  39. endoreg_db/data/finding_intervention/00_generic_endoscopy_bleeding.yaml +55 -0
  40. endoreg_db/data/finding_intervention/00_generic_endoscopy_resection.yaml +85 -0
  41. endoreg_db/data/finding_intervention/00_generic_endoscopy_stenosis.yaml +17 -0
  42. endoreg_db/data/finding_intervention/00_generic_endoscopy_stent.yaml +9 -0
  43. endoreg_db/data/finding_intervention/01_gastroscopy.yaml +19 -0
  44. endoreg_db/data/finding_intervention/04_eus.yaml +39 -0
  45. endoreg_db/data/finding_intervention/05_ercp.yaml +3 -0
  46. endoreg_db/data/finding_type/data.yaml +8 -12
  47. endoreg_db/data/requirement/01_patient_data.yaml +93 -0
  48. endoreg_db/data/requirement_operator/new_operators.yaml +36 -0
  49. endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +0 -2
  50. endoreg_db/data/requirement_set/90_coloreg.yaml +20 -8
  51. endoreg_db/exceptions.py +0 -1
  52. endoreg_db/forms/examination_form.py +1 -1
  53. endoreg_db/helpers/data_loader.py +124 -52
  54. endoreg_db/helpers/default_objects.py +116 -81
  55. endoreg_db/import_files/__init__.py +27 -0
  56. endoreg_db/import_files/context/__init__.py +7 -0
  57. endoreg_db/import_files/context/default_sensitive_meta.py +81 -0
  58. endoreg_db/import_files/context/ensure_center.py +17 -0
  59. endoreg_db/import_files/context/file_lock.py +66 -0
  60. endoreg_db/import_files/context/import_context.py +43 -0
  61. endoreg_db/import_files/context/validate_directories.py +56 -0
  62. endoreg_db/import_files/file_storage/__init__.py +15 -0
  63. endoreg_db/import_files/file_storage/create_report_file.py +76 -0
  64. endoreg_db/import_files/file_storage/create_video_file.py +75 -0
  65. endoreg_db/import_files/file_storage/sensitive_meta_storage.py +39 -0
  66. endoreg_db/import_files/file_storage/state_management.py +400 -0
  67. endoreg_db/import_files/file_storage/storage.py +36 -0
  68. endoreg_db/import_files/import_service.md +26 -0
  69. endoreg_db/import_files/processing/__init__.py +11 -0
  70. endoreg_db/import_files/processing/report_processing/report_anonymization.py +94 -0
  71. endoreg_db/import_files/processing/sensitive_meta_adapter.py +51 -0
  72. endoreg_db/import_files/processing/video_processing/video_anonymization.py +107 -0
  73. endoreg_db/import_files/processing/video_processing/video_cleanup_on_error.py +119 -0
  74. endoreg_db/import_files/pseudonymization/fake.py +52 -0
  75. endoreg_db/import_files/pseudonymization/k_anonymity.py +182 -0
  76. endoreg_db/import_files/pseudonymization/k_pseudonymity.py +128 -0
  77. endoreg_db/import_files/report_import_service.py +141 -0
  78. endoreg_db/import_files/video_import_service.py +150 -0
  79. endoreg_db/management/commands/import_report.py +130 -65
  80. endoreg_db/management/commands/import_video_with_classification.py +1 -1
  81. endoreg_db/management/commands/load_ai_model_data.py +5 -5
  82. endoreg_db/management/commands/load_ai_model_label_data.py +9 -7
  83. endoreg_db/management/commands/load_base_db_data.py +5 -134
  84. endoreg_db/management/commands/load_contraindication_data.py +14 -16
  85. endoreg_db/management/commands/load_disease_classification_choices_data.py +15 -18
  86. endoreg_db/management/commands/load_disease_classification_data.py +15 -18
  87. endoreg_db/management/commands/load_disease_data.py +25 -28
  88. endoreg_db/management/commands/load_endoscope_data.py +20 -27
  89. endoreg_db/management/commands/load_event_data.py +14 -16
  90. endoreg_db/management/commands/load_examination_data.py +31 -44
  91. endoreg_db/management/commands/load_examination_indication_data.py +20 -21
  92. endoreg_db/management/commands/load_finding_data.py +52 -80
  93. endoreg_db/management/commands/load_information_source.py +21 -23
  94. endoreg_db/management/commands/load_lab_value_data.py +17 -26
  95. endoreg_db/management/commands/load_medication_data.py +13 -12
  96. endoreg_db/management/commands/load_organ_data.py +15 -19
  97. endoreg_db/management/commands/load_pdf_type_data.py +19 -18
  98. endoreg_db/management/commands/load_profession_data.py +14 -17
  99. endoreg_db/management/commands/load_qualification_data.py +20 -23
  100. endoreg_db/management/commands/load_report_reader_flag_data.py +17 -19
  101. endoreg_db/management/commands/load_requirement_data.py +14 -20
  102. endoreg_db/management/commands/load_risk_data.py +7 -6
  103. endoreg_db/management/commands/load_shift_data.py +20 -23
  104. endoreg_db/management/commands/load_tag_data.py +8 -11
  105. endoreg_db/management/commands/load_unit_data.py +17 -19
  106. endoreg_db/management/commands/start_filewatcher.py +46 -37
  107. endoreg_db/management/commands/validate_video_files.py +1 -5
  108. endoreg_db/migrations/0001_initial.py +1360 -1812
  109. endoreg_db/models/administration/person/patient/patient.py +72 -46
  110. endoreg_db/models/label/__init__.py +2 -2
  111. endoreg_db/models/label/annotation/video_segmentation_annotation.py +18 -26
  112. endoreg_db/models/label/label_video_segment/label_video_segment.py +23 -1
  113. endoreg_db/models/media/pdf/raw_pdf.py +136 -64
  114. endoreg_db/models/media/pdf/report_reader/report_reader_config.py +34 -10
  115. endoreg_db/models/media/processing_history/__init__.py +5 -0
  116. endoreg_db/models/media/processing_history/processing_history.py +96 -0
  117. endoreg_db/models/media/video/create_from_file.py +101 -31
  118. endoreg_db/models/media/video/video_file.py +125 -105
  119. endoreg_db/models/media/video/video_file_io.py +31 -26
  120. endoreg_db/models/medical/contraindication/README.md +1 -0
  121. endoreg_db/models/medical/examination/examination.py +28 -8
  122. endoreg_db/models/medical/examination/examination_indication.py +13 -79
  123. endoreg_db/models/medical/examination/examination_time.py +8 -3
  124. endoreg_db/models/medical/finding/finding.py +5 -12
  125. endoreg_db/models/medical/finding/finding_classification.py +18 -37
  126. endoreg_db/models/medical/finding/finding_intervention.py +7 -9
  127. endoreg_db/models/medical/hardware/endoscope.py +6 -0
  128. endoreg_db/models/medical/patient/medication_examples.py +5 -1
  129. endoreg_db/models/medical/patient/patient_finding.py +1 -1
  130. endoreg_db/models/metadata/pdf_meta.py +22 -10
  131. endoreg_db/models/metadata/sensitive_meta.py +3 -0
  132. endoreg_db/models/metadata/sensitive_meta_logic.py +200 -124
  133. endoreg_db/models/other/information_source.py +27 -6
  134. endoreg_db/models/report/__init__.py +0 -0
  135. endoreg_db/models/report/images.py +0 -0
  136. endoreg_db/models/report/report.py +6 -0
  137. endoreg_db/models/requirement/requirement.py +59 -399
  138. endoreg_db/models/requirement/requirement_operator.py +86 -98
  139. endoreg_db/models/state/audit_ledger.py +4 -5
  140. endoreg_db/models/state/raw_pdf.py +69 -30
  141. endoreg_db/models/state/video.py +64 -49
  142. endoreg_db/models/upload_job.py +33 -9
  143. endoreg_db/models/utils.py +27 -23
  144. endoreg_db/queries/__init__.py +3 -1
  145. endoreg_db/schemas/examination_evaluation.py +1 -1
  146. endoreg_db/serializers/__init__.py +2 -8
  147. endoreg_db/serializers/label_video_segment/label_video_segment.py +2 -29
  148. endoreg_db/serializers/meta/__init__.py +1 -6
  149. endoreg_db/serializers/misc/sensitive_patient_data.py +50 -26
  150. endoreg_db/serializers/patient_examination/patient_examination.py +3 -3
  151. endoreg_db/serializers/pdf/anony_text_validation.py +39 -23
  152. endoreg_db/serializers/video/video_file_list.py +65 -34
  153. endoreg_db/services/__old/pdf_import.py +1487 -0
  154. endoreg_db/services/__old/video_import.py +1306 -0
  155. endoreg_db/services/anonymization.py +63 -26
  156. endoreg_db/services/lookup_service.py +28 -28
  157. endoreg_db/services/lookup_store.py +2 -2
  158. endoreg_db/services/pdf_import.py +0 -1480
  159. endoreg_db/services/report_import.py +10 -0
  160. endoreg_db/services/video_import.py +6 -1165
  161. endoreg_db/tasks/upload_tasks.py +79 -70
  162. endoreg_db/tasks/video_ingest.py +8 -4
  163. endoreg_db/urls/__init__.py +0 -14
  164. endoreg_db/urls/ai.py +32 -0
  165. endoreg_db/urls/media.py +21 -24
  166. endoreg_db/utils/dataloader.py +87 -57
  167. endoreg_db/utils/paths.py +110 -46
  168. endoreg_db/utils/pipelines/Readme.md +1 -1
  169. endoreg_db/utils/requirement_operator_logic/new_operator_logic.py +97 -0
  170. endoreg_db/views/__init__.py +85 -173
  171. endoreg_db/views/ai/__init__.py +8 -0
  172. endoreg_db/views/ai/label.py +155 -0
  173. endoreg_db/views/anonymization/media_management.py +8 -7
  174. endoreg_db/views/anonymization/overview.py +97 -68
  175. endoreg_db/views/anonymization/validate.py +25 -21
  176. endoreg_db/views/media/__init__.py +5 -20
  177. endoreg_db/views/media/pdf_media.py +109 -65
  178. endoreg_db/views/media/sensitive_metadata.py +163 -148
  179. endoreg_db/views/meta/__init__.py +0 -8
  180. endoreg_db/views/misc/__init__.py +1 -7
  181. endoreg_db/views/misc/upload_views.py +94 -93
  182. endoreg_db/views/report/__init__.py +7 -0
  183. endoreg_db/views/{pdf → report}/reimport.py +45 -24
  184. endoreg_db/views/{pdf/pdf_stream.py → report/report_stream.py} +40 -32
  185. endoreg_db/views/requirement/lookup_store.py +22 -90
  186. endoreg_db/views/video/__init__.py +23 -22
  187. endoreg_db/views/video/correction.py +201 -172
  188. endoreg_db/views/video/reimport.py +1 -1
  189. endoreg_db/views/{media/video_segments.py → video/segments_crud.py} +75 -37
  190. endoreg_db/views/video/{video_meta.py → video_meta_stats.py} +2 -2
  191. endoreg_db/views/video/video_stream.py +7 -8
  192. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/METADATA +2 -2
  193. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/RECORD +217 -335
  194. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/WHEEL +1 -1
  195. endoreg_db/data/_examples/disease.yaml +0 -55
  196. endoreg_db/data/_examples/disease_classification.yaml +0 -13
  197. endoreg_db/data/_examples/disease_classification_choice.yaml +0 -62
  198. endoreg_db/data/_examples/event.yaml +0 -64
  199. endoreg_db/data/_examples/examination.yaml +0 -72
  200. endoreg_db/data/_examples/finding/anatomy_colon.yaml +0 -128
  201. endoreg_db/data/_examples/finding/colonoscopy.yaml +0 -40
  202. endoreg_db/data/_examples/finding/colonoscopy_bowel_prep.yaml +0 -56
  203. endoreg_db/data/_examples/finding/complication.yaml +0 -16
  204. endoreg_db/data/_examples/finding/data.yaml +0 -105
  205. endoreg_db/data/_examples/finding/examination_setting.yaml +0 -16
  206. endoreg_db/data/_examples/finding/medication_related.yaml +0 -18
  207. endoreg_db/data/_examples/finding/outcome.yaml +0 -12
  208. endoreg_db/data/_examples/finding_classification/colonoscopy_bowel_preparation.yaml +0 -68
  209. endoreg_db/data/_examples/finding_classification/colonoscopy_jnet.yaml +0 -22
  210. endoreg_db/data/_examples/finding_classification/colonoscopy_kudo.yaml +0 -25
  211. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
  212. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
  213. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_size.yaml +0 -68
  214. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
  215. endoreg_db/data/_examples/finding_classification/colonoscopy_location.yaml +0 -80
  216. endoreg_db/data/_examples/finding_classification/colonoscopy_lst.yaml +0 -21
  217. endoreg_db/data/_examples/finding_classification/colonoscopy_nice.yaml +0 -20
  218. endoreg_db/data/_examples/finding_classification/colonoscopy_paris.yaml +0 -26
  219. endoreg_db/data/_examples/finding_classification/colonoscopy_sano.yaml +0 -22
  220. endoreg_db/data/_examples/finding_classification/colonoscopy_summary.yaml +0 -53
  221. endoreg_db/data/_examples/finding_classification/complication_generic.yaml +0 -25
  222. endoreg_db/data/_examples/finding_classification/examination_setting_generic.yaml +0 -40
  223. endoreg_db/data/_examples/finding_classification/histology_colo.yaml +0 -51
  224. endoreg_db/data/_examples/finding_classification/intervention_required.yaml +0 -26
  225. endoreg_db/data/_examples/finding_classification/medication_related.yaml +0 -23
  226. endoreg_db/data/_examples/finding_classification/visualized.yaml +0 -33
  227. endoreg_db/data/_examples/finding_classification_choice/bowel_preparation.yaml +0 -78
  228. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
  229. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
  230. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
  231. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_lst.yaml +0 -15
  232. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_nice.yaml +0 -17
  233. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
  234. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_sano.yaml +0 -14
  235. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
  236. endoreg_db/data/_examples/finding_classification_choice/colonoscopy_size.yaml +0 -82
  237. endoreg_db/data/_examples/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
  238. endoreg_db/data/_examples/finding_classification_choice/complication_generic_types.yaml +0 -15
  239. endoreg_db/data/_examples/finding_classification_choice/examination_setting_generic_types.yaml +0 -15
  240. endoreg_db/data/_examples/finding_classification_choice/histology.yaml +0 -24
  241. endoreg_db/data/_examples/finding_classification_choice/histology_polyp.yaml +0 -20
  242. endoreg_db/data/_examples/finding_classification_choice/outcome.yaml +0 -19
  243. endoreg_db/data/_examples/finding_classification_choice/yes_no_na.yaml +0 -11
  244. endoreg_db/data/_examples/finding_classification_type/colonoscopy_basic.yaml +0 -48
  245. endoreg_db/data/_examples/finding_intervention/endoscopy.yaml +0 -43
  246. endoreg_db/data/_examples/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
  247. endoreg_db/data/_examples/finding_intervention/endoscopy_egd.yaml +0 -128
  248. endoreg_db/data/_examples/finding_intervention/endoscopy_ercp.yaml +0 -32
  249. endoreg_db/data/_examples/finding_intervention/endoscopy_eus_lower.yaml +0 -9
  250. endoreg_db/data/_examples/finding_intervention/endoscopy_eus_upper.yaml +0 -36
  251. endoreg_db/data/_examples/finding_intervention_type/endoscopy.yaml +0 -15
  252. endoreg_db/data/_examples/finding_type/data.yaml +0 -43
  253. endoreg_db/data/_examples/requirement/age.yaml +0 -26
  254. endoreg_db/data/_examples/requirement/gender.yaml +0 -25
  255. endoreg_db/data/_examples/requirement_set/01_endoscopy_generic.yaml +0 -48
  256. endoreg_db/data/_examples/requirement_set/colonoscopy_austria_screening.yaml +0 -57
  257. endoreg_db/data/_examples/requirement_set/endoscopy_bleeding_risk.yaml +0 -52
  258. endoreg_db/data/_examples/yaml_examples.xlsx +0 -0
  259. endoreg_db/data/finding/anatomy_colon.yaml +0 -128
  260. endoreg_db/data/finding/colonoscopy.yaml +0 -40
  261. endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +0 -56
  262. endoreg_db/data/finding/complication.yaml +0 -16
  263. endoreg_db/data/finding/data.yaml +0 -105
  264. endoreg_db/data/finding/examination_setting.yaml +0 -16
  265. endoreg_db/data/finding/medication_related.yaml +0 -18
  266. endoreg_db/data/finding/outcome.yaml +0 -12
  267. endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +0 -22
  268. endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +0 -25
  269. endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
  270. endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
  271. endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +0 -38
  272. endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
  273. endoreg_db/data/finding_classification/colonoscopy_location.yaml +0 -49
  274. endoreg_db/data/finding_classification/colonoscopy_lst.yaml +0 -21
  275. endoreg_db/data/finding_classification/colonoscopy_nice.yaml +0 -20
  276. endoreg_db/data/finding_classification/colonoscopy_paris.yaml +0 -26
  277. endoreg_db/data/finding_classification/colonoscopy_sano.yaml +0 -22
  278. endoreg_db/data/finding_classification/colonoscopy_summary.yaml +0 -53
  279. endoreg_db/data/finding_classification/complication_generic.yaml +0 -25
  280. endoreg_db/data/finding_classification/examination_setting_generic.yaml +0 -40
  281. endoreg_db/data/finding_classification/histology_colo.yaml +0 -43
  282. endoreg_db/data/finding_classification/intervention_required.yaml +0 -26
  283. endoreg_db/data/finding_classification/medication_related.yaml +0 -23
  284. endoreg_db/data/finding_classification/visualized.yaml +0 -33
  285. endoreg_db/data/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
  286. endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
  287. endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
  288. endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +0 -15
  289. endoreg_db/data/finding_classification_choice/colon_lesion_nice.yaml +0 -17
  290. endoreg_db/data/finding_classification_choice/colon_lesion_paris.yaml +0 -57
  291. endoreg_db/data/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
  292. endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +0 -14
  293. endoreg_db/data/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
  294. endoreg_db/data/finding_classification_choice/colonoscopy_location.yaml +0 -229
  295. endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +0 -19
  296. endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +0 -82
  297. endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
  298. endoreg_db/data/finding_classification_choice/outcome.yaml +0 -19
  299. endoreg_db/data/finding_intervention/endoscopy.yaml +0 -43
  300. endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
  301. endoreg_db/data/finding_intervention/endoscopy_egd.yaml +0 -128
  302. endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +0 -32
  303. endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +0 -9
  304. endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +0 -36
  305. endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +0 -79
  306. endoreg_db/data/requirement/age.yaml +0 -26
  307. endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +0 -45
  308. endoreg_db/data/requirement/disease_cardiovascular.yaml +0 -79
  309. endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +0 -41
  310. endoreg_db/data/requirement/disease_hepatology.yaml +0 -12
  311. endoreg_db/data/requirement/disease_misc.yaml +0 -12
  312. endoreg_db/data/requirement/disease_renal.yaml +0 -96
  313. endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +0 -59
  314. endoreg_db/data/requirement/event_cardiology.yaml +0 -251
  315. endoreg_db/data/requirement/event_requirements.yaml +0 -145
  316. endoreg_db/data/requirement/finding_colon_polyp.yaml +0 -50
  317. endoreg_db/data/requirement/gender.yaml +0 -25
  318. endoreg_db/data/requirement/lab_value.yaml +0 -441
  319. endoreg_db/data/requirement/medication.yaml +0 -93
  320. endoreg_db/data/requirement_operator/age.yaml +0 -13
  321. endoreg_db/data/requirement_operator/lab_operators.yaml +0 -129
  322. endoreg_db/data/requirement_operator/model_operators.yaml +0 -96
  323. endoreg_db/management/commands/init_default_ai_model.py +0 -112
  324. endoreg_db/management/commands/reset_celery_schedule.py +0 -9
  325. endoreg_db/management/commands/validate_video.py +0 -204
  326. endoreg_db/migrations/0002_requirementset_depends_on.py +0 -18
  327. endoreg_db/migrations/_old/0001_initial.py +0 -1857
  328. endoreg_db/migrations/_old/0002_add_video_correction_models.py +0 -52
  329. endoreg_db/migrations/_old/0003_add_center_display_name.py +0 -30
  330. endoreg_db/migrations/_old/0004_employee_city_employee_post_code_employee_street_and_more.py +0 -68
  331. endoreg_db/migrations/_old/0004_remove_casetemplate_rules_and_more.py +0 -77
  332. endoreg_db/migrations/_old/0005_merge_20251111_1003.py +0 -14
  333. endoreg_db/migrations/_old/0006_sensitivemeta_anonymized_text_and_more.py +0 -68
  334. endoreg_db/migrations/_old/0007_remove_rule_attribute_dtype_remove_rule_rule_type_and_more.py +0 -89
  335. endoreg_db/migrations/_old/0008_remove_event_event_classification_and_more.py +0 -27
  336. endoreg_db/migrations/_old/0009_alter_modelmeta_options_and_more.py +0 -21
  337. endoreg_db/renames.yml +0 -8
  338. endoreg_db/serializers/_old/raw_pdf_meta_validation.py +0 -223
  339. endoreg_db/serializers/_old/raw_video_meta_validation.py +0 -179
  340. endoreg_db/serializers/_old/video.py +0 -71
  341. endoreg_db/serializers/meta/pdf_file_meta_extraction.py +0 -115
  342. endoreg_db/serializers/meta/report_meta.py +0 -53
  343. endoreg_db/serializers/report/__init__.py +0 -9
  344. endoreg_db/serializers/report/mixins.py +0 -45
  345. endoreg_db/serializers/report/report.py +0 -105
  346. endoreg_db/serializers/report/report_list.py +0 -22
  347. endoreg_db/serializers/report/secure_file_url.py +0 -26
  348. endoreg_db/services/requirements_object.py +0 -147
  349. endoreg_db/services/storage_aware_video_processor.py +0 -370
  350. endoreg_db/urls/files.py +0 -6
  351. endoreg_db/urls/label_video_segment_validate.py +0 -33
  352. endoreg_db/urls/label_video_segments.py +0 -46
  353. endoreg_db/views/label/__init__.py +0 -5
  354. endoreg_db/views/label/label.py +0 -15
  355. endoreg_db/views/label_video_segment/__init__.py +0 -16
  356. endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +0 -44
  357. endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +0 -50
  358. endoreg_db/views/label_video_segment/label_video_segment.py +0 -77
  359. endoreg_db/views/label_video_segment/label_video_segment_by_label.py +0 -174
  360. endoreg_db/views/label_video_segment/label_video_segment_detail.py +0 -73
  361. endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +0 -46
  362. endoreg_db/views/label_video_segment/validate.py +0 -226
  363. endoreg_db/views/media/segments.py +0 -71
  364. endoreg_db/views/meta/available_files_list.py +0 -146
  365. endoreg_db/views/meta/report_meta.py +0 -53
  366. endoreg_db/views/meta/sensitive_meta_detail.py +0 -85
  367. endoreg_db/views/misc/secure_file_serving_view.py +0 -80
  368. endoreg_db/views/misc/secure_file_url_view.py +0 -84
  369. endoreg_db/views/misc/secure_url_validate.py +0 -79
  370. endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +0 -164
  371. endoreg_db/views/patient_finding_location/__init__.py +0 -5
  372. endoreg_db/views/patient_finding_location/pfl_create.py +0 -70
  373. endoreg_db/views/patient_finding_morphology/__init__.py +0 -5
  374. endoreg_db/views/patient_finding_morphology/pfm_create.py +0 -70
  375. endoreg_db/views/pdf/__init__.py +0 -8
  376. endoreg_db/views/video/segmentation.py +0 -274
  377. endoreg_db/views/video/task_status.py +0 -49
  378. endoreg_db/views/video/timeline.py +0 -46
  379. endoreg_db/views/video/video_analyze.py +0 -52
  380. /endoreg_db/data/requirement/{colon_polyp_intervention.yaml → old/colon_polyp_intervention.yaml} +0 -0
  381. /endoreg_db/data/{_examples/requirement → requirement/old}/colonoscopy_baseline_austria.yaml +0 -0
  382. /endoreg_db/data/requirement/{coloreg_colon_polyp.yaml → old/coloreg_colon_polyp.yaml} +0 -0
  383. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_cardiovascular.yaml +0 -0
  384. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_classification_choice_cardiovascular.yaml +0 -0
  385. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_hepatology.yaml +0 -0
  386. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_misc.yaml +0 -0
  387. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_renal.yaml +0 -0
  388. /endoreg_db/data/{_examples/requirement → requirement/old}/endoscopy_bleeding_risk.yaml +0 -0
  389. /endoreg_db/data/{_examples/requirement → requirement/old}/event_cardiology.yaml +0 -0
  390. /endoreg_db/data/{_examples/requirement → requirement/old}/event_requirements.yaml +0 -0
  391. /endoreg_db/data/{_examples/requirement → requirement/old}/finding_colon_polyp.yaml +0 -0
  392. /endoreg_db/{migrations/__init__.py → data/requirement/old/gender.yaml} +0 -0
  393. /endoreg_db/data/{_examples/requirement → requirement/old}/lab_value.yaml +0 -0
  394. /endoreg_db/data/{_examples/requirement → requirement/old}/medication.yaml +0 -0
  395. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/age.yaml +0 -0
  396. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/lab_operators.yaml +0 -0
  397. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/model_operators.yaml +0 -0
  398. /endoreg_db/{urls/sensitive_meta.py → import_files/pseudonymization/__init__.py} +0 -0
  399. /endoreg_db/{views/pdf/pdf_stream_views.py → import_files/pseudonymization/pseudonymize.py} +0 -0
  400. /endoreg_db/utils/requirement_operator_logic/{lab_value_operators.py → _old/lab_value_operators.py} +0 -0
  401. /endoreg_db/utils/requirement_operator_logic/{model_evaluators.py → _old/model_evaluators.py} +0 -0
  402. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.8.9.dist-info}/licenses/LICENSE +0 -0
@@ -1,21 +1,28 @@
1
1
  # endoreg_db/api/views/anonymization_overview.py
2
2
 
3
+ import logging
4
+
5
+ from django.http import JsonResponse
3
6
  from rest_framework import status
4
7
  from rest_framework.decorators import api_view, permission_classes
5
- from rest_framework.response import Response
6
- from endoreg_db.utils.permissions import DEBUG_PERMISSIONS
7
- from endoreg_db.services.anonymization import AnonymizationService
8
- from endoreg_db.services.polling_coordinator import PollingCoordinator, ProcessingLockContext
9
8
  from rest_framework.generics import ListAPIView
10
9
  from rest_framework.pagination import PageNumberPagination
11
- from endoreg_db.models import VideoFile, RawPdfFile
10
+ from rest_framework.response import Response
11
+
12
+ from endoreg_db.authz.permissions import PolicyPermission # import RBAC
13
+ from endoreg_db.models import RawPdfFile, VideoFile
14
+ from endoreg_db.services.anonymization import AnonymizationService
15
+ from endoreg_db.services.polling_coordinator import (
16
+ PollingCoordinator,
17
+ ProcessingLockContext,
18
+ )
19
+ from endoreg_db.utils.permissions import DEBUG_PERMISSIONS
20
+
12
21
  from ...serializers import FileOverviewSerializer, VoPPatientDataSerializer
13
- from django.http import JsonResponse
14
22
 
15
- from endoreg_db.authz.permissions import PolicyPermission # import RBAC
16
- import logging
17
23
  logger = logging.getLogger(__name__)
18
- PERMS = DEBUG_PERMISSIONS # shorten
24
+ PERMS = DEBUG_PERMISSIONS # shorten
25
+
19
26
 
20
27
  # ---------- overview ----------------------------------------------------
21
28
  class NoPagination(PageNumberPagination):
@@ -26,10 +33,11 @@ class AnonymizationOverviewView(ListAPIView):
26
33
  """
27
34
  GET /api/anonymization/items/overview/
28
35
  --------------------------------------
29
- Returns a flat list (Video + PDF) ordered by newest upload first.
36
+ Returns a flat list (Video + report) ordered by newest upload first.
30
37
  """
38
+
31
39
  serializer_class = FileOverviewSerializer
32
- #permission_classes = DEBUG_PERMISSIONS
40
+ # permission_classes = DEBUG_PERMISSIONS
33
41
  permission_classes = [PolicyPermission]
34
42
  pagination_class = NoPagination
35
43
 
@@ -39,23 +47,25 @@ class AnonymizationOverviewView(ListAPIView):
39
47
  """
40
48
  # 1) VideoFile queryset - only fields that exist on VideoFile
41
49
  qs_video = (
42
- VideoFile.objects
43
- .select_related("state", "sensitive_meta")
50
+ VideoFile.objects.select_related("state", "sensitive_meta")
44
51
  .prefetch_related("label_video_segments__state")
45
- .only("id", "original_file_name", "raw_file", "uploaded_at", "state", "sensitive_meta")
52
+ .only(
53
+ "id",
54
+ "original_file_name",
55
+ "raw_file",
56
+ "uploaded_at",
57
+ "state",
58
+ "sensitive_meta",
59
+ )
46
60
  )
47
61
  # 2) RawPdfFile queryset - only fields that exist on RawPdfFile
48
- qs_pdf = (
49
- RawPdfFile.objects
50
- .select_related("sensitive_meta")
51
- .only("id", "file", "date_created",
52
- "text", "anonymized_text",
53
- "sensitive_meta")
54
-
62
+ qs_pdf = RawPdfFile.objects.select_related("sensitive_meta").only(
63
+ "id", "file", "date_created", "text", "anonymized_text", "sensitive_meta"
55
64
  )
56
65
 
57
66
  return list(qs_video) + list(qs_pdf)
58
-
67
+
68
+
59
69
  # ---------- status with polling protection ------------------------------
60
70
  @api_view(["GET"])
61
71
  @permission_classes(PERMS)
@@ -72,12 +82,14 @@ def anonymization_status(request, file_id: int):
72
82
 
73
83
  # Wende Rate-Limiting auf den echten Typ an (nicht auf einen evtl. falschen request-Parameter)
74
84
  if not PollingCoordinator.can_check_status(file_id, file_type):
75
- remaining_seconds = PollingCoordinator.get_remaining_cooldown_seconds(file_id, file_type)
85
+ remaining_seconds = PollingCoordinator.get_remaining_cooldown_seconds(
86
+ file_id, file_type
87
+ )
76
88
  response_data = {
77
89
  "detail": "Status check rate limited. Please wait before checking again.",
78
90
  "file_id": file_id,
79
91
  "cooldown_active": True,
80
- "retry_after": remaining_seconds
92
+ "retry_after": remaining_seconds,
81
93
  }
82
94
  response = Response(response_data, status=status.HTTP_429_TOO_MANY_REQUESTS)
83
95
  response["Retry-After"] = str(remaining_seconds)
@@ -86,15 +98,22 @@ def anonymization_status(request, file_id: int):
86
98
  status_val = info.get("anonymizationStatus") or info.get("status") or "not_started"
87
99
 
88
100
  # processing_locked als Ableitung des Status interpretieren
89
- processing_statuses = {"processing_anonymization", "extracting_frames", "predicting_segments"}
101
+ processing_statuses = {
102
+ "processing_anonymization",
103
+ "extracting_frames",
104
+ "predicting_segments",
105
+ }
90
106
  processing_locked_derived = status_val in processing_statuses
91
107
 
92
- return Response({
93
- "file_id": file_id,
94
- "file_type": file_type,
95
- "anonymizationStatus": status_val,
96
- "processing_locked": processing_locked_derived,
97
- })
108
+ return Response(
109
+ {
110
+ "file_id": file_id,
111
+ "file_type": file_type,
112
+ "anonymizationStatus": status_val,
113
+ "processing_locked": processing_locked_derived,
114
+ }
115
+ )
116
+
98
117
 
99
118
  # ---------- start with processing lock ----------------------------------
100
119
  @api_view(["POST"])
@@ -107,9 +126,9 @@ def start_anonymization(request, file_id: int):
107
126
  info = AnonymizationService.get_status(file_id)
108
127
  if not info:
109
128
  return Response({"detail": "File not found"}, status=status.HTTP_404_NOT_FOUND)
110
-
129
+
111
130
  file_type = info["mediaType"]
112
-
131
+
113
132
  # Use processing lock context to prevent duplicate processing
114
133
  with ProcessingLockContext(file_id, file_type) as lock:
115
134
  if not lock.acquired:
@@ -118,27 +137,32 @@ def start_anonymization(request, file_id: int):
118
137
  "detail": "File is already being processed by another request",
119
138
  "file_id": file_id,
120
139
  "file_type": file_type,
121
- "processing_locked": True
122
- },
123
- status=status.HTTP_409_CONFLICT
140
+ "processing_locked": True,
141
+ },
142
+ status=status.HTTP_409_CONFLICT,
124
143
  )
125
-
144
+
126
145
  # Proceed with starting anonymization
127
146
  service = AnonymizationService()
128
147
  kind = service.start(file_id)
129
148
  if not kind:
130
- return Response({"detail": "Failed to start anonymization"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
131
-
132
- return Response({
133
- "detail": f"Anonymization started for {kind} file",
134
- "file_id": file_id,
135
- "file_type": kind,
136
- "processing_locked": True
137
- })
149
+ return Response(
150
+ {"detail": "Failed to start anonymization"},
151
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR,
152
+ )
153
+
154
+ return Response(
155
+ {
156
+ "detail": f"Anonymization started for {kind} file",
157
+ "file_id": file_id,
158
+ "file_type": kind,
159
+ "processing_locked": True,
160
+ }
161
+ )
138
162
 
139
163
 
140
164
  # ---------- current with coordination ------------------------------------
141
- @api_view(['GET', 'POST', 'PUT'])
165
+ @api_view(["GET", "POST", "PUT"])
142
166
  @permission_classes(DEBUG_PERMISSIONS)
143
167
  def anonymization_current(request, file_id):
144
168
  """
@@ -146,15 +170,15 @@ def anonymization_current(request, file_id):
146
170
  """
147
171
  # Try to find the file in VideoFile first
148
172
  try:
149
- video_file = VideoFile.objects.select_related('sensitive_meta').get(id=file_id)
150
- serializer = VoPPatientDataSerializer(video_file, context={'request': request})
173
+ video_file = VideoFile.objects.select_related("sensitive_meta").get(id=file_id)
174
+ serializer = VoPPatientDataSerializer(video_file, context={"request": request})
151
175
  return Response(serializer.data)
152
176
  except VideoFile.DoesNotExist:
153
177
  pass
154
178
  # Try to find the file in RawPdfFile
155
179
  try:
156
- pdf_file = RawPdfFile.objects.select_related('sensitive_meta').get(id=file_id)
157
- serializer = VoPPatientDataSerializer(pdf_file, context={'request': request})
180
+ pdf_file = RawPdfFile.objects.select_related("sensitive_meta").get(id=file_id)
181
+ serializer = VoPPatientDataSerializer(pdf_file, context={"request": request})
158
182
  return Response(serializer.data)
159
183
 
160
184
  except RawPdfFile.DoesNotExist:
@@ -162,12 +186,13 @@ def anonymization_current(request, file_id):
162
186
 
163
187
  except (ValueError, TypeError, AttributeError) as e:
164
188
  logger.error(f"Error in set_current_for_validation: {e}")
165
- return JsonResponse({'status': 'error', 'message': str(e)}, status=500)
189
+ return JsonResponse({"status": "error", "message": str(e)}, status=500)
190
+
191
+ return JsonResponse({"status": "error", "message": "File not found"}, status=404)
166
192
 
167
- return JsonResponse({'status': 'error', 'message': 'File not found'}, status=404)
168
193
 
169
194
  # ---------- polling coordinator info ------------------------------------
170
- @api_view(['GET'])
195
+ @api_view(["GET"])
171
196
  @permission_classes(DEBUG_PERMISSIONS)
172
197
  def polling_coordinator_info(request):
173
198
  """
@@ -180,12 +205,13 @@ def polling_coordinator_info(request):
180
205
  except Exception as e:
181
206
  logger.error(f"Error getting polling coordinator info: {e}")
182
207
  return Response(
183
- {"error": "Failed to get coordinator info"},
184
- status=status.HTTP_500_INTERNAL_SERVER_ERROR
208
+ {"error": "Failed to get coordinator info"},
209
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR,
185
210
  )
186
211
 
212
+
187
213
  # ---------- emergency lock management -----------------------------------
188
- @api_view(['DELETE'])
214
+ @api_view(["DELETE"])
189
215
  @permission_classes(DEBUG_PERMISSIONS)
190
216
  def clear_processing_locks(request):
191
217
  """
@@ -193,22 +219,25 @@ def clear_processing_locks(request):
193
219
  Emergency endpoint to clear all processing locks
194
220
  """
195
221
  try:
196
- file_type = request.query_params.get('type', None)
222
+ file_type = request.query_params.get("type", None)
197
223
  cleared_count = PollingCoordinator.clear_all_locks(file_type)
198
-
199
- return Response({
200
- "detail": "Processing locks cleared",
201
- "cleared_count": cleared_count,
202
- "file_type_filter": file_type
203
- })
224
+
225
+ return Response(
226
+ {
227
+ "detail": "Processing locks cleared",
228
+ "cleared_count": cleared_count,
229
+ "file_type_filter": file_type,
230
+ }
231
+ )
204
232
  except Exception as e:
205
233
  logger.error(f"Error clearing processing locks: {e}")
206
234
  return Response(
207
- {"error": "Failed to clear locks"},
208
- status=status.HTTP_500_INTERNAL_SERVER_ERROR
235
+ {"error": "Failed to clear locks"},
236
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR,
209
237
  )
210
-
211
- @api_view(['GET'])
238
+
239
+
240
+ @api_view(["GET"])
212
241
  @permission_classes(DEBUG_PERMISSIONS)
213
242
  def has_raw_video_file(request, file_id):
214
243
  """
@@ -216,4 +245,4 @@ def has_raw_video_file(request, file_id):
216
245
  Check if a raw video file exists for the given file ID
217
246
  """
218
247
  exists = VideoFile.objects.filter(id=file_id, raw_file__isnull=False).exists()
219
- return Response({"file_id": file_id, "has_raw_file": exists})
248
+ return Response({"file_id": file_id, "has_raw_file": exists})
@@ -16,11 +16,11 @@ logger = logging.getLogger(__name__)
16
16
  class AnonymizationValidateView(APIView):
17
17
  """
18
18
  POST /api/anonymization/<int:file_id>/validate/
19
-
19
+
20
20
  Validiert und aktualisiert SensitiveMeta-Felder für Videos oder PDFs.
21
-
21
+
22
22
  DATA HERE IS COMING FROM THE ANONYIZATION VALIDATION COMPONENT
23
-
23
+
24
24
  Body (Datumsfelder bevorzugt in deutschem Format DD.MM.YYYY; ISO YYYY-MM-DD ebenfalls akzeptiert):
25
25
  {
26
26
  "patient_first_name": "Max",
@@ -32,12 +32,12 @@ class AnonymizationValidateView(APIView):
32
32
  "casenumber": "12345",
33
33
  "anonymized_text": "...", // nur für PDFs; Videos ignorieren
34
34
  "is_verified": true // optional; default true
35
- "file_type": "video" // optional; "video" oder "pdf"; wenn nicht angegeben, wird zuerst Video, dann PDF versucht
35
+ "file_type": "video" // optional; "video" oder "pdf"; wenn nicht angegeben, wird zuerst Video, dann report versucht
36
36
  "center_name": editedPatient.value.centerName || '',
37
37
  "external_id": editedPatient.value.externalId || '',
38
- "external_id_origin":editedPatient.value.externalIdOrigin || '',
38
+ "external_id_origin":editedPatient.value.externalIdOrigin || '',
39
39
  }
40
-
40
+
41
41
  Rückwärtskompatibilität: ISO-Format (YYYY-MM-DD) wird ebenfalls akzeptiert.
42
42
  """
43
43
 
@@ -56,10 +56,12 @@ class AnonymizationValidateView(APIView):
56
56
  file_type = payload.get("file_type")
57
57
 
58
58
  with transaction.atomic():
59
- # Try Video first (unless explicitly requesting PDF)
59
+ # Try Video first (unless explicitly requesting report)
60
60
  if file_type in (None, "video"):
61
61
  video = (
62
- VideoFile.objects.select_related("center", "sensitive_meta", "state")
62
+ VideoFile.objects.select_related(
63
+ "center", "sensitive_meta", "state"
64
+ )
63
65
  .filter(pk=file_id)
64
66
  .first()
65
67
  )
@@ -96,14 +98,13 @@ class AnonymizationValidateView(APIView):
96
98
  video.sensitive_meta.create_anonymized_record()
97
99
  else:
98
100
  return Response(
99
- {
100
- "message": "Video not validated, failed to create State."
101
- },
101
+ {"message": "Video not validated, failed to create State."},
102
102
  status=status.HTTP_500_INTERNAL_SERVER_ERROR,
103
103
  )
104
104
 
105
105
  if video.state is not None:
106
- video.state.anonymized = True
106
+ video.state.state.anonymization_status.mark_anonymized()
107
+ video.state.save(update_fields=["anonymized"])
107
108
  video.sensitive_meta.state.save()
108
109
 
109
110
  return Response(
@@ -117,10 +118,12 @@ class AnonymizationValidateView(APIView):
117
118
  status=status.HTTP_404_NOT_FOUND,
118
119
  )
119
120
 
120
- # Then PDF (unless explicitly requesting Video)
121
+ # Then report (unless explicitly requesting Video)
121
122
  if file_type in (None, "pdf"):
122
123
  pdf = (
123
- RawPdfFile.objects.select_related("center", "sensitive_meta", "state")
124
+ RawPdfFile.objects.select_related(
125
+ "center", "sensitive_meta", "state"
126
+ )
124
127
  .filter(pk=file_id)
125
128
  .first()
126
129
  )
@@ -129,10 +132,10 @@ class AnonymizationValidateView(APIView):
129
132
  try:
130
133
  ok = pdf.validate_metadata_annotation(prepared_payload)
131
134
  except Exception: # pragma: no cover - defensive safety net
132
- logger.exception("PDF validation crashed for id=%s", file_id)
135
+ logger.exception("report validation crashed for id=%s", file_id)
133
136
  return Response(
134
137
  {
135
- "error": "PDF validation encountered an unexpected error."
138
+ "error": "report validation encountered an unexpected error."
136
139
  },
137
140
  status=status.HTTP_500_INTERNAL_SERVER_ERROR,
138
141
  )
@@ -146,7 +149,7 @@ class AnonymizationValidateView(APIView):
146
149
 
147
150
  if not ok:
148
151
  return Response(
149
- {"error": "PDF validation failed."},
152
+ {"error": "report validation failed."},
150
153
  status=status.HTTP_400_BAD_REQUEST,
151
154
  )
152
155
  else:
@@ -166,24 +169,25 @@ class AnonymizationValidateView(APIView):
166
169
  pdf.sensitive_meta.state.mark_dob_verified()
167
170
  pdf.sensitive_meta.state.mark_names_verified()
168
171
  pdf.sensitive_meta.create_anonymized_record()
169
- pdf.state.anonymized = True
172
+ pdf.state.state.anonymization_status.mark_anonymized()
173
+ pdf.state.save(update_fields=["anonymized"])
170
174
  pdf.sensitive_meta.state.save()
171
175
  else:
172
176
  return Response(
173
177
  {
174
- "message": "PDF not validated, failed to create State."
178
+ "message": "report not validated, failed to create State."
175
179
  },
176
180
  status=status.HTTP_500_INTERNAL_SERVER_ERROR,
177
181
  )
178
182
 
179
183
  return Response(
180
- {"message": "PDF validated."},
184
+ {"message": "report validated."},
181
185
  status=status.HTTP_200_OK,
182
186
  )
183
187
 
184
188
  if file_type == "pdf":
185
189
  return Response(
186
- {"error": f"PDF {file_id} not found."},
190
+ {"error": f"report {file_id} not found."},
187
191
  status=status.HTTP_404_NOT_FOUND,
188
192
  )
189
193
 
@@ -3,17 +3,9 @@
3
3
  from .video_media import VideoMediaView
4
4
  from .pdf_media import PdfMediaView
5
5
  from ..video.reimport import VideoReimportView
6
- from ..pdf.reimport import PdfReimportView
7
- from .segments import video_segments_by_pk
8
- from .video_segments import (
9
- video_segments_collection,
10
- video_segments_by_video,
11
- video_segment_detail,
12
- video_segments_stats,
13
- video_segment_validate,
14
- video_segments_validate_bulk,
15
- video_segments_validation_status,
16
- )
6
+ from ..report.reimport import ReportReimportView
7
+ from ..ai.label import label_list
8
+
17
9
  from .sensitive_metadata import (
18
10
  get_sensitive_metadata_pk,
19
11
  video_sensitive_metadata,
@@ -28,20 +20,13 @@ __all__ = [
28
20
  'VideoMediaView',
29
21
  'PdfMediaView',
30
22
  'VideoReimportView',
31
- 'PdfReimportView',
23
+ 'ReportReimportView',
32
24
  'get_sensitive_metadata_pk',
33
- 'video_segments_by_pk',
34
- 'video_segments_collection',
35
- 'video_segments_by_video',
36
- 'video_segment_detail',
37
- 'video_segments_stats',
38
- 'video_segment_validate',
39
- 'video_segments_validate_bulk',
40
- 'video_segments_validation_status',
41
25
  'video_sensitive_metadata',
42
26
  'video_sensitive_metadata_verify',
43
27
  'pdf_sensitive_metadata',
44
28
  'pdf_sensitive_metadata_verify',
45
29
  'sensitive_metadata_list',
46
30
  'pdf_sensitive_metadata_list',
31
+ 'label_list',
47
32
  ]