endoreg-db 0.8.8.0__py3-none-any.whl → 0.8.9.2__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 +496 -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/pseudonymization/fake.py +52 -0
  74. endoreg_db/import_files/pseudonymization/k_anonymity.py +182 -0
  75. endoreg_db/import_files/pseudonymization/k_pseudonymity.py +128 -0
  76. endoreg_db/import_files/pseudonymization/pseudonymize.py +0 -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 +65 -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/utils/video/ffmpeg_wrapper.py +217 -52
  171. endoreg_db/views/__init__.py +85 -173
  172. endoreg_db/views/ai/__init__.py +8 -0
  173. endoreg_db/views/ai/label.py +155 -0
  174. endoreg_db/views/anonymization/media_management.py +8 -7
  175. endoreg_db/views/anonymization/overview.py +97 -68
  176. endoreg_db/views/anonymization/validate.py +25 -21
  177. endoreg_db/views/media/__init__.py +5 -20
  178. endoreg_db/views/media/pdf_media.py +109 -65
  179. endoreg_db/views/media/sensitive_metadata.py +163 -148
  180. endoreg_db/views/meta/__init__.py +0 -8
  181. endoreg_db/views/misc/__init__.py +1 -7
  182. endoreg_db/views/misc/upload_views.py +94 -93
  183. endoreg_db/views/report/__init__.py +7 -0
  184. endoreg_db/views/{pdf → report}/reimport.py +45 -24
  185. endoreg_db/views/{pdf/pdf_stream.py → report/report_stream.py} +40 -32
  186. endoreg_db/views/requirement/lookup_store.py +22 -90
  187. endoreg_db/views/video/__init__.py +23 -22
  188. endoreg_db/views/video/correction.py +201 -172
  189. endoreg_db/views/video/reimport.py +1 -1
  190. endoreg_db/views/{media/video_segments.py → video/segments_crud.py} +75 -37
  191. endoreg_db/views/video/{video_meta.py → video_meta_stats.py} +2 -2
  192. endoreg_db/views/video/video_stream.py +7 -8
  193. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/METADATA +2 -2
  194. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/RECORD +217 -335
  195. {endoreg_db-0.8.8.0.dist-info → endoreg_db-0.8.9.2.dist-info}/WHEEL +1 -1
  196. endoreg_db/data/_examples/disease.yaml +0 -55
  197. endoreg_db/data/_examples/disease_classification.yaml +0 -13
  198. endoreg_db/data/_examples/disease_classification_choice.yaml +0 -62
  199. endoreg_db/data/_examples/event.yaml +0 -64
  200. endoreg_db/data/_examples/examination.yaml +0 -72
  201. endoreg_db/data/_examples/finding/anatomy_colon.yaml +0 -128
  202. endoreg_db/data/_examples/finding/colonoscopy.yaml +0 -40
  203. endoreg_db/data/_examples/finding/colonoscopy_bowel_prep.yaml +0 -56
  204. endoreg_db/data/_examples/finding/complication.yaml +0 -16
  205. endoreg_db/data/_examples/finding/data.yaml +0 -105
  206. endoreg_db/data/_examples/finding/examination_setting.yaml +0 -16
  207. endoreg_db/data/_examples/finding/medication_related.yaml +0 -18
  208. endoreg_db/data/_examples/finding/outcome.yaml +0 -12
  209. endoreg_db/data/_examples/finding_classification/colonoscopy_bowel_preparation.yaml +0 -68
  210. endoreg_db/data/_examples/finding_classification/colonoscopy_jnet.yaml +0 -22
  211. endoreg_db/data/_examples/finding_classification/colonoscopy_kudo.yaml +0 -25
  212. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
  213. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
  214. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_size.yaml +0 -68
  215. endoreg_db/data/_examples/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
  216. endoreg_db/data/_examples/finding_classification/colonoscopy_location.yaml +0 -80
  217. endoreg_db/data/_examples/finding_classification/colonoscopy_lst.yaml +0 -21
  218. endoreg_db/data/_examples/finding_classification/colonoscopy_nice.yaml +0 -20
  219. endoreg_db/data/_examples/finding_classification/colonoscopy_paris.yaml +0 -26
  220. endoreg_db/data/_examples/finding_classification/colonoscopy_sano.yaml +0 -22
  221. endoreg_db/data/_examples/finding_classification/colonoscopy_summary.yaml +0 -53
  222. endoreg_db/data/_examples/finding_classification/complication_generic.yaml +0 -25
  223. endoreg_db/data/_examples/finding_classification/examination_setting_generic.yaml +0 -40
  224. endoreg_db/data/_examples/finding_classification/histology_colo.yaml +0 -51
  225. endoreg_db/data/_examples/finding_classification/intervention_required.yaml +0 -26
  226. endoreg_db/data/_examples/finding_classification/medication_related.yaml +0 -23
  227. endoreg_db/data/_examples/finding_classification/visualized.yaml +0 -33
  228. endoreg_db/data/_examples/finding_classification_choice/bowel_preparation.yaml +0 -78
  229. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
  230. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
  231. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
  232. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_lst.yaml +0 -15
  233. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_nice.yaml +0 -17
  234. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
  235. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_sano.yaml +0 -14
  236. endoreg_db/data/_examples/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
  237. endoreg_db/data/_examples/finding_classification_choice/colonoscopy_size.yaml +0 -82
  238. endoreg_db/data/_examples/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
  239. endoreg_db/data/_examples/finding_classification_choice/complication_generic_types.yaml +0 -15
  240. endoreg_db/data/_examples/finding_classification_choice/examination_setting_generic_types.yaml +0 -15
  241. endoreg_db/data/_examples/finding_classification_choice/histology.yaml +0 -24
  242. endoreg_db/data/_examples/finding_classification_choice/histology_polyp.yaml +0 -20
  243. endoreg_db/data/_examples/finding_classification_choice/outcome.yaml +0 -19
  244. endoreg_db/data/_examples/finding_classification_choice/yes_no_na.yaml +0 -11
  245. endoreg_db/data/_examples/finding_classification_type/colonoscopy_basic.yaml +0 -48
  246. endoreg_db/data/_examples/finding_intervention/endoscopy.yaml +0 -43
  247. endoreg_db/data/_examples/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
  248. endoreg_db/data/_examples/finding_intervention/endoscopy_egd.yaml +0 -128
  249. endoreg_db/data/_examples/finding_intervention/endoscopy_ercp.yaml +0 -32
  250. endoreg_db/data/_examples/finding_intervention/endoscopy_eus_lower.yaml +0 -9
  251. endoreg_db/data/_examples/finding_intervention/endoscopy_eus_upper.yaml +0 -36
  252. endoreg_db/data/_examples/finding_intervention_type/endoscopy.yaml +0 -15
  253. endoreg_db/data/_examples/finding_type/data.yaml +0 -43
  254. endoreg_db/data/_examples/requirement/age.yaml +0 -26
  255. endoreg_db/data/_examples/requirement/gender.yaml +0 -25
  256. endoreg_db/data/_examples/requirement_set/01_endoscopy_generic.yaml +0 -48
  257. endoreg_db/data/_examples/requirement_set/colonoscopy_austria_screening.yaml +0 -57
  258. endoreg_db/data/_examples/requirement_set/endoscopy_bleeding_risk.yaml +0 -52
  259. endoreg_db/data/_examples/yaml_examples.xlsx +0 -0
  260. endoreg_db/data/finding/anatomy_colon.yaml +0 -128
  261. endoreg_db/data/finding/colonoscopy.yaml +0 -40
  262. endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +0 -56
  263. endoreg_db/data/finding/complication.yaml +0 -16
  264. endoreg_db/data/finding/data.yaml +0 -105
  265. endoreg_db/data/finding/examination_setting.yaml +0 -16
  266. endoreg_db/data/finding/medication_related.yaml +0 -18
  267. endoreg_db/data/finding/outcome.yaml +0 -12
  268. endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +0 -22
  269. endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +0 -25
  270. endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +0 -20
  271. endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +0 -24
  272. endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +0 -38
  273. endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +0 -20
  274. endoreg_db/data/finding_classification/colonoscopy_location.yaml +0 -49
  275. endoreg_db/data/finding_classification/colonoscopy_lst.yaml +0 -21
  276. endoreg_db/data/finding_classification/colonoscopy_nice.yaml +0 -20
  277. endoreg_db/data/finding_classification/colonoscopy_paris.yaml +0 -26
  278. endoreg_db/data/finding_classification/colonoscopy_sano.yaml +0 -22
  279. endoreg_db/data/finding_classification/colonoscopy_summary.yaml +0 -53
  280. endoreg_db/data/finding_classification/complication_generic.yaml +0 -25
  281. endoreg_db/data/finding_classification/examination_setting_generic.yaml +0 -40
  282. endoreg_db/data/finding_classification/histology_colo.yaml +0 -43
  283. endoreg_db/data/finding_classification/intervention_required.yaml +0 -26
  284. endoreg_db/data/finding_classification/medication_related.yaml +0 -23
  285. endoreg_db/data/finding_classification/visualized.yaml +0 -33
  286. endoreg_db/data/finding_classification_choice/colon_lesion_circularity_default.yaml +0 -32
  287. endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +0 -15
  288. endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +0 -23
  289. endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +0 -15
  290. endoreg_db/data/finding_classification_choice/colon_lesion_nice.yaml +0 -17
  291. endoreg_db/data/finding_classification_choice/colon_lesion_paris.yaml +0 -57
  292. endoreg_db/data/finding_classification_choice/colon_lesion_planarity_default.yaml +0 -49
  293. endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +0 -14
  294. endoreg_db/data/finding_classification_choice/colon_lesion_surface_intact_default.yaml +0 -36
  295. endoreg_db/data/finding_classification_choice/colonoscopy_location.yaml +0 -229
  296. endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +0 -19
  297. endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +0 -82
  298. endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +0 -15
  299. endoreg_db/data/finding_classification_choice/outcome.yaml +0 -19
  300. endoreg_db/data/finding_intervention/endoscopy.yaml +0 -43
  301. endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +0 -168
  302. endoreg_db/data/finding_intervention/endoscopy_egd.yaml +0 -128
  303. endoreg_db/data/finding_intervention/endoscopy_ercp.yaml +0 -32
  304. endoreg_db/data/finding_intervention/endoscopy_eus_lower.yaml +0 -9
  305. endoreg_db/data/finding_intervention/endoscopy_eus_upper.yaml +0 -36
  306. endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +0 -79
  307. endoreg_db/data/requirement/age.yaml +0 -26
  308. endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +0 -45
  309. endoreg_db/data/requirement/disease_cardiovascular.yaml +0 -79
  310. endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +0 -41
  311. endoreg_db/data/requirement/disease_hepatology.yaml +0 -12
  312. endoreg_db/data/requirement/disease_misc.yaml +0 -12
  313. endoreg_db/data/requirement/disease_renal.yaml +0 -96
  314. endoreg_db/data/requirement/endoscopy_bleeding_risk.yaml +0 -59
  315. endoreg_db/data/requirement/event_cardiology.yaml +0 -251
  316. endoreg_db/data/requirement/event_requirements.yaml +0 -145
  317. endoreg_db/data/requirement/finding_colon_polyp.yaml +0 -50
  318. endoreg_db/data/requirement/gender.yaml +0 -25
  319. endoreg_db/data/requirement/lab_value.yaml +0 -441
  320. endoreg_db/data/requirement/medication.yaml +0 -93
  321. endoreg_db/data/requirement_operator/age.yaml +0 -13
  322. endoreg_db/data/requirement_operator/lab_operators.yaml +0 -129
  323. endoreg_db/data/requirement_operator/model_operators.yaml +0 -96
  324. endoreg_db/management/commands/init_default_ai_model.py +0 -112
  325. endoreg_db/management/commands/reset_celery_schedule.py +0 -9
  326. endoreg_db/management/commands/validate_video.py +0 -204
  327. endoreg_db/migrations/0002_requirementset_depends_on.py +0 -18
  328. endoreg_db/migrations/_old/0001_initial.py +0 -1857
  329. endoreg_db/migrations/_old/0002_add_video_correction_models.py +0 -52
  330. endoreg_db/migrations/_old/0003_add_center_display_name.py +0 -30
  331. endoreg_db/migrations/_old/0004_employee_city_employee_post_code_employee_street_and_more.py +0 -68
  332. endoreg_db/migrations/_old/0004_remove_casetemplate_rules_and_more.py +0 -77
  333. endoreg_db/migrations/_old/0005_merge_20251111_1003.py +0 -14
  334. endoreg_db/migrations/_old/0006_sensitivemeta_anonymized_text_and_more.py +0 -68
  335. endoreg_db/migrations/_old/0007_remove_rule_attribute_dtype_remove_rule_rule_type_and_more.py +0 -89
  336. endoreg_db/migrations/_old/0008_remove_event_event_classification_and_more.py +0 -27
  337. endoreg_db/migrations/_old/0009_alter_modelmeta_options_and_more.py +0 -21
  338. endoreg_db/renames.yml +0 -8
  339. endoreg_db/serializers/_old/raw_pdf_meta_validation.py +0 -223
  340. endoreg_db/serializers/_old/raw_video_meta_validation.py +0 -179
  341. endoreg_db/serializers/_old/video.py +0 -71
  342. endoreg_db/serializers/meta/pdf_file_meta_extraction.py +0 -115
  343. endoreg_db/serializers/meta/report_meta.py +0 -53
  344. endoreg_db/serializers/report/__init__.py +0 -9
  345. endoreg_db/serializers/report/mixins.py +0 -45
  346. endoreg_db/serializers/report/report.py +0 -105
  347. endoreg_db/serializers/report/report_list.py +0 -22
  348. endoreg_db/serializers/report/secure_file_url.py +0 -26
  349. endoreg_db/services/requirements_object.py +0 -147
  350. endoreg_db/services/storage_aware_video_processor.py +0 -370
  351. endoreg_db/urls/files.py +0 -6
  352. endoreg_db/urls/label_video_segment_validate.py +0 -33
  353. endoreg_db/urls/label_video_segments.py +0 -46
  354. endoreg_db/views/label/__init__.py +0 -5
  355. endoreg_db/views/label/label.py +0 -15
  356. endoreg_db/views/label_video_segment/__init__.py +0 -16
  357. endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +0 -44
  358. endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +0 -50
  359. endoreg_db/views/label_video_segment/label_video_segment.py +0 -77
  360. endoreg_db/views/label_video_segment/label_video_segment_by_label.py +0 -174
  361. endoreg_db/views/label_video_segment/label_video_segment_detail.py +0 -73
  362. endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +0 -46
  363. endoreg_db/views/label_video_segment/validate.py +0 -226
  364. endoreg_db/views/media/segments.py +0 -71
  365. endoreg_db/views/meta/available_files_list.py +0 -146
  366. endoreg_db/views/meta/report_meta.py +0 -53
  367. endoreg_db/views/meta/sensitive_meta_detail.py +0 -85
  368. endoreg_db/views/misc/secure_file_serving_view.py +0 -80
  369. endoreg_db/views/misc/secure_file_url_view.py +0 -84
  370. endoreg_db/views/misc/secure_url_validate.py +0 -79
  371. endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +0 -164
  372. endoreg_db/views/patient_finding_location/__init__.py +0 -5
  373. endoreg_db/views/patient_finding_location/pfl_create.py +0 -70
  374. endoreg_db/views/patient_finding_morphology/__init__.py +0 -5
  375. endoreg_db/views/patient_finding_morphology/pfm_create.py +0 -70
  376. endoreg_db/views/pdf/__init__.py +0 -8
  377. endoreg_db/views/video/segmentation.py +0 -274
  378. endoreg_db/views/video/task_status.py +0 -49
  379. endoreg_db/views/video/timeline.py +0 -46
  380. endoreg_db/views/video/video_analyze.py +0 -52
  381. /endoreg_db/data/requirement/{colon_polyp_intervention.yaml → old/colon_polyp_intervention.yaml} +0 -0
  382. /endoreg_db/data/{_examples/requirement → requirement/old}/colonoscopy_baseline_austria.yaml +0 -0
  383. /endoreg_db/data/requirement/{coloreg_colon_polyp.yaml → old/coloreg_colon_polyp.yaml} +0 -0
  384. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_cardiovascular.yaml +0 -0
  385. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_classification_choice_cardiovascular.yaml +0 -0
  386. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_hepatology.yaml +0 -0
  387. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_misc.yaml +0 -0
  388. /endoreg_db/data/{_examples/requirement → requirement/old}/disease_renal.yaml +0 -0
  389. /endoreg_db/data/{_examples/requirement → requirement/old}/endoscopy_bleeding_risk.yaml +0 -0
  390. /endoreg_db/data/{_examples/requirement → requirement/old}/event_cardiology.yaml +0 -0
  391. /endoreg_db/data/{_examples/requirement → requirement/old}/event_requirements.yaml +0 -0
  392. /endoreg_db/data/{_examples/requirement → requirement/old}/finding_colon_polyp.yaml +0 -0
  393. /endoreg_db/{urls/sensitive_meta.py → data/requirement/old/gender.yaml} +0 -0
  394. /endoreg_db/data/{_examples/requirement → requirement/old}/lab_value.yaml +0 -0
  395. /endoreg_db/data/{_examples/requirement → requirement/old}/medication.yaml +0 -0
  396. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/age.yaml +0 -0
  397. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/lab_operators.yaml +0 -0
  398. /endoreg_db/data/{_examples/requirement_operator → requirement_operator/_old}/model_operators.yaml +0 -0
  399. /endoreg_db/{views/pdf/pdf_stream_views.py → import_files/pseudonymization/__init__.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.9.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,12 +1,12 @@
1
- import os
2
1
  import logging
2
+ import os
3
3
  from typing import Optional
4
- from celery_app import shared_task
4
+
5
5
  from django.core.files.storage import default_storage
6
6
 
7
- from endoreg_db.models.upload_job import UploadJob
7
+ from celery_app import shared_task
8
8
  from endoreg_db.models import SensitiveMeta, VideoFile
9
-
9
+ from endoreg_db.models.upload_job import UploadJob
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
@@ -14,8 +14,8 @@ logger = logging.getLogger(__name__)
14
14
  @shared_task(bind=True)
15
15
  def process_upload_job(self, job_id: str) -> dict:
16
16
  """
17
- Process an uploaded file (PDF or video) asynchronously.
18
-
17
+ Process an uploaded file (report or video) asynchronously.
18
+
19
19
  This task:
20
20
  1. Updates job status to 'processing'
21
21
  2. Determines file type and routes to appropriate processor
@@ -23,10 +23,10 @@ def process_upload_job(self, job_id: str) -> dict:
23
23
  4. For videos: Uses VideoFile.create_from_file_initialized() and processing pipeline
24
24
  5. Links the created SensitiveMeta to the job and marks as 'anonymized'
25
25
  6. On error: marks job as 'error' with details
26
-
26
+
27
27
  Args:
28
28
  job_id: UUID string of the UploadJob to process
29
-
29
+
30
30
  Returns:
31
31
  dict: Processing result with status and details
32
32
  """
@@ -37,69 +37,71 @@ def process_upload_job(self, job_id: str) -> dict:
37
37
  except UploadJob.DoesNotExist:
38
38
  error_msg = f"UploadJob with id {job_id} not found"
39
39
  logger.error(error_msg)
40
- return {'status': 'error', 'error': error_msg}
41
-
40
+ return {"status": "error", "error": error_msg}
41
+
42
42
  # Mark as processing
43
43
  upload_job.mark_processing()
44
44
  logger.info(f"Started processing upload job {job_id}")
45
-
45
+
46
46
  # Get file path
47
47
  file_path = upload_job.file.path
48
48
  if not os.path.exists(file_path):
49
49
  error_msg = f"Uploaded file not found at {file_path}"
50
50
  upload_job.mark_error(error_msg)
51
51
  logger.error(error_msg)
52
- return {'status': 'error', 'error': error_msg}
53
-
52
+ return {"status": "error", "error": error_msg}
53
+
54
54
  # Route to appropriate processor based on content type
55
55
  sensitive_meta = None
56
-
57
- if upload_job.content_type == 'application/pdf':
56
+
57
+ if upload_job.content_type == "application/pdf":
58
58
  sensitive_meta = _process_pdf_file(upload_job, file_path)
59
- elif upload_job.content_type.startswith('video/'):
59
+ elif upload_job.content_type.startswith("video/"):
60
60
  sensitive_meta = _process_video_file(upload_job, file_path)
61
61
  else:
62
62
  error_msg = f"Unsupported content type: {upload_job.content_type}"
63
63
  upload_job.mark_error(error_msg)
64
64
  logger.error(error_msg)
65
- return {'status': 'error', 'error': error_msg}
66
-
65
+ return {"status": "error", "error": error_msg}
66
+
67
67
  if sensitive_meta:
68
68
  # Mark job as completed with the created SensitiveMeta
69
69
  upload_job.mark_completed(sensitive_meta)
70
- logger.info(f"Successfully processed upload job {job_id}, created SensitiveMeta {sensitive_meta.id}")
70
+ logger.info(
71
+ f"Successfully processed upload job {job_id}, created SensitiveMeta {sensitive_meta.id}"
72
+ )
71
73
  return {
72
- 'status': 'anonymized',
73
- 'sensitive_meta_id': sensitive_meta.id,
74
- 'job_id': job_id
74
+ "status": "anonymized",
75
+ "sensitive_meta_id": sensitive_meta.id,
76
+ "job_id": job_id,
75
77
  }
76
78
  else:
77
79
  error_msg = "Processing completed but no SensitiveMeta was created"
78
80
  upload_job.mark_error(error_msg)
79
81
  logger.error(f"Upload job {job_id}: {error_msg}")
80
- return {'status': 'error', 'error': error_msg}
81
-
82
+ return {"status": "error", "error": error_msg}
83
+
82
84
  except Exception as e:
83
85
  error_msg = f"Unexpected error processing upload job {job_id}: {str(e)}"
84
86
  logger.exception(error_msg)
85
-
87
+
86
88
  try:
87
89
  upload_job = UploadJob.objects.get(id=job_id)
88
90
  upload_job.mark_error(error_msg)
89
91
  except Exception as inner_e:
90
92
  logger.error(f"Failed to update job status after error: {inner_e}")
91
-
92
- return {'status': 'error', 'error': error_msg}
93
+
94
+ return {"status": "error", "error": error_msg}
93
95
 
94
96
 
95
97
  def _process_pdf_file(upload_job: UploadJob, file_path: str) -> Optional[SensitiveMeta]:
96
98
  """
97
- Process a PDF file using ReportReader.
98
-
99
+ Process a report file using ReportReader.
100
+
99
101
  Args:
100
102
  upload_job: The UploadJob instance
101
- file_path: Path to the uploaded PDF file
102
-
103
+ file_path: Path to the uploaded report file
104
+
103
105
  Returns:
104
106
  SensitiveMeta instance if successful, None otherwise
105
107
  """
@@ -108,100 +110,107 @@ def _process_pdf_file(upload_job: UploadJob, file_path: str) -> Optional[Sensiti
108
110
  try:
109
111
  from lx_anonymizer.report_reader import ReportReader
110
112
  except ImportError as e:
111
- raise ImportError(f"Could not import ReportReader: {e}. Make sure lx-anonymizer is available.")
112
-
113
- logger.info(f"Processing PDF file: {file_path}")
114
-
113
+ raise ImportError(
114
+ f"Could not import ReportReader: {e}. Make sure lx-anonymizer is available."
115
+ )
116
+
117
+ logger.info(f"Processing report file: {file_path}")
118
+
115
119
  # Create ReportReader instance
116
- reader = ReportReader(
117
- locale="de_DE",
118
- text_date_format="%d.%m.%Y"
119
- )
120
-
120
+ reader = ReportReader(locale="de_DE", text_date_format="%d.%m.%Y")
121
+
121
122
  # Process the report
122
123
  original_text, anonymized_text, metadata = reader.process_report(
123
124
  pdf_path=file_path,
124
125
  use_ensemble=False, # Can be made configurable
125
126
  verbose=False,
126
- use_llm_extractor=None # Use default extractor
127
+ use_llm_extractor=None, # Use default extractor
127
128
  )
128
-
129
+
129
130
  if not metadata:
130
- raise ValueError("No metadata extracted from PDF")
131
-
131
+ raise ValueError("No metadata extracted from report")
132
+
132
133
  # Create SensitiveMeta from extracted metadata
133
134
  sensitive_meta = SensitiveMeta.create_from_dict(metadata)
134
135
  sensitive_meta.save()
135
-
136
- logger.info(f"Created SensitiveMeta {sensitive_meta.id} from PDF processing")
136
+
137
+ logger.info(f"Created SensitiveMeta {sensitive_meta.id} from report processing")
137
138
  return sensitive_meta
138
-
139
+
139
140
  except Exception as e:
140
- logger.exception(f"Error processing PDF file {file_path}: {e}")
141
+ logger.exception(f"Error processing report file {file_path}: {e}")
141
142
  raise
142
143
 
143
144
 
144
- def _process_video_file(upload_job: UploadJob, file_path: str) -> Optional[SensitiveMeta]:
145
+ def _process_video_file(
146
+ upload_job: UploadJob, file_path: str
147
+ ) -> Optional[SensitiveMeta]:
145
148
  """
146
149
  Process a video file using VideoFile creation and processing pipeline.
147
-
150
+
148
151
  Args:
149
152
  upload_job: The UploadJob instance
150
153
  file_path: Path to the uploaded video file
151
-
154
+
152
155
  Returns:
153
156
  SensitiveMeta instance if successful, None otherwise
154
157
  """
155
158
  try:
156
159
  logger.info(f"Processing video file: {file_path}")
157
-
160
+
158
161
  # Get the relative path for storage
159
162
  relative_path = os.path.relpath(file_path, default_storage.location)
160
-
163
+
161
164
  # Create VideoFile instance using the existing method
162
165
  video_file = VideoFile.create_from_file_initialized(
163
166
  file_path=relative_path,
164
167
  skip_frame_extraction=False, # Extract frames for processing
165
- skip_meta_extraction=False, # Extract metadata
168
+ skip_meta_extraction=False, # Extract metadata
166
169
  )
167
-
170
+
168
171
  if not video_file:
169
172
  raise ValueError("Failed to create VideoFile instance")
170
-
173
+
171
174
  # Run the video processing pipeline (pipe_1)
172
175
  try:
173
176
  # Import the processing function
174
177
  from endoreg_db.management.commands.import_video import pipe_1
175
-
178
+
176
179
  # Run processing pipeline
177
180
  pipe_1(
178
181
  video_file=video_file,
179
182
  skip_frame_extraction=False,
180
183
  skip_meta_extraction=False,
181
- skip_anonymization=False
184
+ skip_anonymization=False,
182
185
  )
183
-
186
+
184
187
  except Exception as e:
185
- logger.warning(f"Video processing pipeline failed, but VideoFile was created: {e}")
188
+ logger.warning(
189
+ f"Video processing pipeline failed, but VideoFile was created: {e}"
190
+ )
186
191
  # Continue anyway - we might still have usable metadata
187
-
192
+
188
193
  # Get the associated SensitiveMeta
189
- if hasattr(video_file, 'sensitive_meta') and video_file.sensitive_meta:
194
+ if hasattr(video_file, "sensitive_meta") and video_file.sensitive_meta:
190
195
  sensitive_meta = video_file.sensitive_meta
191
- logger.info(f"Found SensitiveMeta {sensitive_meta.id} from video processing")
196
+ logger.info(
197
+ f"Found SensitiveMeta {sensitive_meta.id} from video processing"
198
+ )
192
199
  return sensitive_meta
193
200
  else:
194
201
  # Create a basic SensitiveMeta if none exists
195
202
  sensitive_meta = SensitiveMeta.objects.create()
196
-
203
+
197
204
  # Link it to the video if possible
198
- if hasattr(video_file, 'sensitive_meta'):
205
+ if hasattr(video_file, "sensitive_meta"):
199
206
  video_file.sensitive_meta = sensitive_meta
200
- video_file.save(update_fields=['sensitive_meta'])
201
-
202
- logger.info(f"Created basic SensitiveMeta {sensitive_meta.id} for video file")
207
+ video_file.save(update_fields=["sensitive_meta"])
208
+
209
+ logger.info(
210
+ f"Created basic SensitiveMeta {sensitive_meta.id} for video file"
211
+ )
203
212
  return sensitive_meta
204
-
213
+
205
214
  except Exception as e:
206
215
  logger.exception(f"Error processing video file {file_path}: {e}")
207
- raise
216
+ raise
@@ -63,15 +63,19 @@ def run_import_video(file_path: str, center_name: Optional[str] = None,
63
63
  }
64
64
 
65
65
  # Use settings defaults if not provided
66
- center_name = center_name or getattr(settings, 'DEFAULT_CENTER', 'university_hospital_wuerzburg')
67
- processor_name = processor_name or getattr(settings, 'DEFAULT_PROCESSOR', 'olympus_cv_1500')
68
-
66
+ if not isinstance(center_name, str):
67
+ getattr(settings, 'DEFAULT_CENTER', 'university_hospital_wuerzburg')
68
+ assert(center_name is str)
69
+ if not isinstance(processor_name, str):
70
+ assert(processor_name is str)
71
+ getattr(settings, 'DEFAULT_PROCESSOR', 'olympus_cv_1500')
72
+
69
73
  logger.info(f"Starting import for video: {file_path}")
70
74
  logger.info(f"Using center: {center_name}, processor: {processor_name}")
71
75
 
72
76
  # Try to use the service first
73
77
  try:
74
- from endoreg_db.services import video_import
78
+ from endoreg_db.services.__old import video_import
75
79
 
76
80
  video_file_obj = video_import.import_and_anonymize(
77
81
  file_path=file_path,
@@ -17,18 +17,8 @@ from .anonymization import url_patterns as anonymization_url_patterns
17
17
  from .auth import urlpatterns as auth_url_patterns
18
18
  from .classification import url_patterns as classification_url_patterns
19
19
  from .examination import urlpatterns as examination_url_patterns
20
- from .files import urlpatterns as files_url_patterns
21
- from .label_video_segment_validate import (
22
- url_patterns as label_video_segment_validate_url_patterns,
23
- )
24
- from .label_video_segments import url_patterns as label_video_segments_url_patterns
25
-
26
- # Phase 1.2: Media Management URLs ✅ IMPLEMENTED
27
20
  from .media import urlpatterns as media_url_patterns
28
21
  from .patient import urlpatterns as patient_url_patterns
29
-
30
- # TODO Phase 1.2: Implement VideoMediaView and PDFMediaView before enabling
31
- # from .media import urlpatterns as media_url_patterns
32
22
  from .requirements import urlpatterns as requirements_url_patterns
33
23
  from .stats import url_patterns as stats_url_patterns
34
24
  from .upload import urlpatterns as upload_url_patterns
@@ -38,9 +28,6 @@ api_urls += classification_url_patterns
38
28
  api_urls += anonymization_url_patterns
39
29
  api_urls += auth_url_patterns
40
30
  api_urls += examination_url_patterns
41
- api_urls += files_url_patterns
42
- api_urls += label_video_segments_url_patterns
43
- api_urls += label_video_segment_validate_url_patterns
44
31
  api_urls += media_url_patterns
45
32
  api_urls += upload_url_patterns
46
33
  api_urls += requirements_url_patterns
@@ -49,7 +36,6 @@ api_urls += stats_url_patterns
49
36
 
50
37
  router = DefaultRouter()
51
38
  router.register(r"examinations", ExaminationViewSet)
52
-
53
39
  router.register(r"findings", FindingViewSet)
54
40
  router.register(r"classifications", FindingClassificationViewSet)
55
41
  router.register(r"patient-findings", PatientFindingViewSet)
endoreg_db/urls/ai.py ADDED
@@ -0,0 +1,32 @@
1
+ from django.urls import path
2
+ from endoreg_db.views.ai import (label_list, add_label, delete_label, update_label)
3
+
4
+ url_patterns=[
5
+ # Label interface
6
+ # GET, Returns list of labels
7
+ path(
8
+ "ai/label-list",
9
+ label_list,
10
+ name="label-list"
11
+ ),
12
+ # POST, updates label by deleting old one and adding new one
13
+ path(
14
+ "ai/label-update",
15
+ update_label,
16
+ name="label-update"
17
+ ),
18
+ # DELETE, deletes a label
19
+ path(
20
+ "ai/label-delete",
21
+ delete_label,
22
+ name="label-delete"
23
+ ),
24
+ # POST, allows adding a new label
25
+ path(
26
+ "ai/label-add",
27
+ add_label,
28
+ name="label-add"
29
+ )
30
+
31
+
32
+ ]
endoreg_db/urls/media.py CHANGED
@@ -1,35 +1,37 @@
1
1
  from django.urls import path
2
2
 
3
3
  from endoreg_db.views import VideoStreamView
4
+ from endoreg_db.views.ai import label_list
4
5
  from endoreg_db.views.media import (
5
6
  PdfMediaView, # Alias to avoid conflict with legacy pdf.PDFMediaView
6
7
  VideoMediaView,
8
+ get_sensitive_metadata_pk,
7
9
  pdf_sensitive_metadata,
8
10
  pdf_sensitive_metadata_list,
9
11
  pdf_sensitive_metadata_verify,
10
12
  sensitive_metadata_list,
13
+ video_sensitive_metadata,
14
+ video_sensitive_metadata_verify,
15
+ )
16
+ from endoreg_db.views.report.reimport import ReportReimportView
17
+ from endoreg_db.views.report.report_stream import ReportStreamView
18
+ from endoreg_db.views.video import (
19
+ VideoReimportView,
11
20
  video_segment_detail,
12
21
  video_segment_validate,
13
- video_segments_by_pk,
14
22
  video_segments_by_video,
15
23
  video_segments_collection,
16
24
  video_segments_stats,
17
25
  video_segments_validate_bulk,
18
26
  video_segments_validation_status,
19
- video_sensitive_metadata,
20
- video_sensitive_metadata_verify,
21
- get_sensitive_metadata_pk
22
27
  )
23
- from endoreg_db.views.pdf.pdf_stream import PdfStreamView
24
- from endoreg_db.views.pdf.reimport import PdfReimportView
25
28
  from endoreg_db.views.video.correction import (
26
29
  VideoApplyMaskView,
27
30
  VideoCorrectionView,
28
- VideoMetadataView,
31
+ VideoMetadataStatsView,
29
32
  VideoProcessingHistoryView,
30
33
  VideoRemoveFramesView,
31
34
  )
32
- from endoreg_db.views.video.reimport import VideoReimportView
33
35
 
34
36
  # ---------------------------------------------------------------------------------------
35
37
  # ANNOTATION API ENDPOINTS
@@ -43,9 +45,9 @@ from endoreg_db.views.video.reimport import VideoReimportView
43
45
 
44
46
  urlpatterns = [
45
47
  path(
46
- "media/sensitive-media-id/<int:pk>/<str:mediaType>/",
48
+ "media/sensitive-media-id/<int:pk>/<str:mediaType>/",
47
49
  get_sensitive_metadata_pk,
48
- name="sm-pk"
50
+ name="sm-pk",
49
51
  ),
50
52
  # Video media endpoints
51
53
  path("media/videos/", VideoMediaView.as_view(), name="video-list"),
@@ -90,7 +92,7 @@ urlpatterns = [
90
92
  # Returns analysis results (sensitive frame count, ratio, frame IDs)
91
93
  path(
92
94
  "media/videos/<int:pk>/metadata/",
93
- VideoMetadataView.as_view(),
95
+ VideoMetadataStatsView.as_view(),
94
96
  name="video-metadata",
95
97
  ),
96
98
  # Video Processing History API
@@ -123,14 +125,9 @@ urlpatterns = [
123
125
  VideoRemoveFramesView.as_view(),
124
126
  name="video-remove-frames",
125
127
  ),
128
+ path("media/videos/labels/list/", label_list, name="get_lvs_list"),
126
129
  # ---------------------------------------------------------------------------------------
127
130
  # VIDEO SEGMENT API ENDPOINTS (Modern Media Framework - October 14, 2025)
128
- #
129
- # Unified segment management endpoints replacing legacy /api/video-segments/
130
- # Collection: GET/POST all segments across videos
131
- # Video-scoped: GET/POST segments for specific video
132
- # Detail: GET/PATCH/DELETE individual segment
133
- # ---------------------------------------------------------------------------------------
134
131
  # Video Segments Collection API
135
132
  # GET/POST /api/media/videos/segments/
136
133
  # List all video segments across videos or create new segment
@@ -220,9 +217,9 @@ urlpatterns = [
220
217
  video_sensitive_metadata_verify,
221
218
  name="video-sensitive-metadata-verify",
222
219
  ),
223
- # PDF Sensitive Metadata (Resource-Scoped)
220
+ # report Sensitive Metadata (Resource-Scoped)
224
221
  # GET/PATCH /api/media/pdfs/<pk>/sensitive-metadata/
225
- # Get or update sensitive patient data for a PDF
222
+ # Get or update sensitive patient data for a report
226
223
  path(
227
224
  "media/pdfs/<int:pk>/sensitive-metadata/",
228
225
  pdf_sensitive_metadata,
@@ -252,17 +249,17 @@ urlpatterns = [
252
249
  pdf_sensitive_metadata_list,
253
250
  name="pdf-sensitive-metadata-list",
254
251
  ),
255
- # PDF media endpoints
252
+ # report media endpoints
256
253
  path("media/pdfs/", PdfMediaView.as_view(), name="pdf-list"),
257
254
  path("media/pdfs/<int:pk>/", PdfMediaView.as_view(), name="pdf-detail"),
258
255
  path(
259
- "media/pdfs/<int:pk>/stream/", PdfStreamView.as_view(), name="pdf-stream"
256
+ "media/pdfs/<int:pk>/stream/", ReportStreamView.as_view(), name="pdf-stream"
260
257
  ), # Support ?type=raw|anonymized params
261
- # PDF Re-import API endpoint (modern media framework)
258
+ # report Re-import API endpoint (modern media framework)
262
259
  # POST /api/media/pdfs/<int:pk>/reimport/
263
- # Re-imports a PDF file to regenerate metadata when OCR failed or data is incomplete
260
+ # Re-imports a report file to regenerate metadata when OCR failed or data is incomplete
264
261
  path(
265
- "media/pdfs/<int:pk>/reimport/", PdfReimportView.as_view(), name="pdf-reimport"
262
+ "media/pdfs/<int:pk>/reimport/", ReportReimportView.as_view(), name="report-reimport"
266
263
  ),
267
264
  ]
268
265
  # ---------------------------------------------------------------------------------------