endoreg-db 0.3.1__py3-none-any.whl → 0.3.3__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.
- endoreg_db/data/__init__.py +3 -1
- endoreg_db/data/center/data.yaml +45 -0
- endoreg_db/data/pdf_type/data.yaml +28 -0
- endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml +26 -0
- endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml +19 -0
- endoreg_db/management/commands/load_base_db_data.py +12 -3
- endoreg_db/management/commands/load_center_data.py +3 -3
- endoreg_db/management/commands/load_pdf_type_data.py +61 -0
- endoreg_db/management/commands/load_report_reader_flag.py +46 -0
- endoreg_db/management/commands/reset_celery_schedule.py +9 -0
- endoreg_db/migrations/0013_rawpdffile.py +31 -0
- endoreg_db/migrations/0014_pdftype_alter_rawpdffile_file_pdfmeta.py +38 -0
- endoreg_db/migrations/0015_rename_report_processed_rawpdffile_state_report_processed_and_more.py +31 -0
- endoreg_db/migrations/0016_rawpdffile_state_report_processing_required.py +18 -0
- endoreg_db/migrations/0017_firstname_lastname_center_first_names_and_more.py +37 -0
- endoreg_db/migrations/0018_reportreaderflag_reportreaderconfig.py +37 -0
- endoreg_db/migrations/0019_pdftype_cut_off_above_lines_and_more.py +42 -0
- endoreg_db/migrations/0020_rename_endoscopy_info_line_pdftype_endoscope_info_line.py +18 -0
- endoreg_db/migrations/0021_alter_pdftype_endoscope_info_line.py +19 -0
- endoreg_db/migrations/0022_alter_pdftype_endoscope_info_line.py +19 -0
- endoreg_db/models/__init__.py +2 -0
- endoreg_db/models/center.py +6 -0
- endoreg_db/models/data_file/__init__.py +2 -3
- endoreg_db/models/data_file/import_classes/__init__.py +1 -0
- endoreg_db/models/data_file/import_classes/processing_functions/__init__.py +35 -0
- endoreg_db/models/data_file/import_classes/processing_functions/pdf.py +28 -0
- endoreg_db/models/data_file/import_classes/{processing_functions.py → processing_functions/video.py} +6 -7
- endoreg_db/models/data_file/import_classes/raw_pdf.py +185 -0
- endoreg_db/models/data_file/import_classes/raw_video.py +7 -5
- endoreg_db/models/data_file/metadata/__init__.py +2 -132
- endoreg_db/models/data_file/metadata/pdf_meta.py +70 -0
- endoreg_db/models/data_file/metadata/sensitive_meta.py +19 -1
- endoreg_db/models/data_file/metadata/video_meta.py +132 -0
- endoreg_db/models/data_file/report_file.py +1 -0
- endoreg_db/models/persons/__init__.py +3 -1
- endoreg_db/models/persons/first_name.py +18 -0
- endoreg_db/models/persons/last_name.py +20 -0
- endoreg_db/models/report_reader/__init__.py +2 -0
- endoreg_db/models/report_reader/report_reader_config.py +53 -0
- endoreg_db/models/report_reader/report_reader_flag.py +20 -0
- endoreg_db/utils/dataloader.py +172 -56
- endoreg_db/utils/hashs.py +18 -0
- {endoreg_db-0.3.1.dist-info → endoreg_db-0.3.3.dist-info}/METADATA +2 -1
- {endoreg_db-0.3.1.dist-info → endoreg_db-0.3.3.dist-info}/RECORD +46 -20
- {endoreg_db-0.3.1.dist-info → endoreg_db-0.3.3.dist-info}/LICENSE +0 -0
- {endoreg_db-0.3.1.dist-info → endoreg_db-0.3.3.dist-info}/WHEEL +0 -0
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
from .person import Person
|
|
2
2
|
from .patient import Patient, PatientForm
|
|
3
3
|
from .examiner import Examiner, ExaminerSerializer
|
|
4
|
-
from .portal_user_information import PortalUserInfo, Profession
|
|
4
|
+
from .portal_user_information import PortalUserInfo, Profession
|
|
5
|
+
from .first_name import FirstName
|
|
6
|
+
from .last_name import LastName
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# ReportReaderConfig Class
|
|
2
|
+
# Description: This class is used to store the configuration of the ReportReader
|
|
3
|
+
|
|
4
|
+
# PATIENT_INFO_LINE_FLAG = "Patient: "
|
|
5
|
+
# ENDOSCOPE_INFO_LINE_FLAG = "Gerät: "
|
|
6
|
+
# EXAMINER_INFO_LINE_FLAG = "1. Unters.:"
|
|
7
|
+
# CUT_OFF_BELOW_LINE_FLAG = "________________"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# CUT_OFF_ABOVE_LINE_FLAGS = [
|
|
11
|
+
# ENDOSCOPE_INFO_LINE_FLAG,
|
|
12
|
+
# EXAMINER_INFO_LINE_FLAG,
|
|
13
|
+
# ]
|
|
14
|
+
|
|
15
|
+
# CUT_OFF_BELOW_LINE_FLAGS = [
|
|
16
|
+
# CUT_OFF_BELOW_LINE_FLAG
|
|
17
|
+
# ]
|
|
18
|
+
|
|
19
|
+
from django.db import models
|
|
20
|
+
from .report_reader_flag import ReportReaderFlag
|
|
21
|
+
from ..center import Center
|
|
22
|
+
from ..data_file import PdfType
|
|
23
|
+
|
|
24
|
+
class ReportReaderConfig(models.Model):
|
|
25
|
+
|
|
26
|
+
locale = models.CharField(default="de_DE", max_length=10)
|
|
27
|
+
first_names = models.ManyToManyField('FirstName', related_name='report_reader_configs')
|
|
28
|
+
last_names = models.ManyToManyField('LastName', related_name='report_reader_configs')
|
|
29
|
+
text_date_format = models.CharField(default = "%d.%m.%Y", max_length=10)
|
|
30
|
+
patient_info_line_flag = models.ForeignKey(ReportReaderFlag, related_name='report_reader_configs_patient_info_line', on_delete=models.CASCADE)
|
|
31
|
+
endoscope_info_line_flag = models.ForeignKey(ReportReaderFlag, related_name='report_reader_configs_endoscope_info_line', on_delete=models.CASCADE)
|
|
32
|
+
examiner_info_line_flag = models.ForeignKey(ReportReaderFlag, related_name='report_reader_configs_examiner_info_line', on_delete=models.CASCADE)
|
|
33
|
+
cut_off_below = models.ManyToManyField(ReportReaderFlag, related_name='report_reader_configs_cut_off_below')
|
|
34
|
+
cut_off_above = models.ManyToManyField(ReportReaderFlag, related_name='report_reader_configs_cut_off_above')
|
|
35
|
+
|
|
36
|
+
def __str__(self):
|
|
37
|
+
return self.locale
|
|
38
|
+
|
|
39
|
+
def update_names_by_center(self, center:Center, save = True):
|
|
40
|
+
self.first_names.set(center.first_names.all())
|
|
41
|
+
self.last_names.set(center.last_names.all())
|
|
42
|
+
if save:
|
|
43
|
+
self.save()
|
|
44
|
+
|
|
45
|
+
def update_flags_by_pdf_type(self, pdf_type:PdfType, save = True):
|
|
46
|
+
self.patient_info_line_flag = pdf_type.patient_info_line_flag
|
|
47
|
+
self.endoscope_info_line_flag = pdf_type.endoscope_info_line_flag
|
|
48
|
+
self.examiner_info_line_flag = pdf_type.examiner_info_line_flag
|
|
49
|
+
self.cut_off_below.set(pdf_type.cut_off_below.all())
|
|
50
|
+
self.cut_off_above.set(pdf_type.cut_off_above.all())
|
|
51
|
+
if save:
|
|
52
|
+
self.save()
|
|
53
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Django model for the report reader flag
|
|
2
|
+
# have name and value
|
|
3
|
+
# name is natural key
|
|
4
|
+
|
|
5
|
+
from django.db import models
|
|
6
|
+
|
|
7
|
+
class ReportReaderFlagManager(models.Manager):
|
|
8
|
+
def get_by_natural_key(self, name):
|
|
9
|
+
return self.get(name=name)
|
|
10
|
+
|
|
11
|
+
class ReportReaderFlag(models.Model):
|
|
12
|
+
objects = ReportReaderFlagManager()
|
|
13
|
+
name = models.CharField(max_length=255, unique=True)
|
|
14
|
+
value = models.CharField(max_length=255)
|
|
15
|
+
|
|
16
|
+
def natural_key(self):
|
|
17
|
+
return (self.name,)
|
|
18
|
+
|
|
19
|
+
def __str__(self):
|
|
20
|
+
return self.name
|
endoreg_db/utils/dataloader.py
CHANGED
|
@@ -1,69 +1,185 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import yaml
|
|
3
|
+
from django.core.exceptions import ObjectDoesNotExist
|
|
3
4
|
|
|
4
|
-
def load_model_data_from_yaml(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
def load_model_data_from_yaml(command, model_name, metadata, verbose):
|
|
6
|
+
"""
|
|
7
|
+
Load model data from YAML files.
|
|
8
|
+
|
|
9
|
+
Args:
|
|
10
|
+
command: Command object for stdout writing.
|
|
11
|
+
model_name: Name of the model being loaded.
|
|
12
|
+
metadata: Metadata including directory and foreign key information.
|
|
13
|
+
verbose: Boolean indicating whether to print verbose output.
|
|
14
|
+
"""
|
|
11
15
|
if verbose:
|
|
12
|
-
command.stdout.write(f"Start
|
|
16
|
+
command.stdout.write(f"Start loading {model_name}")
|
|
13
17
|
model = metadata["model"]
|
|
14
|
-
|
|
18
|
+
dir_path = metadata["dir"]
|
|
15
19
|
foreign_keys = metadata["foreign_keys"]
|
|
16
20
|
foreign_key_models = metadata["foreign_key_models"]
|
|
17
21
|
|
|
18
|
-
for file in [f for f in os.listdir(
|
|
19
|
-
with open(os.path.join(
|
|
20
|
-
yaml_data = yaml.safe_load(
|
|
22
|
+
for file in [f for f in os.listdir(dir_path) if f.endswith('.yaml')]:
|
|
23
|
+
with open(os.path.join(dir_path, file), 'r') as file:
|
|
24
|
+
yaml_data = yaml.safe_load(file)
|
|
21
25
|
|
|
22
|
-
load_data_with_foreign_keys(
|
|
23
|
-
command,
|
|
24
|
-
model,
|
|
25
|
-
yaml_data,
|
|
26
|
-
foreign_keys,
|
|
27
|
-
foreign_key_models,
|
|
28
|
-
verbose
|
|
29
|
-
)
|
|
26
|
+
load_data_with_foreign_keys(command, model, yaml_data, foreign_keys, foreign_key_models, verbose)
|
|
30
27
|
|
|
31
28
|
def load_data_with_foreign_keys(command, model, yaml_data, foreign_keys, foreign_key_models, verbose):
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
29
|
+
"""
|
|
30
|
+
Load data handling foreign keys and many-to-many relationships.
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
command: Command object for stdout writing.
|
|
34
|
+
model: The Django model for the data.
|
|
35
|
+
yaml_data: Data loaded from YAML.
|
|
36
|
+
foreign_keys: List of foreign keys.
|
|
37
|
+
foreign_key_models: Corresponding models for the foreign keys.
|
|
38
|
+
verbose: Boolean indicating whether to print verbose output.
|
|
39
|
+
"""
|
|
40
|
+
for entry in yaml_data:
|
|
41
|
+
fields = entry.get('fields', {})
|
|
42
|
+
name = fields.pop('name', None)
|
|
43
|
+
m2m_relationships = {} # Store many-to-many relationships
|
|
44
|
+
|
|
45
|
+
# Handle foreign keys and many-to-many relationships
|
|
46
|
+
for fk_field, fk_model in zip(foreign_keys, foreign_key_models):
|
|
47
|
+
target_keys = fields.pop(fk_field, None)
|
|
48
|
+
|
|
49
|
+
# Ensure the foreign key exists
|
|
50
|
+
if target_keys is None:
|
|
51
|
+
if verbose:
|
|
52
|
+
command.stdout.write(command.style.WARNING(f"Foreign key {fk_field} not found in fields"))
|
|
53
|
+
continue # Skip if no foreign key provided
|
|
54
|
+
|
|
55
|
+
# Process many-to-many fields or foreign keys
|
|
56
|
+
if isinstance(target_keys, list): # Assume many-to-many relationship
|
|
57
|
+
related_objects = []
|
|
58
|
+
for key in target_keys:
|
|
59
|
+
obj, created = fk_model.objects.get_or_create(name=key)
|
|
60
|
+
if created and verbose:
|
|
61
|
+
command.stdout.write(command.style.SUCCESS(f"Created {fk_model.__name__} {key}"))
|
|
62
|
+
related_objects.append(obj)
|
|
63
|
+
m2m_relationships[fk_field] = related_objects
|
|
64
|
+
else: # Single foreign key relationship
|
|
65
|
+
try:
|
|
66
|
+
obj = fk_model.objects.get_by_natural_key(target_keys)
|
|
67
|
+
except ObjectDoesNotExist:
|
|
68
|
+
if verbose:
|
|
69
|
+
command.stdout.write(command.style.WARNING(f"{fk_model.__name__} with key {target_keys} not found"))
|
|
70
|
+
continue
|
|
71
|
+
fields[fk_field] = obj
|
|
72
|
+
|
|
73
|
+
# Create or update the main object
|
|
74
|
+
obj, created = model.objects.update_or_create(defaults=fields, name=name)
|
|
75
|
+
if created and verbose:
|
|
76
|
+
command.stdout.write(command.style.SUCCESS(f'Created {model.__name__} {name}'))
|
|
77
|
+
elif verbose:
|
|
78
|
+
command.stdout.write(command.style.WARNING(f'Skipped {model.__name__} {name}, already exists'))
|
|
79
|
+
|
|
80
|
+
# Set many-to-many relationships
|
|
81
|
+
for field_name, related_objs in m2m_relationships.items():
|
|
82
|
+
getattr(obj, field_name).set(related_objs)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
# def load_model_data_from_yaml(
|
|
86
|
+
# command,
|
|
87
|
+
# model_name,
|
|
88
|
+
# metadata,
|
|
89
|
+
# verbose,
|
|
90
|
+
# ):
|
|
91
|
+
|
|
92
|
+
# if verbose:
|
|
93
|
+
# command.stdout.write(f"Start Loading {model_name}")
|
|
94
|
+
# model = metadata["model"]
|
|
95
|
+
# dir = metadata["dir"]
|
|
96
|
+
# foreign_keys = metadata["foreign_keys"]
|
|
97
|
+
# foreign_key_models = metadata["foreign_key_models"]
|
|
98
|
+
|
|
99
|
+
# for file in [f for f in os.listdir(dir) if f.endswith('.yaml')]:
|
|
100
|
+
# with open(os.path.join(dir, file), 'r') as f:
|
|
101
|
+
# yaml_data = yaml.safe_load(f)
|
|
102
|
+
|
|
103
|
+
# load_data_with_foreign_keys(
|
|
104
|
+
# command,
|
|
105
|
+
# model,
|
|
106
|
+
# yaml_data,
|
|
107
|
+
# foreign_keys,
|
|
108
|
+
# foreign_key_models,
|
|
109
|
+
# verbose
|
|
110
|
+
# )
|
|
111
|
+
|
|
112
|
+
# def load_data_with_foreign_keys(command, model, yaml_data, foreign_keys, foreign_key_models, verbose):
|
|
113
|
+
# # Since pathology types is a ManyToMany field, we need to hack arount
|
|
114
|
+
# for entry in yaml_data:
|
|
115
|
+
# fields = entry.get('fields', {})
|
|
116
|
+
# name = fields.pop('name', None)
|
|
117
|
+
# many_to_many_tuples = []
|
|
118
|
+
# foreign_key_tuples = zip(foreign_keys, foreign_key_models)
|
|
119
|
+
# for foreign_key, foreign_key_model in foreign_key_tuples:
|
|
120
|
+
# # target_natural_key = fields.pop(foreign_key, None)
|
|
121
|
+
# # get the target natural key, if it exists, should not alter fields
|
|
122
|
+
# target_natural_key = fields.get(foreign_key, None)
|
|
123
|
+
# assert target_natural_key, f"Foreign Key {foreign_key} not found in fields {fields}"
|
|
40
124
|
|
|
125
|
+
# if (foreign_key == "first_names") or (foreign_key == "last_names"):
|
|
126
|
+
# if isinstance(target_natural_key, list):
|
|
127
|
+
# # For first_names and last_names, the field is a Many to Many field
|
|
128
|
+
# # if names dont exist yet, we create them
|
|
129
|
+
# fk_objects = []
|
|
130
|
+
# for __name in target_natural_key:
|
|
131
|
+
# obj, created = foreign_key_model.objects.get_or_create(name=__name)
|
|
132
|
+
# if created:
|
|
133
|
+
# command.stdout.write(command.style.SUCCESS(f'Created {foreign_key_model.__name__} {__name}'))
|
|
134
|
+
# # fk_objects.append(obj)
|
|
135
|
+
|
|
136
|
+
# fk_tuple = (foreign_key, fk_objects)
|
|
137
|
+
# many_to_many_tuples.append(fk_tuple)
|
|
138
|
+
# continue
|
|
139
|
+
|
|
140
|
+
# if isinstance(target_natural_key, list):
|
|
141
|
+
# # the field is a Many to X field.
|
|
142
|
+
# fk_objects = [foreign_key_model.objects.get_by_natural_key(_) for _ in target_natural_key]
|
|
143
|
+
# fk_tuple = (foreign_key, fk_objects)
|
|
144
|
+
# many_to_many_tuples.append(fk_tuple)
|
|
145
|
+
# continue
|
|
146
|
+
# # Use the natural key to look up the related object
|
|
147
|
+
# try:
|
|
148
|
+
# obj = foreign_key_model.objects.get_by_natural_key(target_natural_key)
|
|
149
|
+
# except:
|
|
150
|
+
# # commandline log that the object was not found
|
|
151
|
+
# command.stdout.write(command.style.WARNING(f'Object {foreign_key_model.__name__} {target_natural_key} not found'))
|
|
152
|
+
# # commandline log entry
|
|
153
|
+
# command.stdout.write(command.style.WARNING(_log))
|
|
154
|
+
# # try to create by name if name is available
|
|
155
|
+
# # create defaults dict from fields using the models fields
|
|
156
|
+
# _field_names = [_.name for _ in foreign_key_model._meta.fields]
|
|
157
|
+
# _defaults = {k: v for k, v in fields.items() if (k in _field_names) and v}
|
|
158
|
+
|
|
159
|
+
# if target_natural_key:
|
|
160
|
+
# # commandlie log
|
|
161
|
+
# command.stdout.write(command.style.SUCCESS(f'Creating {foreign_key_model.__name__} {name} with defaults {_defaults}'))
|
|
162
|
+
# obj, created = model.objects.get_or_create(
|
|
163
|
+
# name = target_natural_key,
|
|
164
|
+
# defaults=_defaults
|
|
165
|
+
# )
|
|
166
|
+
# # Assign the related object to the field
|
|
167
|
+
# fields[foreign_key] = obj
|
|
168
|
+
|
|
169
|
+
# if name:
|
|
170
|
+
# try:
|
|
171
|
+
# obj, created = model.objects.get_or_create(name=name, defaults=fields)
|
|
172
|
+
# except:
|
|
173
|
+
# # commandlinelog to print name, fields, target foreign key
|
|
174
|
+
# command.stdout.write(command.style.WARNING(f'Object {model.__name__} {name} not found'))
|
|
175
|
+
# else:
|
|
176
|
+
# obj, created = model.objects.get_or_create(**fields)
|
|
177
|
+
# if many_to_many_tuples:
|
|
178
|
+
|
|
179
|
+
# for fk, fk_objects in many_to_many_tuples:
|
|
180
|
+
# getattr(obj, fk).set(fk_objects)
|
|
41
181
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
many_to_many_tuples.append(fk_tuple)
|
|
47
|
-
continue
|
|
48
|
-
# Use the natural key to look up the related object
|
|
49
|
-
try:
|
|
50
|
-
obj = foreign_key_model.objects.get_by_natural_key(target_natural_key)
|
|
51
|
-
except model.DoesNotExist:
|
|
52
|
-
command.stderr.write(command.style.ERROR(f'{model.__name__} with natural key {target_natural_key} does not exist. Skipping {name}.'))
|
|
53
|
-
raise Exception(f'{model.__name__} with natural key {target_natural_key} does not exist. Skipping {name}.')
|
|
54
|
-
|
|
55
|
-
# Assign the related object to the field
|
|
56
|
-
fields[foreign_key] = obj
|
|
57
|
-
|
|
58
|
-
if name:
|
|
59
|
-
obj, created = model.objects.get_or_create(name=name, defaults=fields)
|
|
60
|
-
else:
|
|
61
|
-
obj, created = model.objects.get_or_create(**fields)
|
|
62
|
-
if many_to_many_tuples:
|
|
63
|
-
for fk, fk_objects in many_to_many_tuples:
|
|
64
|
-
getattr(obj, fk).set(fk_objects)
|
|
65
|
-
|
|
66
|
-
if created and verbose:
|
|
67
|
-
command.stdout.write(command.style.SUCCESS(f'Created {model.__name__} {name}'))
|
|
68
|
-
elif verbose:
|
|
69
|
-
command.stdout.write(command.style.WARNING(f'Skipped {model.__name__} {name}, already exists'))
|
|
182
|
+
# if created and verbose:
|
|
183
|
+
# command.stdout.write(command.style.SUCCESS(f'Created {model.__name__} {name}'))
|
|
184
|
+
# elif verbose:
|
|
185
|
+
# command.stdout.write(command.style.WARNING(f'Skipped {model.__name__} {name}, already exists'))
|
endoreg_db/utils/hashs.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import hashlib
|
|
2
|
+
from pathlib import Path
|
|
2
3
|
|
|
3
4
|
def get_video_hash(video_path):
|
|
4
5
|
"""
|
|
@@ -14,3 +15,20 @@ def get_video_hash(video_path):
|
|
|
14
15
|
|
|
15
16
|
return video_hash
|
|
16
17
|
|
|
18
|
+
def get_pdf_hash(pdf_path:Path):
|
|
19
|
+
"""
|
|
20
|
+
Get the hash of a pdf file.
|
|
21
|
+
"""
|
|
22
|
+
pdf_hash = None
|
|
23
|
+
|
|
24
|
+
# Open the file in binary mode and read its contents
|
|
25
|
+
with open(pdf_path, 'rb') as f:
|
|
26
|
+
pdf_contents = f.read()
|
|
27
|
+
# Create a hash object using SHA-256 algorithm
|
|
28
|
+
|
|
29
|
+
hash_object = hashlib.sha256(pdf_contents, usedforsecurity=False)
|
|
30
|
+
# Get the hexadecimal representation of the hash
|
|
31
|
+
pdf_hash = hash_object.hexdigest()
|
|
32
|
+
assert len(pdf_hash) <= 255, "Hash length exceeds 255 characters"
|
|
33
|
+
|
|
34
|
+
return pdf_hash
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: endoreg-db
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: EndoReg Db Django App
|
|
5
5
|
License: GNU3
|
|
6
6
|
Author: Thomas J. Lux
|
|
@@ -9,6 +9,7 @@ Classifier: License :: Other/Proprietary License
|
|
|
9
9
|
Classifier: Programming Language :: Python :: 3
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Requires-Dist: agl-report-reader (>=0.3.0,<0.4.0)
|
|
12
13
|
Requires-Dist: django (>=4.2,<4.3)
|
|
13
14
|
Requires-Dist: django-bootstrap5 (>=23.4,<24.0)
|
|
14
15
|
Requires-Dist: djangorestframework (>=3.14.0,<4.0.0)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
endoreg_db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
endoreg_db/admin.py,sha256=suMo4x8I3JBxAFBVIdE-5qnqZ6JAZV0FESABHOSc-vg,63
|
|
3
3
|
endoreg_db/apps.py,sha256=zYb2_RiEGIsLS6_OMWzCxcTHSNkF28CqF4xcd_6NHUg,151
|
|
4
|
-
endoreg_db/data/__init__.py,sha256=
|
|
4
|
+
endoreg_db/data/__init__.py,sha256=as2ifgopSSKbsNWH1JYCZ3R9oqmw8jzU2HMne_qmSlo,634
|
|
5
5
|
endoreg_db/data/active_model/data.yaml,sha256=G7PvKmGDm_Gt6Tzf99s18b5vlE5qWruvClzlcINqDQE,86
|
|
6
|
-
endoreg_db/data/center/data.yaml,sha256=
|
|
6
|
+
endoreg_db/data/center/data.yaml,sha256=laTM5d3LLYSgBSPslEBQYkBHVpxLtiM4R7TcccIaNXA,1067
|
|
7
7
|
endoreg_db/data/endoscope_type/data.yaml,sha256=k8uF94svJsU02O-ceaLnQBoozJ6cT3iY_s_aKrvJZqg,242
|
|
8
8
|
endoreg_db/data/endoscopy_processor/data.yaml,sha256=iu02flPMyz0YKjqDWS5KLp8We6DSsHtJcGvJMWvCV-s,1044
|
|
9
9
|
endoreg_db/data/examination/examinations/data.yaml,sha256=IrUNRLJjKBfiZLCvkYpY7JYsntaN1KAEu9hEi7k7yhk,330
|
|
@@ -15,7 +15,10 @@ endoreg_db/data/label/label/data.yaml,sha256=fwBiybtizA_hSGJWWCWNfKoHncy4s5ObxhK
|
|
|
15
15
|
endoreg_db/data/label/label-set/data.yaml,sha256=wpAxOPbpZzZWLM95yjoKXhhjMk6mOKcGQdoLtcDXCZ4,339
|
|
16
16
|
endoreg_db/data/label/label-type/data.yaml,sha256=vffKYpTae_gu63_wza6LONs5ys4pna1EbrUUO6CafQs,136
|
|
17
17
|
endoreg_db/data/model_type/data.yaml,sha256=vCMMo8wiI5uL2zrQROmgsHq1GrC8IdagGIgNdQunUeQ,149
|
|
18
|
+
endoreg_db/data/pdf_type/data.yaml,sha256=0eMCb3-j2_zY0NkyIFFM7H9658kILpd5mt_OgrXxs64,990
|
|
18
19
|
endoreg_db/data/profession/data.yaml,sha256=3lRQ-SEiJHjmuQWXVLBoL7tpfO2t82NgGc3PpKIayQg,2151
|
|
20
|
+
endoreg_db/data/report_reader_flag/ukw-examination-generic.yaml,sha256=AbYLl4D3BvEhvmXdjDECYIrf3eli9cg-MhPlb_jC6nM,742
|
|
21
|
+
endoreg_db/data/report_reader_flag/ukw-histology-generic.yaml,sha256=1iaUFiVt_ldCPGqud_znD2-AFgSfrZr_oncAONM9Ic0,493
|
|
19
22
|
endoreg_db/data/unit/data.yaml,sha256=t9D7xepTm_7g6q6MUacCigoCLI3_6R6WS3BaowI6tok,393
|
|
20
23
|
endoreg_db/data/unit/length.yaml,sha256=wzDD3ZgnNRSIjItLMScrx0ZsEmrrJKuY9rZi8t8jkaU,633
|
|
21
24
|
endoreg_db/data/unit/volume.yaml,sha256=JYRHRC6uAIe5TPkY8B2SfuEEIBEDePy7GXL2pWAGyUM,510
|
|
@@ -34,17 +37,20 @@ endoreg_db/management/commands/import_legacy_images.py,sha256=IcBmihG9rvqC37XgMg
|
|
|
34
37
|
endoreg_db/management/commands/import_legacy_videos.py,sha256=OHFTNb53RtznRyVay88vo83fkfafTiwTgUMieI70NX4,2732
|
|
35
38
|
endoreg_db/management/commands/load_active_model_data.py,sha256=NpWIksrVQIyrd-ZhI_B_34NFbLJI1_vhwuN6gXc8hgQ,1337
|
|
36
39
|
endoreg_db/management/commands/load_ai_model_data.py,sha256=rjC-yK8NNr0a0TDqvGHufI27ANQYTWDkWlSEWRkubGY,1329
|
|
37
|
-
endoreg_db/management/commands/load_base_db_data.py,sha256=
|
|
38
|
-
endoreg_db/management/commands/load_center_data.py,sha256=
|
|
40
|
+
endoreg_db/management/commands/load_base_db_data.py,sha256=Kx6Ld207NZg5tV8YDPoM_TCPvW6rjZrAlpktlyD-iWU,3146
|
|
41
|
+
endoreg_db/management/commands/load_center_data.py,sha256=Ra7BikibHJF4Ks72WNGwJqtbIw-9MieCxKlZG_RUA-s,1339
|
|
39
42
|
endoreg_db/management/commands/load_endoscope_type_data.py,sha256=zZbjSmsRxT5arZsi9TRh5sBFNyM99dywOFmYPMcL7Cw,1345
|
|
40
43
|
endoreg_db/management/commands/load_endoscopy_processor_data.py,sha256=j-lVR624IGTl5NXfePggQW6Qx0AOaSxvmVUjEtTEImw,1365
|
|
41
44
|
endoreg_db/management/commands/load_examination_data.py,sha256=kGGSRpHxvhugpKXpUMrttWYe9y81XOzyjgiBqV492KU,2748
|
|
42
45
|
endoreg_db/management/commands/load_information_source.py,sha256=3sL906AMa7FGO3bgrNbfJlptrEwv925n-X_XB4PDZ_Q,1347
|
|
43
46
|
endoreg_db/management/commands/load_label_data.py,sha256=0vSBzBweO-M7mjXJotg4q_W7gbcaBoilrnA9e7dyp8o,2217
|
|
47
|
+
endoreg_db/management/commands/load_pdf_type_data.py,sha256=sJeGI1M4Xwkagi7rModwUJH3MuQckZXdOkHekoAvRAw,1650
|
|
44
48
|
endoreg_db/management/commands/load_profession_data.py,sha256=oF3OF7zRqxA-SVpMW6e7LJ3MSfEc5Hoz1XlcvcFACRg,1321
|
|
49
|
+
endoreg_db/management/commands/load_report_reader_flag.py,sha256=pvqRgtcjaYTgx2Ce7HYnNzsUB48yJe9lXTk-lzfJUPI,1371
|
|
45
50
|
endoreg_db/management/commands/load_unit_data.py,sha256=tcux-iL-ByT2ApgmHEkLllZSEA3AGMK5l-ze2Mtty1Y,1319
|
|
46
51
|
endoreg_db/management/commands/load_user_groups.py,sha256=D7SK2FvZEHoE4TIXNGCjDw5_12MH9bpGZvoS7eEv0Os,1031
|
|
47
52
|
endoreg_db/management/commands/register_ai_model.py,sha256=e5hgEyLS-E98XWzINcZ79mgtHvZltmbmAmLYaNrcfQs,2544
|
|
53
|
+
endoreg_db/management/commands/reset_celery_schedule.py,sha256=U-m_FNRTw6LAwJoT9RUE4qrhmQXm7AyFToPcHYyJpIE,386
|
|
48
54
|
endoreg_db/migrations/0001_initial.py,sha256=dVrXpuzaaHkollKimmBl5WUw1ZTIx91AWXJ3wRr2mlI,33643
|
|
49
55
|
endoreg_db/migrations/0002_rawvideofile.py,sha256=EazXiUm61IJUxVi24pmzTFQJbfe-rzkfN5ZDULe-BLY,935
|
|
50
56
|
endoreg_db/migrations/0003_rawvideofile_frames_required.py,sha256=wrHZQs6QZjjjO4yfSVQPc_47ksO7z_TwT9drWPJy5uk,399
|
|
@@ -57,8 +63,18 @@ endoreg_db/migrations/0009_sensitivemeta_rawvideofile_sensitive_meta.py,sha256=p
|
|
|
57
63
|
endoreg_db/migrations/0010_rename_endoscope_serial_number_sensitivemeta_endoscope_sn.py,sha256=7kStqnOp3Z-FoDYaAvFcOwfAaAS0mcCmF3hFoUO7WQQ,420
|
|
58
64
|
endoreg_db/migrations/0011_rawvideofile_state_sensitive_data_retrieved.py,sha256=_Mw-OybAZrKsm0zD8iPVkgDv7-BKVxzFP5e_Bqnj5DI,460
|
|
59
65
|
endoreg_db/migrations/0012_rawvideofile_prediction_dir_and_more.py,sha256=iIP5k6SoUFQR4zrN27BOC0MIuErlgTn9LNTfDq86C7I,3769
|
|
66
|
+
endoreg_db/migrations/0013_rawpdffile.py,sha256=gFH0-0nl8wSAwJCa8VMqSUCvg8RRISKfWHuckHTt_3I,1502
|
|
67
|
+
endoreg_db/migrations/0014_pdftype_alter_rawpdffile_file_pdfmeta.py,sha256=tlcd1XiExztvQz7rpS4Zu336X43aYBNl6g0C2FYscf4,1475
|
|
68
|
+
endoreg_db/migrations/0015_rename_report_processed_rawpdffile_state_report_processed_and_more.py,sha256=Qny4MHBe5z5dgcbN_eOTKGalBFnr2OUuFpqmFgfb9Pg,974
|
|
69
|
+
endoreg_db/migrations/0016_rawpdffile_state_report_processing_required.py,sha256=q147Hcn4_XCQUNrspG9GFJYOaa-P_3KmfECIF3Tl17I,468
|
|
70
|
+
endoreg_db/migrations/0017_firstname_lastname_center_first_names_and_more.py,sha256=iSKCwcT06wYIgKv17MadQFfCtI3lvZwvaVBW3c0kmTQ,1255
|
|
71
|
+
endoreg_db/migrations/0018_reportreaderflag_reportreaderconfig.py,sha256=PK1Kh1TZWKbC9qcFxSsUHylRaxMqNbUvNw-gK8jPrNY,2203
|
|
72
|
+
endoreg_db/migrations/0019_pdftype_cut_off_above_lines_and_more.py,sha256=M1oQp29O2BmqEURH43Y2Zs3gzaO857Bra_id4Z3ItmI,1717
|
|
73
|
+
endoreg_db/migrations/0020_rename_endoscopy_info_line_pdftype_endoscope_info_line.py,sha256=g3XkBZHm7HdkRApkM14AANXNmWSkWQM4a4p9HRpXbZo,412
|
|
74
|
+
endoreg_db/migrations/0021_alter_pdftype_endoscope_info_line.py,sha256=B2OBG5O5XoWq3dnljOYd_LnTl45QEkSuJJY9JakB_Kc,606
|
|
75
|
+
endoreg_db/migrations/0022_alter_pdftype_endoscope_info_line.py,sha256=gbYOyECHsQ30oaYOb_g8K7tEbBUNeyTxZX81Aiz22UA,574
|
|
60
76
|
endoreg_db/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
61
|
-
endoreg_db/models/__init__.py,sha256=
|
|
77
|
+
endoreg_db/models/__init__.py,sha256=4JB1AyZj1n9q8exHOFNr93RVp0N_55-VLLb0a7Z8eJY,1045
|
|
62
78
|
endoreg_db/models/ai_model/__init__.py,sha256=rh5npLRGml5iiRocx359gsaA82pGJTW7wdVAfnbZP6w,106
|
|
63
79
|
endoreg_db/models/ai_model/active_model.py,sha256=r7SE3yg54kbjfOkk0Ei0rgs_Wo3ikx88rcEELqvRzGc,343
|
|
64
80
|
endoreg_db/models/ai_model/model_meta.py,sha256=YyYW8dScpAceHePnbrnRpgVBYDByi9x7u5Ydh03OJuo,869
|
|
@@ -67,18 +83,23 @@ endoreg_db/models/ai_model/utils.py,sha256=Vh6_3lbDuFhSVCaaZKKm0CjoGA5Man6gWYe46
|
|
|
67
83
|
endoreg_db/models/annotation/__init__.py,sha256=jM8ISS4hWciC9cFUCMo6fSkmCGUptWkX5lM46zNre2I,191
|
|
68
84
|
endoreg_db/models/annotation/binary_classification_annotation_task.py,sha256=CpvyDxLSJcoJyajtUsDGBt881SNSFcG8lvuQ01knMNM,3292
|
|
69
85
|
endoreg_db/models/annotation/image_classification.py,sha256=Og1tRo1QKBMztwfdbFryUWghnGdsTqQdepn9rOcmVMc,1387
|
|
70
|
-
endoreg_db/models/center.py,sha256=
|
|
71
|
-
endoreg_db/models/data_file/__init__.py,sha256=
|
|
86
|
+
endoreg_db/models/center.py,sha256=qTp-of40Z4uHQT0NX8x_lItqkS_FpSyieFcLDzyBVZw,728
|
|
87
|
+
endoreg_db/models/data_file/__init__.py,sha256=Q0RG-UyIAvqZrwErbtBznL52M-CrFx8OEmlFFS9vSqU,252
|
|
72
88
|
endoreg_db/models/data_file/base_classes/__init__.py,sha256=uyjViKV7N3K264xapYAOCpQx-zSwdRAN_oguUWQlq10,84
|
|
73
89
|
endoreg_db/models/data_file/base_classes/abstract_frame.py,sha256=wUGkPCYoOESfiragEEy6oMeGpdS2nzha6g2lBiK7pcA,2214
|
|
74
90
|
endoreg_db/models/data_file/base_classes/abstract_video.py,sha256=4OUgHWbHpESpSnZGSiA13nQwtvUDJweFwJPOuL8taAo,7406
|
|
75
91
|
endoreg_db/models/data_file/frame.py,sha256=-8O2yCfhTk2eMd3GB5PIPrO0i_oV6yk24UV-8Pvl2Ik,1935
|
|
76
|
-
endoreg_db/models/data_file/import_classes/__init__.py,sha256
|
|
77
|
-
endoreg_db/models/data_file/import_classes/processing_functions.py,sha256=
|
|
78
|
-
endoreg_db/models/data_file/import_classes/
|
|
79
|
-
endoreg_db/models/data_file/
|
|
80
|
-
endoreg_db/models/data_file/
|
|
81
|
-
endoreg_db/models/data_file/
|
|
92
|
+
endoreg_db/models/data_file/import_classes/__init__.py,sha256=f5f6dwDU8spd94dpDFUuQEJGGD--V_hjl_4v8hpKCX0,1168
|
|
93
|
+
endoreg_db/models/data_file/import_classes/processing_functions/__init__.py,sha256=uathXg8ckLb_XBTRipdHrBXFpZpvKzuouk7lwRN0aqE,932
|
|
94
|
+
endoreg_db/models/data_file/import_classes/processing_functions/pdf.py,sha256=lEd1V_kS8758XuRZ0gj7bVhY5DgTfpEyeDgX3zWHuzE,716
|
|
95
|
+
endoreg_db/models/data_file/import_classes/processing_functions/video.py,sha256=ij3fMdqnZnX1FrS-hscy_pfaYIkxDFKVL7SVjCqCUxs,8530
|
|
96
|
+
endoreg_db/models/data_file/import_classes/raw_pdf.py,sha256=E4uEway3_hwnFm71hHlneFD8NF7ZznK4yKicVwrBWqA,6509
|
|
97
|
+
endoreg_db/models/data_file/import_classes/raw_video.py,sha256=j2WLaqxVm86Oq_zKPRAncq3QavmAMP0p3ThalGjieaQ,12444
|
|
98
|
+
endoreg_db/models/data_file/metadata/__init__.py,sha256=Hcv1L5xDnONyERwn4jnj-vI4maYMAEZ9iFPQ8baNrl0,144
|
|
99
|
+
endoreg_db/models/data_file/metadata/pdf_meta.py,sha256=Ipi1LZo36UqP43trHfNY4hamyRWjenxiPg2f_W3di-k,2183
|
|
100
|
+
endoreg_db/models/data_file/metadata/sensitive_meta.py,sha256=o613V-jK8JiturSHymcwb2dNGsn_x4f1f3iJ9ZuGG-Y,1312
|
|
101
|
+
endoreg_db/models/data_file/metadata/video_meta.py,sha256=AYEv1m5cQ2qAdyJMBzcJqEG_vaVifXUl5CAYqQmUk5k,5354
|
|
102
|
+
endoreg_db/models/data_file/report_file.py,sha256=V1Eh8xGKUpruUifQAQqF4nd0WvLn6TlfT_nmjEsZhAc,3564
|
|
82
103
|
endoreg_db/models/data_file/video/__init__.py,sha256=3UUMcrlIZBeVGkt5hOvjUr2-VSxOTFE1miPTcmHF4v0,98
|
|
83
104
|
endoreg_db/models/data_file/video/import_meta.py,sha256=NTRYIZI8TeNoPmJhE0ZFljGIOf5CS9LbFcdYO0p4-mA,1311
|
|
84
105
|
endoreg_db/models/data_file/video/video.py,sha256=lx3Iu7pdsy_oGlrvKKY8V06ZSNNWcwPYjP5DgCE2MKA,673
|
|
@@ -98,16 +119,21 @@ endoreg_db/models/legacy_data/__init__.py,sha256=J0ewe30Y2qCxCUPktcFOm2WOEz2fQnw
|
|
|
98
119
|
endoreg_db/models/legacy_data/image.py,sha256=mKQed6AIJL2XauPB2GevHX6NXaR8gphundI9_IC9Hpc,1622
|
|
99
120
|
endoreg_db/models/patient_examination/__init__.py,sha256=s3ybaIdnvZDLKPnP1UctMRbao69yZowjmqjSYpfg1MI,1674
|
|
100
121
|
endoreg_db/models/permissions/__init__.py,sha256=p4C61oKuwKwYcN0EZ6SqBZDW0GCRO2VS-12whhOZBuY,1766
|
|
101
|
-
endoreg_db/models/persons/__init__.py,sha256=
|
|
122
|
+
endoreg_db/models/persons/__init__.py,sha256=R1NDUsXTb6cV4QAi9foVjxx22tKgAaN1Nk0GwsPOn2s,250
|
|
102
123
|
endoreg_db/models/persons/examiner/__init__.py,sha256=-e0mxzCacT04tOAg2NA2aKg6EbKvzuZPQR4E2MqMEfI,92
|
|
103
124
|
endoreg_db/models/persons/examiner/examiner.py,sha256=-eaRF42Qpr3Tj_XqYhz60noRJ5ndvpoZH_X3wM23rVc,422
|
|
104
125
|
endoreg_db/models/persons/examiner/examiner_type.py,sha256=wz9afexQBLl8oNJE40LYlKKgBux_Kv-lvviRxGqbwH4,72
|
|
126
|
+
endoreg_db/models/persons/first_name.py,sha256=L5K-f9B0mDuJdCPgyo8iDHCxEPEY8q4gj9aK1unP78U,456
|
|
127
|
+
endoreg_db/models/persons/last_name.py,sha256=wzBvqHtJRrSkaFnBR65DtB9xWjizFADjhKPFxDbT5pY,501
|
|
105
128
|
endoreg_db/models/persons/patient.py,sha256=uZS4TbzrM7CNY_cVlWe3tZq2khJCSQxZ5qsh_cOB1n4,2396
|
|
106
129
|
endoreg_db/models/persons/person.py,sha256=R4NSIeHwAh-K4ZU9ThzdY_tWT0zyCAy7vSaFW0WhAMg,1096
|
|
107
130
|
endoreg_db/models/persons/portal_user_information.py,sha256=cpiGkqwLLCYs7yu7Qv2oo7u0MoHXq8z7j-oGvHJDrbs,969
|
|
108
131
|
endoreg_db/models/prediction/__init__.py,sha256=1WBkYwM-h33AbZYCCnrPN3PYVhxATbITPocQgWxwMcI,145
|
|
109
132
|
endoreg_db/models/prediction/image_classification.py,sha256=uOR5Eu0eX3gVRO_tOWydnzrpzPwpmJCpYJUqe02bUNQ,1619
|
|
110
133
|
endoreg_db/models/prediction/video_prediction_meta.py,sha256=ICjOstujy5m8aqjh12ff2MUnYwopg-GGKuneD5RP_1U,9492
|
|
134
|
+
endoreg_db/models/report_reader/__init__.py,sha256=SKB-sGFDPkTmnNVTYx1w59gvW0T9hI-v2mTGvlDUK4Y,101
|
|
135
|
+
endoreg_db/models/report_reader/report_reader_config.py,sha256=ONlqtb4kBxWGHkX_eW6d_Jiwh0EtRPOH7jQT7759nuI,2353
|
|
136
|
+
endoreg_db/models/report_reader/report_reader_flag.py,sha256=j9tjbLRenxpWfeaseALl8rV2Dqem9YaM_duS1iJkARU,536
|
|
111
137
|
endoreg_db/models/unit.py,sha256=uiyIhZeRpr9XGh1uUEk0VILboNFBSK2IUi5GsQZ6ogc,774
|
|
112
138
|
endoreg_db/models.py,sha256=Vjc0p2XbAPgE6HyTF6vll98A4eDhA5AvaQqsc4kQ9AQ,57
|
|
113
139
|
endoreg_db/queries/__init__.py,sha256=3yhFtU_yY2L8rK2--8WkjcyI0q94QPpTtv5w_v8rZRY,83
|
|
@@ -140,15 +166,15 @@ endoreg_db/serializers/video.py,sha256=mZ2CsSxVGUXB0FR-CLjIZpE86z1tmFPXBrHbgYY3j
|
|
|
140
166
|
endoreg_db/tests.py,sha256=mrbGGRNg5jwbTJtWWa7zSKdDyeB4vmgZCRc2nk6VY-g,60
|
|
141
167
|
endoreg_db/utils/__init__.py,sha256=yj_2T_itUgmVW3nAqYLosTvga7J2eghkzbxLcEpYUl4,49
|
|
142
168
|
endoreg_db/utils/cropping.py,sha256=wMLo5sCFdZAEVBe3RbCH26eQjRe8q3th4K3ZKDd9fww,1143
|
|
143
|
-
endoreg_db/utils/dataloader.py,sha256
|
|
169
|
+
endoreg_db/utils/dataloader.py,sha256=NsUksaYQ5Kc95JwHlUFUUqvVle0zYxQY9nulxonBhYs,9129
|
|
144
170
|
endoreg_db/utils/file_operations.py,sha256=3mUY6jARIm927XK0nJoDO7fRp5quoSqPr95jDJERmr0,884
|
|
145
|
-
endoreg_db/utils/hashs.py,sha256=
|
|
171
|
+
endoreg_db/utils/hashs.py,sha256=mLae54Vj7h5Q-9_MWtEB_KKE7x9qALpClgZyX5DB9Ek,1069
|
|
146
172
|
endoreg_db/utils/legacy_ocr.py,sha256=c2EBP-9egUYyfsQ1n0QoZY2wKndWoKdEXrB-MQZ0Xn4,7633
|
|
147
173
|
endoreg_db/utils/ocr.py,sha256=jkdT1bl-LSCjZ2PvxlX1AG2TmhdMclayxUPrdZWs7UE,7322
|
|
148
174
|
endoreg_db/utils/uuid.py,sha256=T4HXqYtKwXFqE5kPyvlgWHyllBBF6LL6N48nl9TpwBk,53
|
|
149
175
|
endoreg_db/utils/video_metadata.py,sha256=HDyXxAeNQOK3cGzQ06xosmObzEnJBARuKjwz9vmmRIM,2613
|
|
150
176
|
endoreg_db/views.py,sha256=xc1IQHrsij7j33TUbo-_oewy3vs03pw_etpBWaMYJl0,63
|
|
151
|
-
endoreg_db-0.3.
|
|
152
|
-
endoreg_db-0.3.
|
|
153
|
-
endoreg_db-0.3.
|
|
154
|
-
endoreg_db-0.3.
|
|
177
|
+
endoreg_db-0.3.3.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
178
|
+
endoreg_db-0.3.3.dist-info/METADATA,sha256=9mq3jniFbZTPkAuTZfQC1AACEIrLmkuAv2Ziu-Bi1M0,976
|
|
179
|
+
endoreg_db-0.3.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
180
|
+
endoreg_db-0.3.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|