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,96 +0,0 @@
1
- - model: endoreg_db.requirement_operator
2
- fields:
3
- name: "models_match_all"
4
- name_de: "Modelle existieren"
5
- name_en: "Models exist"
6
- description: "Make sure that all the provided Foreign Key models exist."
7
-
8
- - model: endoreg_db.requirement_operator
9
- fields:
10
- name: "models_match_any"
11
- name_de: "Mindestens ein Modell existiert"
12
- name_en: "At least one model exists"
13
- description: "Make sure that at least one of the provided Foreign Key models exist."
14
-
15
- - model: endoreg_db.requirement_operator
16
- fields:
17
- name: "models_match_none"
18
- name_de: "Kein Modell existiert"
19
- name_en: "No model exists"
20
- description: "Make sure that none of the provided Foreign Key models exist."
21
-
22
- - model: endoreg_db.requirement_operator
23
- fields:
24
- name: "models_match_n"
25
- name_de: " Exakt n Modelle existieren"
26
- name_en: "Exactly n models exist"
27
- description: "Make sure that exactly n of the provided Foreign Key models exist. The number n is defined using the numeric_value_min field."
28
-
29
- - model: endoreg_db.requirement_operator
30
- fields:
31
- name: "models_match_n_or_more"
32
- name_de: "Mindestens n Modelle existieren"
33
- name_en: "At least n models exist"
34
- description: "Make sure that at least n of the provided Foreign Key models exist. The number n is defined using the numeric_value_min field."
35
-
36
- - model: endoreg_db.requirement_operator
37
- fields:
38
- name: "models_match_n_or_less"
39
- name_de: "Höchstens n Modelle existieren"
40
- name_en: "At most n models exist"
41
- description: "Make sure that at most n of the provided Foreign Key models exist. The number n is defined using the numeric_value_min field."
42
-
43
- - model: endoreg_db.requirement_operator
44
- fields:
45
- name: "models_match_count_in_range"
46
- name_de: "Anzahl der Modelle liegt im angegebenen Bereich"
47
- name_en: "Number of models is in the given range"
48
- description: "Make sure that the number of provided Foreign Key models is in the given range. The range is defined using numeric_value_min and numeric_value_max."
49
-
50
- - model: endoreg_db.requirement_operator
51
- fields:
52
- name: "models_match_any_in_timeframe"
53
- name_de: "Mindestens ein Modell existiert im angegebenen Zeitraum"
54
- name_en: "At least one model exists in the given timeframe"
55
- description: "Make sure that at least one of the provided Foreign Key models exist and its associated date falls within the specified timeframe. Timeframe is defined by numeric_value_min, numeric_value_max, and unit on the Requirement."
56
-
57
- - model: endoreg_db.requirement_operator
58
- fields:
59
- name: "models_match_all_in_timeframe"
60
- name_de: "Modelle existieren im angegebenen Zeitraum"
61
- name_en: "Models exist in the given timeframe"
62
- description: "Make sure that all the provided Foreign Key models have a date within the given timeframe. The timeframe is defined using numeric_value_min and numeric_value_max and setting the unit to a fitting one (e.g. week)."
63
-
64
- - model: endoreg_db.requirement_operator
65
- fields:
66
- name: "models_match_none_in_timeframe"
67
- name_de: "Kein Modell existiert im angegebenen Zeitraum"
68
- name_en: "No model exists in the given timeframe"
69
- description: "Make sure that none of the provided Foreign Key models have a date within the given timeframe. The timeframe is defined using numeric_value_min and numeric_value_max and setting the unit to a fitting one (e.g. week)."
70
-
71
- - model: endoreg_db.requirement_operator
72
- fields:
73
- name: "models_match_n_in_timeframe"
74
- name_de: "Exakt n Modelle existieren im angegebenen Zeitraum"
75
- name_en: "Exactly n models exist in the given timeframe"
76
- description: "Make sure that exactly n of the provided Foreign Key models have a date within the given timeframe. The timeframe is defined using numeric_value_min and numeric_value_max and setting the unit to a fitting one (e.g. week). The number n is defined using the numeric_value_min field."
77
-
78
- - model: endoreg_db.requirement_operator
79
- fields:
80
- name: "models_match_n_or_more_in_timeframe"
81
- name_de: "Mindestens n Modelle existieren im angegebenen Zeitraum"
82
- name_en: "At least n models exist in the given timeframe"
83
- description: "Make sure that at least n of the provided Foreign Key models have a date within the given timeframe. The timeframe is defined using numeric_value_min and numeric_value_max and setting the unit to a fitting one (e.g. week). The number n is defined using the numeric_value_min field."
84
-
85
- - model: endoreg_db.requirement_operator
86
- fields:
87
- name: "models_match_n_or_less_in_timeframe"
88
- name_de: "Höchstens n Modelle existieren im angegebenen Zeitraum"
89
- name_en: "At most n models exist in the given timeframe"
90
- description: "Make sure that at most n of the provided Foreign Key models have a date within the given timeframe. The timeframe is defined using numeric_value_min and numeric_value_max and setting the unit to a fitting one (e.g. week). The number n is defined using the numeric_value_min field."
91
-
92
- - model: endoreg_db.requirement_operator
93
- fields:
94
- name: "patient_medication_schedule_matches_template"
95
- description: "Checks if any PatientMedication in the input PatientMedicationSchedule matches the profile (medication, dose, unit, intake times) of any MedicationSchedule template linked to the requirement."
96
- evaluation_function_name: "_evaluate_patient_medication_schedule_matches_template"
@@ -1,112 +0,0 @@
1
- """
2
- Django management command to initialize the default AI model with metadata.
3
- This command ensures that a default AI model exists with proper ModelMeta records.
4
- """
5
-
6
- from django.core.management.base import BaseCommand
7
- from django.core.management import call_command
8
- from pathlib import Path
9
- #FIXME
10
- from endoreg_db.data.ai_model_meta import (
11
- default_multilabel_classification
12
- )
13
-
14
- from endoreg_db.models import AiModel
15
- from endoreg_db.helpers.data_loader import (
16
- load_ai_model_label_data,
17
- load_ai_model_data,
18
- )
19
-
20
-
21
- class Command(BaseCommand):
22
- help = """
23
- Initialize the default AI model with metadata.
24
- This command ensures that the default segmentation model exists with proper ModelMeta records.
25
- """
26
-
27
- def add_arguments(self, parser):
28
- """
29
- Adds the --force command-line argument to control metadata recreation.
30
-
31
- The --force flag, when specified, forces the recreation of model metadata even if it already exists.
32
- """
33
- parser.add_argument(
34
- '--force',
35
- action='store_true',
36
- help='Force recreation of the model metadata even if it exists',
37
- )
38
-
39
- def handle(self, *args, **options):
40
- """
41
- Initializes the default AI model and its metadata, creating or updating as needed.
42
-
43
- Loads required AI model label and model data, ensures the presence of a default AI model, and creates associated model metadata if it does not already exist or if the `--force` flag is specified. Generates a dummy weights file if necessary and invokes the metadata creation command. Verifies successful creation and outputs status messages throughout the process.
44
- """
45
- force = options.get('force', False)
46
- default_multilabel_classification()
47
- # First ensure the basic AI model data is loaded
48
- self.stdout.write("Loading AI model label data...")
49
- load_ai_model_label_data()
50
-
51
- self.stdout.write("Loading AI model data...")
52
- load_ai_model_data()
53
-
54
- # Check if default model exists
55
- default_model_name = "image_multilabel_classification_colonoscopy_default"
56
-
57
- try:
58
- ai_model = AiModel.objects.get(name=default_model_name)
59
- self.stdout.write(f"Found AI model: {ai_model.name}")
60
- except AiModel.DoesNotExist:
61
- self.stdout.write(
62
- self.style.ERROR(f"AI model '{default_model_name}' not found. Make sure AI model data is loaded.")
63
- )
64
- return
65
-
66
- # Check if model metadata exists
67
- existing_meta = ai_model.metadata_versions.first()
68
- if existing_meta and not force:
69
- self.stdout.write(
70
- self.style.SUCCESS(f"Model metadata already exists for {ai_model.name}. Use --force to recreate.")
71
- )
72
- return
73
-
74
- # Create default model metadata
75
- self.stdout.write("Creating default model metadata...")
76
-
77
- # Use a dummy weights file path for now - in production this should point to actual model weights
78
- dummy_weights_path = Path(__file__).parent.parent.parent / "assets" / "dummy_model.safetensors"
79
-
80
- # Create the dummy weights file if it doesn't exist
81
- dummy_weights_path.parent.mkdir(parents=True, exist_ok=True)
82
- if not dummy_weights_path.exists():
83
- dummy_weights_path.write_bytes(b"dummy weights content")
84
- self.stdout.write(f"Created dummy weights file at {dummy_weights_path}")
85
-
86
- try:
87
- # Create ModelMeta using the create_multilabel_model_meta command
88
- call_command(
89
- "create_multilabel_model_meta",
90
- "--model_path", str(dummy_weights_path),
91
- "--model_name", default_model_name,
92
- "--image_classification_labelset_name", "multilabel_classification_colonoscopy",
93
- "--activation_function_name", "sigmoid",
94
- "--model_meta_version", "1",
95
- )
96
-
97
- self.stdout.write(
98
- self.style.SUCCESS(f"Successfully created model metadata for {default_model_name}")
99
- )
100
-
101
- # Verify the model can be retrieved
102
- from endoreg_db.helpers.default_objects import get_latest_segmentation_model
103
- model_meta = get_latest_segmentation_model()
104
- self.stdout.write(
105
- self.style.SUCCESS(f"Verified: Model metadata can be retrieved: {model_meta}")
106
- )
107
-
108
- except Exception as e:
109
- self.stdout.write(
110
- self.style.ERROR(f"Failed to create model metadata: {e}")
111
- )
112
- raise
@@ -1,9 +0,0 @@
1
- from django.core.management.base import BaseCommand
2
- from django_celery_beat.models import PeriodicTask
3
-
4
- class Command(BaseCommand):
5
- help = 'Deletes all periodic tasks from the database to reset the schedule'
6
-
7
- def handle(self, *args, **kwargs):
8
- PeriodicTask.objects.all().delete()
9
- self.stdout.write(self.style.SUCCESS('Successfully deleted all periodic tasks.'))
@@ -1,204 +0,0 @@
1
- from django.core.management.base import BaseCommand
2
- from endoreg_db.models import VideoFile
3
- from endoreg_db.helpers.default_objects import get_latest_segmentation_model
4
- from django.db.models import Q # Add this import
5
-
6
- # VideoFile instances have a related 'state' (a VideoState object).
7
- # VideoState uses boolean fields (e.g., state.anonymized, state.initial_prediction_completed)
8
- # to track the processing status, rather than a single status field with choices.
9
- # This command interprets combinations of these boolean fields to determine
10
- # if a video is considered "validated" or "anonymized".
11
- # The VideoState model itself is defined in endoreg_db/models/state/video.py (or similar)
12
- # and does not contain an enum like the previously assumed 'VideoFileStateChoices'.
13
-
14
- class Command(BaseCommand):
15
- help = "Data extraction and validation of video files in the database and updating their states accordingly."
16
-
17
- def add_arguments(self, parser):
18
- """
19
- Adds command-line arguments for verbose output, forced revalidation, and anonymization.
20
-
21
- This method configures the management command to accept optional flags:
22
- --verbose for detailed output, --force to revalidate all videos regardless of status,
23
- and --anonymize to anonymize video files during processing.
24
- """
25
- parser.add_argument(
26
- "--verbose",
27
- action="store_true",
28
- help="Display verbose output",
29
- )
30
- parser.add_argument(
31
- "--force",
32
- action="store_true",
33
- help="Force revalidation of all video files, even if they are already validated.",
34
- )
35
- parser.add_argument(
36
- "--anonymize",
37
- action="store_true",
38
- help="Anonymize video files.",
39
- )
40
-
41
- def handle(self, *args, **options):
42
- """
43
- Validates video files stored in the database and updates their validation states.
44
-
45
- This method processes video files according to the provided command-line options,
46
- such as verbose output, forced revalidation, or anonymization.
47
- It interprets the boolean flags in the related VideoState object to determine
48
- if a video is 'validated' (e.g., initial_prediction_completed and lvs_created are True)
49
- or 'anonymized' (e.g., anonymized is True).
50
- """
51
- #TODO @maxhild here is some ai generated code for now, not validated yet
52
- verbose = options["verbose"]
53
- force = options["force"]
54
- anonymize_option = options["anonymize"]
55
-
56
- if verbose:
57
- self.stdout.write(self.style.SUCCESS("Starting video validation and/or anonymization process..."))
58
-
59
- # Eager load related state if VideoFile.state is a ForeignKey or OneToOneField
60
- videos_query = VideoFile.objects.select_related('state').all()
61
-
62
- # Define conditions for "validated" and "anonymized" based on VideoState boolean fields
63
- # Validated: initial_prediction_completed = True AND lvs_created = True
64
- q_validated = Q(state__initial_prediction_completed=True, state__lvs_created=True)
65
- # Anonymized: anonymized = True
66
- q_anonymized = Q(state__anonymized=True)
67
-
68
- if not force:
69
- if anonymize_option:
70
- # If anonymization is the goal, process videos not yet anonymized.
71
- videos_query = videos_query.exclude(q_anonymized)
72
- else:
73
- # If only validation is the goal, process videos not yet validated or anonymized.
74
- videos_query = videos_query.exclude(q_validated | q_anonymized)
75
-
76
- videos_to_process = list(videos_query)
77
-
78
- if not videos_to_process:
79
- if verbose:
80
- self.stdout.write(self.style.SUCCESS("No videos found requiring processing with the current options."))
81
- return
82
-
83
- processed_count = 0
84
- failed_count = 0
85
- model_name_for_pipe1 = None
86
-
87
- try:
88
- # Attempt to get the model for pipe_1. This might be optional for pipe_1.
89
- ai_model_meta = get_latest_segmentation_model()
90
- model_name_for_pipe1 = ai_model_meta.model.name
91
- if verbose:
92
- self.stdout.write(self.style.SUCCESS(f"Using model '{model_name_for_pipe1}' for pipe_1 processing."))
93
- except Exception as e:
94
- self.stdout.write(self.style.WARNING(f"Could not retrieve segmentation model: {e}. pipe_1 might proceed without a specific model or use a default."))
95
- # model_name_for_pipe1 can remain None if pipe_1 handles it, or set a default if known.
96
-
97
- for video in videos_to_process:
98
- state_summary = "N/A"
99
- if hasattr(video, 'state') and video.state:
100
- s = video.state
101
- state_summary = f"anonymized={s.anonymized}, predicted={s.initial_prediction_completed}, lvs_created={s.lvs_created}"
102
-
103
- if verbose:
104
- self.stdout.write(f"Processing video: {video.uuid} (Current state: {state_summary})")
105
-
106
- try:
107
- # Determine if pipe_1 needs to run
108
- needs_pipe_1 = force
109
- if not force and hasattr(video, 'state') and video.state:
110
- s = video.state
111
- is_validated = s.initial_prediction_completed and s.lvs_created
112
- is_anonymized = s.anonymized
113
- if not (is_validated or is_anonymized):
114
- needs_pipe_1 = True
115
- elif not force: # No state object, assume it needs processing
116
- needs_pipe_1 = True
117
-
118
-
119
- if needs_pipe_1:
120
- if verbose:
121
- self.stdout.write(f"Running pipe_1 for video {video.uuid} (force={force})...")
122
- if not model_name_for_pipe1 and verbose:
123
- self.stdout.write(self.style.WARNING(f"Attempting pipe_1 for {video.uuid} without a specific model name."))
124
-
125
- success_pipe_1 = video.pipe_1(model_name=model_name_for_pipe1)
126
- video.refresh_from_db()
127
-
128
- new_state_summary = "N/A"
129
- if hasattr(video, 'state') and video.state:
130
- s = video.state
131
- new_state_summary = f"anonymized={s.anonymized}, predicted={s.initial_prediction_completed}, lvs_created={s.lvs_created}"
132
-
133
- if not success_pipe_1:
134
- raise Exception(f"pipe_1 validation failed for video {video.uuid}. State after attempt: {new_state_summary}")
135
-
136
- if verbose:
137
- self.stdout.write(self.style.SUCCESS(f"Video {video.uuid} successfully passed pipe_1. New state: {new_state_summary}"))
138
- elif verbose:
139
- self.stdout.write(f"Video {video.uuid} already meets validation criteria or is anonymized, skipping pipe_1 (force=False).")
140
-
141
- # Anonymization step
142
- if anonymize_option:
143
- should_anonymize = False
144
- current_state_summary_for_anonym = "N/A"
145
- if hasattr(video, 'state') and video.state:
146
- s = video.state
147
- current_state_summary_for_anonym = f"anonymized={s.anonymized}, predicted={s.initial_prediction_completed}, lvs_created={s.lvs_created}"
148
- is_validated_for_anonymization = s.initial_prediction_completed and s.lvs_created
149
- is_currently_anonymized = s.anonymized
150
- if force or (is_validated_for_anonymization and not is_currently_anonymized):
151
- should_anonymize = True
152
- elif force: # No state, but force anonymize
153
- should_anonymize = True
154
-
155
-
156
- if should_anonymize:
157
- if verbose:
158
- self.stdout.write(f"Attempting to anonymize video: {video.uuid} (force={force}, current_state_before_anonym={current_state_summary_for_anonym}).")
159
-
160
- if hasattr(video, 'anonymize_video_content'):
161
- video.anonymize_video_content()
162
- video.refresh_from_db()
163
- else:
164
- self.stdout.write(self.style.ERROR(f"Video model does not have 'anonymize_video_content' method. Skipping anonymization for {video.uuid}."))
165
- # Potentially raise an error or handle as a failure
166
-
167
- post_anonym_state_summary = "N/A"
168
- is_now_anonymized = False
169
- if hasattr(video, 'state') and video.state:
170
- s = video.state
171
- post_anonym_state_summary = f"anonymized={s.anonymized}, predicted={s.initial_prediction_completed}, lvs_created={s.lvs_created}"
172
- is_now_anonymized = s.anonymized
173
-
174
- if is_now_anonymized:
175
- if verbose:
176
- self.stdout.write(self.style.SUCCESS(f"Video {video.uuid} successfully anonymized. New state: {post_anonym_state_summary}"))
177
- else:
178
- if hasattr(video, 'anonymize_video_content'): # Only raise if we attempted
179
- raise Exception(f"Anonymization called but video is not marked as anonymized for video {video.uuid}. Current state: {post_anonym_state_summary}")
180
-
181
- elif hasattr(video, 'state') and video.state and video.state.anonymized and verbose: # Already anonymized
182
- self.stdout.write(f"Video {video.uuid} is already anonymized.")
183
- elif verbose:
184
- self.stdout.write(f"Skipping anonymization for video {video.uuid} (not validated for anonymization, or already anonymized and not forced).")
185
-
186
- processed_count += 1
187
- except Exception as e:
188
- failed_count += 1
189
- video.refresh_from_db()
190
- error_state_summary = "N/A"
191
- if hasattr(video, 'state') and video.state:
192
- s = video.state
193
- error_state_summary = f"anonymized={s.anonymized}, predicted={s.initial_prediction_completed}, lvs_created={s.lvs_created}"
194
- self.stdout.write(self.style.ERROR(f"Error processing video {video.uuid}: {e}. State after error: {error_state_summary}"))
195
- # Optionally, explicitly set an error state if the methods don't do it reliably:
196
- # if hasattr(video, 'state') and video.state: # Further checks would depend on how an error state is defined with booleans
197
- # # video.state.set_status(VideoFile.VideoFileStateChoices.ERROR, message=f"Validation command error: {str(e)[:250]}") # Old way
198
- # # video.state.save() # New way would involve setting specific boolean flags to indicate error
199
- pass
200
-
201
-
202
- if verbose:
203
- self.stdout.write(self.style.SUCCESS(f"Video processing finished. Succeeded: {processed_count}, Failed: {failed_count}."))
204
-
@@ -1,18 +0,0 @@
1
- # Generated by Django 5.2.7 on 2025-11-21 15:19
2
-
3
- from django.db import migrations, models
4
-
5
-
6
- class Migration(migrations.Migration):
7
-
8
- dependencies = [
9
- ('endoreg_db', '0001_initial'),
10
- ]
11
-
12
- operations = [
13
- migrations.AddField(
14
- model_name='requirementset',
15
- name='depends_on',
16
- field=models.ManyToManyField(blank=True, help_text="Andere RequirementSets, die zuerst erfüllt sein müssen, bevor dieses Set geprüft wird ('after').", related_name='dependents', to='endoreg_db.requirementset'),
17
- ),
18
- ]