endoreg-db 0.6.4__py3-none-any.whl → 0.8.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 (779) hide show
  1. endoreg_db/admin.py +26 -26
  2. endoreg_db/api_urls.py +4 -0
  3. endoreg_db/apps.py +12 -0
  4. endoreg_db/assets/dummy_model.ckpt +1 -0
  5. endoreg_db/codemods/readme.md +88 -0
  6. endoreg_db/codemods/rename_datetime_fields.py +92 -0
  7. endoreg_db/config/env.py +101 -0
  8. endoreg_db/data/__init__.py +12 -0
  9. endoreg_db/data/ai_model/data.yaml +1 -1
  10. endoreg_db/data/ai_model_label/label/polyp_classification.yaml +52 -0
  11. endoreg_db/data/ai_model_label/label-set/data.yaml +20 -1
  12. endoreg_db/data/ai_model_label/label-set/polyp_classifications.yaml +25 -0
  13. endoreg_db/data/center/data.yaml +13 -12
  14. endoreg_db/data/center_shift/ukw.yaml +9 -0
  15. endoreg_db/data/db_summary.csv +58 -0
  16. endoreg_db/data/db_summary.xlsx +0 -0
  17. endoreg_db/data/disease/misc.yaml +1 -2
  18. endoreg_db/data/endoscopy_processor/data.yaml +3 -0
  19. endoreg_db/data/event/cardiology.yaml +0 -13
  20. endoreg_db/data/examination/examinations/data.yaml +14 -9
  21. endoreg_db/data/examination_indication/endoscopy.yaml +30 -30
  22. endoreg_db/data/examination_indication_classification/endoscopy.yaml +11 -11
  23. endoreg_db/data/examination_requirement_set/colonoscopy.yaml +15 -0
  24. endoreg_db/data/finding/anatomy_colon.yaml +128 -0
  25. endoreg_db/data/finding/colonoscopy.yaml +40 -0
  26. endoreg_db/data/finding/colonoscopy_bowel_prep.yaml +56 -0
  27. endoreg_db/data/finding/complication.yaml +16 -0
  28. endoreg_db/data/finding/data.yaml +3 -46
  29. endoreg_db/data/finding/examination_setting.yaml +16 -0
  30. endoreg_db/data/finding/medication_related.yaml +18 -0
  31. endoreg_db/data/finding/outcome.yaml +12 -0
  32. endoreg_db/data/finding_classification/colonoscopy_bowel_preparation.yaml +95 -0
  33. endoreg_db/data/finding_classification/colonoscopy_jnet.yaml +22 -0
  34. endoreg_db/data/finding_classification/colonoscopy_kudo.yaml +25 -0
  35. endoreg_db/data/finding_classification/colonoscopy_lesion_circularity.yaml +20 -0
  36. endoreg_db/data/finding_classification/colonoscopy_lesion_planarity.yaml +24 -0
  37. endoreg_db/data/finding_classification/colonoscopy_lesion_size.yaml +68 -0
  38. endoreg_db/data/finding_classification/colonoscopy_lesion_surface.yaml +20 -0
  39. endoreg_db/data/finding_classification/colonoscopy_location.yaml +80 -0
  40. endoreg_db/data/finding_classification/colonoscopy_lst.yaml +21 -0
  41. endoreg_db/data/finding_classification/colonoscopy_nice.yaml +20 -0
  42. endoreg_db/data/finding_classification/colonoscopy_paris.yaml +26 -0
  43. endoreg_db/data/finding_classification/colonoscopy_sano.yaml +22 -0
  44. endoreg_db/data/finding_classification/colonoscopy_summary.yaml +53 -0
  45. endoreg_db/data/finding_classification/complication_generic.yaml +25 -0
  46. endoreg_db/data/finding_classification/examination_setting_generic.yaml +40 -0
  47. endoreg_db/data/finding_classification/histology_colo.yaml +51 -0
  48. endoreg_db/data/finding_classification/intervention_required.yaml +26 -0
  49. endoreg_db/data/finding_classification/medication_related.yaml +23 -0
  50. endoreg_db/data/finding_classification/visualized.yaml +33 -0
  51. endoreg_db/data/finding_classification_choice/bowel_preparation.yaml +78 -0
  52. endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_circularity_default.yaml +0 -2
  53. endoreg_db/data/finding_classification_choice/colon_lesion_jnet.yaml +15 -0
  54. endoreg_db/data/finding_classification_choice/colon_lesion_kudo.yaml +23 -0
  55. endoreg_db/data/finding_classification_choice/colon_lesion_lst.yaml +15 -0
  56. endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_nice.yaml +4 -7
  57. endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_paris.yaml +0 -8
  58. endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_planarity_default.yaml +6 -13
  59. endoreg_db/data/finding_classification_choice/colon_lesion_sano.yaml +14 -0
  60. endoreg_db/data/{finding_morphology_classification_choice → finding_classification_choice}/colon_lesion_surface_intact_default.yaml +3 -6
  61. endoreg_db/data/{finding_location_classification_choice/colonoscopy.yaml → finding_classification_choice/colonoscopy_location.yaml} +11 -22
  62. endoreg_db/data/finding_classification_choice/colonoscopy_not_complete_reason.yaml +19 -0
  63. endoreg_db/data/finding_classification_choice/colonoscopy_size.yaml +82 -0
  64. endoreg_db/data/finding_classification_choice/colonoscopy_summary_worst_finding.yaml +15 -0
  65. endoreg_db/data/finding_classification_choice/complication_generic_types.yaml +15 -0
  66. endoreg_db/data/finding_classification_choice/examination_setting_generic_types.yaml +15 -0
  67. endoreg_db/data/finding_classification_choice/histology.yaml +24 -0
  68. endoreg_db/data/finding_classification_choice/histology_polyp.yaml +20 -0
  69. endoreg_db/data/finding_classification_choice/outcome.yaml +19 -0
  70. endoreg_db/data/finding_classification_choice/yes_no_na.yaml +11 -0
  71. endoreg_db/data/finding_classification_type/colonoscopy_basic.yaml +48 -0
  72. endoreg_db/data/finding_intervention/endoscopy_colonoscopy.yaml +8 -3
  73. endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +6 -6
  74. endoreg_db/data/finding_type/data.yaml +23 -10
  75. endoreg_db/data/gender/data.yaml +8 -1
  76. endoreg_db/data/information_source/annotation.yaml +6 -0
  77. endoreg_db/data/information_source/prediction.yaml +7 -0
  78. endoreg_db/data/information_source_type/data.yaml +8 -0
  79. endoreg_db/data/lab_value/misc.yaml +43 -0
  80. endoreg_db/data/medication/anticoagulation.yaml +5 -5
  81. endoreg_db/data/medication/tah.yaml +5 -5
  82. endoreg_db/data/medication_intake_time/base.yaml +4 -4
  83. endoreg_db/data/names_first/first_names.yaml +3 -0
  84. endoreg_db/data/pdf_type/data.yaml +26 -2
  85. endoreg_db/data/qualification/endoscopy.yaml +36 -0
  86. endoreg_db/data/qualification/m2.yaml +39 -0
  87. endoreg_db/data/qualification/outpatient_clinic.yaml +35 -0
  88. endoreg_db/data/qualification/sonography.yaml +36 -0
  89. endoreg_db/data/qualification_type/base.yaml +29 -0
  90. endoreg_db/data/report_reader_flag/rkh-histology-generic.yaml +10 -0
  91. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +5 -0
  92. endoreg_db/data/requirement/age.yaml +26 -0
  93. endoreg_db/data/requirement/colonoscopy_baseline_austria.yaml +45 -0
  94. endoreg_db/data/requirement/disease_cardiovascular.yaml +6 -6
  95. endoreg_db/data/requirement/disease_classification_choice_cardiovascular.yaml +9 -6
  96. endoreg_db/data/requirement/disease_hepatology.yaml +1 -1
  97. endoreg_db/data/requirement/disease_misc.yaml +3 -3
  98. endoreg_db/data/requirement/disease_renal.yaml +18 -2
  99. endoreg_db/data/requirement/{colonoscopy_indications.yaml → endoscopy_bleeding_risk.yaml} +6 -3
  100. endoreg_db/data/requirement/event_cardiology.yaml +17 -17
  101. endoreg_db/data/requirement/event_requirements.yaml +145 -0
  102. endoreg_db/data/requirement/finding_colon_polyp.yaml +50 -0
  103. endoreg_db/data/requirement/gender.yaml +25 -0
  104. endoreg_db/data/requirement/lab_value.yaml +352 -31
  105. endoreg_db/data/requirement/medication.yaml +93 -0
  106. endoreg_db/data/requirement_operator/age.yaml +13 -0
  107. endoreg_db/data/requirement_operator/lab_operators.yaml +36 -35
  108. endoreg_db/data/requirement_operator/model_operators.yaml +13 -7
  109. endoreg_db/data/requirement_set/01_endoscopy_generic.yaml +48 -0
  110. endoreg_db/data/requirement_set/colonoscopy_austria_screening.yaml +57 -0
  111. endoreg_db/data/requirement_set/endoscopy_bleeding_risk.yaml +42 -2
  112. endoreg_db/data/requirement_type/requirement_types.yaml +82 -0
  113. endoreg_db/data/shift/endoscopy.yaml +21 -0
  114. endoreg_db/data/shift_type/base.yaml +35 -0
  115. endoreg_db/data/tag/requirement_set_tags.yaml +11 -0
  116. endoreg_db/data/unit/concentration.yaml +23 -0
  117. endoreg_db/exceptions.py +19 -0
  118. endoreg_db/forms/patient_finding_intervention_form.py +4 -5
  119. endoreg_db/forms/patient_form.py +7 -6
  120. endoreg_db/forms/questionnaires/__init__.py +1 -1
  121. endoreg_db/forms/questionnaires/tto_questionnaire.py +19 -19
  122. endoreg_db/helpers/count_db.py +45 -0
  123. endoreg_db/helpers/data_loader.py +208 -0
  124. endoreg_db/helpers/default_objects.py +359 -0
  125. endoreg_db/helpers/download_segmentation_model.py +31 -0
  126. endoreg_db/helpers/interact.py +6 -0
  127. endoreg_db/helpers/test_video_helper.py +119 -0
  128. endoreg_db/logger_conf.py +140 -0
  129. endoreg_db/management/__init__.py +1 -0
  130. endoreg_db/management/commands/__init__.py +1 -0
  131. endoreg_db/management/commands/anonymize_video.py +0 -0
  132. endoreg_db/management/commands/check_auth.py +125 -0
  133. endoreg_db/management/commands/create_multilabel_model_meta.py +214 -0
  134. endoreg_db/management/commands/fix_missing_patient_data.py +172 -0
  135. endoreg_db/management/commands/fix_video_paths.py +165 -0
  136. endoreg_db/management/commands/import_fallback_video.py +203 -0
  137. endoreg_db/management/commands/import_report.py +298 -0
  138. endoreg_db/management/commands/import_video.py +422 -0
  139. endoreg_db/management/commands/import_video_with_classification.py +367 -0
  140. endoreg_db/management/commands/init_default_ai_model.py +112 -0
  141. endoreg_db/management/commands/load_ai_model_data.py +2 -7
  142. endoreg_db/management/commands/load_base_db_data.py +1 -0
  143. endoreg_db/management/commands/load_endoscope_data.py +2 -2
  144. endoreg_db/management/commands/load_examination_indication_data.py +2 -3
  145. endoreg_db/management/commands/load_finding_data.py +49 -92
  146. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +0 -1
  147. endoreg_db/management/commands/load_information_source.py +13 -7
  148. endoreg_db/management/commands/load_name_data.py +37 -0
  149. endoreg_db/management/commands/load_qualification_data.py +59 -0
  150. endoreg_db/management/commands/load_requirement_data.py +30 -6
  151. endoreg_db/management/commands/load_shift_data.py +60 -0
  152. endoreg_db/management/commands/load_tag_data.py +57 -0
  153. endoreg_db/management/commands/register_ai_model.py +1 -1
  154. endoreg_db/management/commands/start_filewatcher.py +106 -0
  155. endoreg_db/management/commands/storage_management.py +548 -0
  156. endoreg_db/management/commands/summarize_db_content.py +189 -0
  157. endoreg_db/management/commands/validate_video.py +204 -0
  158. endoreg_db/management/commands/validate_video_files.py +161 -0
  159. endoreg_db/management/commands/video_validation.py +22 -0
  160. endoreg_db/migrations/0001_initial.py +625 -813
  161. endoreg_db/migrations/0002_add_video_correction_models.py +52 -0
  162. endoreg_db/models/__init__.py +270 -307
  163. endoreg_db/models/administration/__init__.py +116 -0
  164. endoreg_db/models/{ai_model → administration/ai}/__init__.py +6 -1
  165. endoreg_db/models/administration/ai/active_model.py +35 -0
  166. endoreg_db/models/administration/ai/ai_model.py +156 -0
  167. endoreg_db/models/{ai_model → administration/ai}/model_type.py +6 -1
  168. endoreg_db/models/administration/case/__init__.py +19 -0
  169. endoreg_db/models/administration/case/case.py +114 -0
  170. endoreg_db/models/{case_template → administration/case/case_template}/case_template.py +3 -3
  171. endoreg_db/models/{case_template → administration/case/case_template}/case_template_rule.py +3 -10
  172. endoreg_db/models/{case_template → administration/case/case_template}/case_template_rule_value.py +2 -4
  173. endoreg_db/models/{case_template → administration/case/case_template}/case_template_type.py +1 -3
  174. endoreg_db/models/{center → administration/center}/__init__.py +3 -1
  175. endoreg_db/models/administration/center/center.py +61 -0
  176. endoreg_db/models/administration/center/center_product.py +64 -0
  177. endoreg_db/models/{center → administration/center}/center_resource.py +19 -3
  178. endoreg_db/models/administration/center/center_shift.py +88 -0
  179. endoreg_db/models/administration/center/center_waste.py +30 -0
  180. endoreg_db/models/administration/permissions/__init__.py +44 -0
  181. endoreg_db/models/administration/person/__init__.py +24 -0
  182. endoreg_db/models/administration/person/employee/__init__.py +3 -0
  183. endoreg_db/models/administration/person/employee/employee.py +35 -0
  184. endoreg_db/models/administration/person/employee/employee_qualification.py +39 -0
  185. endoreg_db/models/administration/person/employee/employee_type.py +42 -0
  186. endoreg_db/models/administration/person/examiner/__init__.py +4 -0
  187. endoreg_db/models/administration/person/examiner/examiner.py +54 -0
  188. endoreg_db/models/administration/person/names/__init__.py +0 -0
  189. endoreg_db/models/{persons → administration/person/names}/first_name.py +1 -1
  190. endoreg_db/models/{persons → administration/person/names}/last_name.py +2 -3
  191. endoreg_db/models/administration/person/patient/__init__.py +5 -0
  192. endoreg_db/models/administration/person/patient/patient.py +460 -0
  193. endoreg_db/models/administration/person/profession/__init__.py +24 -0
  194. endoreg_db/models/administration/person/user/__init__.py +5 -0
  195. endoreg_db/models/administration/person/user/portal_user_information.py +37 -0
  196. endoreg_db/models/administration/product/product.py +97 -0
  197. endoreg_db/models/administration/product/product_group.py +39 -0
  198. endoreg_db/models/administration/product/product_material.py +54 -0
  199. endoreg_db/models/{product → administration/product}/product_weight.py +9 -0
  200. endoreg_db/models/{product → administration/product}/reference_product.py +26 -11
  201. endoreg_db/models/administration/qualification/__init__.py +7 -0
  202. endoreg_db/models/administration/qualification/qualification.py +37 -0
  203. endoreg_db/models/administration/qualification/qualification_type.py +35 -0
  204. endoreg_db/models/administration/shift/__init__.py +9 -0
  205. endoreg_db/models/administration/shift/scheduled_days.py +69 -0
  206. endoreg_db/models/administration/shift/shift.py +51 -0
  207. endoreg_db/models/administration/shift/shift_type.py +108 -0
  208. endoreg_db/models/label/__init__.py +24 -1
  209. endoreg_db/models/label/annotation/__init__.py +12 -0
  210. endoreg_db/models/label/annotation/image_classification.py +84 -0
  211. endoreg_db/models/label/annotation/video_segmentation_annotation.py +66 -0
  212. endoreg_db/models/label/label.py +45 -74
  213. endoreg_db/models/label/label_set.py +53 -0
  214. endoreg_db/models/label/label_type.py +29 -0
  215. endoreg_db/models/label/label_video_segment/__init__.py +3 -0
  216. endoreg_db/models/label/label_video_segment/_create_from_video.py +41 -0
  217. endoreg_db/models/label/label_video_segment/label_video_segment.py +511 -0
  218. endoreg_db/models/label/video_segmentation_label.py +31 -0
  219. endoreg_db/models/{annotation → label}/video_segmentation_labelset.py +7 -0
  220. endoreg_db/models/media/__init__.py +14 -0
  221. endoreg_db/models/media/frame/__init__.py +3 -0
  222. endoreg_db/models/media/frame/frame.py +111 -0
  223. endoreg_db/models/media/pdf/__init__.py +11 -0
  224. endoreg_db/models/media/pdf/raw_pdf.py +608 -0
  225. endoreg_db/models/media/pdf/report_file.py +162 -0
  226. endoreg_db/models/media/pdf/report_reader/report_reader_config.py +77 -0
  227. endoreg_db/models/media/video/__init__.py +4 -0
  228. endoreg_db/models/media/video/create_from_file.py +336 -0
  229. endoreg_db/models/media/video/pipe_1.py +207 -0
  230. endoreg_db/models/media/video/pipe_2.py +105 -0
  231. endoreg_db/models/media/video/refactor_plan.md +0 -0
  232. endoreg_db/models/media/video/video_file.py +680 -0
  233. endoreg_db/models/media/video/video_file_ai.py +443 -0
  234. endoreg_db/models/media/video/video_file_anonymize.py +348 -0
  235. endoreg_db/models/media/video/video_file_frames/__init__.py +47 -0
  236. endoreg_db/models/media/video/video_file_frames/_bulk_create_frames.py +22 -0
  237. endoreg_db/models/media/video/video_file_frames/_create_frame_object.py +23 -0
  238. endoreg_db/models/media/video/video_file_frames/_delete_frames.py +104 -0
  239. endoreg_db/models/media/video/video_file_frames/_extract_frames.py +174 -0
  240. endoreg_db/models/media/video/video_file_frames/_get_frame.py +28 -0
  241. endoreg_db/models/media/video/video_file_frames/_get_frame_number.py +27 -0
  242. endoreg_db/models/media/video/video_file_frames/_get_frame_path.py +20 -0
  243. endoreg_db/models/media/video/video_file_frames/_get_frame_paths.py +27 -0
  244. endoreg_db/models/media/video/video_file_frames/_get_frame_range.py +34 -0
  245. endoreg_db/models/media/video/video_file_frames/_get_frames.py +27 -0
  246. endoreg_db/models/media/video/video_file_frames/_initialize_frames.py +129 -0
  247. endoreg_db/models/media/video/video_file_frames/_manage_frame_range.py +129 -0
  248. endoreg_db/models/media/video/video_file_frames/_mark_frames_extracted_status.py +65 -0
  249. endoreg_db/models/media/video/video_file_frames.py +0 -0
  250. endoreg_db/models/media/video/video_file_io.py +166 -0
  251. endoreg_db/models/media/video/video_file_meta/__init__.py +22 -0
  252. endoreg_db/models/media/video/video_file_meta/get_crop_template.py +45 -0
  253. endoreg_db/models/media/video/video_file_meta/get_endo_roi.py +39 -0
  254. endoreg_db/models/media/video/video_file_meta/get_fps.py +147 -0
  255. endoreg_db/models/media/video/video_file_meta/initialize_video_specs.py +143 -0
  256. endoreg_db/models/media/video/video_file_meta/text_meta.py +134 -0
  257. endoreg_db/models/media/video/video_file_meta/video_meta.py +70 -0
  258. endoreg_db/models/media/video/video_file_meta.py +11 -0
  259. endoreg_db/models/media/video/video_file_segments.py +209 -0
  260. endoreg_db/models/medical/__init__.py +146 -0
  261. endoreg_db/models/{contraindication → medical/contraindication}/__init__.py +1 -5
  262. endoreg_db/models/{disease.py → medical/disease.py} +60 -52
  263. endoreg_db/models/{event.py → medical/event.py} +31 -54
  264. endoreg_db/models/{examination → medical/examination}/__init__.py +1 -1
  265. endoreg_db/models/medical/examination/examination.py +148 -0
  266. endoreg_db/models/{examination → medical/examination}/examination_indication.py +64 -35
  267. endoreg_db/models/{examination → medical/examination}/examination_time.py +0 -4
  268. endoreg_db/models/{examination → medical/examination}/examination_time_type.py +1 -8
  269. endoreg_db/models/{examination → medical/examination}/examination_type.py +1 -7
  270. endoreg_db/models/medical/finding/__init__.py +18 -0
  271. endoreg_db/models/medical/finding/finding.py +96 -0
  272. endoreg_db/models/medical/finding/finding_classification.py +142 -0
  273. endoreg_db/models/{finding → medical/finding}/finding_intervention.py +2 -10
  274. endoreg_db/models/medical/finding/finding_type.py +35 -0
  275. endoreg_db/models/medical/hardware/__init__.py +8 -0
  276. endoreg_db/models/{hardware → medical/hardware}/endoscope.py +28 -23
  277. endoreg_db/models/medical/laboratory/__init__.py +5 -0
  278. endoreg_db/models/medical/laboratory/lab_value.py +419 -0
  279. endoreg_db/models/{medication → medical/medication}/medication.py +1 -3
  280. endoreg_db/models/{medication → medical/medication}/medication_indication_type.py +8 -3
  281. endoreg_db/models/{medication → medical/medication}/medication_intake_time.py +21 -3
  282. endoreg_db/models/{medication → medical/medication}/medication_schedule.py +13 -5
  283. endoreg_db/models/{organ → medical/organ}/__init__.py +3 -6
  284. endoreg_db/models/medical/patient/__init__.py +56 -0
  285. endoreg_db/models/medical/patient/medication_examples.py +38 -0
  286. endoreg_db/models/medical/patient/patient_disease.py +63 -0
  287. endoreg_db/models/medical/patient/patient_event.py +75 -0
  288. endoreg_db/models/medical/patient/patient_examination.py +249 -0
  289. endoreg_db/models/{persons → medical}/patient/patient_examination_indication.py +21 -9
  290. endoreg_db/models/medical/patient/patient_finding.py +357 -0
  291. endoreg_db/models/medical/patient/patient_finding_classification.py +207 -0
  292. endoreg_db/models/{patient → medical/patient}/patient_finding_intervention.py +15 -1
  293. endoreg_db/models/medical/patient/patient_lab_sample.py +148 -0
  294. endoreg_db/models/{persons → medical}/patient/patient_lab_value.py +40 -15
  295. endoreg_db/models/medical/patient/patient_medication.py +104 -0
  296. endoreg_db/models/medical/patient/patient_medication_schedule.py +136 -0
  297. endoreg_db/models/{risk → medical/risk}/risk_type.py +0 -4
  298. endoreg_db/models/{data_file/metadata → metadata}/__init__.py +6 -0
  299. endoreg_db/models/metadata/frame_ocr_result.py +0 -0
  300. endoreg_db/models/metadata/model_meta.py +193 -0
  301. endoreg_db/models/metadata/model_meta_logic.py +236 -0
  302. endoreg_db/models/{data_file/metadata → metadata}/pdf_meta.py +28 -13
  303. endoreg_db/models/metadata/sensitive_meta.py +288 -0
  304. endoreg_db/models/metadata/sensitive_meta_logic.py +643 -0
  305. endoreg_db/models/metadata/video_meta.py +332 -0
  306. endoreg_db/models/metadata/video_prediction_logic.py +190 -0
  307. endoreg_db/models/metadata/video_prediction_meta.py +270 -0
  308. endoreg_db/models/other/__init__.py +17 -0
  309. endoreg_db/models/other/distribution/date_value_distribution.py +0 -2
  310. endoreg_db/models/other/distribution/numeric_value_distribution.py +30 -2
  311. endoreg_db/models/{emission → other/emission}/emission_factor.py +15 -6
  312. endoreg_db/models/{persons → other}/gender.py +8 -3
  313. endoreg_db/models/other/information_source.py +159 -0
  314. endoreg_db/models/other/material.py +10 -2
  315. endoreg_db/models/other/resource.py +6 -2
  316. endoreg_db/models/other/tag.py +27 -0
  317. endoreg_db/models/other/transport_route.py +13 -2
  318. endoreg_db/models/{unit.py → other/unit.py} +16 -6
  319. endoreg_db/models/other/waste.py +10 -3
  320. endoreg_db/models/requirement/requirement.py +556 -114
  321. endoreg_db/models/requirement/requirement_evaluation/__init__.py +4 -132
  322. endoreg_db/models/requirement/requirement_evaluation/get_values.py +40 -0
  323. endoreg_db/models/requirement/requirement_evaluation/operator_evaluation_models.py +9 -0
  324. endoreg_db/models/requirement/requirement_evaluation/requirement_type_parser.py +80 -87
  325. endoreg_db/models/requirement/requirement_operator.py +132 -14
  326. endoreg_db/models/requirement/requirement_set.py +181 -21
  327. endoreg_db/models/rule/__init__.py +13 -0
  328. endoreg_db/models/{rules → rule}/rule.py +6 -3
  329. endoreg_db/models/{rules → rule}/rule_attribute_dtype.py +0 -2
  330. endoreg_db/models/{rules → rule}/rule_type.py +0 -2
  331. endoreg_db/models/{rules → rule}/ruleset.py +0 -2
  332. endoreg_db/models/state/__init__.py +12 -0
  333. endoreg_db/models/state/abstract.py +11 -0
  334. endoreg_db/models/state/audit_ledger.py +150 -0
  335. endoreg_db/models/state/label_video_segment.py +22 -0
  336. endoreg_db/models/state/raw_pdf.py +187 -0
  337. endoreg_db/models/state/sensitive_meta.py +46 -0
  338. endoreg_db/models/state/video.py +232 -0
  339. endoreg_db/models/upload_job.py +99 -0
  340. endoreg_db/models/utils.py +135 -0
  341. endoreg_db/models/video_metadata.py +66 -0
  342. endoreg_db/models/video_processing.py +153 -0
  343. endoreg_db/renames.yml +8 -0
  344. endoreg_db/root_urls.py +9 -0
  345. endoreg_db/schemas/__init__.py +0 -0
  346. endoreg_db/schemas/examination_evaluation.py +27 -0
  347. endoreg_db/serializers/Frames_NICE_and_PARIS_classifications.py +775 -0
  348. endoreg_db/serializers/__init__.py +147 -10
  349. endoreg_db/serializers/{raw_pdf_meta_validation.py → _old/raw_pdf_meta_validation.py} +3 -3
  350. endoreg_db/serializers/{raw_video_meta_validation.py → _old/raw_video_meta_validation.py} +18 -14
  351. endoreg_db/serializers/_old/video.py +71 -0
  352. endoreg_db/serializers/administration/__init__.py +14 -0
  353. endoreg_db/serializers/administration/ai/__init__.py +10 -0
  354. endoreg_db/serializers/administration/ai/active_model.py +10 -0
  355. endoreg_db/serializers/administration/ai/ai_model.py +18 -0
  356. endoreg_db/serializers/administration/ai/model_type.py +10 -0
  357. endoreg_db/serializers/administration/center.py +9 -0
  358. endoreg_db/serializers/administration/gender.py +9 -0
  359. endoreg_db/serializers/anonymization.py +69 -0
  360. endoreg_db/serializers/evaluation/examination_evaluation.py +1 -0
  361. endoreg_db/serializers/examination/__init__.py +10 -0
  362. endoreg_db/serializers/examination/base.py +46 -0
  363. endoreg_db/serializers/examination/dropdown.py +21 -0
  364. endoreg_db/serializers/examination_serializer.py +12 -0
  365. endoreg_db/serializers/finding/__init__.py +5 -0
  366. endoreg_db/serializers/finding/finding.py +54 -0
  367. endoreg_db/serializers/finding_classification/__init__.py +7 -0
  368. endoreg_db/serializers/finding_classification/choice.py +19 -0
  369. endoreg_db/serializers/finding_classification/classification.py +13 -0
  370. endoreg_db/serializers/label/__init__.py +7 -0
  371. endoreg_db/serializers/label/image_classification_annotation.py +62 -0
  372. endoreg_db/serializers/label/label.py +15 -0
  373. endoreg_db/serializers/label_video_segment/__init__.py +7 -0
  374. endoreg_db/serializers/label_video_segment/_lvs_create.py +149 -0
  375. endoreg_db/serializers/label_video_segment/_lvs_update.py +138 -0
  376. endoreg_db/serializers/label_video_segment/_lvs_validate.py +149 -0
  377. endoreg_db/serializers/label_video_segment/label_video_segment.py +344 -0
  378. endoreg_db/serializers/label_video_segment/label_video_segment_annotation.py +99 -0
  379. endoreg_db/serializers/label_video_segment/label_video_segment_update.py +163 -0
  380. endoreg_db/serializers/meta/__init__.py +19 -0
  381. endoreg_db/serializers/meta/pdf_file_meta_extraction.py +115 -0
  382. endoreg_db/serializers/meta/report_meta.py +53 -0
  383. endoreg_db/serializers/meta/sensitive_meta_detail.py +162 -0
  384. endoreg_db/serializers/meta/sensitive_meta_update.py +148 -0
  385. endoreg_db/serializers/meta/sensitive_meta_verification.py +59 -0
  386. endoreg_db/serializers/meta/video_meta.py +39 -0
  387. endoreg_db/serializers/misc/__init__.py +14 -0
  388. endoreg_db/serializers/misc/file_overview.py +152 -0
  389. endoreg_db/serializers/misc/stats.py +33 -0
  390. endoreg_db/serializers/misc/translatable_field_mix_in.py +44 -0
  391. endoreg_db/serializers/misc/upload_job.py +71 -0
  392. endoreg_db/serializers/misc/vop_patient_data.py +120 -0
  393. endoreg_db/serializers/patient/__init__.py +11 -0
  394. endoreg_db/serializers/patient/patient.py +86 -0
  395. endoreg_db/serializers/patient/patient_dropdown.py +27 -0
  396. endoreg_db/serializers/patient_examination/__init__.py +7 -0
  397. endoreg_db/serializers/patient_examination/patient_examination.py +141 -0
  398. endoreg_db/serializers/patient_finding/__init__.py +15 -0
  399. endoreg_db/serializers/patient_finding/patient_finding.py +31 -0
  400. endoreg_db/serializers/patient_finding/patient_finding_classification.py +39 -0
  401. endoreg_db/serializers/patient_finding/patient_finding_detail.py +53 -0
  402. endoreg_db/serializers/patient_finding/patient_finding_intervention.py +26 -0
  403. endoreg_db/serializers/patient_finding/patient_finding_list.py +41 -0
  404. endoreg_db/serializers/patient_finding/patient_finding_write.py +126 -0
  405. endoreg_db/serializers/pdf/__init__.py +5 -0
  406. endoreg_db/serializers/pdf/anony_text_validation.py +85 -0
  407. endoreg_db/serializers/report/__init__.py +9 -0
  408. endoreg_db/serializers/report/mixins.py +45 -0
  409. endoreg_db/serializers/report/report.py +105 -0
  410. endoreg_db/serializers/report/report_list.py +22 -0
  411. endoreg_db/serializers/report/secure_file_url.py +26 -0
  412. endoreg_db/serializers/requirements/requirement_schema.py +25 -0
  413. endoreg_db/serializers/requirements/requirement_sets.py +29 -0
  414. endoreg_db/serializers/sensitive_meta_serializer.py +282 -0
  415. endoreg_db/serializers/video/__init__.py +7 -0
  416. endoreg_db/serializers/video/segmentation.py +263 -0
  417. endoreg_db/serializers/video/video_file_brief.py +10 -0
  418. endoreg_db/serializers/video/video_file_detail.py +83 -0
  419. endoreg_db/serializers/video/video_file_list.py +67 -0
  420. endoreg_db/serializers/video/video_metadata.py +105 -0
  421. endoreg_db/serializers/video/video_processing_history.py +153 -0
  422. endoreg_db/services/__init__.py +5 -0
  423. endoreg_db/services/anonymization.py +223 -0
  424. endoreg_db/services/examination_evaluation.py +149 -0
  425. endoreg_db/services/finding_description_service.py +0 -0
  426. endoreg_db/services/lookup_service.py +241 -0
  427. endoreg_db/services/lookup_store.py +122 -0
  428. endoreg_db/services/ollama_api_docs.py +1528 -0
  429. endoreg_db/services/pdf_import.py +963 -0
  430. endoreg_db/services/polling_coordinator.py +288 -0
  431. endoreg_db/services/pseudonym_service.py +89 -0
  432. endoreg_db/services/requirements_object.py +147 -0
  433. endoreg_db/services/segment_sync.py +155 -0
  434. endoreg_db/services/storage_aware_video_processor.py +344 -0
  435. endoreg_db/services/video_import.py +1118 -0
  436. endoreg_db/tasks/upload_tasks.py +207 -0
  437. endoreg_db/tasks/video_ingest.py +157 -0
  438. endoreg_db/tasks/video_processing_tasks.py +327 -0
  439. endoreg_db/urls/__init__.py +70 -0
  440. endoreg_db/urls/anonymization.py +32 -0
  441. endoreg_db/urls/auth.py +16 -0
  442. endoreg_db/urls/classification.py +39 -0
  443. endoreg_db/urls/examination.py +54 -0
  444. endoreg_db/urls/files.py +6 -0
  445. endoreg_db/urls/label_video_segment_validate.py +33 -0
  446. endoreg_db/urls/label_video_segments.py +44 -0
  447. endoreg_db/urls/media.py +229 -0
  448. endoreg_db/urls/patient.py +19 -0
  449. endoreg_db/urls/report.py +48 -0
  450. endoreg_db/urls/requirements.py +13 -0
  451. endoreg_db/urls/stats.py +46 -0
  452. endoreg_db/urls/upload.py +20 -0
  453. endoreg_db/urls/video.py +61 -0
  454. endoreg_db/urls.py +6 -283
  455. endoreg_db/utils/__init__.py +66 -57
  456. endoreg_db/utils/ai/__init__.py +9 -0
  457. endoreg_db/{models/ai_model/utils.py → utils/ai/get.py} +1 -4
  458. endoreg_db/{models/ai_model/lightning → utils/ai}/inference_dataset.py +0 -1
  459. endoreg_db/{models/ai_model/lightning → utils/ai}/multilabel_classification_net.py +14 -10
  460. endoreg_db/{models/ai_model/lightning → utils/ai}/postprocess.py +15 -5
  461. endoreg_db/utils/ai/predict.py +291 -0
  462. endoreg_db/{models/ai_model/lightning → utils/ai}/preprocess.py +1 -1
  463. endoreg_db/utils/calc_duration_seconds.py +24 -0
  464. endoreg_db/utils/case_generator/__init__.py +0 -0
  465. endoreg_db/utils/check_video_files.py +148 -0
  466. endoreg_db/utils/dataloader.py +50 -12
  467. endoreg_db/utils/dates.py +21 -0
  468. endoreg_db/utils/env.py +33 -0
  469. endoreg_db/utils/extract_specific_frames.py +72 -0
  470. endoreg_db/utils/file_operations.py +29 -1
  471. endoreg_db/utils/fix_video_path_direct.py +141 -0
  472. endoreg_db/utils/frame_anonymization_utils.py +463 -0
  473. endoreg_db/utils/links/__init__.py +0 -0
  474. endoreg_db/utils/links/requirement_link.py +193 -0
  475. endoreg_db/utils/mime_types.py +0 -0
  476. endoreg_db/utils/names.py +2 -0
  477. endoreg_db/utils/paths.py +100 -82
  478. endoreg_db/utils/permissions.py +143 -0
  479. endoreg_db/utils/pipelines/Readme.md +235 -0
  480. endoreg_db/utils/pipelines/__init__.py +0 -0
  481. endoreg_db/utils/pipelines/process_video_dir.py +120 -0
  482. endoreg_db/utils/product/__init__.py +0 -0
  483. endoreg_db/utils/product/sum_emissions.py +20 -0
  484. endoreg_db/utils/product/sum_weights.py +18 -0
  485. endoreg_db/utils/pydantic_models/db_config.py +1 -1
  486. endoreg_db/utils/requirement_helpers.py +0 -0
  487. endoreg_db/utils/requirement_operator_logic/__init__.py +0 -0
  488. endoreg_db/utils/requirement_operator_logic/lab_value_operators.py +578 -0
  489. endoreg_db/utils/requirement_operator_logic/model_evaluators.py +368 -0
  490. endoreg_db/utils/translation.py +27 -0
  491. endoreg_db/utils/validate_video_detailed.py +357 -0
  492. endoreg_db/utils/video/__init__.py +19 -6
  493. endoreg_db/utils/video/extract_frames.py +37 -70
  494. endoreg_db/utils/video/ffmpeg_wrapper.py +772 -0
  495. endoreg_db/utils/video/names.py +42 -0
  496. endoreg_db/utils/video/streaming_processor.py +312 -0
  497. endoreg_db/utils/video/video_splitter.py +94 -0
  498. endoreg_db/views/Frames_NICE_and_PARIS_classifications_views.py +238 -0
  499. endoreg_db/views/__init__.py +282 -2
  500. endoreg_db/views/anonymization/__init__.py +27 -0
  501. endoreg_db/views/anonymization/media_management.py +454 -0
  502. endoreg_db/views/anonymization/overview.py +216 -0
  503. endoreg_db/views/anonymization/validate.py +66 -0
  504. endoreg_db/views/auth/__init__.py +13 -0
  505. endoreg_db/views/{views.py → auth/keycloak.py} +19 -13
  506. endoreg_db/views/examination/__init__.py +33 -0
  507. endoreg_db/views/examination/examination.py +37 -0
  508. endoreg_db/views/examination/examination_manifest_cache.py +26 -0
  509. endoreg_db/views/examination/get_finding_classification_choices.py +59 -0
  510. endoreg_db/views/examination/get_finding_classifications.py +36 -0
  511. endoreg_db/views/examination/get_findings.py +41 -0
  512. endoreg_db/views/examination/get_instruments.py +18 -0
  513. endoreg_db/views/examination/get_interventions.py +14 -0
  514. endoreg_db/views/finding/__init__.py +9 -0
  515. endoreg_db/views/finding/finding.py +112 -0
  516. endoreg_db/views/finding/get_classifications.py +14 -0
  517. endoreg_db/views/finding/get_interventions.py +17 -0
  518. endoreg_db/views/finding_classification/__init__.py +13 -0
  519. endoreg_db/views/finding_classification/base.py +0 -0
  520. endoreg_db/views/finding_classification/finding_classification.py +42 -0
  521. endoreg_db/views/finding_classification/get_classification_choices.py +55 -0
  522. endoreg_db/views/label/__init__.py +5 -0
  523. endoreg_db/views/label/label.py +15 -0
  524. endoreg_db/views/label_video_segment/__init__.py +16 -0
  525. endoreg_db/views/label_video_segment/create_lvs_from_annotation.py +44 -0
  526. endoreg_db/views/label_video_segment/get_lvs_by_name_and_video.py +50 -0
  527. endoreg_db/views/label_video_segment/label_video_segment.py +77 -0
  528. endoreg_db/views/label_video_segment/label_video_segment_by_label.py +174 -0
  529. endoreg_db/views/label_video_segment/label_video_segment_detail.py +73 -0
  530. endoreg_db/views/label_video_segment/update_lvs_from_annotation.py +46 -0
  531. endoreg_db/views/label_video_segment/validate.py +226 -0
  532. endoreg_db/views/media/__init__.py +45 -0
  533. endoreg_db/views/media/pdf_media.py +386 -0
  534. endoreg_db/views/media/segments.py +71 -0
  535. endoreg_db/views/media/sensitive_metadata.py +314 -0
  536. endoreg_db/views/media/video_media.py +272 -0
  537. endoreg_db/views/media/video_segments.py +596 -0
  538. endoreg_db/views/meta/__init__.py +15 -0
  539. endoreg_db/views/meta/available_files_list.py +146 -0
  540. endoreg_db/views/meta/report_meta.py +53 -0
  541. endoreg_db/views/meta/sensitive_meta_detail.py +148 -0
  542. endoreg_db/views/meta/sensitive_meta_list.py +104 -0
  543. endoreg_db/views/meta/sensitive_meta_verification.py +71 -0
  544. endoreg_db/views/misc/__init__.py +63 -0
  545. endoreg_db/views/misc/center.py +13 -0
  546. endoreg_db/views/misc/gender.py +14 -0
  547. endoreg_db/views/misc/secure_file_serving_view.py +80 -0
  548. endoreg_db/views/misc/secure_file_url_view.py +84 -0
  549. endoreg_db/views/misc/secure_url_validate.py +79 -0
  550. endoreg_db/views/misc/stats.py +220 -0
  551. endoreg_db/views/misc/translation.py +182 -0
  552. endoreg_db/views/misc/upload_views.py +240 -0
  553. endoreg_db/views/patient/__init__.py +5 -0
  554. endoreg_db/views/patient/patient.py +210 -0
  555. endoreg_db/views/patient_examination/DEPRECATED_video_backup.py +164 -0
  556. endoreg_db/views/patient_examination/__init__.py +11 -0
  557. endoreg_db/views/patient_examination/patient_examination.py +140 -0
  558. endoreg_db/views/patient_examination/patient_examination_create.py +63 -0
  559. endoreg_db/views/patient_examination/patient_examination_detail.py +66 -0
  560. endoreg_db/views/patient_examination/patient_examination_list.py +68 -0
  561. endoreg_db/views/patient_examination/video.py +194 -0
  562. endoreg_db/views/patient_finding/__init__.py +7 -0
  563. endoreg_db/views/patient_finding/base.py +0 -0
  564. endoreg_db/views/patient_finding/patient_finding.py +64 -0
  565. endoreg_db/views/patient_finding/patient_finding_optimized.py +259 -0
  566. endoreg_db/views/patient_finding_classification/__init__.py +5 -0
  567. endoreg_db/views/patient_finding_classification/pfc_create.py +67 -0
  568. endoreg_db/views/patient_finding_location/__init__.py +5 -0
  569. endoreg_db/views/patient_finding_location/pfl_create.py +70 -0
  570. endoreg_db/views/patient_finding_morphology/__init__.py +5 -0
  571. endoreg_db/views/patient_finding_morphology/pfm_create.py +70 -0
  572. endoreg_db/views/pdf/__init__.py +11 -0
  573. endoreg_db/views/pdf/pdf_media.py +239 -0
  574. endoreg_db/views/pdf/pdf_stream_views.py +127 -0
  575. endoreg_db/views/pdf/reimport.py +161 -0
  576. endoreg_db/views/report/__init__.py +9 -0
  577. endoreg_db/views/report/report_list.py +112 -0
  578. endoreg_db/views/report/report_with_secure_url.py +28 -0
  579. endoreg_db/views/report/start_examination.py +7 -0
  580. endoreg_db/views/requirement/__init__.py +10 -0
  581. endoreg_db/views/requirement/evaluate.py +279 -0
  582. endoreg_db/views/requirement/lookup.py +483 -0
  583. endoreg_db/views/requirement/lookup_store.py +252 -0
  584. endoreg_db/views/requirement_lookup/lookup.py +0 -0
  585. endoreg_db/views/requirement_lookup/lookup_store.py +0 -0
  586. endoreg_db/views/stats/__init__.py +13 -0
  587. endoreg_db/views/stats/stats_views.py +229 -0
  588. endoreg_db/views/video/__init__.py +64 -0
  589. endoreg_db/views/video/correction.py +672 -0
  590. endoreg_db/views/video/reimport.py +195 -0
  591. endoreg_db/views/video/segmentation.py +274 -0
  592. endoreg_db/views/video/task_status.py +49 -0
  593. endoreg_db/views/{views_for_timeline.py → video/timeline.py} +3 -3
  594. endoreg_db/views/video/video_analyze.py +52 -0
  595. endoreg_db/views/video/video_apply_mask.py +48 -0
  596. endoreg_db/views/video/video_correction.py +21 -0
  597. endoreg_db/views/video/video_download_processed.py +58 -0
  598. endoreg_db/views/video/video_examination_viewset.py +329 -0
  599. endoreg_db/views/video/video_media.py +158 -0
  600. endoreg_db/views/video/video_meta.py +29 -0
  601. endoreg_db/views/video/video_processing_history.py +24 -0
  602. endoreg_db/views/video/video_remove_frames.py +48 -0
  603. endoreg_db/views/video/video_reprocess.py +40 -0
  604. endoreg_db/views/video/video_stream.py +306 -0
  605. endoreg_db-0.8.2.dist-info/METADATA +384 -0
  606. endoreg_db-0.8.2.dist-info/RECORD +790 -0
  607. endoreg_db/data/agl_service/data.yaml +0 -19
  608. endoreg_db/data/finding_location_classification/colonoscopy.yaml +0 -46
  609. endoreg_db/data/finding_morphology_classification/colonoscopy.yaml +0 -48
  610. endoreg_db/data/finding_morphology_classification_choice/colonoscopy_size.yaml +0 -57
  611. endoreg_db/management/commands/_load_model_template.py +0 -41
  612. endoreg_db/management/commands/delete_all.py +0 -18
  613. endoreg_db/management/commands/fetch_legacy_image_dataset.py +0 -32
  614. endoreg_db/management/commands/fix_auth_permission.py +0 -20
  615. endoreg_db/management/commands/load_active_model_data.py +0 -45
  616. endoreg_db/management/commands/load_g_play_data.py +0 -113
  617. endoreg_db/management/commands/load_logging_data.py +0 -39
  618. endoreg_db/management/commands/load_lx_data.py +0 -64
  619. endoreg_db/management/commands/load_medication_indication_data.py +0 -63
  620. endoreg_db/management/commands/load_medication_indication_type_data.py +0 -41
  621. endoreg_db/management/commands/load_medication_intake_time_data.py +0 -41
  622. endoreg_db/management/commands/load_medication_schedule_data.py +0 -55
  623. endoreg_db/management/commands/load_network_data.py +0 -57
  624. endoreg_db/migrations/0002_alter_frame_image_alter_rawframe_image.py +0 -23
  625. endoreg_db/migrations/0003_alter_frame_image_alter_rawframe_image.py +0 -23
  626. endoreg_db/migrations/0004_alter_rawvideofile_file_alter_video_file.py +0 -25
  627. endoreg_db/migrations/0005_rawvideofile_frame_count_and_more.py +0 -33
  628. endoreg_db/migrations/0006_frame_extracted_rawframe_extracted.py +0 -23
  629. endoreg_db/migrations/0007_rename_pseudo_patient_video_patient_and_more.py +0 -24
  630. endoreg_db/migrations/0008_remove_reportfile_patient_examination_and_more.py +0 -48
  631. endoreg_db/migrations/0009_requirementoperator_requirementsettype_and_more.py +0 -154
  632. endoreg_db/models/ai_model/active_model.py +0 -9
  633. endoreg_db/models/ai_model/ai_model.py +0 -90
  634. endoreg_db/models/ai_model/lightning/__init__.py +0 -3
  635. endoreg_db/models/ai_model/lightning/predict.py +0 -172
  636. endoreg_db/models/ai_model/lightning/prediction_visualizer.py +0 -55
  637. endoreg_db/models/ai_model/lightning/run_visualizer.py +0 -21
  638. endoreg_db/models/ai_model/model_meta.py +0 -240
  639. endoreg_db/models/annotation/__init__.py +0 -32
  640. endoreg_db/models/annotation/anonymized_image_annotation.py +0 -115
  641. endoreg_db/models/annotation/binary_classification_annotation_task.py +0 -117
  642. endoreg_db/models/annotation/image_classification.py +0 -86
  643. endoreg_db/models/annotation/video_segmentation_annotation.py +0 -52
  644. endoreg_db/models/case/__init__.py +0 -1
  645. endoreg_db/models/case/case.py +0 -34
  646. endoreg_db/models/center/center.py +0 -51
  647. endoreg_db/models/center/center_product.py +0 -33
  648. endoreg_db/models/center/center_waste.py +0 -16
  649. endoreg_db/models/data_file/__init__.py +0 -39
  650. endoreg_db/models/data_file/base_classes/__init__.py +0 -7
  651. endoreg_db/models/data_file/base_classes/abstract_frame.py +0 -98
  652. endoreg_db/models/data_file/base_classes/abstract_pdf.py +0 -127
  653. endoreg_db/models/data_file/base_classes/abstract_video.py +0 -806
  654. endoreg_db/models/data_file/base_classes/frame_helpers.py +0 -17
  655. endoreg_db/models/data_file/base_classes/prepare_bulk_frames.py +0 -19
  656. endoreg_db/models/data_file/base_classes/utils.py +0 -58
  657. endoreg_db/models/data_file/frame.py +0 -29
  658. endoreg_db/models/data_file/import_classes/__init__.py +0 -18
  659. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +0 -35
  660. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +0 -28
  661. endoreg_db/models/data_file/import_classes/processing_functions/video.py +0 -260
  662. endoreg_db/models/data_file/import_classes/raw_pdf.py +0 -254
  663. endoreg_db/models/data_file/import_classes/raw_video.py +0 -290
  664. endoreg_db/models/data_file/metadata/sensitive_meta.py +0 -290
  665. endoreg_db/models/data_file/metadata/video_meta.py +0 -199
  666. endoreg_db/models/data_file/report_file.py +0 -56
  667. endoreg_db/models/data_file/video/__init__.py +0 -11
  668. endoreg_db/models/data_file/video/import_meta.py +0 -25
  669. endoreg_db/models/data_file/video/video.py +0 -196
  670. endoreg_db/models/data_file/video_segment.py +0 -214
  671. endoreg_db/models/examination/examination.py +0 -67
  672. endoreg_db/models/finding/__init__.py +0 -11
  673. endoreg_db/models/finding/finding.py +0 -75
  674. endoreg_db/models/finding/finding_location_classification.py +0 -94
  675. endoreg_db/models/finding/finding_morphology_classification.py +0 -89
  676. endoreg_db/models/finding/finding_type.py +0 -22
  677. endoreg_db/models/hardware/__init__.py +0 -2
  678. endoreg_db/models/information_source.py +0 -65
  679. endoreg_db/models/laboratory/__init__.py +0 -1
  680. endoreg_db/models/laboratory/lab_value.py +0 -162
  681. endoreg_db/models/logging/__init__.py +0 -11
  682. endoreg_db/models/logging/agl_service.py +0 -19
  683. endoreg_db/models/logging/base.py +0 -22
  684. endoreg_db/models/logging/log_type.py +0 -23
  685. endoreg_db/models/logging/network_device.py +0 -27
  686. endoreg_db/models/lx/__init__.py +0 -4
  687. endoreg_db/models/lx/client.py +0 -57
  688. endoreg_db/models/lx/identity.py +0 -34
  689. endoreg_db/models/lx/permission.py +0 -18
  690. endoreg_db/models/lx/user.py +0 -16
  691. endoreg_db/models/network/__init__.py +0 -9
  692. endoreg_db/models/network/agl_service.py +0 -38
  693. endoreg_db/models/network/network_device.py +0 -58
  694. endoreg_db/models/network/network_device_type.py +0 -23
  695. endoreg_db/models/other/distribution.py +0 -5
  696. endoreg_db/models/patient/__init__.py +0 -24
  697. endoreg_db/models/patient/patient_examination.py +0 -182
  698. endoreg_db/models/patient/patient_finding.py +0 -143
  699. endoreg_db/models/patient/patient_finding_location.py +0 -120
  700. endoreg_db/models/patient/patient_finding_morphology.py +0 -166
  701. endoreg_db/models/permissions/__init__.py +0 -44
  702. endoreg_db/models/persons/__init__.py +0 -34
  703. endoreg_db/models/persons/examiner/__init__.py +0 -2
  704. endoreg_db/models/persons/examiner/examiner.py +0 -60
  705. endoreg_db/models/persons/examiner/examiner_type.py +0 -2
  706. endoreg_db/models/persons/patient/__init__.py +0 -8
  707. endoreg_db/models/persons/patient/patient.py +0 -389
  708. endoreg_db/models/persons/patient/patient_disease.py +0 -22
  709. endoreg_db/models/persons/patient/patient_event.py +0 -52
  710. endoreg_db/models/persons/patient/patient_lab_sample.py +0 -108
  711. endoreg_db/models/persons/patient/patient_medication.py +0 -59
  712. endoreg_db/models/persons/patient/patient_medication_schedule.py +0 -88
  713. endoreg_db/models/persons/portal_user_information.py +0 -27
  714. endoreg_db/models/prediction/__init__.py +0 -8
  715. endoreg_db/models/prediction/image_classification.py +0 -51
  716. endoreg_db/models/prediction/video_prediction_meta.py +0 -306
  717. endoreg_db/models/product/product.py +0 -110
  718. endoreg_db/models/product/product_group.py +0 -27
  719. endoreg_db/models/product/product_material.py +0 -28
  720. endoreg_db/models/questionnaires/__init__.py +0 -114
  721. endoreg_db/models/quiz/__init__.py +0 -9
  722. endoreg_db/models/quiz/quiz_answer.py +0 -41
  723. endoreg_db/models/quiz/quiz_question.py +0 -54
  724. endoreg_db/models/report_reader/report_reader_config.py +0 -53
  725. endoreg_db/models/rules/__init__.py +0 -5
  726. endoreg_db/queries/get/__init__.py +0 -6
  727. endoreg_db/queries/get/center.py +0 -42
  728. endoreg_db/queries/get/model.py +0 -13
  729. endoreg_db/queries/get/patient.py +0 -14
  730. endoreg_db/queries/get/patient_examination.py +0 -20
  731. endoreg_db/queries/get/report_file.py +0 -33
  732. endoreg_db/queries/get/video.py +0 -31
  733. endoreg_db/serializers/ai_model.py +0 -19
  734. endoreg_db/serializers/annotation.py +0 -14
  735. endoreg_db/serializers/center.py +0 -11
  736. endoreg_db/serializers/examination.py +0 -33
  737. endoreg_db/serializers/frame.py +0 -9
  738. endoreg_db/serializers/hardware.py +0 -21
  739. endoreg_db/serializers/label.py +0 -22
  740. endoreg_db/serializers/patient.py +0 -33
  741. endoreg_db/serializers/prediction.py +0 -10
  742. endoreg_db/serializers/raw_pdf_anony_text_validation.py +0 -137
  743. endoreg_db/serializers/report_file.py +0 -7
  744. endoreg_db/serializers/video.py +0 -20
  745. endoreg_db/serializers/video_segmentation.py +0 -574
  746. endoreg_db/tests.py +0 -3
  747. endoreg_db/utils/legacy_ocr.py +0 -201
  748. endoreg_db/utils/video/transcode_videofile.py +0 -111
  749. endoreg_db/views/patient_views.py +0 -90
  750. endoreg_db/views/raw_pdf_anony_text_validation_views.py +0 -95
  751. endoreg_db/views/raw_pdf_meta_validation_views.py +0 -111
  752. endoreg_db/views/raw_video_meta_validation_views.py +0 -148
  753. endoreg_db/views/report_views.py +0 -96
  754. endoreg_db/views/video_segmentation_views.py +0 -166
  755. endoreg_db-0.6.4.dist-info/METADATA +0 -161
  756. endoreg_db-0.6.4.dist-info/RECORD +0 -470
  757. /endoreg_db/{case_generator/__init__.py → api/serializers/finding_descriptions.py} +0 -0
  758. /endoreg_db/{queries/get/annotation.py → api/views/finding_descriptions.py} +0 -0
  759. /endoreg_db/{queries/get/prediction.py → data/shift/m2.yaml} +0 -0
  760. /endoreg_db/{queries/get/video_import_meta.py → factories/__init__.py} +0 -0
  761. /endoreg_db/{queries/get/video_prediction_meta.py → helpers/__init__.py} +0 -0
  762. /endoreg_db/models/{case_template → administration/case/case_template}/__init__.py +0 -0
  763. /endoreg_db/models/{persons → administration/person}/person.py +0 -0
  764. /endoreg_db/models/{product → administration/product}/__init__.py +0 -0
  765. /endoreg_db/models/{report_reader → media/pdf/report_reader}/__init__.py +0 -0
  766. /endoreg_db/models/{report_reader → media/pdf/report_reader}/report_reader_flag.py +0 -0
  767. /endoreg_db/models/{hardware → medical/hardware}/endoscopy_processor.py +0 -0
  768. /endoreg_db/models/{medication → medical/medication}/__init__.py +0 -0
  769. /endoreg_db/models/{medication → medical/medication}/medication_indication.py +0 -0
  770. /endoreg_db/models/{risk → medical/risk}/__init__.py +0 -0
  771. /endoreg_db/models/{risk → medical/risk}/risk.py +0 -0
  772. /endoreg_db/models/{emission → other/emission}/__init__.py +0 -0
  773. /endoreg_db/models/{rules → rule}/rule_applicator.py +0 -0
  774. /endoreg_db/{case_generator → utils/case_generator}/case_generator.py +0 -0
  775. /endoreg_db/{case_generator → utils/case_generator}/lab_sample_factory.py +0 -0
  776. /endoreg_db/{case_generator → utils/case_generator}/utils.py +0 -0
  777. /endoreg_db/views/{csrf.py → misc/csrf.py} +0 -0
  778. {endoreg_db-0.6.4.dist-info → endoreg_db-0.8.2.dist-info}/WHEEL +0 -0
  779. {endoreg_db-0.6.4.dist-info → endoreg_db-0.8.2.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,20 @@
1
+ from django.urls import path
2
+
3
+ from endoreg_db.views import (
4
+ UploadFileView,
5
+ UploadStatusView,
6
+ )
7
+
8
+ urlpatterns = [
9
+ # Upload endpoints
10
+ path(
11
+ 'upload/',
12
+ UploadFileView.as_view(),
13
+ name='video_upload'
14
+ ),
15
+ path(
16
+ 'upload/<uuid:id>/status',
17
+ UploadStatusView.as_view(),
18
+ name='upload_status'
19
+ ),
20
+ ]
@@ -0,0 +1,61 @@
1
+ from django.urls import path
2
+
3
+ from endoreg_db.views import (
4
+ SensitiveMetaDetailView,
5
+ VideoLabelView,
6
+ # Note: VideoStreamView moved to modern media framework. See: endoreg_db/urls/media.py
7
+ # Note: All Video Correction Views moved to modern media framework. See: endoreg_db/urls/media.py
8
+ )
9
+
10
+ url_patterns = [
11
+ # Video Label segments API endpoint
12
+ # GET /api/videos/<int:video_id>/labels/<str:label_name>/
13
+ # Retrieves time segments and frame predictions for a specific label on a video
14
+ path(
15
+ 'videos/<int:video_id>/labels/<str:label_name>/',
16
+ VideoLabelView.as_view(),
17
+ name='video_label_segments'
18
+ ),
19
+
20
+ # ---------------------------------------------------------------------------------------
21
+ # VIDEO STREAMING - MOVED TO MODERN MEDIA FRAMEWORK
22
+ #
23
+ # Video streaming endpoint has been migrated to the media framework
24
+ # as of October 14, 2025. Please use the new endpoints:
25
+ #
26
+ # OLD → NEW:
27
+ # GET /api/videostream/<pk>/ → GET /api/media/videos/<pk>/
28
+ # GET /api/videostream/<pk>/ → GET /api/media/videos/<pk>/stream/
29
+ #
30
+ # See: endoreg_db/urls/media.py for new URL registrations
31
+ # ---------------------------------------------------------------------------------------
32
+
33
+ # Note: Video Re-import moved to modern media framework
34
+ # See: endoreg_db/urls/media.py - POST /api/media/videos/<int:pk>/reimport/
35
+
36
+ # Video Sensitive Meta endpoints (for video anonymization)
37
+ # GET /api/video/sensitivemeta/<int:sensitive_meta_id>/
38
+ # PATCH /api/video/sensitivemeta/<int:sensitive_meta_id>/
39
+ path(
40
+ 'video/sensitivemeta/<int:sensitive_meta_id>/',
41
+ SensitiveMetaDetailView.as_view(),
42
+ name='video_sensitive_meta_detail'
43
+ ),
44
+
45
+ # ---------------------------------------------------------------------------------------
46
+ # VIDEO CORRECTION API ENDPOINTS - MOVED TO MODERN MEDIA FRAMEWORK
47
+ #
48
+ # All video correction endpoints have been migrated to the modern media framework
49
+ # as of October 14, 2025. Please use the new endpoints:
50
+ #
51
+ # OLD → NEW:
52
+ # GET /api/video-metadata/<id>/ → GET /api/media/videos/<pk>/metadata/
53
+ # GET /api/video-processing-history/<id>/ → GET /api/media/videos/<pk>/processing-history/
54
+ # POST /api/video-analyze/<id>/ → POST /api/media/videos/<pk>/analyze/
55
+ # POST /api/video-apply-mask/<id>/ → POST /api/media/videos/<pk>/apply-mask/
56
+ # POST /api/video-remove-frames/<id>/ → POST /api/media/videos/<pk>/remove-frames/
57
+ # POST /api/video-reprocess/<id>/ → POST /api/media/videos/<pk>/reprocess/
58
+ #
59
+ # See: endoreg_db/urls/media.py for new URL registrations
60
+ # ---------------------------------------------------------------------------------------
61
+ ]
endoreg_db/urls.py CHANGED
@@ -1,286 +1,9 @@
1
- from django.urls import path, include
2
- from rest_framework.routers import DefaultRouter
3
- from .views.patient_views import (
4
- PatientViewSet,
5
- start_examination,
6
- get_location_choices,
7
- get_morphology_choices,
8
- )
9
- from .views.csrf import csrf_token_view
10
- # endoreg_db_production/endoreg_db/urls.py
11
- from endoreg_db.views.views import (
12
- VideoView,
13
- keycloak_login,
14
- keycloak_callback,
15
- public_home,
16
- )#from .views.feature_selection_view import FetchSingleFramePredictionView // its implemented in ando-ai other project need to add here
17
- from .views.video_segmentation_views import VideoView, VideoLabelView,UpdateLabelSegmentsView
18
- from .views.views_for_timeline import video_timeline_view
19
- from .views.raw_video_meta_validation_views import VideoFileForMetaView, VideoFileForMetaView
20
- from .views.raw_pdf_meta_validation_views import PDFFileForMetaView
21
- from .views.raw_pdf_meta_validation_views import UpdateSensitiveMetaView
22
- from .views.raw_pdf_anony_text_validation_views import RawPdfAnonyTextView, UpdateAnonymizedTextView
23
- router = DefaultRouter()
24
- router.register(r'patients', PatientViewSet)
1
+ from django.urls import include, path
25
2
 
3
+ # Import the package-level URL patterns (defined in endoreg_db/urls/__init__.py)
4
+ from endoreg_db.urls import urlpatterns as api_urlpatterns
26
5
 
6
+ # Expose API under /api/
27
7
  urlpatterns = [
28
- path('start-examination/', start_examination, name="start_examination"),
29
- path('get-location-choices/<int:location_id>/', get_location_choices, name="get_location_choices"),
30
- path('get-morphology-choices/<int:morphology_id>/', get_morphology_choices, name="get_morphology_choices"),
31
- path('api/', include(router.urls)),
32
- path('api/conf/', csrf_token_view, name='csrf_token'),
33
-
34
-
35
- #--------------------------------------START : VIDEO SEGMENTATION END POINTS--------------------------------------
36
-
37
- # The dropdown contains video names and their corresponding IDs, which are retrieved from the database(RawVideoFile). Additionally, this route(api/videos) also fetches labels along with their names and IDs from the label table.
38
- # We will modify this implementation later as per our requirements.
39
- #Based on the selected video ID, relevant data will be fetched from the database, and the video, along with its associated details,
40
- # will be displayed on the frontend using route(api/video/<int:video_id>/).
41
- # once label is selected from the dropdown,using its name, details can be fetched from rawvideofile using route("api/video/<int:video_id>/label/<str:label_name>/)
42
- #If editing is required, a form will be available for each label. This form dynamically updates when the selected label changes. It will display all segments associated with the selected label, each with a delete option. Below these segments, there may be a button for adding more segments.
43
- #If any values in the form are modified, the updated data will be saved in the dafrom .views import VideoView, keycloak_login, keycloak_callbacktabase table.
44
-
45
-
46
-
47
-
48
- # Fetch all videos for the dropdown
49
- # Fetch all available videos (for the video selection dropdown in frontend)
50
- # Usage in frontend: Call this API to get a list of available videos.
51
- # Example request: GET /api/videos/
52
- # Response: Returns a JSON list of videos (id, file path, video_url, sequences, label_names).
53
- # it also fetch the label from teh label table
54
-
55
- # for kaycloak:-
56
- # /api/videos/ , protected API
57
- # /login/ , sends user to Keycloak login page
58
- # /login/callback/ , where Keycloak sends the user after login
59
- path('', public_home, name='public_home'),
60
- path('api/videos/', VideoView.as_view(), name='video_list'),
61
- path('login/', keycloak_login, name='keycloak_login'),
62
- path('login/callback/', keycloak_callback, name='keycloak_callback'),
63
-
64
- #need to change this route
65
- #path('api/prediction/', FetchSingleFramePredictionView.as_view(), name='fetch-single-frame-prediction'),#.as_view() converts the class-based view into a function that Django can use for routing.
66
-
67
- # Fetch video details + labels based on selected video
68
- # Usage in frontend: Call this when a user selects a video from the dropdown.
69
- # Example request: GET /api/video/1/
70
- # Response: Returns metadata, file path, video URL, sequences, and available label names.
71
- # Frontend should use this api for `label_names`, to display label selection (dropdown or tabs).
72
- path("api/video/<int:video_id>/", VideoView.as_view(), name="video_handler"),
73
-
74
-
75
- # Fetch time segments along with frame predictions and filenames for a selected label
76
- #
77
- # **Usage in frontend:**
78
- # - Call this API when a user selects a label from the dropdown in the timeline.
79
- # - The API returns time segments (start & end times in seconds) where the label appears in the video.
80
- # - Each segment includes frame-wise predictions and the corresponding frame filenames.
81
- #
82
- # **Example request:**
83
- # GET /api/video/1/label/outside/
84
- #
85
- # **Example response:**
86
- # {
87
- # "label": "outside",
88
- # "time_segments": [
89
- # { "segment_start": 0,
90
- # "segment_end": 463,
91
- # "start_time": 0.0,
92
- # "end_time": 9.26,
93
- # "frames": {
94
- # "0": {
95
- # "frame_filename": "frame_0000000.jpg",
96
- # "frame_file_path": "/home/admin/test-data/video_frames/abc123/frame_0000000.jpg",
97
- # "predictions": {
98
- # "appendix": 0.0150,
99
- # and others
100
- # }
101
- # },
102
- # "1": {
103
- # "frame_filename": "frame_0000001.jpg",
104
- # "frame_file_path": "/home/admin/test-data/video_frames/abc123/frame_0000001.jpg",
105
- # "predictions": {
106
- # "appendix": 0.0124,
107
- # and otehrs
108
- # }}}}]}
109
- #
110
- # start_time and end_time are in seconds, converted from frame indices.
111
- # frames contains all frames in the segment with:
112
- # frame_filename (e.g., frame_0000001.jpg)
113
- # frame_file_path (full path for easy access)
114
- # predictions (frame-wise probability scores for each category)
115
- #we need label name for this not id as we donot have id in rawvideofile table
116
- path("api/video/<int:video_id>/label/<str:label_name>/", VideoLabelView.as_view(), name="video_label_times"),
117
-
118
- # Update or create label segments for a specific video and label
119
- # - Call this API when a user updates the start and end frames of a label segment(adding new , deleting or changing the values).
120
- # - The API will:
121
- # - **Update** existing segments if they match the given `video_id` and `label_id`.
122
- # - **Create** new segments if they do not already exist.
123
- # - **Delete** segments from the database if they were removed from the frontend.
124
- # - This ensures that the database reflects exactly what is sent from the frontend.
125
- #
126
- # **Example request (Updating segments for label ID 12 in video ID 1):**
127
- # PUT /api/video/1/label/12/update_segments/
128
- #
129
- # **Request body (JSON):**
130
- # {
131
- # "video_id": 1,
132
- # "label_id": 12,
133
- # "segments": [
134
- # {
135
- # "start_frame_number": 0,
136
- # "end_frame_number": 463
137
- # },{
138
- # "start_frame_number": 500,
139
- # "end_frame_number": 700
140
- # }]}
141
- #
142
- # **Expected response (If successful):**
143
- # {
144
- # "updated_segments": [
145
- # {
146
- # "id": 1,
147
- # "video_id": 1,
148
- # "label_id": 12,
149
- # "start_frame_number": 0,
150
- # "end_frame_number": 463
151
- # }
152
- # ],
153
- # "new_segments": [
154
- # {
155
- # "id": 2,
156
- # "video_id": 1,
157
- # "label_id": 12,
158
- # "start_frame_number": 500,
159
- # "end_frame_number": 700
160
- # }
161
- # ],
162
- # "deleted_segments": 1 # Number of deleted segments if any were removed
163
- # }
164
-
165
- # **Frontend Integration:**
166
- # - Vue.js should send this request when the user **saves changes** to segments.
167
- # - The **"Add Segment"** button should allow users to add new segments dynamically.
168
- # - The **"Delete Segment"** button should remove segments from the list before submitting.
169
- # - The request should be triggered via an `axios.put` call:
170
- #
171
- path("api/video/<int:video_id>/label/<int:label_id>/update_segments/", UpdateLabelSegmentsView.as_view(), name="update_label_segments"),
172
-
173
-
174
- #----------------------------------START : SENSITIVE META AND RAWVIDEOFILE VIDEO PATIENT DETAILS-------------------------------
175
-
176
- # API Endpoint for fetching video metadata or streaming the next available video
177
- # This endpoint is used by the frontend to fetch:
178
- # - The first available video if `last_id` is NOT provided.
179
- # - The next available video where `id > last_id` if `last_id` is provided.
180
- # - If `Accept: application/json` is set in headers, it returns video metadata as JSON.
181
- # - If no videos are available, it returns {"error": "No more videos available."}.
182
- # const url = lastId ? `http://localhost:8000/api/video/meta/?last_id=${lastId}` : "http://localhost:8000/api/video/meta/";
183
- path("api/video/sensitivemeta/", VideoFileForMetaView.as_view(), name="video_meta"), # Single endpoint for both first and next video
184
-
185
-
186
-
187
- # This API endpoint allows updating specific patient details (SensitiveMeta)
188
- # linked to a video. It is used to correct or modify the patient's first name,
189
- # last name, date of birth, and examination date.
190
- # Fetch video metadata and update patient details
191
- # The frontend should send a JSON request body like this:
192
- # {
193
- # "sensitive_meta_id": 2, # The ID of the SensitiveMeta entry (REQUIRED)
194
- # "patient_first_name": "John", # New first name (REQUIRED, cannot be empty)
195
- # "patient_last_name": "Doe", # New last name (REQUIRED, cannot be empty)
196
- # "patient_dob": "1985-06-15", # New Date of Birth (REQUIRED, format YYYY-MM-DD)
197
- # "examination_date": "2024-03-20" # New Examination Date (OPTIONAL, format YYYY-MM-DD)
198
- # }
199
- # - The frontend sends a PATCH request to this endpoint with updated patient data.
200
- # - The backend validates the input using the serializer (`SensitiveMetaUpdateSerializer`).
201
- # - If validation passes, the patient information is updated in the database.
202
- # - If there are errors (e.g., missing fields, incorrect date format),
203
- # the API returns structured error messages.
204
- path("api/video/update_sensitivemeta/", VideoFileForMetaView.as_view(), name="update_patient_meta"),
205
-
206
-
207
-
208
-
209
- #----------------------------------START : SENSITIVE META AND RAWPDFOFILE PDF PATIENT DETAILS-------------------------------
210
-
211
- #The first request (without id) fetches the first available PDF metadata.
212
- #The "Next" button (with id) fetches the next available PDF.
213
- #If an id is provided, the API returns the actual PDF file instead of JSON.
214
- path("api/pdf/sensitivemeta/", PDFFileForMetaView.as_view(), name="pdf_meta"),
215
-
216
-
217
-
218
-
219
- # This API endpoint allows updating specific patient details (SensitiveMeta)
220
- # linked to a PDF record. It enables modifying the patient's first name,
221
- # last name, date of birth, and examination date.
222
-
223
- # The frontend should send a JSON request body like this:
224
- # {
225
- # "sensitive_meta_id": 2, # The ID of the SensitiveMeta entry (REQUIRED)
226
- # "patient_first_name": "John", # New first name (OPTIONAL, if provided, cannot be empty)
227
- # "patient_last_name": "Doe", # New last name (OPTIONAL, if provided, cannot be empty)
228
- # "patient_dob": "1985-06-15", # New Date of Birth (OPTIONAL, format YYYY-MM-DD)
229
- # "examination_date": "2024-03-20" # New Examination Date (OPTIONAL, format YYYY-MM-DD)
230
- # }
231
-
232
- # - The frontend sends a PATCH request to this endpoint with the updated patient data.
233
- # - The backend processes the request and updates only the fields that are provided.
234
- # - If validation passes, the corresponding SensitiveMeta entry is updated in the database.
235
- # - If errors occur (e.g., invalid ID, empty fields, incorrect date format),
236
- # the API returns structured error messages.
237
-
238
- path("api/pdf/update_sensitivemeta/", UpdateSensitiveMetaView.as_view(), name="update_pdf_meta"),
239
-
240
-
241
-
242
-
243
-
244
- # API Endpoint for Fetching PDF Data (Including Anonymized Text)
245
- # - This endpoint is used when the page loads.
246
- # - Fetches the first available PDF (if no `last_id` is provided).
247
- # - If `last_id` is given, fetches the next available PDF.
248
- # - The frontend calls this endpoint on **page load** and when clicking the **next button**.
249
- # Example frontend usage:
250
- # const url = lastId ? `http://localhost:8000/api/pdf/anony_text/?last_id=${lastId}`
251
- # : "http://localhost:8000/api/pdf/anony_text/";
252
- path("api/pdf/anony_text/", RawPdfAnonyTextView.as_view(), name="pdf_anony_text"),
253
-
254
- # API Endpoint for Updating the `anonymized_text` Field in `RawPdfFile`
255
- # - This endpoint is called when the user edits the anonymized text and clicks **Save**.
256
- # - Updates only the `anonymized_text` field for the specified PDF `id`.
257
- # - The frontend sends a **PATCH request** to this endpoint with the updated text.
258
- # Example frontend usage:
259
- # axios.patch("http://localhost:8000/api/pdf/update_anony_text/", { id: 1, anonymized_text: "Updated text" });
260
- path("api/pdf/update_anony_text/", UpdateAnonymizedTextView.as_view(), name="update_pdf_anony_text"),
261
-
262
-
263
-
264
-
265
-
266
-
267
-
268
-
269
-
270
-
271
-
272
-
273
-
274
-
275
-
276
- #this is for, to test the timeline
277
- #need to delete this url and also endoreg_db_production/endoreg_db/views/views_for_timeline.py and endoreg_db_production/endoreg_db/templates/timeline.html
278
- path('video/<int:video_id>/timeline/', video_timeline_view, name='video_timeline'),
279
- ]
280
-
281
-
282
- #https://biigle.de/manual/tutorials/videos/navigating-timeline#for time line example
283
- from django.conf import settings
284
- from django.conf.urls.static import static
285
- if settings.DEBUG:
286
- urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
8
+ path("api/", include((api_urlpatterns, "endoreg_db"), namespace="api")),
9
+ ]
@@ -1,79 +1,88 @@
1
1
  """Module for utility classes and functions."""
2
2
 
3
+ # --- Imports from submodules ---
4
+
5
+ # dataloader
6
+ from endoreg_db.utils.video.ffmpeg_wrapper import assemble_video_from_frames, get_stream_info, transcode_video, transcode_videofile_if_required
3
7
  from .dataloader import load_model_data_from_yaml
4
- from .parse_and_generate_yaml import collect_center_names
5
- from .validate_endo_roi import validate_endo_roi
6
- from .pydantic_models import DbConfig
7
- from .dates import random_day_by_month_year, random_day_by_year
8
+
9
+ # dates
10
+ from .dates import ensure_aware_datetime, random_day_by_month_year, random_day_by_year
11
+
12
+ # env
13
+ from .env import DEBUG, DJANGO_SETTINGS_MODULE, get_env_var
14
+
15
+ # file_operations
16
+ from .file_operations import copy_with_progress, get_uuid_filename, rename_file_uuid
17
+
18
+ # hashs
8
19
  from .hashs import (
20
+ DJANGO_NAME_SALT,
21
+ get_examiner_hash,
9
22
  get_hash_string,
23
+ get_patient_examination_hash,
10
24
  get_pdf_hash,
11
- get_examiner_hash,
12
25
  get_video_hash,
13
- get_patient_examination_hash,
14
- DJANGO_NAME_SALT
15
26
  )
27
+
28
+ # names
16
29
  from .names import (
17
- create_mock_patient_name,
18
30
  create_mock_examiner_name,
31
+ create_mock_patient_name,
19
32
  guess_name_gender,
20
33
  )
21
34
 
22
- from .paths import (
23
- STORAGE_DIR,
24
- FRAME_DIR,
25
- VIDEO_DIR,
26
- RAW_VIDEO_DIR,
27
- RAW_FRAME_DIR,
28
- TEST_RUN,
29
- TEST_RUN_FRAME_NUMBER,
30
- FRAME_PROCESSING_BATCH_SIZE,
31
- WEIGHTS_DIR,
32
- WEIGHTS_DIR_NAME,
33
- FRAME_DIR_NAME,
34
- VIDEO_DIR_NAME,
35
- STORAGE_DIR_NAME,
36
- RAW_FRAME_DIR_NAME,
37
- RAW_VIDEO_DIR_NAME,
38
- PDF_DIR_NAME,
39
- PDF_DIR,
40
- RAW_PDF_DIR,
41
- RAW_PDF_DIR_NAME,
35
+ # parse_and_generate_yaml
36
+ from .parse_and_generate_yaml import collect_center_names
37
+
38
+ # paths
39
+ from .paths import data_paths
40
+
41
+ # pydantic_models
42
+ from .pydantic_models import DbConfig
43
+
44
+ # validate_endo_roi
45
+ from .validate_endo_roi import validate_endo_roi
46
+
47
+ # ffmpeg_wrapper
48
+ from .video.ffmpeg_wrapper import (
49
+ extract_frames,
50
+ )
51
+ from .video import (
52
+ split_video
42
53
  )
43
54
 
55
+
56
+ # --- Exports ---
57
+
44
58
  __all__ = [
45
- "load_model_data_from_yaml",
46
59
  "collect_center_names",
47
- "validate_endo_roi",
48
- "get_examiner_hash",
49
- "DbConfig",
50
- "random_day_by_month_year",
51
- "random_day_by_year",
52
- "get_hash_string",
60
+ "copy_with_progress",
53
61
  "create_mock_examiner_name",
54
62
  "create_mock_patient_name",
55
- "guess_name_gender",
63
+ "data_paths",
64
+ "DbConfig",
65
+ "DEBUG",
66
+ "DJANGO_NAME_SALT",
67
+ "DJANGO_SETTINGS_MODULE",
68
+ "ensure_aware_datetime",
69
+ "get_env_var",
70
+ "get_examiner_hash",
71
+ "get_hash_string",
72
+ "get_patient_examination_hash",
56
73
  "get_pdf_hash",
74
+ "get_uuid_filename",
57
75
  "get_video_hash",
58
- "get_patient_examination_hash",
59
- "STORAGE_DIR",
60
- "FRAME_DIR",
61
- "VIDEO_DIR",
62
- "RAW_VIDEO_DIR",
63
- "RAW_FRAME_DIR",
64
- "TEST_RUN",
65
- "TEST_RUN_FRAME_NUMBER",
66
- "FRAME_PROCESSING_BATCH_SIZE",
67
- "DJANGO_NAME_SALT",
68
- "WEIGHTS_DIR",
69
- "WEIGHTS_DIR_NAME",
70
- "FRAME_DIR_NAME",
71
- "VIDEO_DIR_NAME",
72
- "STORAGE_DIR_NAME",
73
- "RAW_FRAME_DIR_NAME",
74
- "RAW_VIDEO_DIR_NAME",
75
- "RAW_PDF_DIR_NAME",
76
- "PDF_DIR_NAME",
77
- "PDF_DIR",
78
- "RAW_PDF_DIR",
76
+ "guess_name_gender",
77
+ "load_model_data_from_yaml",
78
+ "random_day_by_month_year",
79
+ "random_day_by_year",
80
+ "rename_file_uuid",
81
+ "validate_endo_roi",
82
+ "assemble_video_from_frames", # Updated name
83
+ "get_stream_info",
84
+ "transcode_video",
85
+ "transcode_videofile_if_required", # Added
86
+ "extract_frames", # Added
79
87
  ]
88
+
@@ -0,0 +1,9 @@
1
+ from .inference_dataset import InferenceDataset
2
+ from .multilabel_classification_net import MultiLabelClassificationNet
3
+ from .predict import Classifier
4
+
5
+ __all__ = [
6
+ "InferenceDataset",
7
+ "MultiLabelClassificationNet",
8
+ "Classifier",
9
+ ]
@@ -1,8 +1,5 @@
1
- from .model_meta import ModelMeta
1
+ from endoreg_db.models import ModelMeta
2
2
 
3
- # get latest model meta by model name
4
-
5
- # TODO MOVE THIS TO A QUERY FILE
6
3
  def get_latest_model_meta_by_model_name(model_name):
7
4
  model_meta = ModelMeta.objects.filter(name=model_name).order_by('-version').first()
8
5
  return model_meta
@@ -1,5 +1,4 @@
1
1
  from torch.utils.data import Dataset
2
- import torch
3
2
  import numpy as np
4
3
  from PIL import Image
5
4
  from torchvision import transforms
@@ -44,7 +44,7 @@ def calculate_metrics(pred, target, threshold=0.5):
44
44
  class MultiLabelClassificationNet(LightningModule):
45
45
  def __init__(
46
46
  self,
47
- labels=["ASD"],
47
+ labels=None,
48
48
  lr=6e-3,
49
49
  weight_decay=0.001,
50
50
  pos_weight=2,
@@ -76,13 +76,18 @@ class MultiLabelClassificationNet(LightningModule):
76
76
  pos_weight=torch.Tensor([self.pos_weight] * len(self.labels))
77
77
  )
78
78
 
79
- def forward(self, x):
80
- """Forward pass"""
79
+ @classmethod
80
+ def load_from_checkpoint(cls, checkpoint_path, *args, **kwargs):
81
+ instance = super(MultiLabelClassificationNet, cls).load_from_checkpoint(
82
+ checkpoint_path, *args, **kwargs
83
+ )
84
+ return instance
85
+
86
+ def forward(self, x): # pylint: disable=arguments-differ
81
87
  x = self.model(x)
82
88
  return x
83
89
 
84
- def training_step(self, batch, batch_idx):
85
- """Training step"""
90
+ def training_step(self, batch, _batch_idx): # pylint: disable=arguments-differ
86
91
  x, y = batch
87
92
  y_pred = self(x)
88
93
  loss = self.criterion(y_pred, y)
@@ -94,8 +99,7 @@ class MultiLabelClassificationNet(LightningModule):
94
99
 
95
100
  return {"loss": loss, "preds": preds, "targets": y}
96
101
 
97
- def validation_step(self, batch, batch_idx):
98
- """Validation step"""
102
+ def validation_step(self, batch, _batch_idx): # pylint: disable=arguments-differ
99
103
  x, y = batch
100
104
  y_pred = self(x)
101
105
  loss = self.criterion(y_pred, y)
@@ -107,8 +111,8 @@ class MultiLabelClassificationNet(LightningModule):
107
111
 
108
112
  return {"loss": loss, "preds": preds, "targets": y}
109
113
 
110
- def validation_epoch_end(self, outputs):
111
- """Validation epoch end"""
114
+ def validation_epoch_end(self, _outputs):
115
+ """Called at the end of validation to aggregate outputs"""
112
116
  self.val_preds = np.concatenate([_ for _ in self.val_preds])
113
117
  self.val_targets = np.concatenate([_ for _ in self.val_targets])
114
118
 
@@ -145,7 +149,7 @@ class MultiLabelClassificationNet(LightningModule):
145
149
  self.parameters(), self.lr, momentum=0.5, weight_decay=self.weight_decay
146
150
  )
147
151
  lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(
148
- optimizer, T_0=20, verbose=True
152
+ optimizer, T_0=20,
149
153
  )
150
154
 
151
155
  return {
@@ -1,7 +1,8 @@
1
1
  import numpy as np
2
2
 
3
+
3
4
  def concat_pred_dicts(pred_dicts):
4
- '''Shoulkd be a list of dictionaries with the same keys'''
5
+ """Shoulkd be a list of dictionaries with the same keys"""
5
6
  assert len(pred_dicts) > 0
6
7
  keys = pred_dicts[0].keys()
7
8
 
@@ -15,11 +16,15 @@ def concat_pred_dicts(pred_dicts):
15
16
 
16
17
  return merged_predictions
17
18
 
18
- def make_smooth_preds(prediction_array, window_size_s=1, fps = 50):
19
+
20
+ def make_smooth_preds(prediction_array, window_size_s=1, fps=50):
19
21
  window_size = int(window_size_s * fps)
20
- smooth_prediction_array = np.convolve(prediction_array, np.ones(window_size)/window_size, mode='valid')
22
+ smooth_prediction_array = np.convolve(
23
+ prediction_array, np.ones(window_size) / window_size, mode="valid"
24
+ )
21
25
  return smooth_prediction_array
22
26
 
27
+
23
28
  def find_true_pred_sequences(predictions):
24
29
  """
25
30
  Efficiently finds sequences of 'outside' predictions in the binary predictions array using NumPy.
@@ -47,7 +52,12 @@ def find_true_pred_sequences(predictions):
47
52
  change_indices = np.append(change_indices, predictions.size)
48
53
 
49
54
  # Extract the 'outside' sequences by slicing the change_indices array in steps of two
50
- outside_sequences = [(change_indices[i], change_indices[i + 1] - 1) for i in range(0, len(change_indices), 2)]
55
+ outside_sequences = [
56
+ (change_indices[i], change_indices[i + 1] - 1)
57
+ for i in range(0, len(change_indices), 2)
58
+ ]
51
59
 
52
- return outside_sequences
60
+ # make sure the result is serializable
61
+ outside_sequences = [(int(start), int(stop)) for start, stop in outside_sequences]
53
62
 
63
+ return outside_sequences