endoreg-db 0.1.0__py3-none-any.whl → 0.2.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.
Files changed (121) hide show
  1. endoreg_db/data/__init__.py +14 -0
  2. endoreg_db/data/active_model/data.yaml +3 -0
  3. endoreg_db/data/center/data.yaml +7 -0
  4. endoreg_db/data/endoscope_type/data.yaml +11 -0
  5. endoreg_db/data/endoscopy_processor/data.yaml +45 -0
  6. endoreg_db/data/examination/examinations/data.yaml +17 -0
  7. endoreg_db/data/examination/time/data.yaml +48 -0
  8. endoreg_db/data/examination/time-type/data.yaml +8 -0
  9. endoreg_db/data/examination/type/data.yaml +5 -0
  10. endoreg_db/data/information_source/data.yaml +30 -0
  11. endoreg_db/data/label/label/data.yaml +62 -0
  12. endoreg_db/data/label/label-set/data.yaml +18 -0
  13. endoreg_db/data/label/label-type/data.yaml +7 -0
  14. endoreg_db/data/model_type/data.yaml +7 -0
  15. endoreg_db/data/profession/data.yaml +70 -0
  16. endoreg_db/data/unit/data.yaml +17 -0
  17. endoreg_db/data/unit/length.yaml +31 -0
  18. endoreg_db/data/unit/volume.yaml +26 -0
  19. endoreg_db/data/unit/weight.yaml +31 -0
  20. endoreg_db/forms/__init__.py +2 -0
  21. endoreg_db/forms/settings/__init__.py +8 -0
  22. endoreg_db/forms/unit.py +6 -0
  23. endoreg_db/management/commands/_load_model_template.py +41 -0
  24. endoreg_db/management/commands/delete_legacy_images.py +19 -0
  25. endoreg_db/management/commands/delete_legacy_videos.py +17 -0
  26. endoreg_db/management/commands/extract_legacy_video_frames.py +18 -0
  27. endoreg_db/management/commands/fetch_legacy_image_dataset.py +32 -0
  28. endoreg_db/management/commands/import_legacy_images.py +94 -0
  29. endoreg_db/management/commands/import_legacy_videos.py +76 -0
  30. endoreg_db/management/commands/load_active_model_data.py +45 -0
  31. endoreg_db/management/commands/load_ai_model_data.py +45 -0
  32. endoreg_db/management/commands/load_base_db_data.py +62 -0
  33. endoreg_db/management/commands/load_center_data.py +43 -0
  34. endoreg_db/management/commands/load_endoscope_type_data.py +45 -0
  35. endoreg_db/management/commands/load_endoscopy_processor_data.py +45 -0
  36. endoreg_db/management/commands/load_examination_data.py +75 -0
  37. endoreg_db/management/commands/load_information_source.py +45 -0
  38. endoreg_db/management/commands/load_label_data.py +67 -0
  39. endoreg_db/management/commands/load_profession_data.py +44 -0
  40. endoreg_db/management/commands/load_unit_data.py +46 -0
  41. endoreg_db/management/commands/load_user_groups.py +67 -0
  42. endoreg_db/management/commands/register_ai_model.py +65 -0
  43. endoreg_db/migrations/0001_initial.py +582 -0
  44. endoreg_db/models/__init__.py +53 -0
  45. endoreg_db/models/ai_model/__init__.py +3 -0
  46. endoreg_db/models/ai_model/active_model.py +9 -0
  47. endoreg_db/models/ai_model/model_meta.py +24 -0
  48. endoreg_db/models/ai_model/model_type.py +26 -0
  49. endoreg_db/models/ai_model/utils.py +8 -0
  50. endoreg_db/models/annotation/__init__.py +2 -0
  51. endoreg_db/models/annotation/binary_classification_annotation_task.py +80 -0
  52. endoreg_db/models/annotation/image_classification.py +27 -0
  53. endoreg_db/models/center.py +19 -0
  54. endoreg_db/models/data_file/__init__.py +4 -0
  55. endoreg_db/models/data_file/base_classes/__init__.py +3 -0
  56. endoreg_db/models/data_file/base_classes/abstract_frame.py +51 -0
  57. endoreg_db/models/data_file/base_classes/abstract_video.py +200 -0
  58. endoreg_db/models/data_file/frame.py +45 -0
  59. endoreg_db/models/data_file/report_file.py +88 -0
  60. endoreg_db/models/data_file/video/__init__.py +7 -0
  61. endoreg_db/models/data_file/video/import_meta.py +25 -0
  62. endoreg_db/models/data_file/video/video.py +25 -0
  63. endoreg_db/models/data_file/video_segment.py +107 -0
  64. endoreg_db/models/examination/__init__.py +4 -0
  65. endoreg_db/models/examination/examination.py +26 -0
  66. endoreg_db/models/examination/examination_time.py +27 -0
  67. endoreg_db/models/examination/examination_time_type.py +24 -0
  68. endoreg_db/models/examination/examination_type.py +18 -0
  69. endoreg_db/models/hardware/__init__.py +2 -0
  70. endoreg_db/models/hardware/endoscope.py +44 -0
  71. endoreg_db/models/hardware/endoscopy_processor.py +143 -0
  72. endoreg_db/models/information_source.py +22 -0
  73. endoreg_db/models/label/__init__.py +1 -0
  74. endoreg_db/models/label/label.py +84 -0
  75. endoreg_db/models/legacy_data/__init__.py +3 -0
  76. endoreg_db/models/legacy_data/image.py +34 -0
  77. endoreg_db/models/patient_examination/__init__.py +35 -0
  78. endoreg_db/models/persons/__init__.py +4 -0
  79. endoreg_db/models/persons/examiner/__init__.py +2 -0
  80. endoreg_db/models/persons/examiner/examiner.py +16 -0
  81. endoreg_db/models/persons/examiner/examiner_type.py +2 -0
  82. endoreg_db/models/persons/patient.py +58 -0
  83. endoreg_db/models/persons/person.py +34 -0
  84. endoreg_db/models/persons/portal_user_information.py +29 -0
  85. endoreg_db/models/prediction/__init__.py +2 -0
  86. endoreg_db/models/prediction/image_classification.py +37 -0
  87. endoreg_db/models/prediction/video_prediction_meta.py +244 -0
  88. endoreg_db/models/unit.py +20 -0
  89. endoreg_db/queries/__init__.py +5 -0
  90. endoreg_db/queries/annotations/__init__.py +3 -0
  91. endoreg_db/queries/annotations/legacy.py +159 -0
  92. endoreg_db/queries/get/__init__.py +6 -0
  93. endoreg_db/queries/get/annotation.py +0 -0
  94. endoreg_db/queries/get/center.py +42 -0
  95. endoreg_db/queries/get/model.py +13 -0
  96. endoreg_db/queries/get/patient.py +14 -0
  97. endoreg_db/queries/get/patient_examination.py +20 -0
  98. endoreg_db/queries/get/prediction.py +0 -0
  99. endoreg_db/queries/get/report_file.py +33 -0
  100. endoreg_db/queries/get/video.py +31 -0
  101. endoreg_db/queries/get/video_import_meta.py +0 -0
  102. endoreg_db/queries/get/video_prediction_meta.py +0 -0
  103. endoreg_db/queries/sanity/__init_.py +0 -0
  104. endoreg_db/serializers/__init__.py +10 -0
  105. endoreg_db/serializers/ai_model.py +19 -0
  106. endoreg_db/serializers/annotation.py +17 -0
  107. endoreg_db/serializers/center.py +11 -0
  108. endoreg_db/serializers/examination.py +33 -0
  109. endoreg_db/serializers/frame.py +13 -0
  110. endoreg_db/serializers/hardware.py +21 -0
  111. endoreg_db/serializers/label.py +22 -0
  112. endoreg_db/serializers/patient.py +10 -0
  113. endoreg_db/serializers/prediction.py +15 -0
  114. endoreg_db/serializers/report_file.py +7 -0
  115. endoreg_db/serializers/video.py +27 -0
  116. endoreg_db-0.2.0.dist-info/LICENSE +674 -0
  117. endoreg_db-0.2.0.dist-info/METADATA +26 -0
  118. endoreg_db-0.2.0.dist-info/RECORD +126 -0
  119. endoreg_db-0.1.0.dist-info/METADATA +0 -19
  120. endoreg_db-0.1.0.dist-info/RECORD +0 -10
  121. {endoreg_db-0.1.0.dist-info → endoreg_db-0.2.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,44 @@
1
+ from django.conf import settings
2
+ from django.core.management.base import BaseCommand
3
+ from ...models import Profession
4
+ from ...utils import load_model_data_from_yaml
5
+ from ...data import PROFESSION_DATA_DIR
6
+
7
+ SOURCE_DIR = PROFESSION_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
8
+
9
+ MODEL_0 = Profession
10
+
11
+ IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
12
+ MODEL_0.__name__,
13
+ ]
14
+
15
+ IMPORT_METADATA = {
16
+ MODEL_0.__name__: {
17
+ "dir": SOURCE_DIR, # e.g. "interventions"
18
+ "model": MODEL_0, # e.g. Intervention
19
+ "foreign_keys": [], # e.g. ["intervention_types"]
20
+ "foreign_key_models": [] # e.g. [InterventionType]
21
+ }
22
+ }
23
+
24
+ class Command(BaseCommand):
25
+ help = """Load all .yaml files in the data/intervention directory
26
+ into the Intervention and InterventionType model"""
27
+
28
+ def add_arguments(self, parser):
29
+ parser.add_argument(
30
+ '--verbose',
31
+ action='store_true',
32
+ help='Display verbose output',
33
+ )
34
+
35
+ def handle(self, *args, **options):
36
+ verbose = options['verbose']
37
+ for model_name in IMPORT_MODELS:
38
+ _metadata = IMPORT_METADATA[model_name]
39
+ load_model_data_from_yaml(
40
+ self,
41
+ model_name,
42
+ _metadata,
43
+ verbose
44
+ )
@@ -0,0 +1,46 @@
1
+ from django.conf import settings
2
+ import os
3
+ from django.core.management.base import BaseCommand
4
+ from ...models import Unit
5
+ import yaml
6
+ from ...utils import load_model_data_from_yaml
7
+ from ...data import UNIT_DATA_DIR
8
+
9
+ SOURCE_DIR = UNIT_DATA_DIR # e.g. settings.DATA_DIR_INTERVENTION
10
+
11
+ MODEL_0 = Unit
12
+
13
+ IMPORT_MODELS = [ # string as model key, serves as key in IMPORT_METADATA
14
+ MODEL_0.__name__,
15
+ ]
16
+
17
+ IMPORT_METADATA = {
18
+ MODEL_0.__name__: {
19
+ "dir": SOURCE_DIR, # e.g. "interventions"
20
+ "model": MODEL_0, # e.g. Intervention
21
+ "foreign_keys": [], # e.g. ["intervention_types"]
22
+ "foreign_key_models": [] # e.g. [InterventionType]
23
+ }
24
+ }
25
+
26
+ class Command(BaseCommand):
27
+ help = """Load all .yaml files in the data/intervention directory
28
+ into the Intervention and InterventionType model"""
29
+
30
+ def add_arguments(self, parser):
31
+ parser.add_argument(
32
+ '--verbose',
33
+ action='store_true',
34
+ help='Display verbose output',
35
+ )
36
+
37
+ def handle(self, *args, **options):
38
+ verbose = options['verbose']
39
+ for model_name in IMPORT_MODELS:
40
+ _metadata = IMPORT_METADATA[model_name]
41
+ load_model_data_from_yaml(
42
+ self,
43
+ model_name,
44
+ _metadata,
45
+ verbose
46
+ )
@@ -0,0 +1,67 @@
1
+
2
+ from django.core.management.base import BaseCommand
3
+ from django.contrib.auth.models import Group, Permission
4
+
5
+
6
+ class Command(BaseCommand):
7
+ help = """Create additional user groups"""
8
+
9
+ def add_arguments(self, parser):
10
+ parser.add_argument(
11
+ '--verbose',
12
+ action='store_true',
13
+ help='Display verbose output',
14
+ )
15
+
16
+ def handle(self, *args, **options):
17
+ verbose = options['verbose']
18
+
19
+ permissions = [
20
+ "g_play_production",
21
+ "agl",
22
+ "endo_reg_production",
23
+ "ukw_production"
24
+ ]
25
+
26
+ for permission_name in permissions:
27
+ permission, created = Permission.objects.get_or_create(codename=permission_name)
28
+ if verbose:
29
+ if created:
30
+ self.stdout.write(self.style.SUCCESS("Created Permission {}".format(group_name)))
31
+
32
+ groups = ["demo", "verified", "agl", "endo_reg_user", "g_play_user", "ukw_user"]
33
+ for group_name in groups:
34
+ _group, created = Group.objects.get_or_create(name=group_name)
35
+ if verbose:
36
+ if created:
37
+ self.stdout.write(self.style.SUCCESS("Created group {}".format(group_name)))
38
+
39
+ # Add permissions to groups
40
+ # demo has no permissions
41
+ # verified has no permissions
42
+ # agl has all permissions
43
+ # endo_reg_user has endo_reg_user_production permission
44
+ # g_play_user has g_play_production permission
45
+ agl_group = Group.objects.get(name="agl")
46
+ agl_group.permissions.set(Permission.objects.all())
47
+ agl_group.save()
48
+
49
+ endo_reg_user_group = Group.objects.get(name="endo_reg_user")
50
+ _permission = Permission.objects.get(codename="endo_reg_production")
51
+ endo_reg_user_group.permissions.add(_permission)
52
+ endo_reg_user_group.save()
53
+
54
+ g_play_user_group = Group.objects.get(name="g_play_user")
55
+ _permission = Permission.objects.get(codename="g_play_production")
56
+ g_play_user_group.permissions.add(_permission)
57
+ g_play_user_group.save()
58
+
59
+ ukw_user_group = Group.objects.get(name="ukw_user")
60
+ _permission = Permission.objects.get(codename="ukw_production")
61
+ ukw_user_group.permissions.add(_permission)
62
+ ukw_user_group.save()
63
+
64
+
65
+
66
+
67
+
@@ -0,0 +1,65 @@
1
+ # django command to register a new AI model
2
+ # expects path to model_meta.json file
3
+ # example model_meta: {
4
+ # "name": "multilabel_classification",
5
+ # "version": 0,
6
+ # "model_type": "multilabel_classification", # name of modeltype, is unique
7
+ # "labelset": "multilabel_classification", #labelset name, combination of name and version is unique
8
+ # "labelset_version": 0,
9
+ # "weights_path": "weights/multilabel_classification_0.pth", # path to weights file
10
+ #}
11
+
12
+ from django.core.management.base import BaseCommand
13
+ from django.core.files import File
14
+ from endoreg_db.models import ModelMeta, ModelType, LabelSet
15
+ import json
16
+ from pathlib import Path
17
+ from icecream import ic
18
+
19
+ class Command(BaseCommand):
20
+ """
21
+ Registers a new AI model in the database.
22
+ """
23
+ help = 'Registers a new AI model in the database.'
24
+
25
+ def add_arguments(self, parser):
26
+ parser.add_argument('model_meta_path', type=str)
27
+
28
+ def handle(self, *args, **options):
29
+ model_meta_path = Path(options['model_meta_path']).resolve()
30
+
31
+ with open(model_meta_path, 'r') as f:
32
+ model_meta = json.load(f)
33
+
34
+ # get or create model type
35
+ model_type = ModelType.objects.get(name=model_meta['model_type'])
36
+
37
+ # get or create labelset
38
+ labelset = LabelSet.objects.get(name=model_meta['labelset'], version=model_meta['labelset_version'])
39
+
40
+ # Handle weights file
41
+ weights_path = model_meta['weights_path']
42
+ # weights path is realative to model_meta_path
43
+ weights_path = model_meta_path.parent / weights_path
44
+
45
+ assert weights_path.exists(), f"weights file at {weights_path} does not exist"
46
+
47
+ # Make sure the path is correct and the file exists
48
+ try:
49
+ with open(weights_path, 'rb') as file:
50
+ model_name_string = f"{model_meta['name']}_{model_meta['version']}"
51
+ weights = File(file, name = model_name_string)
52
+ # Create ModelMeta instance
53
+ model_meta_instance = ModelMeta.objects.create(
54
+ name=model_meta['name'],
55
+ version=model_meta['version'],
56
+ type=model_type,
57
+ labelset=labelset,
58
+ weights=weights,
59
+ description=model_meta.get('description', '') # Assuming description is optional
60
+ )
61
+ print(f"Successfully registered model {model_meta_instance}")
62
+ except IOError:
63
+ print(f"Failed to open weights file at {weights_path}. Make sure the file exists.")
64
+
65
+