endoreg-db 0.5.2__py3-none-any.whl → 0.6.0__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 (320) hide show
  1. endoreg_db/admin.py +90 -1
  2. endoreg_db/urls.py +173 -0
  3. endoreg_db/views.py +0 -3
  4. endoreg_db-0.6.0.dist-info/METADATA +151 -0
  5. endoreg_db-0.6.0.dist-info/RECORD +11 -0
  6. {endoreg_db-0.5.2.dist-info → endoreg_db-0.6.0.dist-info}/WHEEL +2 -1
  7. endoreg_db-0.6.0.dist-info/top_level.txt +1 -0
  8. endoreg_db/data/__init__.py +0 -72
  9. endoreg_db/data/active_model/data.yaml +0 -3
  10. endoreg_db/data/agl_service/data.yaml +0 -19
  11. endoreg_db/data/case_template/rule/00_patient_lab_sample_add_default_value.yaml +0 -167
  12. endoreg_db/data/case_template/rule/01_patient-set-age.yaml +0 -8
  13. endoreg_db/data/case_template/rule/01_patient-set-gender.yaml +0 -9
  14. endoreg_db/data/case_template/rule/11_create_patient_lab_sample.yaml +0 -23
  15. endoreg_db/data/case_template/rule/12_create-patient_medication-anticoagulation.yaml +0 -19
  16. endoreg_db/data/case_template/rule/13_create-patient_medication_schedule-anticoagulation.yaml +0 -19
  17. endoreg_db/data/case_template/rule/19_create_patient.yaml +0 -17
  18. endoreg_db/data/case_template/rule_type/base_types.yaml +0 -35
  19. endoreg_db/data/case_template/rule_value/.init +0 -0
  20. endoreg_db/data/case_template/rule_value_type/base_types.yaml +0 -59
  21. endoreg_db/data/case_template/template/base.yaml +0 -8
  22. endoreg_db/data/case_template/template_type/pre_endoscopy.yaml +0 -3
  23. endoreg_db/data/case_template/tmp/_rule_value +0 -13
  24. endoreg_db/data/case_template/tmp/rule/01_atrial_fibrillation.yaml +0 -21
  25. endoreg_db/data/case_template/tmp/rule/02_create_object.yaml +0 -10
  26. endoreg_db/data/case_template/tmp/template/atrial_fibrillation_low_risk.yaml +0 -7
  27. endoreg_db/data/center/data.yaml +0 -60
  28. endoreg_db/data/center_resource/green_endoscopy_dashboard_CenterResource.yaml +0 -144
  29. endoreg_db/data/center_waste/green_endoscopy_dashboard_CenterWaste.yaml +0 -48
  30. endoreg_db/data/disease/cardiovascular.yaml +0 -37
  31. endoreg_db/data/disease/hepatology.yaml +0 -5
  32. endoreg_db/data/disease/misc.yaml +0 -6
  33. endoreg_db/data/disease/renal.yaml +0 -5
  34. endoreg_db/data/disease_classification/chronic_kidney_disease.yaml +0 -6
  35. endoreg_db/data/disease_classification/coronary_vessel_disease.yaml +0 -6
  36. endoreg_db/data/disease_classification_choice/chronic_kidney_disease.yaml +0 -41
  37. endoreg_db/data/disease_classification_choice/coronary_vessel_disease.yaml +0 -20
  38. endoreg_db/data/distribution/date/patient.yaml +0 -7
  39. endoreg_db/data/distribution/multiple_categorical/.init +0 -0
  40. endoreg_db/data/distribution/numeric/.init +0 -0
  41. endoreg_db/data/distribution/single_categorical/patient.yaml +0 -7
  42. endoreg_db/data/emission_factor/green_endoscopy_dashboard_EmissionFactor.yaml +0 -132
  43. endoreg_db/data/endoscope_type/data.yaml +0 -11
  44. endoreg_db/data/endoscopy_processor/data.yaml +0 -47
  45. endoreg_db/data/event/cardiology.yaml +0 -28
  46. endoreg_db/data/event/neurology.yaml +0 -14
  47. endoreg_db/data/event/surgery.yaml +0 -13
  48. endoreg_db/data/event/thrombembolism.yaml +0 -20
  49. endoreg_db/data/examination/examinations/data.yaml +0 -66
  50. endoreg_db/data/examination/time/data.yaml +0 -48
  51. endoreg_db/data/examination/time-type/data.yaml +0 -8
  52. endoreg_db/data/examination/type/data.yaml +0 -5
  53. endoreg_db/data/gender/data.yaml +0 -18
  54. endoreg_db/data/information_source/data.yaml +0 -30
  55. endoreg_db/data/information_source/medication.yaml +0 -6
  56. endoreg_db/data/lab_value/cardiac_enzymes.yaml +0 -31
  57. endoreg_db/data/lab_value/coagulation.yaml +0 -49
  58. endoreg_db/data/lab_value/electrolytes.yaml +0 -190
  59. endoreg_db/data/lab_value/gastrointestinal_function.yaml +0 -121
  60. endoreg_db/data/lab_value/hematology.yaml +0 -169
  61. endoreg_db/data/lab_value/hormones.yaml +0 -53
  62. endoreg_db/data/lab_value/lipids.yaml +0 -44
  63. endoreg_db/data/lab_value/misc.yaml +0 -30
  64. endoreg_db/data/lab_value/renal_function.yaml +0 -11
  65. endoreg_db/data/label/label/data.yaml +0 -62
  66. endoreg_db/data/label/label-set/data.yaml +0 -18
  67. endoreg_db/data/label/label-type/data.yaml +0 -7
  68. endoreg_db/data/log_type/data.yaml +0 -57
  69. endoreg_db/data/material/material.yaml +0 -91
  70. endoreg_db/data/medication/anticoagulation.yaml +0 -65
  71. endoreg_db/data/medication/tah.yaml +0 -70
  72. endoreg_db/data/medication_indication/anticoagulation.yaml +0 -120
  73. endoreg_db/data/medication_indication_type/data.yaml +0 -11
  74. endoreg_db/data/medication_indication_type/thrombembolism.yaml +0 -41
  75. endoreg_db/data/medication_intake_time/base.yaml +0 -31
  76. endoreg_db/data/medication_schedule/apixaban.yaml +0 -95
  77. endoreg_db/data/medication_schedule/ass.yaml +0 -12
  78. endoreg_db/data/medication_schedule/enoxaparin.yaml +0 -26
  79. endoreg_db/data/model_type/data.yaml +0 -7
  80. endoreg_db/data/network_device/data.yaml +0 -29
  81. endoreg_db/data/network_device_type/data.yaml +0 -12
  82. endoreg_db/data/patient_lab_sample_type/generic.yaml +0 -6
  83. endoreg_db/data/pdf_type/data.yaml +0 -28
  84. endoreg_db/data/product/green_endoscopy_dashboard_Product.yaml +0 -66
  85. endoreg_db/data/product_group/green_endoscopy_dashboard_ProductGroup.yaml +0 -33
  86. endoreg_db/data/product_material/green_endoscopy_dashboard_ProductMaterial.yaml +0 -308
  87. endoreg_db/data/product_weight/green_endoscopy_dashboard_ProductWeight.yaml +0 -88
  88. endoreg_db/data/profession/data.yaml +0 -70
  89. endoreg_db/data/reference_product/green_endoscopy_dashboard_ReferenceProduct.yaml +0 -55
  90. endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +0 -26
  91. endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +0 -19
  92. endoreg_db/data/resource/green_endoscopy_dashboard_Resource.yaml +0 -15
  93. endoreg_db/data/tmp/chronic_kidney_disease.yaml +0 -0
  94. endoreg_db/data/tmp/congestive_heart_failure.yaml +0 -0
  95. endoreg_db/data/transport_route/green_endoscopy_dashboard_TransportRoute.yaml +0 -12
  96. endoreg_db/data/unit/concentration.yaml +0 -92
  97. endoreg_db/data/unit/data.yaml +0 -17
  98. endoreg_db/data/unit/length.yaml +0 -31
  99. endoreg_db/data/unit/misc.yaml +0 -20
  100. endoreg_db/data/unit/rate.yaml +0 -6
  101. endoreg_db/data/unit/time.yaml +0 -13
  102. endoreg_db/data/unit/volume.yaml +0 -35
  103. endoreg_db/data/unit/weight.yaml +0 -38
  104. endoreg_db/data/waste/data.yaml +0 -12
  105. endoreg_db/forms/__init__.py +0 -3
  106. endoreg_db/forms/questionnaires/__init__.py +0 -1
  107. endoreg_db/forms/questionnaires/tto_questionnaire.py +0 -23
  108. endoreg_db/forms/settings/__init__.py +0 -8
  109. endoreg_db/forms/unit.py +0 -6
  110. endoreg_db/management/commands/_load_model_template.py +0 -41
  111. endoreg_db/management/commands/delete_all.py +0 -18
  112. endoreg_db/management/commands/delete_legacy_images.py +0 -19
  113. endoreg_db/management/commands/delete_legacy_videos.py +0 -17
  114. endoreg_db/management/commands/extract_legacy_video_frames.py +0 -18
  115. endoreg_db/management/commands/fetch_legacy_image_dataset.py +0 -32
  116. endoreg_db/management/commands/fix_auth_permission.py +0 -20
  117. endoreg_db/management/commands/import_legacy_images.py +0 -94
  118. endoreg_db/management/commands/import_legacy_videos.py +0 -76
  119. endoreg_db/management/commands/load_active_model_data.py +0 -45
  120. endoreg_db/management/commands/load_ai_model_data.py +0 -45
  121. endoreg_db/management/commands/load_base_db_data.py +0 -136
  122. endoreg_db/management/commands/load_center_data.py +0 -43
  123. endoreg_db/management/commands/load_disease_classification_choices_data.py +0 -41
  124. endoreg_db/management/commands/load_disease_classification_data.py +0 -41
  125. endoreg_db/management/commands/load_disease_data.py +0 -40
  126. endoreg_db/management/commands/load_distribution_data.py +0 -66
  127. endoreg_db/management/commands/load_endoscope_type_data.py +0 -45
  128. endoreg_db/management/commands/load_endoscopy_processor_data.py +0 -45
  129. endoreg_db/management/commands/load_event_data.py +0 -41
  130. endoreg_db/management/commands/load_examination_data.py +0 -75
  131. endoreg_db/management/commands/load_g_play_data.py +0 -113
  132. endoreg_db/management/commands/load_gender_data.py +0 -44
  133. endoreg_db/management/commands/load_green_endoscopy_wuerzburg_data.py +0 -133
  134. endoreg_db/management/commands/load_information_source.py +0 -45
  135. endoreg_db/management/commands/load_lab_value_data.py +0 -50
  136. endoreg_db/management/commands/load_label_data.py +0 -67
  137. endoreg_db/management/commands/load_logging_data.py +0 -39
  138. endoreg_db/management/commands/load_medication_data.py +0 -41
  139. endoreg_db/management/commands/load_medication_indication_data.py +0 -63
  140. endoreg_db/management/commands/load_medication_indication_type_data.py +0 -41
  141. endoreg_db/management/commands/load_medication_intake_time_data.py +0 -41
  142. endoreg_db/management/commands/load_medication_schedule_data.py +0 -55
  143. endoreg_db/management/commands/load_network_data.py +0 -57
  144. endoreg_db/management/commands/load_pdf_type_data.py +0 -61
  145. endoreg_db/management/commands/load_profession_data.py +0 -44
  146. endoreg_db/management/commands/load_report_reader_flag.py +0 -46
  147. endoreg_db/management/commands/load_unit_data.py +0 -46
  148. endoreg_db/management/commands/load_user_groups.py +0 -28
  149. endoreg_db/management/commands/register_ai_model.py +0 -64
  150. endoreg_db/management/commands/reset_celery_schedule.py +0 -9
  151. endoreg_db/migrations/0001_initial.py +0 -1567
  152. endoreg_db/migrations/0002_anonymizedimagelabel_anonymousimageannotation_and_more.py +0 -55
  153. endoreg_db/migrations/0003_anonymousimageannotation_original_image_url_and_more.py +0 -39
  154. endoreg_db/migrations/0004_alter_rawpdffile_file.py +0 -20
  155. endoreg_db/migrations/0005_uploadedfile_alter_rawpdffile_file_anonymizedfile.py +0 -40
  156. endoreg_db/migrations/0006_alter_rawpdffile_file.py +0 -20
  157. endoreg_db/migrations/0007_networkdevicelogentry_datetime_and_more.py +0 -43
  158. endoreg_db/migrations/0008_networkdevicelogentry_aglnet_ip_and_more.py +0 -28
  159. endoreg_db/migrations/0009_alter_networkdevicelogentry_vpn_service_status.py +0 -18
  160. endoreg_db/migrations/0010_remove_networkdevicelogentry_hostname.py +0 -17
  161. endoreg_db/migrations/__init__.py +0 -0
  162. endoreg_db/models/__init__.py +0 -73
  163. endoreg_db/models/ai_model/__init__.py +0 -3
  164. endoreg_db/models/ai_model/active_model.py +0 -9
  165. endoreg_db/models/ai_model/model_meta.py +0 -24
  166. endoreg_db/models/ai_model/model_type.py +0 -26
  167. endoreg_db/models/ai_model/utils.py +0 -8
  168. endoreg_db/models/annotation/__init__.py +0 -3
  169. endoreg_db/models/annotation/anonymized_image_annotation.py +0 -60
  170. endoreg_db/models/annotation/binary_classification_annotation_task.py +0 -80
  171. endoreg_db/models/annotation/image_classification.py +0 -27
  172. endoreg_db/models/case_template/__init__.py +0 -6
  173. endoreg_db/models/case_template/case_template.py +0 -81
  174. endoreg_db/models/case_template/case_template_rule.py +0 -276
  175. endoreg_db/models/case_template/case_template_rule_value.py +0 -73
  176. endoreg_db/models/case_template/case_template_type.py +0 -28
  177. endoreg_db/models/center/__init__.py +0 -4
  178. endoreg_db/models/center/center.py +0 -25
  179. endoreg_db/models/center/center_product.py +0 -34
  180. endoreg_db/models/center/center_resource.py +0 -19
  181. endoreg_db/models/center/center_waste.py +0 -11
  182. endoreg_db/models/data_file/__init__.py +0 -6
  183. endoreg_db/models/data_file/base_classes/__init__.py +0 -2
  184. endoreg_db/models/data_file/base_classes/abstract_frame.py +0 -51
  185. endoreg_db/models/data_file/base_classes/abstract_video.py +0 -201
  186. endoreg_db/models/data_file/frame.py +0 -45
  187. endoreg_db/models/data_file/import_classes/__init__.py +0 -32
  188. endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +0 -35
  189. endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +0 -28
  190. endoreg_db/models/data_file/import_classes/processing_functions/video.py +0 -260
  191. endoreg_db/models/data_file/import_classes/raw_pdf.py +0 -188
  192. endoreg_db/models/data_file/import_classes/raw_video.py +0 -343
  193. endoreg_db/models/data_file/metadata/__init__.py +0 -3
  194. endoreg_db/models/data_file/metadata/pdf_meta.py +0 -70
  195. endoreg_db/models/data_file/metadata/sensitive_meta.py +0 -31
  196. endoreg_db/models/data_file/metadata/video_meta.py +0 -133
  197. endoreg_db/models/data_file/report_file.py +0 -89
  198. endoreg_db/models/data_file/video/__init__.py +0 -7
  199. endoreg_db/models/data_file/video/import_meta.py +0 -25
  200. endoreg_db/models/data_file/video/video.py +0 -25
  201. endoreg_db/models/data_file/video_segment.py +0 -107
  202. endoreg_db/models/disease.py +0 -56
  203. endoreg_db/models/emission/__init__.py +0 -1
  204. endoreg_db/models/emission/emission_factor.py +0 -20
  205. endoreg_db/models/event.py +0 -22
  206. endoreg_db/models/examination/__init__.py +0 -4
  207. endoreg_db/models/examination/examination.py +0 -26
  208. endoreg_db/models/examination/examination_time.py +0 -27
  209. endoreg_db/models/examination/examination_time_type.py +0 -24
  210. endoreg_db/models/examination/examination_type.py +0 -18
  211. endoreg_db/models/hardware/__init__.py +0 -2
  212. endoreg_db/models/hardware/endoscope.py +0 -44
  213. endoreg_db/models/hardware/endoscopy_processor.py +0 -143
  214. endoreg_db/models/information_source.py +0 -29
  215. endoreg_db/models/label/__init__.py +0 -1
  216. endoreg_db/models/label/label.py +0 -84
  217. endoreg_db/models/laboratory/__init__.py +0 -1
  218. endoreg_db/models/laboratory/lab_value.py +0 -102
  219. endoreg_db/models/legacy_data/__init__.py +0 -3
  220. endoreg_db/models/legacy_data/image.py +0 -34
  221. endoreg_db/models/logging/__init__.py +0 -4
  222. endoreg_db/models/logging/agl_service.py +0 -19
  223. endoreg_db/models/logging/base.py +0 -22
  224. endoreg_db/models/logging/log_type.py +0 -23
  225. endoreg_db/models/logging/network_device.py +0 -27
  226. endoreg_db/models/medication/__init__.py +0 -1
  227. endoreg_db/models/medication/medication.py +0 -148
  228. endoreg_db/models/network/__init__.py +0 -3
  229. endoreg_db/models/network/agl_service.py +0 -38
  230. endoreg_db/models/network/network_device.py +0 -53
  231. endoreg_db/models/network/network_device_type.py +0 -23
  232. endoreg_db/models/other/__init__.py +0 -5
  233. endoreg_db/models/other/distribution.py +0 -215
  234. endoreg_db/models/other/material.py +0 -16
  235. endoreg_db/models/other/resource.py +0 -18
  236. endoreg_db/models/other/transport_route.py +0 -21
  237. endoreg_db/models/other/waste.py +0 -20
  238. endoreg_db/models/patient_examination/__init__.py +0 -35
  239. endoreg_db/models/permissions/__init__.py +0 -44
  240. endoreg_db/models/persons/__init__.py +0 -7
  241. endoreg_db/models/persons/examiner/__init__.py +0 -2
  242. endoreg_db/models/persons/examiner/examiner.py +0 -16
  243. endoreg_db/models/persons/examiner/examiner_type.py +0 -2
  244. endoreg_db/models/persons/first_name.py +0 -18
  245. endoreg_db/models/persons/gender.py +0 -22
  246. endoreg_db/models/persons/last_name.py +0 -20
  247. endoreg_db/models/persons/patient/__init__.py +0 -8
  248. endoreg_db/models/persons/patient/case/__init__.py +0 -0
  249. endoreg_db/models/persons/patient/case/case.py +0 -30
  250. endoreg_db/models/persons/patient/patient.py +0 -216
  251. endoreg_db/models/persons/patient/patient_disease.py +0 -16
  252. endoreg_db/models/persons/patient/patient_event.py +0 -22
  253. endoreg_db/models/persons/patient/patient_lab_sample.py +0 -106
  254. endoreg_db/models/persons/patient/patient_lab_value.py +0 -176
  255. endoreg_db/models/persons/patient/patient_medication.py +0 -44
  256. endoreg_db/models/persons/patient/patient_medication_schedule.py +0 -28
  257. endoreg_db/models/persons/person.py +0 -31
  258. endoreg_db/models/persons/portal_user_information.py +0 -27
  259. endoreg_db/models/prediction/__init__.py +0 -2
  260. endoreg_db/models/prediction/image_classification.py +0 -37
  261. endoreg_db/models/prediction/video_prediction_meta.py +0 -244
  262. endoreg_db/models/product/__init__.py +0 -5
  263. endoreg_db/models/product/product.py +0 -97
  264. endoreg_db/models/product/product_group.py +0 -19
  265. endoreg_db/models/product/product_material.py +0 -24
  266. endoreg_db/models/product/product_weight.py +0 -26
  267. endoreg_db/models/product/reference_product.py +0 -99
  268. endoreg_db/models/questionnaires/__init__.py +0 -114
  269. endoreg_db/models/quiz/__init__.py +0 -2
  270. endoreg_db/models/quiz/quiz_answer.py +0 -41
  271. endoreg_db/models/quiz/quiz_question.py +0 -54
  272. endoreg_db/models/report_reader/__init__.py +0 -2
  273. endoreg_db/models/report_reader/report_reader_config.py +0 -53
  274. endoreg_db/models/report_reader/report_reader_flag.py +0 -20
  275. endoreg_db/models/rules/__init__.py +0 -5
  276. endoreg_db/models/rules/rule.py +0 -24
  277. endoreg_db/models/rules/rule_applicator.py +0 -224
  278. endoreg_db/models/rules/rule_attribute_dtype.py +0 -19
  279. endoreg_db/models/rules/rule_type.py +0 -22
  280. endoreg_db/models/rules/ruleset.py +0 -19
  281. endoreg_db/models/unit.py +0 -22
  282. endoreg_db/queries/__init__.py +0 -5
  283. endoreg_db/queries/annotations/__init__.py +0 -3
  284. endoreg_db/queries/annotations/legacy.py +0 -158
  285. endoreg_db/queries/get/__init__.py +0 -6
  286. endoreg_db/queries/get/annotation.py +0 -0
  287. endoreg_db/queries/get/center.py +0 -42
  288. endoreg_db/queries/get/model.py +0 -13
  289. endoreg_db/queries/get/patient.py +0 -14
  290. endoreg_db/queries/get/patient_examination.py +0 -20
  291. endoreg_db/queries/get/prediction.py +0 -0
  292. endoreg_db/queries/get/report_file.py +0 -33
  293. endoreg_db/queries/get/video.py +0 -31
  294. endoreg_db/queries/get/video_import_meta.py +0 -0
  295. endoreg_db/queries/get/video_prediction_meta.py +0 -0
  296. endoreg_db/queries/sanity/__init_.py +0 -0
  297. endoreg_db/serializers/__init__.py +0 -10
  298. endoreg_db/serializers/ai_model.py +0 -19
  299. endoreg_db/serializers/annotation.py +0 -17
  300. endoreg_db/serializers/center.py +0 -11
  301. endoreg_db/serializers/examination.py +0 -33
  302. endoreg_db/serializers/frame.py +0 -13
  303. endoreg_db/serializers/hardware.py +0 -21
  304. endoreg_db/serializers/label.py +0 -22
  305. endoreg_db/serializers/patient.py +0 -10
  306. endoreg_db/serializers/prediction.py +0 -15
  307. endoreg_db/serializers/report_file.py +0 -7
  308. endoreg_db/serializers/video.py +0 -27
  309. endoreg_db/utils/__init__.py +0 -1
  310. endoreg_db/utils/cropping.py +0 -29
  311. endoreg_db/utils/dataloader.py +0 -92
  312. endoreg_db/utils/file_operations.py +0 -30
  313. endoreg_db/utils/hashs.py +0 -34
  314. endoreg_db/utils/legacy_ocr.py +0 -201
  315. endoreg_db/utils/ocr.py +0 -190
  316. endoreg_db/utils/uuid.py +0 -4
  317. endoreg_db/utils/video_metadata.py +0 -87
  318. endoreg_db-0.5.2.dist-info/METADATA +0 -27
  319. endoreg_db-0.5.2.dist-info/RECORD +0 -319
  320. {endoreg_db-0.5.2.dist-info/licenses → endoreg_db-0.6.0.dist-info}/LICENSE +0 -0
@@ -1,38 +0,0 @@
1
- from django.db import models
2
-
3
- class AglServiceManager(models.Manager):
4
- # Custom manager for AglService; defines name as natural key
5
- def get_by_natural_key(self, name):
6
- return self.get(name=name)
7
-
8
- class AglService(models.Model):
9
- name = models.CharField(max_length=255)
10
- description = models.CharField(max_length=255)
11
- online = models.BooleanField(default=False)
12
- created = models.DateTimeField(auto_now_add=True)
13
- updated = models.DateTimeField(auto_now=True)
14
- objects = AglServiceManager()
15
- devices = models.ManyToManyField("NetworkDevice", related_name="services")
16
- port = models.IntegerField(blank=True, null=True)
17
- protocol = models.CharField(max_length=255, blank=True, null=True)
18
- url = models.URLField(blank=True, null=True)
19
-
20
- def alive_log(self, user, ip_address, user_agent):
21
- from ..logging import AglServiceLogEntry
22
- AglServiceLogEntry.objects.create(
23
- user=user,
24
- ip_address=ip_address,
25
- user_agent=user_agent,
26
- message=f"Service {self.name} is alive.",
27
- service=self
28
- )
29
-
30
- def __str__(self):
31
- return self.name
32
-
33
- class Meta:
34
- ordering = ['name']
35
-
36
- def natural_key(self):
37
- return (self.name,)
38
-
@@ -1,53 +0,0 @@
1
- # Django db class to store network devices (e.g., servers, clients, switches, etc.)
2
-
3
- from django.db import models
4
-
5
- class NetworkDeviceManager(models.Manager):
6
- # Custom manager for NetworkDevice; defines name as natural key
7
- def get_by_natural_key(self, name):
8
- return self.get(name=name)
9
-
10
- class NetworkDevice(models.Model):
11
- name = models.CharField(max_length=255)
12
- ip = models.GenericIPAddressField(blank=True, null=True)
13
- description = models.CharField(max_length=255)
14
- device_type = models.ForeignKey("NetworkDeviceType", on_delete=models.CASCADE)
15
- online = models.BooleanField(default=False)
16
- created = models.DateTimeField(auto_now_add=True)
17
- updated = models.DateTimeField(auto_now=True)
18
- objects = NetworkDeviceManager()
19
-
20
- def __str__(self):
21
- return self.name
22
-
23
- class Meta:
24
- db_table = 'network_devices'
25
- ordering = ['name']
26
-
27
- def natural_key(self):
28
- return (self.name,)
29
-
30
- def ping(self):
31
- target_ip = self.ip
32
-
33
- # Import the required module
34
- import subprocess
35
-
36
- # Define the command
37
- command = ['ping', '-c', '1', target_ip]
38
-
39
- # Run the command
40
- process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
41
-
42
- # Wait for the process to terminate
43
- process.wait()
44
-
45
- # Check the return code
46
- return_code = process.returncode
47
-
48
- # Return True if the return code is 0, False otherwise
49
- self.online = return_code == 0
50
- self.save()
51
- return self.online
52
-
53
-
@@ -1,23 +0,0 @@
1
- # Django db class to store network device types (e.g., server, client, switch, etc.)
2
-
3
- from django.db import models
4
-
5
- class NetworkDeviceTypeManager(models.Manager):
6
- # Custom manager for NetworkDeviceType; defines name as natural key
7
- def get_by_natural_key(self, name):
8
- return self.get(name=name)
9
-
10
- class NetworkDeviceType(models.Model):
11
- name = models.CharField(max_length=255)
12
- description = models.CharField(max_length=255)
13
- created = models.DateTimeField(auto_now_add=True)
14
- updated = models.DateTimeField(auto_now=True)
15
- objects = NetworkDeviceTypeManager()
16
-
17
- def __str__(self):
18
- return self.name
19
-
20
- class Meta:
21
- db_table = 'network_device_types'
22
- ordering = ['name']
23
-
@@ -1,5 +0,0 @@
1
- from .material import Material
2
- from .resource import Resource
3
- from .transport_route import TransportRoute
4
- from .waste import Waste
5
- from .distribution import *
@@ -1,215 +0,0 @@
1
- from django.db import models
2
- import numpy as np
3
- from scipy.stats import skewnorm
4
-
5
- class BaseValueDistribution(models.Model):
6
- """
7
- Abstract base class for value distributions.
8
- """
9
- name = models.CharField(max_length=100)
10
-
11
- class Meta:
12
- abstract = True
13
-
14
- def generate_value(self):
15
- """
16
- Generate a value based on the distribution rules.
17
- Must be implemented by subclasses.
18
- """
19
- raise NotImplementedError("Subclasses must implement this method")
20
-
21
- def natural_key(self):
22
- return (self.name,)
23
-
24
- class NumericValueDistributionManager(models.Manager):
25
- def get_by_natural_key(self, name):
26
- return self.get(name=name)
27
-
28
- class NumericValueDistribution(BaseValueDistribution):
29
- """
30
- Numeric value distribution model.
31
- Supports uniform, normal, and skewed normal distributions with hard limits.
32
- """
33
- objects = NumericValueDistributionManager()
34
- DISTRIBUTION_CHOICES = [
35
- ('uniform', 'Uniform'),
36
- ('normal', 'Normal'),
37
- ('skewed_normal', 'Skewed Normal'),
38
- ]
39
-
40
- distribution_type = models.CharField(max_length=20, choices=DISTRIBUTION_CHOICES)
41
- min_value = models.FloatField()
42
- max_value = models.FloatField()
43
- mean = models.FloatField(null=True, blank=True)
44
- std_dev = models.FloatField(null=True, blank=True)
45
- skewness = models.FloatField(null=True, blank=True)
46
-
47
- def generate_value(self):
48
- if self.distribution_type == 'uniform':
49
- return np.random.uniform(self.min_value, self.max_value)
50
- elif self.distribution_type == 'normal':
51
- value = np.random.normal(self.mean, self.std_dev)
52
- return np.clip(value, self.min_value, self.max_value)
53
- elif self.distribution_type == 'skewed_normal':
54
- value = skewnorm.rvs(a=self.skewness, loc=self.mean, scale=self.std_dev)
55
- return np.clip(value, self.min_value, self.max_value)
56
- else:
57
- raise ValueError("Unsupported distribution type")
58
-
59
-
60
- class SingleCategoricalValueDistributionManager(models.Manager):
61
- def get_by_natural_key(self, name):
62
- return self.get(name=name)
63
-
64
- class SingleCategoricalValueDistribution(BaseValueDistribution):
65
- """
66
- Single categorical value distribution model.
67
- Assigns a single value based on specified probabilities.
68
- """
69
- objects = SingleCategoricalValueDistributionManager()
70
- categories = models.JSONField() # { "category": "probability", ... }
71
-
72
- def generate_value(self):
73
- categories, probabilities = zip(*self.categories.items())
74
- return np.random.choice(categories, p=probabilities)
75
-
76
-
77
- class MultipleCategoricalValueDistributionManager(models.Manager):
78
- def get_by_natural_key(self, name):
79
- return self.get(name=name)
80
-
81
- class MultipleCategoricalValueDistribution(BaseValueDistribution):
82
- """
83
- Multiple categorical value distribution model.
84
- Assigns a specific number or varying number of values based on probabilities.
85
- """
86
- objects = MultipleCategoricalValueDistributionManager()
87
- categories = models.JSONField() # { "category": "probability", ... }
88
- min_count = models.IntegerField()
89
- max_count = models.IntegerField()
90
- count_distribution_type = models.CharField(max_length=20, choices=[('uniform', 'Uniform'), ('normal', 'Normal')])
91
- count_mean = models.FloatField(null=True, blank=True)
92
- count_std_dev = models.FloatField(null=True, blank=True)
93
-
94
- def generate_value(self):
95
- if self.count_distribution_type == 'uniform':
96
- count = np.random.randint(self.min_count, self.max_count + 1)
97
- elif self.count_distribution_type == 'normal':
98
- count = int(np.random.normal(self.count_mean, self.count_std_dev))
99
- count = np.clip(count, self.min_count, self.max_count)
100
- else:
101
- raise ValueError("Unsupported count distribution type")
102
-
103
- categories, probabilities = zip(*self.categories.items())
104
- return list(np.random.choice(categories, size=count, p=probabilities))
105
-
106
-
107
- class DateValueDistributionManager(models.Manager):
108
- def get_by_natural_key(self, name):
109
- return self.get(name=name)
110
-
111
- from datetime import date, timedelta
112
- class DateValueDistribution(BaseValueDistribution):
113
- """
114
- Assign date values based on specified distribution.
115
- Expects distribution_type (uniform, normal) and mode (date, timedelta) and based on this either
116
- date_min, date_max, date_mean, date_std_dev or
117
- timedelta_days_min, timedelta_days_max, timedelta_days_mean, timedelta_days_std_dev
118
- """
119
- objects = DateValueDistributionManager()
120
- name = models.CharField(max_length=100)
121
- name_de = models.CharField(max_length=100, blank=True, null=True)
122
- name_en = models.CharField(max_length=100, blank=True, null=True)
123
- description = models.TextField(blank=True, null=True)
124
- DISTRIBUTION_CHOICES = [
125
- ('uniform', 'Uniform'),
126
- ('normal', 'Normal'),
127
- ]
128
- MODE_CHOICES = [
129
- ('date', 'Date'),
130
- ('timedelta', 'Timedelta'),
131
- ]
132
-
133
- distribution_type = models.CharField(max_length=20, choices=DISTRIBUTION_CHOICES)
134
- mode = models.CharField(max_length=20, choices=MODE_CHOICES)
135
-
136
- # Date-related fields
137
- date_min = models.DateField(blank=True, null=True)
138
- date_max = models.DateField(blank=True, null=True)
139
- date_mean = models.DateField(blank=True, null=True)
140
- date_std_dev = models.IntegerField(blank=True, null=True) # Standard deviation in days
141
-
142
- # Timedelta-related fields
143
- timedelta_days_min = models.IntegerField(blank=True, null=True)
144
- timedelta_days_max = models.IntegerField(blank=True, null=True)
145
- timedelta_days_mean = models.IntegerField(blank=True, null=True)
146
- timedelta_days_std_dev = models.IntegerField(blank=True, null=True)
147
-
148
- def generate_value(self):
149
- if self.mode == 'date':
150
- return self._generate_date_value()
151
- elif self.mode == 'timedelta':
152
- return self._generate_timedelta_value()
153
- else:
154
- raise ValueError("Unsupported mode")
155
-
156
- def _generate_date_value(self):
157
- #UNTESTED
158
- if self.distribution_type == 'uniform':
159
- start_date = self.date_min.toordinal()
160
- end_date = self.date_max.toordinal()
161
- random_ordinal = np.random.randint(start_date, end_date)
162
- return date.fromordinal(random_ordinal)
163
- elif self.distribution_type == 'normal':
164
- mean_ordinal = self.date_mean.toordinal()
165
- std_dev_days = self.date_std_dev
166
- random_ordinal = int(np.random.normal(mean_ordinal, std_dev_days))
167
- random_ordinal = np.clip(random_ordinal, self.date_min.toordinal(), self.date_max.toordinal())
168
- return date.fromordinal(random_ordinal)
169
- else:
170
- raise ValueError("Unsupported distribution type")
171
-
172
- def _generate_timedelta_value(self):
173
- if self.distribution_type == 'uniform':
174
- random_days = np.random.randint(self.timedelta_days_min, self.timedelta_days_max + 1)
175
-
176
-
177
- elif self.distribution_type == 'normal':
178
- random_days = int(np.random.normal(self.timedelta_days_mean, self.timedelta_days_std_dev))
179
- random_days = np.clip(random_days, self.timedelta_days_min, self.timedelta_days_max)
180
-
181
- else:
182
- raise ValueError("Unsupported distribution type")
183
-
184
- current_date = date.today()
185
- generated_date = current_date - timedelta(days=random_days)
186
- print(generated_date)
187
- return(generated_date)
188
-
189
- # Example Usage
190
- # Numeric distribution for age
191
- # age_distribution = NumericValueDistribution.objects.create(
192
- # name='Age Distribution',
193
- # distribution_type='normal',
194
- # min_value=0,
195
- # max_value=100,
196
- # mean=50,
197
- # std_dev=15
198
- # )
199
-
200
- # # Single categorical distribution for gender
201
- # gender_distribution = SingleCategoricalValueDistribution.objects.create(
202
- # name='Gender Distribution',
203
- # categories={'male': 0.5, 'female': 0.5}
204
- # )
205
-
206
- # # Multiple categorical distribution for symptoms
207
- # symptoms_distribution = MultipleCategoricalValueDistribution.objects.create(
208
- # name='Symptoms Distribution',
209
- # categories={'fever': 0.3, 'cough': 0.4, 'fatigue': 0.2, 'nausea': 0.1},
210
- # min_count=1,
211
- # max_count=3,
212
- # count_distribution_type='normal',
213
- # count_mean=2,
214
- # count_std_dev=0.5
215
- # )
@@ -1,16 +0,0 @@
1
- from django.db import models
2
-
3
- class MaterialManager(models.Manager):
4
- def get_by_natural_key(self, name):
5
- return self.get(name=name)
6
-
7
- class Material(models.Model):
8
- objects = MaterialManager()
9
-
10
- name = models.CharField(max_length=255)
11
- name_de = models.CharField(max_length=255, null=True)
12
- name_en = models.CharField(max_length=255, null=True)
13
- emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True)
14
-
15
- def natural_key(self):
16
- return (self.name,)
@@ -1,18 +0,0 @@
1
- from django.db import models
2
-
3
- class ResourceManager(models.Manager):
4
- def get_by_natural_key(self, name):
5
- return self.get(name=name)
6
-
7
- class Resource(models.Model):
8
- objects = ResourceManager()
9
-
10
- name = models.CharField(max_length=255)
11
- name_de = models.CharField(max_length=255, null=True)
12
- name_en = models.CharField(max_length=255, null=True)
13
-
14
- def natural_key(self):
15
- return (self.name,)
16
-
17
- def __str__(self):
18
- return self.name
@@ -1,21 +0,0 @@
1
- from django.db import models
2
-
3
- class TransportRouteManager(models.Manager):
4
- def get_by_natural_key(self, name):
5
- return self.get(name=name)
6
-
7
- class TransportRoute(models.Model):
8
- objects = TransportRouteManager()
9
-
10
- distance = models.FloatField()
11
- name = models.CharField(max_length=255)
12
- name_de = models.CharField(max_length=255, null=True)
13
- name_en = models.CharField(max_length=255, null=True)
14
- emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True)
15
- unit = models.ForeignKey("Unit", on_delete=models.SET_NULL, null=True)
16
-
17
- def natural_key(self):
18
- return (self.name,)
19
-
20
- def __str__(self):
21
- return self.name
@@ -1,20 +0,0 @@
1
- from django.db import models
2
-
3
- class WasteManager(models.Manager):
4
- def get_by_natural_key(self, name):
5
- return self.get(name=name)
6
-
7
- class Waste(models.Model):
8
- objects = WasteManager()
9
-
10
- name = models.CharField(max_length=255)
11
- name_de = models.CharField(max_length=255, null=True)
12
- name_en = models.CharField(max_length=255, null=True)
13
- # emission_factor = models.ForeignKey("EmissionFactor", on_delete=models.SET_NULL, null=True)
14
-
15
- def natural_key(self):
16
- return (self.name,)
17
-
18
- def __str__(self):
19
- return self.name
20
-
@@ -1,35 +0,0 @@
1
- from django.db import models
2
-
3
- # Serializer located in serializers/examination.py
4
- class PatientExamination(models.Model):
5
- patient = models.ForeignKey('Patient', on_delete=models.CASCADE, related_name='patient_examinations')
6
- examination = models.ForeignKey('Examination', on_delete=models.CASCADE, null = True, blank = True)
7
- video = models.OneToOneField('Video', on_delete=models.CASCADE, null = True, blank = True, related_name='patient_examination')
8
- report_file = models.OneToOneField('ReportFile', on_delete=models.CASCADE, null = True, blank = True, related_name='patient_examination')
9
-
10
- class Meta:
11
- verbose_name = 'Patient Examination'
12
- verbose_name_plural = 'Patient Examinations'
13
- ordering = ['patient', 'examination']
14
-
15
- def __str__(self):
16
- return f"{self.patient} - {self.report_file}"
17
-
18
- def find_matching_video_from_patient(self):
19
- """
20
- Finds a video for this patient examination based on the patient's videos.
21
- For this, the videos date must be the same as the report file's date.
22
- #TODO add more criteria for matching: Examination type
23
- """
24
- videos = self.patient.video_set.filter(date=self.report_file.date, patient_examination__isnull=True)
25
- if videos:
26
- if len(videos) > 1:
27
- print(f"Warning: Found more than one video for patient {self.patient} on date {self.report_file.date}. Choosing the first one.")
28
- return videos[0]
29
- else:
30
- videos = self.patient.video_set.filter(patient_examination__isnull=True)
31
- if len(videos)==1:
32
- return videos[0]
33
-
34
- return None
35
-
@@ -1,44 +0,0 @@
1
- from django.contrib.contenttypes.models import ContentType
2
- from django.contrib.auth.models import Permission
3
- from endoreg_db.models import * # Import your models here
4
- from django.db import transaction
5
-
6
- # Step 1: Define model to category mappings
7
- # Assuming every model class name is unique across your entire Django project
8
- model_categories = {
9
- 'SensitiveModel1': 'sensitive',
10
- 'SensitiveModel2': 'sensitive',
11
- 'DevelopmentModel1': 'development',
12
- 'DevelopmentModel2': 'development',
13
- # Add all models you have, mapping them to either 'sensitive', 'development', or 'all'
14
- }
15
-
16
- # Step 2: Define permissions for each category
17
- category_permissions = {
18
- 'sensitive': ['view', 'edit', 'delete'],
19
- 'development': ['view', 'edit'],
20
- 'all': ['view'],
21
- }
22
-
23
- @transaction.atomic
24
- def create_permissions_for_all_models():
25
- for model_class_name, category in model_categories.items():
26
- model_class = globals().get(model_class_name)
27
- if model_class is None:
28
- print(f"Model {model_class_name} not found.")
29
- continue
30
-
31
- content_type = ContentType.objects.get_for_model(model_class)
32
- permissions = category_permissions.get(category, [])
33
-
34
- for permission_codename in permissions:
35
- permission_name = f"Can {permission_codename} {model_class_name}"
36
- permission, created = Permission.objects.get_or_create(
37
- codename=f"{permission_codename}_{model_class_name.lower()}",
38
- defaults={'name': permission_name, 'content_type': content_type},
39
- )
40
- if created:
41
- print(f"Created permission: {permission_name}")
42
-
43
- # Run the function to create and assign permissions based on categories
44
- create_permissions_for_all_models()
@@ -1,7 +0,0 @@
1
- from .gender import Gender
2
- from .person import Person
3
- from .patient import *
4
- from .examiner import Examiner, ExaminerSerializer
5
- from .portal_user_information import PortalUserInfo, Profession
6
- from .first_name import FirstName
7
- from .last_name import LastName
@@ -1,2 +0,0 @@
1
- from .examiner import Examiner, ExaminerSerializer
2
- # from .examiner_type import ExaminerType
@@ -1,16 +0,0 @@
1
- from django.db import models
2
- from ..person import Person
3
- from rest_framework import serializers
4
-
5
- class Examiner(Person):
6
- center = models.ForeignKey('Center', on_delete=models.CASCADE, blank=True, null=True)
7
-
8
- def __str__(self):
9
- return self.first_name + " " + self.last_name
10
-
11
-
12
- class ExaminerSerializer(serializers.ModelSerializer):
13
-
14
- class Meta:
15
- model = Examiner
16
- fields = '__all__'
@@ -1,2 +0,0 @@
1
- from .examiner import Examiner
2
- # from .examiner_type import ExaminerType
@@ -1,18 +0,0 @@
1
- # class to represent unique first-names
2
- # name attribute is natural key
3
-
4
- from django.db import models
5
-
6
- class FirstNameManager(models.Manager):
7
- def get_by_natural_key(self, name):
8
- return self.get(name=name)
9
-
10
- class FirstName(models.Model):
11
- objects = FirstNameManager()
12
- name = models.CharField(max_length=255, unique=True)
13
-
14
- def natural_key(self):
15
- return (self.name,)
16
-
17
- def __str__(self):
18
- return self.name
@@ -1,22 +0,0 @@
1
- from django.db import models
2
-
3
- class GenderManager(models.Manager):
4
- def get_by_natural_key(self, name):
5
- return self.get(name=name)
6
-
7
- class Gender(models.Model):
8
- """A class representing gender."""
9
- objects = GenderManager()
10
-
11
- name = models.CharField(max_length=255)
12
- name_de = models.CharField(max_length=255, null=True)
13
- name_en = models.CharField(max_length=255, null=True)
14
- abbreviation = models.CharField(max_length=255, null=True)
15
- description = models.TextField(blank=True, null=True)
16
-
17
- def natural_key(self):
18
- return (self.name,)
19
-
20
- def __str__(self):
21
- return self.name
22
-
@@ -1,20 +0,0 @@
1
- # class to represent unique last_names
2
- # name attribute is natural key
3
- from django.db import models
4
-
5
- class LastNameManager(models.Manager):
6
- def get_by_natural_key(self, name):
7
- return self.get(name=name)
8
-
9
- class LastName(models.Model):
10
- objects = LastNameManager()
11
- name = models.CharField(max_length=255, unique=True)
12
-
13
- def natural_key(self):
14
- return (self.name,)
15
-
16
- def __str__(self):
17
- return self.name
18
-
19
- # Path: endoreg_db/models/persons/first_name.py
20
-
@@ -1,8 +0,0 @@
1
- from .patient import Patient, PatientForm
2
- from .patient_event import PatientEvent
3
- from .patient_disease import PatientDisease
4
- from .patient_lab_sample import PatientLabSample, PatientLabSampleType
5
- from .patient_lab_value import PatientLabValue
6
- from .patient_medication import PatientMedication
7
- from .patient_medication_schedule import PatientMedicationSchedule
8
- from .case import *
File without changes
@@ -1,30 +0,0 @@
1
- from django.db import models
2
-
3
- class Case(models.Model):
4
- """
5
- A class representing a case.
6
-
7
- Attributes:
8
- name (str): The name of the case.
9
- description (str): A description of the case.
10
- case_template (CaseTemplate): The case template of the case.
11
- patient (Patient): The patient of the case.
12
- start_date (datetime): The start date of the case.
13
- end_date (datetime): The end date of the case.
14
- is_active (bool): A flag indicating whether the case is active.
15
- is_closed (bool): A flag indicating whether the case is closed.
16
- is_deleted (bool): A flag indicating whether the case is deleted.
17
- created_at (datetime): The creation date of the case.
18
- updated_at (datetime): The last update date of the case.
19
-
20
- """
21
- start_date = models.DateTimeField()
22
- end_date = models.DateTimeField(null=True)
23
- is_active = models.BooleanField(default=True)
24
- is_closed = models.BooleanField(default=False)
25
- is_deleted = models.BooleanField(default=False)
26
- created_at = models.DateTimeField(auto_now_add=True)
27
- updated_at = models.DateTimeField(auto_now=True)
28
-
29
- def __str__(self):
30
- return self.name