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,136 +1,86 @@
1
+ from ..utils.translation import build_multilingual_response
1
2
  from .anonymization import (
2
3
  AnonymizationOverviewView,
3
4
  AnonymizationValidateView,
4
- anonymization_status,
5
5
  anonymization_current,
6
+ anonymization_status,
6
7
  start_anonymization,
7
8
  )
8
-
9
-
10
- from ..utils.translation import build_multilingual_response
11
-
12
-
13
- from .auth import (
14
- KeycloakVideoView,
15
- keycloak_login,
16
- keycloak_callback,
17
- public_home,
18
- )
19
-
9
+ from .auth import KeycloakVideoView, keycloak_callback, keycloak_login, public_home
20
10
  from .examination import (
21
11
  ExaminationManifestCache,
22
12
  ExaminationViewSet,
23
-
24
13
  get_classification_choices_for_examination,
25
- get_morphology_classification_choices_for_examination,
26
- get_location_classification_choices_for_examination,
27
-
28
14
  get_classifications_for_examination,
29
- get_location_classifications_for_examination,
30
- get_morphology_classifications_for_examination,
31
-
32
15
  get_findings_for_examination,
33
16
  get_instruments_for_examination,
34
17
  get_interventions_for_examination,
18
+ get_location_classification_choices_for_examination,
19
+ get_location_classifications_for_examination,
20
+ get_morphology_classification_choices_for_examination,
21
+ get_morphology_classifications_for_examination,
35
22
  )
36
-
37
23
  from .finding import (
38
- get_interventions_for_finding,
24
+ FindingViewSet,
39
25
  get_classifications_for_finding,
40
- FindingViewSet
26
+ get_interventions_for_finding,
41
27
  )
42
-
43
28
  from .finding_classification import (
44
29
  FindingClassificationViewSet,
45
30
  get_classification_choices,
46
- get_morphology_choices, # DEPRECATED
47
- get_location_choices, # DEPRECATED
31
+ get_location_choices, # DEPRECATED
32
+ get_morphology_choices, # DEPRECATED
48
33
  )
49
-
50
- from .label_video_segment import (
51
- create_video_segment_annotation,
52
- video_segments_by_label_id_view,
53
- video_segments_by_label_name_view,
54
- video_segment_detail_view,
55
- video_segments_view,
56
- update_label_video_segment,
57
- get_lvs_by_name_and_video_id
34
+ from .media import (
35
+ get_sensitive_metadata_pk,
36
+ label_list,
37
+ pdf_sensitive_metadata,
38
+ pdf_sensitive_metadata_list,
39
+ pdf_sensitive_metadata_verify,
40
+ sensitive_metadata_list,
41
+ video_sensitive_metadata,
42
+ video_sensitive_metadata_verify,
58
43
  )
59
-
60
- from .meta import (
61
- AvailableFilesListView,
62
- SensitiveMetaDetailView,
63
- SensitiveMetaListView,
64
- SensitiveMetaVerificationView,
65
- ReportFileMetadataView,
66
- )
67
-
44
+ from .meta import SensitiveMetaListView, SensitiveMetaVerificationView
68
45
  from .misc import (
46
+ MODELTRANSLATION_SETTINGS,
69
47
  CenterViewSet,
70
- csrf_token_view,
71
- GenderViewSet,
72
48
  ExaminationStatsView,
73
- VideoSegmentStatsView,
74
- SensitiveMetaStatsView,
75
- GeneralStatsView,
76
- SecureFileUrlView,
77
- SecureFileServingView,
78
- validate_secure_url,
79
49
  ExaminationTranslationOptions,
80
- FindingTranslationOptions,
81
- FindingClassificationTranslationOptions,
82
50
  FindingClassificationChoiceTranslationOptions,
51
+ FindingClassificationTranslationOptions,
52
+ FindingTranslationOptions,
53
+ GenderViewSet,
54
+ GeneralStatsView,
83
55
  InterventionTranslationOptions,
56
+ SensitiveMetaStatsView,
84
57
  TranslatedFieldMixin,
85
- TranslationMigrationHelper,
86
58
  TranslatedFixtureLoader,
87
- MODELTRANSLATION_SETTINGS,
59
+ TranslationMigrationHelper,
88
60
  UploadFileView,
89
61
  UploadStatusView,
62
+ VideoSegmentStatsView,
63
+ csrf_token_view,
90
64
  )
91
-
92
65
  from .patient import PatientViewSet
93
-
94
66
  from .patient_examination import (
95
67
  ExaminationCreateView,
96
68
  PatientExaminationDetailView,
97
69
  PatientExaminationListView,
98
70
  PatientExaminationViewSet,
99
71
  )
100
-
101
- from .patient_finding import (
102
- PatientFindingViewSet,
103
- OptimizedPatientFindingViewSet
104
- )
105
-
106
- from .patient_finding_classification import (
107
- create_patient_finding_classification,
108
- )
109
-
110
- from .pdf import (
111
- PdfReimportView,
112
- PdfStreamView,
113
- )
114
- from .requirement import (
115
- evaluate_requirements,
116
- LookupViewSet,
117
- )
118
-
119
- from .video import (
120
- # Video Correction (Phase 1.1) - Implemented
121
- VideoProcessingHistoryView,
72
+ from .patient_finding import OptimizedPatientFindingViewSet, PatientFindingViewSet
73
+ from .patient_finding_classification import create_patient_finding_classification
74
+ from .report import ReportReimportView, ReportStreamView
75
+ from .requirement import LookupViewSet, evaluate_requirements
76
+ from .video import ( # Video Correction (Phase 1.1) - Implemented; Existing views
122
77
  VideoApplyMaskView,
123
- VideoRemoveFramesView,
124
-
125
- # Existing views
78
+ VideoCorrectionView,
79
+ VideoExaminationViewSet,
80
+ VideoProcessingHistoryView,
126
81
  VideoReimportView,
127
- VideoViewSet,
82
+ VideoRemoveFramesView,
128
83
  VideoStreamView,
129
- VideoLabelView,
130
- UpdateLabelSegmentsView,
131
- rerun_segmentation,
132
- VideoExaminationViewSet,
133
- VideoCorrectionView,
134
84
  )
135
85
 
136
86
  __all__ = [
@@ -140,126 +90,88 @@ __all__ = [
140
90
  "start_anonymization",
141
91
  "AnonymizationOverviewView",
142
92
  "AnonymizationValidateView",
143
-
144
93
  # Auth views
145
94
  "KeycloakVideoView",
146
95
  "keycloak_login",
147
96
  "keycloak_callback",
148
97
  "public_home",
149
-
150
98
  # Examination views
151
99
  "ExaminationManifestCache",
152
- 'ExaminationViewSet',
153
-
154
- 'get_classification_choices_for_examination',
155
- 'get_morphology_classification_choices_for_examination',
156
- 'get_location_classification_choices_for_examination',
157
-
158
- 'get_classifications_for_examination',
159
- 'get_location_classifications_for_examination',
160
- 'get_morphology_classifications_for_examination',
161
-
162
- 'get_findings_for_examination',
163
- 'get_instruments_for_examination',
164
- 'get_interventions_for_examination',
165
-
100
+ "ExaminationViewSet",
101
+ "get_classification_choices_for_examination",
102
+ "get_morphology_classification_choices_for_examination",
103
+ "get_location_classification_choices_for_examination",
104
+ "get_classifications_for_examination",
105
+ "get_location_classifications_for_examination",
106
+ "get_morphology_classifications_for_examination",
107
+ "get_findings_for_examination",
108
+ "get_instruments_for_examination",
109
+ "get_interventions_for_examination",
166
110
  # Finding Views
167
111
  "FindingViewSet",
168
112
  "get_interventions_for_finding",
169
113
  "get_classifications_for_finding",
170
-
171
114
  # Finding Classification Views
172
115
  "FindingClassificationViewSet",
173
116
  "get_classification_choices",
174
- "get_morphology_choices", # DEPRECATED
175
- "get_location_choices", # DEPRECATED
176
-
177
- # Label Video Segment Views
178
- 'create_video_segment_annotation',
179
- 'video_segments_by_label_id_view',
180
- 'video_segments_by_label_name_view',
181
- 'video_segment_detail_view',
182
- 'video_segments_view',
183
- 'update_label_video_segment',
184
- "get_lvs_by_name_and_video_id",
185
-
117
+ "get_morphology_choices", # DEPRECATED
118
+ "get_location_choices", # DEPRECATED
186
119
  # Meta Views
187
- "AvailableFilesListView",
188
- "SensitiveMetaDetailView",
189
120
  "SensitiveMetaListView",
190
121
  "SensitiveMetaVerificationView",
191
- "ReportFileMetadataView",
192
-
193
122
  # Misc
194
123
  "CenterViewSet",
195
- 'csrf_token_view',
124
+ "csrf_token_view",
196
125
  "GenderViewSet",
197
- 'ExaminationStatsView',
198
- 'VideoSegmentStatsView',
199
- 'SensitiveMetaStatsView',
126
+ "ExaminationStatsView",
127
+ "VideoSegmentStatsView",
128
+ "SensitiveMetaStatsView",
200
129
  "GeneralStatsView",
201
- "SecureFileUrlView",
202
- "SecureFileServingView",
203
- "validate_secure_url",
204
- 'ExaminationTranslationOptions',
205
- 'FindingTranslationOptions',
206
- 'FindingClassificationTranslationOptions',
207
- 'FindingClassificationChoiceTranslationOptions',
208
- 'InterventionTranslationOptions',
209
- 'TranslatedFieldMixin',
210
- 'TranslationMigrationHelper',
211
- 'TranslatedFixtureLoader',
130
+ "ExaminationTranslationOptions",
131
+ "FindingTranslationOptions",
132
+ "FindingClassificationTranslationOptions",
133
+ "FindingClassificationChoiceTranslationOptions",
134
+ "InterventionTranslationOptions",
135
+ "TranslatedFieldMixin",
136
+ "TranslationMigrationHelper",
137
+ "TranslatedFixtureLoader",
212
138
  "build_multilingual_response",
213
- 'MODELTRANSLATION_SETTINGS',
214
- 'UploadFileView',
215
- 'UploadStatusView',
216
-
139
+ "MODELTRANSLATION_SETTINGS",
140
+ "UploadFileView",
141
+ "UploadStatusView",
217
142
  # Patient Views
218
143
  "PatientViewSet",
219
-
220
144
  # Patient Examination Views
221
145
  "ExaminationCreateView",
222
146
  "PatientExaminationDetailView",
223
147
  "PatientExaminationListView",
224
148
  "PatientExaminationViewSet",
225
-
226
149
  # Patient Finding Views
227
150
  "PatientFindingViewSet",
228
151
  "OptimizedPatientFindingViewSet",
229
-
230
152
  # Patient Finding Classification Views
231
153
  "create_patient_finding_classification",
232
-
233
- # PDF
234
- "PdfMediaView",
235
- "PdfReimportView",
236
- "PdfStreamView",
237
-
238
- # Report
239
- "ReportListView",
240
- "ReportWithSecureUrlView",
241
- "start_examination",
242
-
154
+ # report
155
+ "ReportReimportView",
156
+ "ReportStreamView",
243
157
  # Requirement Views
244
-
245
158
  "evaluate_requirements",
246
159
  "LookupViewSet",
247
-
248
160
  # Video Views (Phase 1.1 - Implemented)
249
- 'VideoMetadataView',
250
- 'VideoProcessingHistoryView',
251
- 'VideoApplyMaskView',
252
- 'VideoRemoveFramesView',
253
-
254
- 'VideoCorrectionView',
255
-
256
- # Video Views (Existing)
257
- 'VideoReimportView',
258
- 'VideoViewSet',
259
- 'VideoStreamView',
260
- 'VideoLabelView',
261
- 'UpdateLabelSegmentsView',
262
- 'rerun_segmentation',
263
- 'video_timeline_view',
161
+ "VideoProcessingHistoryView",
162
+ "VideoApplyMaskView",
163
+ "VideoRemoveFramesView",
164
+ "VideoCorrectionView",
165
+ "VideoReimportView",
166
+ "VideoStreamView",
264
167
  "VideoExaminationViewSet",
265
- ]
168
+ "ReportReimportView",
169
+ "label_list",
170
+ "get_sensitive_metadata_pk",
171
+ "video_sensitive_metadata",
172
+ "video_sensitive_metadata_verify",
173
+ "pdf_sensitive_metadata",
174
+ "pdf_sensitive_metadata_verify",
175
+ "sensitive_metadata_list",
176
+ "pdf_sensitive_metadata_list",
177
+ ]
@@ -0,0 +1,8 @@
1
+ from .label import (label_list, add_label, delete_label, update_label)
2
+
3
+ __all__ = [
4
+ "label_list",
5
+ "add_label",
6
+ "delete_label",
7
+ "update_label",
8
+ ]
@@ -0,0 +1,155 @@
1
+ # endoreg_db/views/media/label_media.py
2
+ import logging
3
+ from rest_framework.decorators import api_view, permission_classes
4
+ from rest_framework.response import Response
5
+ from rest_framework import status
6
+
7
+ from endoreg_db.models import Label
8
+ from endoreg_db.serializers.label.label import LabelSerializer
9
+ from endoreg_db.utils.permissions import EnvironmentAwarePermission
10
+ # from rest_framework.permissions import IsAuthenticated
11
+ # from endoreg_db.authz.permissions import PolicyPermission
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+
16
+ @api_view(["GET"])
17
+ @permission_classes([EnvironmentAwarePermission])
18
+ # or: @permission_classes([IsAuthenticated, PolicyPermission])
19
+ def label_list(request) -> Response:
20
+ """
21
+ List all annotation labels used for video segments.
22
+
23
+ GET /api/media/labels/
24
+ Response:
25
+ [
26
+ { "id": 1, "name": "polyp" },
27
+ ...
28
+ ]
29
+ """
30
+ try:
31
+ labels = Label.objects.all().order_by("name")
32
+ serializer = LabelSerializer(labels, many=True)
33
+ return Response(serializer.data, status=status.HTTP_200_OK)
34
+ except Exception as e:
35
+ logger.error(f"Error fetching labels: {e}")
36
+ return Response(
37
+ {"error": "Failed to fetch labels"},
38
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR,
39
+ )
40
+
41
+ @api_view(["POST"])
42
+ @permission_classes([EnvironmentAwarePermission])
43
+ def add_label(request) -> Response:
44
+ try:
45
+ name = request.data.get("name")
46
+ if not name:
47
+ return Response(
48
+ {"error": "Field 'name' is required"},
49
+ status=status.HTTP_400_BAD_REQUEST,
50
+ )
51
+
52
+ label, created = Label.get_or_create_from_name(name)
53
+
54
+ return Response(
55
+ {
56
+ "success": "label added to database" if created else "label already existed",
57
+ "id": label.id,
58
+ "name": label.name,
59
+ },
60
+ status=status.HTTP_201_CREATED if created else status.HTTP_200_OK,
61
+ )
62
+ except Exception as e:
63
+ logger.error(f"Error creating label: {e}")
64
+ return Response(
65
+ {"error": "Failed to create label"},
66
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR,
67
+ )
68
+
69
+
70
+ @api_view(["DELETE"])
71
+ def delete_label(request) -> Response:
72
+ try:
73
+ name = request.data.get("name")
74
+ if not name:
75
+ return Response(
76
+ {"error": "Field 'name' is required"},
77
+ status=status.HTTP_400_BAD_REQUEST,
78
+ )
79
+ Label.delete(name)
80
+ if isinstance(Label.get_or_create_from_name(name), Label):
81
+ return Response(
82
+ {"error": "Field not deleted"},
83
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR
84
+ )
85
+ else:
86
+ return Response(
87
+ {"success": f"label {name} deleted"},
88
+ status=status.HTTP_200_OK
89
+ )
90
+ except Exception as e:
91
+ logger.error(f"Error creating label: {e}")
92
+ return Response(
93
+ {"error": "Failed to create label"},
94
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR,
95
+ )
96
+
97
+
98
+ @api_view(["PATCH", "POST"])
99
+ @permission_classes([EnvironmentAwarePermission])
100
+ def update_label(request) -> Response:
101
+ """
102
+ Update/rename a label.
103
+
104
+ Body:
105
+ {
106
+ "name_old": "polyp_old",
107
+ "name": "polyp"
108
+ }
109
+ """
110
+ name_old = request.data.get("name_old")
111
+ new_name = request.data.get("name")
112
+
113
+ if not name_old:
114
+ return Response(
115
+ {"error": "Field 'name_old' is required"},
116
+ status=status.HTTP_400_BAD_REQUEST,
117
+ )
118
+
119
+ if not new_name:
120
+ return Response(
121
+ {"error": "Field 'name' is required"},
122
+ status=status.HTTP_400_BAD_REQUEST,
123
+ )
124
+
125
+ try:
126
+ try:
127
+ label = Label.objects.get(name=name_old)
128
+ except Label.DoesNotExist:
129
+ return Response(
130
+ {"error": f"Label '{name_old}' not found"},
131
+ status=status.HTTP_404_NOT_FOUND,
132
+ )
133
+
134
+ # Optional: handle duplicate target names
135
+ if Label.objects.filter(name=new_name).exclude(pk=label.pk).exists():
136
+ return Response(
137
+ {"error": f"Label '{new_name}' already exists"},
138
+ status=status.HTTP_400_BAD_REQUEST,
139
+ )
140
+
141
+ label.name = new_name
142
+ label.save()
143
+
144
+ return Response(
145
+ {"success": f"Label '{name_old}' renamed to '{new_name}'",
146
+ "id": label.id,
147
+ "name": label.name},
148
+ status=status.HTTP_200_OK,
149
+ )
150
+ except Exception as e:
151
+ logger.error(f"Error updating label '{name_old}' → '{new_name}': {e}")
152
+ return Response(
153
+ {"error": "Failed to update label"},
154
+ status=status.HTTP_500_INTERNAL_SERVER_ERROR,
155
+ )
@@ -136,7 +136,7 @@ class MediaManagementView(APIView):
136
136
  return stats
137
137
 
138
138
  def _get_pdf_stats(self) -> Dict[str, int]:
139
- """Get PDF file statistics"""
139
+ """Get report file statistics"""
140
140
  pdfs = RawPdfFile.objects.all()
141
141
 
142
142
  stats = {
@@ -150,7 +150,7 @@ class MediaManagementView(APIView):
150
150
  }
151
151
 
152
152
  for pdf in pdfs:
153
- # PDF status logic based on anonymized_text presence and validation
153
+ # report status logic based on anonymized_text presence and validation
154
154
  has_anonymized = bool(pdf.anonymized_text and pdf.anonymized_text.strip())
155
155
  is_validated = (
156
156
  getattr(pdf.sensitive_meta, "is_verified", False)
@@ -196,10 +196,11 @@ class MediaManagementView(APIView):
196
196
 
197
197
  if media_type == "video":
198
198
  video_file_obj = (
199
- VideoFile.get_video_by_id(self, video_id=file_id) if file_id else None
199
+ VideoFile.get_video_by_pk(pk=file_id) if file_id else None
200
200
  )
201
+
201
202
  elif media_type == "pdf":
202
- pdf_file_obj = RawPdfFile.get_pdf_by_id(file_id) if file_id else None
203
+ pdf_file_obj = RawPdfFile.get_pdf_by_pk(pk=file_id) if file_id else None
203
204
 
204
205
  with transaction.atomic():
205
206
  if video_file_obj:
@@ -414,7 +415,7 @@ def force_remove_media(request, file_id: int):
414
415
 
415
416
  return Response(
416
417
  {
417
- "detail": f"PDF file '{filename}' (ID: {file_id}) removed successfully",
418
+ "detail": f"report file '{filename}' (ID: {file_id}) removed successfully",
418
419
  "file_type": "pdf",
419
420
  "file_id": file_id,
420
421
  }
@@ -462,7 +463,7 @@ def reset_processing_status(request, file_id: int):
462
463
  except VideoFile.DoesNotExist:
463
464
  pass
464
465
 
465
- # PDF files don't have state, but we can clear anonymized_text
466
+ # report files don't have state, but we can clear anonymized_text
466
467
  try:
467
468
  pdf = RawPdfFile.objects.get(id=file_id)
468
469
  pdf.anonymized_text = ""
@@ -470,7 +471,7 @@ def reset_processing_status(request, file_id: int):
470
471
 
471
472
  return Response(
472
473
  {
473
- "detail": "PDF file processing reset",
474
+ "detail": "report file processing reset",
474
475
  "file_type": "pdf",
475
476
  "file_id": file_id,
476
477
  "new_status": "not_started",