endoreg-db 0.6.0__py3-none-any.whl → 0.6.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 (416) hide show
  1. endoreg_db/case_generator/__init__.py +0 -0
  2. endoreg_db/case_generator/case_generator.py +159 -0
  3. endoreg_db/case_generator/lab_sample_factory.py +33 -0
  4. endoreg_db/case_generator/utils.py +30 -0
  5. endoreg_db/data/__init__.py +118 -0
  6. endoreg_db/data/agl_service/data.yaml +19 -0
  7. endoreg_db/data/ai_model/data.yaml +7 -0
  8. endoreg_db/data/ai_model_label/label/data.yaml +88 -0
  9. endoreg_db/data/ai_model_label/label-set/data.yaml +21 -0
  10. endoreg_db/data/ai_model_label/label-type/data.yaml +7 -0
  11. endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +5 -0
  12. endoreg_db/data/ai_model_type/data.yaml +7 -0
  13. endoreg_db/data/ai_model_video_segmentation_label/base_segmentation.yaml +176 -0
  14. endoreg_db/data/ai_model_video_segmentation_labelset/data.yaml +20 -0
  15. endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +167 -0
  16. endoreg_db/data/case_template/rule/01_patient-set-age.yaml +8 -0
  17. endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +9 -0
  18. endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +23 -0
  19. endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +19 -0
  20. endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +19 -0
  21. endoreg_db/data/case_template/rule/19_create_patient.yaml +17 -0
  22. endoreg_db/data/case_template/rule_type/base_types.yaml +35 -0
  23. endoreg_db/data/case_template/rule_value/.init +0 -0
  24. endoreg_db/data/case_template/rule_value_type/base_types.yaml +59 -0
  25. endoreg_db/data/case_template/template/base.yaml +8 -0
  26. endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +3 -0
  27. endoreg_db/data/case_template/tmp/_rule_value +13 -0
  28. endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +21 -0
  29. endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +10 -0
  30. endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +7 -0
  31. endoreg_db/data/center/data.yaml +90 -0
  32. endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +144 -0
  33. endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +48 -0
  34. endoreg_db/data/contraindication/bleeding.yaml +11 -0
  35. endoreg_db/data/disease/cardiovascular.yaml +37 -0
  36. endoreg_db/data/disease/hepatology.yaml +5 -0
  37. endoreg_db/data/disease/misc.yaml +6 -0
  38. endoreg_db/data/disease/renal.yaml +5 -0
  39. endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +6 -0
  40. endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +6 -0
  41. endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +41 -0
  42. endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +20 -0
  43. endoreg_db/data/distribution/date/patient.yaml +7 -0
  44. endoreg_db/data/distribution/multiple_categorical/.init +0 -0
  45. endoreg_db/data/distribution/numeric/data.yaml +14 -0
  46. endoreg_db/data/distribution/single_categorical/patient.yaml +7 -0
  47. endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +132 -0
  48. endoreg_db/data/endoscope/data.yaml +93 -0
  49. endoreg_db/data/endoscope_type/data.yaml +11 -0
  50. endoreg_db/data/endoscopy_processor/data.yaml +47 -0
  51. endoreg_db/data/event/cardiology.yaml +28 -0
  52. endoreg_db/data/event/neurology.yaml +14 -0
  53. endoreg_db/data/event/surgery.yaml +13 -0
  54. endoreg_db/data/event/thrombembolism.yaml +20 -0
  55. endoreg_db/data/examination/examinations/data.yaml +66 -0
  56. endoreg_db/data/examination/time/data.yaml +48 -0
  57. endoreg_db/data/examination/time-type/data.yaml +8 -0
  58. endoreg_db/data/examination/type/data.yaml +5 -0
  59. endoreg_db/data/examination_indication/endoscopy.yaml +8 -0
  60. endoreg_db/data/examination_indication_classification/endoscopy.yaml +8 -0
  61. endoreg_db/data/examination_indication_classification_choice/endoscopy.yaml +101 -0
  62. endoreg_db/data/finding/data.yaml +141 -0
  63. endoreg_db/data/finding_intervention/endoscopy.yaml +138 -0
  64. endoreg_db/data/finding_intervention_type/endoscopy.yaml +15 -0
  65. endoreg_db/data/finding_location_classification/colonoscopy.yaml +46 -0
  66. endoreg_db/data/finding_location_classification_choice/colonoscopy.yaml +240 -0
  67. endoreg_db/data/finding_morphology_classification/colonoscopy.yaml +48 -0
  68. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_circularity_default.yaml +34 -0
  69. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_nice.yaml +20 -0
  70. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_paris.yaml +65 -0
  71. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_planarity_default.yaml +56 -0
  72. endoreg_db/data/finding_morphology_classification_choice/colon_lesion_surface_intact_default.yaml +39 -0
  73. endoreg_db/data/finding_morphology_classification_choice/colonoscopy_size.yaml +57 -0
  74. endoreg_db/data/finding_morphology_classification_type/colonoscopy.yaml +79 -0
  75. endoreg_db/data/finding_type/data.yaml +30 -0
  76. endoreg_db/data/gender/data.yaml +35 -0
  77. endoreg_db/data/information_source/data.yaml +30 -0
  78. endoreg_db/data/information_source/medication.yaml +6 -0
  79. endoreg_db/data/lab_value/cardiac_enzymes.yaml +37 -0
  80. endoreg_db/data/lab_value/coagulation.yaml +54 -0
  81. endoreg_db/data/lab_value/electrolytes.yaml +228 -0
  82. endoreg_db/data/lab_value/gastrointestinal_function.yaml +133 -0
  83. endoreg_db/data/lab_value/hematology.yaml +184 -0
  84. endoreg_db/data/lab_value/hormones.yaml +59 -0
  85. endoreg_db/data/lab_value/lipids.yaml +53 -0
  86. endoreg_db/data/lab_value/misc.yaml +33 -0
  87. endoreg_db/data/lab_value/renal_function.yaml +12 -0
  88. endoreg_db/data/log_type/data.yaml +57 -0
  89. endoreg_db/data/lx_client_tag/base.yaml +54 -0
  90. endoreg_db/data/lx_client_type/base.yaml +30 -0
  91. endoreg_db/data/lx_permission/base.yaml +24 -0
  92. endoreg_db/data/lx_permission/endoreg.yaml +52 -0
  93. endoreg_db/data/material/material.yaml +91 -0
  94. endoreg_db/data/medication/anticoagulation.yaml +65 -0
  95. endoreg_db/data/medication/tah.yaml +70 -0
  96. endoreg_db/data/medication_indication/anticoagulation.yaml +115 -0
  97. endoreg_db/data/medication_indication_type/data.yaml +11 -0
  98. endoreg_db/data/medication_indication_type/thrombembolism.yaml +41 -0
  99. endoreg_db/data/medication_intake_time/base.yaml +31 -0
  100. endoreg_db/data/medication_schedule/apixaban.yaml +95 -0
  101. endoreg_db/data/medication_schedule/ass.yaml +12 -0
  102. endoreg_db/data/medication_schedule/enoxaparin.yaml +26 -0
  103. endoreg_db/data/names_first/first_names.yaml +51 -0
  104. endoreg_db/data/names_last/last_names.yaml +51 -0
  105. endoreg_db/data/network_device/data.yaml +59 -0
  106. endoreg_db/data/network_device_type/data.yaml +12 -0
  107. endoreg_db/data/organ/data.yaml +29 -0
  108. endoreg_db/data/patient_lab_sample_type/generic.yaml +6 -0
  109. endoreg_db/data/pdf_type/data.yaml +29 -0
  110. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +66 -0
  111. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +33 -0
  112. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +308 -0
  113. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +88 -0
  114. endoreg_db/data/profession/data.yaml +70 -0
  115. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +55 -0
  116. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +30 -0
  117. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -0
  118. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +15 -0
  119. endoreg_db/data/tmp/chronic_kidney_disease.yaml +0 -0
  120. endoreg_db/data/tmp/congestive_heart_failure.yaml +0 -0
  121. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +12 -0
  122. endoreg_db/data/unit/concentration.yaml +92 -0
  123. endoreg_db/data/unit/data.yaml +17 -0
  124. endoreg_db/data/unit/length.yaml +31 -0
  125. endoreg_db/data/unit/misc.yaml +20 -0
  126. endoreg_db/data/unit/rate.yaml +6 -0
  127. endoreg_db/data/unit/time.yaml +13 -0
  128. endoreg_db/data/unit/volume.yaml +35 -0
  129. endoreg_db/data/unit/weight.yaml +38 -0
  130. endoreg_db/data/waste/data.yaml +12 -0
  131. endoreg_db/forms/__init__.py +5 -0
  132. endoreg_db/forms/examination_form.py +11 -0
  133. endoreg_db/forms/patient_finding_intervention_form.py +19 -0
  134. endoreg_db/forms/patient_form.py +26 -0
  135. endoreg_db/forms/questionnaires/__init__.py +1 -0
  136. endoreg_db/forms/questionnaires/tto_questionnaire.py +23 -0
  137. endoreg_db/forms/settings/__init__.py +8 -0
  138. endoreg_db/forms/unit.py +6 -0
  139. endoreg_db/management/__init__.py +0 -0
  140. endoreg_db/management/commands/__init__.py +0 -0
  141. endoreg_db/management/commands/_load_model_template.py +41 -0
  142. endoreg_db/management/commands/delete_all.py +18 -0
  143. endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -0
  144. endoreg_db/management/commands/fix_auth_permission.py +20 -0
  145. endoreg_db/management/commands/load_active_model_data.py +45 -0
  146. endoreg_db/management/commands/load_ai_model_data.py +79 -0
  147. endoreg_db/management/commands/load_ai_model_label_data.py +59 -0
  148. endoreg_db/management/commands/load_base_db_data.py +178 -0
  149. endoreg_db/management/commands/load_center_data.py +43 -0
  150. endoreg_db/management/commands/load_contraindication_data.py +41 -0
  151. endoreg_db/management/commands/load_disease_classification_choices_data.py +41 -0
  152. endoreg_db/management/commands/load_disease_classification_data.py +41 -0
  153. endoreg_db/management/commands/load_disease_data.py +62 -0
  154. endoreg_db/management/commands/load_distribution_data.py +66 -0
  155. endoreg_db/management/commands/load_endoscope_data.py +68 -0
  156. endoreg_db/management/commands/load_event_data.py +41 -0
  157. endoreg_db/management/commands/load_examination_data.py +75 -0
  158. endoreg_db/management/commands/load_examination_indication_data.py +65 -0
  159. endoreg_db/management/commands/load_finding_data.py +171 -0
  160. endoreg_db/management/commands/load_g_play_data.py +113 -0
  161. endoreg_db/management/commands/load_gender_data.py +44 -0
  162. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +133 -0
  163. endoreg_db/management/commands/load_information_source.py +45 -0
  164. endoreg_db/management/commands/load_lab_value_data.py +50 -0
  165. endoreg_db/management/commands/load_logging_data.py +39 -0
  166. endoreg_db/management/commands/load_lx_data.py +64 -0
  167. endoreg_db/management/commands/load_medication_data.py +103 -0
  168. endoreg_db/management/commands/load_medication_indication_data.py +63 -0
  169. endoreg_db/management/commands/load_medication_indication_type_data.py +41 -0
  170. endoreg_db/management/commands/load_medication_intake_time_data.py +41 -0
  171. endoreg_db/management/commands/load_medication_schedule_data.py +55 -0
  172. endoreg_db/management/commands/load_name_data.py +37 -0
  173. endoreg_db/management/commands/load_network_data.py +57 -0
  174. endoreg_db/management/commands/load_organ_data.py +43 -0
  175. endoreg_db/management/commands/load_pdf_type_data.py +61 -0
  176. endoreg_db/management/commands/load_profession_data.py +44 -0
  177. endoreg_db/management/commands/load_report_reader_flag_data.py +46 -0
  178. endoreg_db/management/commands/load_unit_data.py +46 -0
  179. endoreg_db/management/commands/load_user_groups.py +28 -0
  180. endoreg_db/management/commands/register_ai_model.py +64 -0
  181. endoreg_db/management/commands/reset_celery_schedule.py +9 -0
  182. endoreg_db/migrations/0001_initial.py +2045 -0
  183. endoreg_db/migrations/0002_alter_frame_image_alter_rawframe_image.py +23 -0
  184. endoreg_db/migrations/0003_alter_frame_image_alter_rawframe_image.py +23 -0
  185. endoreg_db/migrations/0004_alter_rawvideofile_file_alter_video_file.py +25 -0
  186. endoreg_db/migrations/0005_rawvideofile_frame_count_and_more.py +33 -0
  187. endoreg_db/migrations/0006_frame_extracted_rawframe_extracted.py +23 -0
  188. endoreg_db/migrations/0007_rename_pseudo_patient_video_patient_and_more.py +24 -0
  189. endoreg_db/migrations/0008_remove_reportfile_patient_examination_and_more.py +48 -0
  190. endoreg_db/migrations/__init__.py +0 -0
  191. endoreg_db/models/__init__.py +376 -0
  192. endoreg_db/models/ai_model/__init__.py +4 -0
  193. endoreg_db/models/ai_model/active_model.py +9 -0
  194. endoreg_db/models/ai_model/ai_model.py +103 -0
  195. endoreg_db/models/ai_model/lightning/__init__.py +3 -0
  196. endoreg_db/models/ai_model/lightning/inference_dataset.py +53 -0
  197. endoreg_db/models/ai_model/lightning/multilabel_classification_net.py +155 -0
  198. endoreg_db/models/ai_model/lightning/postprocess.py +53 -0
  199. endoreg_db/models/ai_model/lightning/predict.py +172 -0
  200. endoreg_db/models/ai_model/lightning/prediction_visualizer.py +55 -0
  201. endoreg_db/models/ai_model/lightning/preprocess.py +68 -0
  202. endoreg_db/models/ai_model/lightning/run_visualizer.py +21 -0
  203. endoreg_db/models/ai_model/model_meta.py +250 -0
  204. endoreg_db/models/ai_model/model_type.py +36 -0
  205. endoreg_db/models/ai_model/utils.py +8 -0
  206. endoreg_db/models/annotation/__init__.py +32 -0
  207. endoreg_db/models/annotation/anonymized_image_annotation.py +115 -0
  208. endoreg_db/models/annotation/binary_classification_annotation_task.py +117 -0
  209. endoreg_db/models/annotation/image_classification.py +86 -0
  210. endoreg_db/models/annotation/video_segmentation_annotation.py +52 -0
  211. endoreg_db/models/annotation/video_segmentation_labelset.py +20 -0
  212. endoreg_db/models/case/__init__.py +1 -0
  213. endoreg_db/models/case/case.py +34 -0
  214. endoreg_db/models/case_template/__init__.py +15 -0
  215. endoreg_db/models/case_template/case_template.py +125 -0
  216. endoreg_db/models/case_template/case_template_rule.py +276 -0
  217. endoreg_db/models/case_template/case_template_rule_value.py +88 -0
  218. endoreg_db/models/case_template/case_template_type.py +28 -0
  219. endoreg_db/models/center/__init__.py +11 -0
  220. endoreg_db/models/center/center.py +51 -0
  221. endoreg_db/models/center/center_product.py +33 -0
  222. endoreg_db/models/center/center_resource.py +33 -0
  223. endoreg_db/models/center/center_waste.py +16 -0
  224. endoreg_db/models/contraindication/__init__.py +21 -0
  225. endoreg_db/models/data_file/__init__.py +39 -0
  226. endoreg_db/models/data_file/base_classes/__init__.py +7 -0
  227. endoreg_db/models/data_file/base_classes/abstract_frame.py +100 -0
  228. endoreg_db/models/data_file/base_classes/abstract_pdf.py +136 -0
  229. endoreg_db/models/data_file/base_classes/abstract_video.py +807 -0
  230. endoreg_db/models/data_file/base_classes/frame_helpers.py +17 -0
  231. endoreg_db/models/data_file/base_classes/prepare_bulk_frames.py +19 -0
  232. endoreg_db/models/data_file/base_classes/utils.py +80 -0
  233. endoreg_db/models/data_file/frame.py +29 -0
  234. endoreg_db/models/data_file/import_classes/__init__.py +18 -0
  235. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +35 -0
  236. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -0
  237. endoreg_db/models/data_file/import_classes/processing_functions/video.py +260 -0
  238. endoreg_db/models/data_file/import_classes/raw_pdf.py +260 -0
  239. endoreg_db/models/data_file/import_classes/raw_video.py +288 -0
  240. endoreg_db/models/data_file/metadata/__init__.py +13 -0
  241. endoreg_db/models/data_file/metadata/pdf_meta.py +74 -0
  242. endoreg_db/models/data_file/metadata/sensitive_meta.py +290 -0
  243. endoreg_db/models/data_file/metadata/video_meta.py +199 -0
  244. endoreg_db/models/data_file/report_file.py +56 -0
  245. endoreg_db/models/data_file/video/__init__.py +11 -0
  246. endoreg_db/models/data_file/video/import_meta.py +25 -0
  247. endoreg_db/models/data_file/video/video.py +196 -0
  248. endoreg_db/models/data_file/video_segment.py +214 -0
  249. endoreg_db/models/disease.py +79 -0
  250. endoreg_db/models/emission/__init__.py +5 -0
  251. endoreg_db/models/emission/emission_factor.py +85 -0
  252. endoreg_db/models/event.py +73 -0
  253. endoreg_db/models/examination/__init__.py +9 -0
  254. endoreg_db/models/examination/examination.py +67 -0
  255. endoreg_db/models/examination/examination_indication.py +170 -0
  256. endoreg_db/models/examination/examination_time.py +53 -0
  257. endoreg_db/models/examination/examination_time_type.py +48 -0
  258. endoreg_db/models/examination/examination_type.py +40 -0
  259. endoreg_db/models/finding/__init__.py +11 -0
  260. endoreg_db/models/finding/finding.py +75 -0
  261. endoreg_db/models/finding/finding_intervention.py +60 -0
  262. endoreg_db/models/finding/finding_location_classification.py +94 -0
  263. endoreg_db/models/finding/finding_morphology_classification.py +89 -0
  264. endoreg_db/models/finding/finding_type.py +22 -0
  265. endoreg_db/models/hardware/__init__.py +2 -0
  266. endoreg_db/models/hardware/endoscope.py +60 -0
  267. endoreg_db/models/hardware/endoscopy_processor.py +155 -0
  268. endoreg_db/models/information_source.py +29 -0
  269. endoreg_db/models/label/__init__.py +1 -0
  270. endoreg_db/models/label/label.py +112 -0
  271. endoreg_db/models/laboratory/__init__.py +1 -0
  272. endoreg_db/models/laboratory/lab_value.py +111 -0
  273. endoreg_db/models/logging/__init__.py +11 -0
  274. endoreg_db/models/logging/agl_service.py +19 -0
  275. endoreg_db/models/logging/base.py +22 -0
  276. endoreg_db/models/logging/log_type.py +23 -0
  277. endoreg_db/models/logging/network_device.py +27 -0
  278. endoreg_db/models/lx/__init__.py +4 -0
  279. endoreg_db/models/lx/client.py +57 -0
  280. endoreg_db/models/lx/identity.py +34 -0
  281. endoreg_db/models/lx/permission.py +18 -0
  282. endoreg_db/models/lx/user.py +16 -0
  283. endoreg_db/models/medication/__init__.py +19 -0
  284. endoreg_db/models/medication/medication.py +33 -0
  285. endoreg_db/models/medication/medication_indication.py +50 -0
  286. endoreg_db/models/medication/medication_indication_type.py +34 -0
  287. endoreg_db/models/medication/medication_intake_time.py +26 -0
  288. endoreg_db/models/medication/medication_schedule.py +37 -0
  289. endoreg_db/models/network/__init__.py +9 -0
  290. endoreg_db/models/network/agl_service.py +38 -0
  291. endoreg_db/models/network/network_device.py +58 -0
  292. endoreg_db/models/network/network_device_type.py +23 -0
  293. endoreg_db/models/organ/__init__.py +38 -0
  294. endoreg_db/models/other/__init__.py +23 -0
  295. endoreg_db/models/other/distribution/__init__.py +44 -0
  296. endoreg_db/models/other/distribution/base_value_distribution.py +20 -0
  297. endoreg_db/models/other/distribution/date_value_distribution.py +91 -0
  298. endoreg_db/models/other/distribution/multiple_categorical_value_distribution.py +32 -0
  299. endoreg_db/models/other/distribution/numeric_value_distribution.py +97 -0
  300. endoreg_db/models/other/distribution/single_categorical_value_distribution.py +22 -0
  301. endoreg_db/models/other/distribution.py +5 -0
  302. endoreg_db/models/other/material.py +20 -0
  303. endoreg_db/models/other/resource.py +18 -0
  304. endoreg_db/models/other/transport_route.py +22 -0
  305. endoreg_db/models/other/waste.py +20 -0
  306. endoreg_db/models/patient/__init__.py +24 -0
  307. endoreg_db/models/patient/patient_examination.py +182 -0
  308. endoreg_db/models/patient/patient_finding.py +143 -0
  309. endoreg_db/models/patient/patient_finding_intervention.py +26 -0
  310. endoreg_db/models/patient/patient_finding_location.py +120 -0
  311. endoreg_db/models/patient/patient_finding_morphology.py +166 -0
  312. endoreg_db/models/permissions/__init__.py +44 -0
  313. endoreg_db/models/persons/__init__.py +34 -0
  314. endoreg_db/models/persons/examiner/__init__.py +2 -0
  315. endoreg_db/models/persons/examiner/examiner.py +60 -0
  316. endoreg_db/models/persons/examiner/examiner_type.py +2 -0
  317. endoreg_db/models/persons/first_name.py +18 -0
  318. endoreg_db/models/persons/gender.py +22 -0
  319. endoreg_db/models/persons/last_name.py +20 -0
  320. endoreg_db/models/persons/patient/__init__.py +8 -0
  321. endoreg_db/models/persons/patient/patient.py +389 -0
  322. endoreg_db/models/persons/patient/patient_disease.py +22 -0
  323. endoreg_db/models/persons/patient/patient_event.py +52 -0
  324. endoreg_db/models/persons/patient/patient_examination_indication.py +32 -0
  325. endoreg_db/models/persons/patient/patient_lab_sample.py +108 -0
  326. endoreg_db/models/persons/patient/patient_lab_value.py +197 -0
  327. endoreg_db/models/persons/patient/patient_medication.py +59 -0
  328. endoreg_db/models/persons/patient/patient_medication_schedule.py +88 -0
  329. endoreg_db/models/persons/person.py +31 -0
  330. endoreg_db/models/persons/portal_user_information.py +27 -0
  331. endoreg_db/models/prediction/__init__.py +8 -0
  332. endoreg_db/models/prediction/image_classification.py +51 -0
  333. endoreg_db/models/prediction/video_prediction_meta.py +306 -0
  334. endoreg_db/models/product/__init__.py +14 -0
  335. endoreg_db/models/product/product.py +110 -0
  336. endoreg_db/models/product/product_group.py +27 -0
  337. endoreg_db/models/product/product_material.py +28 -0
  338. endoreg_db/models/product/product_weight.py +38 -0
  339. endoreg_db/models/product/reference_product.py +115 -0
  340. endoreg_db/models/questionnaires/__init__.py +114 -0
  341. endoreg_db/models/quiz/__init__.py +9 -0
  342. endoreg_db/models/quiz/quiz_answer.py +41 -0
  343. endoreg_db/models/quiz/quiz_question.py +54 -0
  344. endoreg_db/models/report_reader/__init__.py +7 -0
  345. endoreg_db/models/report_reader/report_reader_config.py +53 -0
  346. endoreg_db/models/report_reader/report_reader_flag.py +20 -0
  347. endoreg_db/models/rules/__init__.py +5 -0
  348. endoreg_db/models/rules/rule.py +24 -0
  349. endoreg_db/models/rules/rule_applicator.py +224 -0
  350. endoreg_db/models/rules/rule_attribute_dtype.py +19 -0
  351. endoreg_db/models/rules/rule_type.py +22 -0
  352. endoreg_db/models/rules/ruleset.py +19 -0
  353. endoreg_db/models/unit.py +22 -0
  354. endoreg_db/queries/__init__.py +5 -0
  355. endoreg_db/queries/annotations/__init__.py +3 -0
  356. endoreg_db/queries/annotations/legacy.py +158 -0
  357. endoreg_db/queries/get/__init__.py +6 -0
  358. endoreg_db/queries/get/annotation.py +0 -0
  359. endoreg_db/queries/get/center.py +42 -0
  360. endoreg_db/queries/get/model.py +13 -0
  361. endoreg_db/queries/get/patient.py +14 -0
  362. endoreg_db/queries/get/patient_examination.py +20 -0
  363. endoreg_db/queries/get/prediction.py +0 -0
  364. endoreg_db/queries/get/report_file.py +33 -0
  365. endoreg_db/queries/get/video.py +31 -0
  366. endoreg_db/queries/get/video_import_meta.py +0 -0
  367. endoreg_db/queries/get/video_prediction_meta.py +0 -0
  368. endoreg_db/queries/sanity/__init_.py +0 -0
  369. endoreg_db/serializers/__init__.py +10 -0
  370. endoreg_db/serializers/ai_model.py +19 -0
  371. endoreg_db/serializers/annotation.py +14 -0
  372. endoreg_db/serializers/center.py +11 -0
  373. endoreg_db/serializers/examination.py +33 -0
  374. endoreg_db/serializers/frame.py +9 -0
  375. endoreg_db/serializers/hardware.py +21 -0
  376. endoreg_db/serializers/label.py +22 -0
  377. endoreg_db/serializers/patient.py +33 -0
  378. endoreg_db/serializers/prediction.py +10 -0
  379. endoreg_db/serializers/raw_video_meta_validation.py +13 -0
  380. endoreg_db/serializers/report_file.py +7 -0
  381. endoreg_db/serializers/video.py +20 -0
  382. endoreg_db/serializers/video_segmentation.py +492 -0
  383. endoreg_db/templates/admin/patient_finding_intervention.html +253 -0
  384. endoreg_db/templates/admin/start_examination.html +12 -0
  385. endoreg_db/templates/timeline.html +176 -0
  386. endoreg_db/utils/__init__.py +36 -0
  387. endoreg_db/utils/cropping.py +29 -0
  388. endoreg_db/utils/dataloader.py +118 -0
  389. endoreg_db/utils/dates.py +39 -0
  390. endoreg_db/utils/file_operations.py +30 -0
  391. endoreg_db/utils/hashs.py +152 -0
  392. endoreg_db/utils/legacy_ocr.py +201 -0
  393. endoreg_db/utils/names.py +74 -0
  394. endoreg_db/utils/ocr.py +190 -0
  395. endoreg_db/utils/parse_and_generate_yaml.py +46 -0
  396. endoreg_db/utils/pydantic_models/__init__.py +6 -0
  397. endoreg_db/utils/pydantic_models/db_config.py +57 -0
  398. endoreg_db/utils/uuid.py +4 -0
  399. endoreg_db/utils/validate_endo_roi.py +19 -0
  400. endoreg_db/utils/validate_subcategory_dict.py +91 -0
  401. endoreg_db/utils/video/__init__.py +13 -0
  402. endoreg_db/utils/video/extract_frames.py +121 -0
  403. endoreg_db/utils/video/transcode_videofile.py +111 -0
  404. endoreg_db/views/__init__.py +2 -0
  405. endoreg_db/views/csrf.py +7 -0
  406. endoreg_db/views/patient_views.py +90 -0
  407. endoreg_db/views/raw_video_meta_validation_views.py +38 -0
  408. endoreg_db/views/report_views.py +96 -0
  409. endoreg_db/views/video_segmentation_views.py +149 -0
  410. endoreg_db/views/views_for_timeline.py +46 -0
  411. {endoreg_db-0.6.0.dist-info → endoreg_db-0.6.2.dist-info}/METADATA +14 -4
  412. endoreg_db-0.6.2.dist-info/RECORD +420 -0
  413. {endoreg_db-0.6.0.dist-info → endoreg_db-0.6.2.dist-info}/WHEEL +1 -2
  414. endoreg_db-0.6.0.dist-info/RECORD +0 -11
  415. endoreg_db-0.6.0.dist-info/top_level.txt +0 -1
  416. {endoreg_db-0.6.0.dist-info → endoreg_db-0.6.2.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,158 @@
1
+ from ...models import LabelSet, ImageClassificationAnnotation
2
+ from django.db.models import Q, F
3
+ from django.db import models
4
+ from tqdm import tqdm
5
+ from collections import defaultdict
6
+
7
+ # def get_legacy_annotations_for_labelset(labelset_name, version=None):
8
+ # """
9
+ # Retrieve annotations for a given label set for training.
10
+
11
+ # Args:
12
+ # - labelset_name (str): The name of the label set.
13
+ # - version (int, optional): The version of the label set. If not specified, the latest version is fetched.
14
+
15
+ # Returns:
16
+ # - list[dict]: A list of dictionaries. Each dictionary represents an image and its annotations.
17
+ # Format: [{"frame": <frame_object>, "annotations": [{"label": <label_name>, "value": <value>}, ...]}, ...]
18
+
19
+ # Example:
20
+ # annotations_for_training = get_annotations_for_labelset("YourLabelSetName", version=2)
21
+
22
+ # """
23
+
24
+ # # Fetch the label set based on the name and optionally the version
25
+ # if version:
26
+ # labelset = LabelSet.objects.get(name=labelset_name, version=version)
27
+ # else:
28
+ # labelset = LabelSet.objects.filter(name=labelset_name).order_by('-version').first()
29
+ # if not labelset:
30
+ # raise ValueError(f"No label set found with the name: {labelset_name}")
31
+
32
+ # # Retrieve all labels in the label set
33
+ # labels_in_set = labelset.labels.all()
34
+
35
+ # # Get the most recent annotations for each frame/label combination
36
+ # annotations = ImageClassificationAnnotation.objects.filter(label__in=labels_in_set)
37
+ # annotations = annotations.annotate(
38
+ # latest_annotation=models.Window(
39
+ # expression=models.functions.RowNumber(),
40
+ # partition_by=[F('legacy_image'), F('label')],
41
+ # order_by=F('date_modified').desc()
42
+ # )
43
+ # ).filter(latest_annotation=1)
44
+
45
+ # # Organize the annotations by image/frame
46
+ # organized_annotations = []
47
+
48
+ # for annotation in tqdm(annotations):
49
+ # # ic(annotation)
50
+ # # Check if the frame is already in the organized list
51
+ # existing_entry = next((entry for entry in organized_annotations if entry['legacy_image'] == annotation.legacy_frame), None)
52
+
53
+ # if existing_entry:
54
+ # # Add this annotation to the existing frame's annotations
55
+ # existing_entry['annotations'].append({
56
+ # "label": annotation.label.name,
57
+ # "value": annotation.value
58
+ # })
59
+ # else:
60
+ # # Create a new entry for this frame
61
+ # organized_annotations.append({
62
+ # "legacy_image": annotation.legacy_image,
63
+ # "annotations": [{
64
+ # "label": annotation.label.name,
65
+ # "value": annotation.value
66
+ # }]
67
+ # })
68
+
69
+ # return organized_annotations
70
+
71
+
72
+
73
+ def get_legacy_annotations_for_labelset(labelset_name, version=None):
74
+ """
75
+ ... [rest of your docstring]
76
+ """
77
+
78
+ # Fetch the label set based on the name and optionally the version
79
+ if version:
80
+ labelset = LabelSet.objects.get(name=labelset_name, version=version)
81
+ else:
82
+ labelset = LabelSet.objects.filter(name=labelset_name).order_by('-version').first()
83
+ if not labelset:
84
+ raise ValueError(f"No label set found with the name: {labelset_name}")
85
+
86
+ # Retrieve all labels in the label set
87
+ labels_in_set = labelset.labels.all()
88
+
89
+ # Get the most recent annotations for each frame/label combination
90
+ annotations = (ImageClassificationAnnotation.objects
91
+ .filter(label__in=labels_in_set)
92
+ .select_related('legacy_image', 'label') # Reduce number of queries
93
+ .annotate(
94
+ latest_annotation=models.Window(
95
+ expression=models.functions.RowNumber(),
96
+ partition_by=[F('legacy_image'), F('label')],
97
+ order_by=F('date_modified').desc()
98
+ )
99
+ ).filter(latest_annotation=1))
100
+
101
+ # Organize the annotations by image/frame using a defaultdict
102
+ organized_annotations_dict = defaultdict(lambda: {
103
+ "legacy_image": None,
104
+ "annotations": []
105
+ })
106
+
107
+ for annotation in tqdm(annotations):
108
+ organized_entry = organized_annotations_dict[annotation.legacy_image.id]
109
+ organized_entry["legacy_image"] = annotation.legacy_image
110
+ organized_entry["annotations"].append({
111
+ "label": annotation.label.name,
112
+ "value": annotation.value
113
+ })
114
+
115
+ # Convert organized_annotations_dict to a list
116
+ organized_annotations = list(organized_annotations_dict.values())
117
+
118
+ return organized_annotations
119
+
120
+ def generate_legacy_dataset_output(labelset_name, version=None):
121
+ """
122
+ Generate an output suitable for creating PyTorch datasets.
123
+
124
+ Args:
125
+ - labelset_name (str): The name of the label set.
126
+ - version (int, optional): The version of the label set. If not specified, the latest version is fetched.
127
+
128
+ Returns:
129
+ - list[dict]: A list of dictionaries, where each dictionary contains the file path and the labels.
130
+ Format: [{"path": <file_path>, "labels": [<label_1_value>, <label_2_value>, ...]}, ...]
131
+ - labelset[LabelSet]: The label set that was used to generate the output.
132
+ """
133
+
134
+ # First, retrieve the organized annotations using the previously defined function
135
+ organized_annotations = get_legacy_annotations_for_labelset(labelset_name, version)
136
+
137
+ # Fetch all labels from the labelset for consistent ordering
138
+ labelset = LabelSet.objects.get(name=labelset_name, version=version)
139
+ all_labels = labelset.get_labels_in_order()
140
+
141
+ dataset_output = []
142
+
143
+ for entry in organized_annotations:
144
+ # Prepare a dictionary for each frame
145
+ frame_data = {
146
+ "path": entry['legacy_image'].image.path, # Assuming 'image' field stores the file path
147
+ "labels": [-1] * len(all_labels) # Initialize with -1 for all labels
148
+ }
149
+
150
+ # Update the labels based on the annotations
151
+ for annotation in entry['annotations']:
152
+ index = next((i for i, label in enumerate(all_labels) if label.name == annotation['label']), None)
153
+ if index is not None:
154
+ frame_data['labels'][index] = int(annotation['value'])
155
+
156
+ dataset_output.append(frame_data)
157
+
158
+ return dataset_output, labelset
@@ -0,0 +1,6 @@
1
+ from .annotation import *
2
+ from .center import *
3
+ from .model import *
4
+ from .patient import *
5
+ from .patient_examination import *
6
+ from .video import *
File without changes
@@ -0,0 +1,42 @@
1
+ from endoreg_db.models import Center
2
+ from typing import Optional
3
+
4
+ def get_centers() -> Center:
5
+ """
6
+ Returns all Center objects from the database.
7
+ """
8
+ return Center.objects.all()
9
+
10
+ def get_center_by_name(name) -> Optional[Center]:
11
+ """Retrieve a Center object by its name.
12
+
13
+ Args:
14
+ name (str): The name of the center to retrieve.
15
+
16
+ Returns:
17
+ Optional[Center]: The Center object with the given name, or None if it does not exist.
18
+ """
19
+ return Center.objects.get(name=name)
20
+
21
+ def get_center_by_id(id) -> Optional[Center]:
22
+ """Retrieve a Center object by its id.
23
+
24
+ Args:
25
+ id (int): The id of the center to retrieve.
26
+
27
+ Returns:
28
+ Optional[Center]: The Center object with the given id, or None if it does not exist.
29
+ """
30
+ return Center.objects.get(id=id)
31
+
32
+ def get_center_by_natural_key(name: str) -> Optional[Center]:
33
+ """
34
+ Retrieve a Center object by its natural key.
35
+
36
+ Args:
37
+ name: The name of the center to retrieve.
38
+
39
+ Returns:
40
+ The Center object with the given name, or None if it does not exist.
41
+ """
42
+ return Center.objects.get_by_natural_key(name=name)
@@ -0,0 +1,13 @@
1
+ from endoreg_db.models import (
2
+ ModelMeta,
3
+ )
4
+
5
+ def get_latest_model_by_name(model_name):
6
+ """
7
+ Expects model name. Fetches models by name from database, sorts by version and returns latest version.
8
+ """
9
+ models = ModelMeta.objects.filter(name=model_name).order_by('-version')
10
+ if len(models) == 0:
11
+ return None
12
+ else:
13
+ return models[0]
@@ -0,0 +1,14 @@
1
+ from endoreg_db.models import Patient
2
+
3
+ def get_patients() -> Patient:
4
+ """
5
+ Returns all Patient objects from the database.
6
+ """
7
+ return Patient.objects.all()
8
+
9
+ def get_patients_without_dob() -> Patient:
10
+ """
11
+ Returns all Patient objects from the database without a date of birth.
12
+ """
13
+ return Patient.objects.filter(dob__isnull=True)
14
+
@@ -0,0 +1,20 @@
1
+ from endoreg_db.models import PatientExamination
2
+ from typing import Optional
3
+
4
+ def get_patient_examinations() -> PatientExamination:
5
+ """
6
+ Returns all PatientExamination objects from the database.
7
+ """
8
+ return PatientExamination.objects.all()
9
+
10
+ def get_patient_examinations_without_report_file() -> PatientExamination:
11
+ """
12
+ Returns all PatientExamination objects from the database without a report_file.
13
+ """
14
+ return PatientExamination.objects.filter(report_file__isnull=True)
15
+
16
+ def get_patient_examinations_without_video() -> PatientExamination:
17
+ """
18
+ Returns all PatientExamination objects from the database without a video.
19
+ """
20
+ return PatientExamination.objects.filter(video__isnull=True)
File without changes
@@ -0,0 +1,33 @@
1
+ from endoreg_db.models import ReportFile
2
+ from typing import Optional
3
+
4
+ def get_report_files() -> ReportFile:
5
+ """
6
+ Returns all ReportFile objects from the database.
7
+ """
8
+ return ReportFile.objects.all()
9
+
10
+ def get_report_file_by_id(id) -> Optional[ReportFile]:
11
+ """Retrieve a ReportFile object by its id.
12
+
13
+ Args:
14
+ id (int): The id of the report_file to retrieve.
15
+
16
+ Returns:
17
+ Optional[ReportFile]: The ReportFile object with the given id, or None if it does not exist.
18
+ """
19
+ return ReportFile.objects.get(id=id)
20
+
21
+ def get_report_files_without_examination() -> ReportFile:
22
+ """
23
+ Returns all ReportFile objects from the database without an examination.
24
+ """
25
+ return ReportFile.objects.filter(patient_examination__isnull=True)
26
+
27
+ def get_report_files_without_patient() -> ReportFile:
28
+ """
29
+ Returns all ReportFile objects from the database without a patient.
30
+ """
31
+ return ReportFile.objects.filter(patient__isnull=True)
32
+
33
+
@@ -0,0 +1,31 @@
1
+ from endoreg_db.models import Video, PatientExamination
2
+ from typing import Optional
3
+
4
+ def get_videos() -> Video:
5
+ """
6
+ Returns all Video objects from the database.
7
+ """
8
+ return Video.objects.all()
9
+
10
+ def get_video_by_id(id) -> Optional[Video]:
11
+ """Retrieve a Video object by its id.
12
+
13
+ Args:
14
+ id (int): The id of the video to retrieve.
15
+
16
+ Returns:
17
+ Optional[Video]: The Video object with the given id, or None if it does not exist.
18
+ """
19
+ return Video.objects.get(id=id)
20
+
21
+ def get_video_without_examination() -> Video:
22
+ """
23
+ Returns all Video objects from the database without an examination.
24
+ """
25
+ return Video.objects.filter(patient_examination__isnull=True)
26
+
27
+ def get_video_without_patient() -> Video:
28
+ """
29
+ Returns all Video objects from the database without a patient.
30
+ """
31
+ return Video.objects.filter(patient__isnull=True)
File without changes
File without changes
File without changes
@@ -0,0 +1,10 @@
1
+ from .ai_model import *
2
+ from .annotation import *
3
+ from .center import *
4
+ from .examination import *
5
+ from .frame import *
6
+ from .hardware import *
7
+ from .label import *
8
+ from .patient import *
9
+ from .report_file import *
10
+ from .video import *
@@ -0,0 +1,19 @@
1
+ from endoreg_db.models import ModelMeta, ModelType, ActiveModel
2
+ from rest_framework import serializers
3
+
4
+ class ModelMetaSerializer(serializers.ModelSerializer):
5
+ weights = serializers.FileField(use_url=True) # use_url=True will provide the file's URI
6
+
7
+ class Meta:
8
+ model = ModelMeta
9
+ fields = '__all__'
10
+
11
+ class ModelTypeSerializer(serializers.ModelSerializer):
12
+ class Meta:
13
+ model = ModelType
14
+ fields = '__all__'
15
+
16
+ class ActiveModelSerializer(serializers.ModelSerializer):
17
+ class Meta:
18
+ model = ActiveModel
19
+ fields = '__all__'
@@ -0,0 +1,14 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import BinaryClassificationAnnotationTask, ImageClassificationAnnotation
3
+
4
+
5
+
6
+ class BinaryClassificationAnnotationTaskSerializer(serializers.ModelSerializer):
7
+ class Meta:
8
+ model = BinaryClassificationAnnotationTask
9
+ fields = '__all__'
10
+
11
+ class ImageClassificationAnnotationSerializer(serializers.ModelSerializer):
12
+ class Meta:
13
+ model = ImageClassificationAnnotation
14
+ fields = '__all__'
@@ -0,0 +1,11 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import (
3
+ Center,
4
+ )
5
+
6
+ class CenterSerializer(serializers.ModelSerializer):
7
+ class Meta:
8
+ model = Center
9
+ fields = '__all__'
10
+
11
+
@@ -0,0 +1,33 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import (
3
+ Examination,
4
+ ExaminationTimeType,
5
+ ExaminationTime,
6
+ ExaminationType,
7
+ PatientExamination
8
+ )
9
+
10
+ class ExaminationTimeTypeSerializer(serializers.ModelSerializer):
11
+ class Meta:
12
+ model = ExaminationTimeType
13
+ fields = '__all__'
14
+
15
+ class ExaminationTimeSerializer(serializers.ModelSerializer):
16
+ class Meta:
17
+ model = ExaminationTime
18
+ fields = '__all__'
19
+
20
+ class ExaminationTypeSerializer(serializers.ModelSerializer):
21
+ class Meta:
22
+ model = ExaminationType
23
+ fields = '__all__'
24
+
25
+ class ExaminationSerializer(serializers.ModelSerializer):
26
+ class Meta:
27
+ model = Examination
28
+ fields = '__all__'
29
+
30
+ class PatientExaminationSerializer(serializers.ModelSerializer):
31
+ class Meta:
32
+ model = PatientExamination
33
+ fields = '__all__'
@@ -0,0 +1,9 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import Frame
3
+
4
+ class FrameSerializer(serializers.ModelSerializer):
5
+ class Meta:
6
+ model = Frame
7
+ fields = '__all__'
8
+
9
+
@@ -0,0 +1,21 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import (
3
+ Endoscope,
4
+ EndoscopeType,
5
+ EndoscopyProcessor,
6
+ )
7
+
8
+ class EndoscopeSerializer(serializers.ModelSerializer):
9
+ class Meta:
10
+ model = Endoscope
11
+ fields = '__all__'
12
+
13
+ class EndoscopyProcessorSerializer(serializers.ModelSerializer):
14
+ class Meta:
15
+ model = EndoscopyProcessor
16
+ fields = '__all__'
17
+
18
+ class EndoscopeTypeSerializer(serializers.ModelSerializer):
19
+ class Meta:
20
+ model = EndoscopeType
21
+ fields = '__all__'
@@ -0,0 +1,22 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import (
3
+ Label,
4
+ LabelSet,
5
+ LabelType,
6
+ )
7
+
8
+ class LabelTypeSerializer(serializers.ModelSerializer):
9
+ class Meta:
10
+ model = LabelType
11
+ fields = '__all__'
12
+
13
+ class LabelSetSerializer(serializers.ModelSerializer):
14
+ class Meta:
15
+ model = LabelSet
16
+ fields = '__all__'
17
+
18
+ class LabelSerializer(serializers.ModelSerializer):
19
+ class Meta:
20
+ model = Label
21
+ fields = '__all__'
22
+
@@ -0,0 +1,33 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import Patient, Gender
3
+
4
+ class PatientSerializer(serializers.ModelSerializer):
5
+ # Use the slug field "name" so that the gender is represented by its string value
6
+ gender = serializers.SlugRelatedField(
7
+ slug_field='name',
8
+ queryset=Gender.objects.all()
9
+ )
10
+
11
+ class Meta:
12
+ model = Patient
13
+ fields = '__all__'
14
+ read_only_fields = ['id']
15
+
16
+ def get_age(self, obj):
17
+ return obj.age()
18
+
19
+ def create(self, validated_data):
20
+ center = validated_data.pop('center', None)
21
+ gender = validated_data.pop('gender', None)
22
+ patient = Patient.objects.create(center=center, gender=gender, **validated_data)
23
+ return patient
24
+
25
+ def update(self, instance, validated_data):
26
+ center = validated_data.pop('center', None)
27
+ gender = validated_data.pop('gender', None)
28
+ instance.center = center if center else instance.center
29
+ instance.gender = gender if gender else instance.gender
30
+ for attr, value in validated_data.items():
31
+ setattr(instance, attr, value)
32
+ instance.save()
33
+ return instance
@@ -0,0 +1,10 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import (
3
+ ImageClassificationPrediction,
4
+ )
5
+
6
+
7
+ class ImageClassificationPredictionSerializer(serializers.ModelSerializer):
8
+ class Meta:
9
+ model = ImageClassificationPrediction
10
+ fields = "__all__"
@@ -0,0 +1,13 @@
1
+ from rest_framework import serializers
2
+ from ..models import RawVideoFile, SensitiveMeta
3
+
4
+ class VideoFileForMetaSerializer(serializers.ModelSerializer):
5
+ """
6
+ Serializer to fetch video metadata along with linked `SensitiveMeta` details.
7
+ """
8
+
9
+ patient_first_name = serializers.CharField(source="sensitive_meta.patient_first_name", read_only=True)
10
+
11
+ class Meta:
12
+ model = RawVideoFile
13
+ fields = ['id', 'original_file_name', 'file', 'sensitive_meta_id', 'patient_first_name']
@@ -0,0 +1,7 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import ReportFile
3
+
4
+ class ReportFileSerializer(serializers.ModelSerializer):
5
+ class Meta:
6
+ model = ReportFile
7
+ fields = '__all__'
@@ -0,0 +1,20 @@
1
+ from rest_framework import serializers
2
+ from endoreg_db.models import Video, VideoImportMeta, LabelVideoSegment
3
+
4
+
5
+ class VideoSerializer(serializers.ModelSerializer):
6
+ class Meta:
7
+ model = Video
8
+ fields = "__all__"
9
+
10
+
11
+ class VideoImportMetaSerializer(serializers.ModelSerializer):
12
+ class Meta:
13
+ model = VideoImportMeta
14
+ fields = "__all__"
15
+
16
+
17
+ class LabelVideoSegmentSerializer(serializers.ModelSerializer):
18
+ class Meta:
19
+ model = LabelVideoSegment
20
+ fields = "__all__"