endoreg-db 0.8.4.2__py3-none-any.whl → 0.8.4.4__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.
- endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml +23 -1
- endoreg_db/data/setup_config.yaml +38 -0
- endoreg_db/management/commands/load_ai_model_data.py +17 -15
- endoreg_db/management/commands/setup_endoreg_db.py +207 -39
- endoreg_db/models/medical/hardware/endoscopy_processor.py +10 -1
- endoreg_db/models/metadata/model_meta_logic.py +20 -52
- endoreg_db/models/metadata/sensitive_meta_logic.py +48 -143
- endoreg_db/services/video_import.py +173 -175
- endoreg_db/utils/setup_config.py +177 -0
- {endoreg_db-0.8.4.2.dist-info → endoreg_db-0.8.4.4.dist-info}/METADATA +1 -2
- {endoreg_db-0.8.4.2.dist-info → endoreg_db-0.8.4.4.dist-info}/RECORD +13 -11
- {endoreg_db-0.8.4.2.dist-info → endoreg_db-0.8.4.4.dist-info}/WHEEL +0 -0
- {endoreg_db-0.8.4.2.dist-info → endoreg_db-0.8.4.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Configuration loader for EndoReg DB setup.
|
|
3
|
+
Handles loading and parsing of setup configuration from YAML files.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import glob
|
|
7
|
+
import logging
|
|
8
|
+
import os
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any, Dict, List, Optional
|
|
11
|
+
|
|
12
|
+
import yaml
|
|
13
|
+
|
|
14
|
+
logger = logging.getLogger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class SetupConfig:
|
|
18
|
+
"""
|
|
19
|
+
Handles loading and accessing setup configuration from YAML files.
|
|
20
|
+
Provides methods to get model names, search patterns, and fallback configurations.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
def __init__(self, config_file: Optional[Path] = None):
|
|
24
|
+
"""
|
|
25
|
+
Initialize the setup configuration.
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
config_file: Path to the setup configuration YAML file.
|
|
29
|
+
If None, uses default location.
|
|
30
|
+
"""
|
|
31
|
+
if config_file is None:
|
|
32
|
+
# Default to setup_config.yaml in data directory
|
|
33
|
+
config_file = Path(__file__).parent.parent / "data" / "setup_config.yaml"
|
|
34
|
+
|
|
35
|
+
self.config_file = config_file
|
|
36
|
+
self._config = self._load_config()
|
|
37
|
+
|
|
38
|
+
def _load_config(self) -> Dict[str, Any]:
|
|
39
|
+
"""Load configuration from YAML file."""
|
|
40
|
+
try:
|
|
41
|
+
if self.config_file.exists():
|
|
42
|
+
with open(self.config_file, "r") as f:
|
|
43
|
+
config = yaml.safe_load(f)
|
|
44
|
+
logger.info(f"Loaded setup configuration from {self.config_file}")
|
|
45
|
+
return config or {}
|
|
46
|
+
else:
|
|
47
|
+
logger.warning(f"Setup config file not found: {self.config_file}")
|
|
48
|
+
return self._get_default_config()
|
|
49
|
+
except Exception as e:
|
|
50
|
+
logger.error(f"Error loading setup config: {e}")
|
|
51
|
+
return self._get_default_config()
|
|
52
|
+
|
|
53
|
+
def _get_default_config(self) -> Dict[str, Any]:
|
|
54
|
+
"""Return default configuration if file is not available."""
|
|
55
|
+
return {
|
|
56
|
+
"default_models": {
|
|
57
|
+
"primary_classification_model": "image_multilabel_classification_colonoscopy_default",
|
|
58
|
+
"primary_labelset": "multilabel_classification_colonoscopy_default",
|
|
59
|
+
},
|
|
60
|
+
"huggingface_fallback": {
|
|
61
|
+
"enabled": True,
|
|
62
|
+
"repo_id": "wg-lux/colo_segmentation_RegNetX800MF_base",
|
|
63
|
+
"filename": "colo_segmentation_RegNetX800MF_base.ckpt",
|
|
64
|
+
"labelset_name": "multilabel_classification_colonoscopy_default",
|
|
65
|
+
},
|
|
66
|
+
"weights_search_patterns": [
|
|
67
|
+
"colo_segmentation_RegNetX800MF_*.ckpt",
|
|
68
|
+
"image_multilabel_classification_colonoscopy_default_*.ckpt",
|
|
69
|
+
"*_colonoscopy_*.ckpt",
|
|
70
|
+
],
|
|
71
|
+
"weights_search_dirs": ["tests/assets", "assets", "data/storage/model_weights", "${STORAGE_DIR}/model_weights"],
|
|
72
|
+
"auto_generation_defaults": {
|
|
73
|
+
"activation": "sigmoid",
|
|
74
|
+
"mean": "0.485,0.456,0.406",
|
|
75
|
+
"std": "0.229,0.224,0.225",
|
|
76
|
+
"size_x": 224,
|
|
77
|
+
"size_y": 224,
|
|
78
|
+
"axes": "CHW",
|
|
79
|
+
"batchsize": 32,
|
|
80
|
+
"num_workers": 4,
|
|
81
|
+
},
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
def get_primary_model_name(self) -> str:
|
|
85
|
+
"""Get the primary classification model name."""
|
|
86
|
+
return self._config.get("default_models", {}).get("primary_classification_model", "image_multilabel_classification_colonoscopy_default")
|
|
87
|
+
|
|
88
|
+
def get_primary_labelset_name(self) -> str:
|
|
89
|
+
"""Get the primary labelset name."""
|
|
90
|
+
return self._config.get("default_models", {}).get("primary_labelset", "multilabel_classification_colonoscopy_default")
|
|
91
|
+
|
|
92
|
+
def get_huggingface_config(self) -> Dict[str, Any]:
|
|
93
|
+
"""Get HuggingFace fallback configuration."""
|
|
94
|
+
return self._config.get("huggingface_fallback", {})
|
|
95
|
+
|
|
96
|
+
def get_weights_search_patterns(self) -> List[str]:
|
|
97
|
+
"""Get weight file search patterns."""
|
|
98
|
+
return self._config.get("weights_search_patterns", ["colo_segmentation_RegNetX800MF_*.ckpt", "*_colonoscopy_*.ckpt"])
|
|
99
|
+
|
|
100
|
+
def get_weights_search_dirs(self) -> List[Path]:
|
|
101
|
+
"""
|
|
102
|
+
Get weight file search directories with environment variable substitution.
|
|
103
|
+
"""
|
|
104
|
+
dirs = self._config.get("weights_search_dirs", [])
|
|
105
|
+
resolved_dirs = []
|
|
106
|
+
|
|
107
|
+
for dir_str in dirs:
|
|
108
|
+
# Handle environment variable substitution
|
|
109
|
+
if "${" in dir_str:
|
|
110
|
+
dir_str = os.path.expandvars(dir_str)
|
|
111
|
+
|
|
112
|
+
resolved_dirs.append(Path(dir_str))
|
|
113
|
+
|
|
114
|
+
return resolved_dirs
|
|
115
|
+
|
|
116
|
+
def get_auto_generation_defaults(self) -> Dict[str, Any]:
|
|
117
|
+
"""Get default values for auto-generated metadata."""
|
|
118
|
+
return self._config.get("auto_generation_defaults", {})
|
|
119
|
+
|
|
120
|
+
def find_model_weights_files(self) -> List[Path]:
|
|
121
|
+
"""
|
|
122
|
+
Find model weight files using configured search patterns and directories.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
List of paths to found weight files
|
|
126
|
+
"""
|
|
127
|
+
found_files = []
|
|
128
|
+
search_dirs = self.get_weights_search_dirs()
|
|
129
|
+
search_patterns = self.get_weights_search_patterns()
|
|
130
|
+
|
|
131
|
+
for search_dir in search_dirs:
|
|
132
|
+
if not search_dir.exists():
|
|
133
|
+
continue
|
|
134
|
+
|
|
135
|
+
for pattern in search_patterns:
|
|
136
|
+
# Use glob to find files matching pattern
|
|
137
|
+
pattern_path = search_dir / pattern
|
|
138
|
+
matches = glob.glob(str(pattern_path))
|
|
139
|
+
for match in matches:
|
|
140
|
+
path = Path(match)
|
|
141
|
+
if path.exists() and path not in found_files:
|
|
142
|
+
found_files.append(path)
|
|
143
|
+
logger.info(f"Found weight file: {path}")
|
|
144
|
+
|
|
145
|
+
return found_files
|
|
146
|
+
|
|
147
|
+
def get_model_specific_config(self, model_name: str) -> Optional[Dict[str, Any]]:
|
|
148
|
+
"""
|
|
149
|
+
Get model-specific configuration from YAML metadata files.
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
model_name: Name of the model to get config for
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
Model-specific setup configuration if found
|
|
156
|
+
"""
|
|
157
|
+
# This would need to parse the ai_model_meta YAML files
|
|
158
|
+
# and extract setup_config sections for the specified model
|
|
159
|
+
try:
|
|
160
|
+
from endoreg_db.data import AI_MODEL_META_DATA_DIR
|
|
161
|
+
|
|
162
|
+
for yaml_file in AI_MODEL_META_DATA_DIR.glob("*.yaml"):
|
|
163
|
+
with open(yaml_file, "r") as f:
|
|
164
|
+
data = yaml.safe_load(f)
|
|
165
|
+
|
|
166
|
+
if isinstance(data, list):
|
|
167
|
+
for item in data:
|
|
168
|
+
if item.get("fields", {}).get("name") == model_name or item.get("fields", {}).get("model") == model_name:
|
|
169
|
+
return item.get("setup_config", {})
|
|
170
|
+
except Exception as e:
|
|
171
|
+
logger.warning(f"Error loading model-specific config for {model_name}: {e}")
|
|
172
|
+
|
|
173
|
+
return None
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
# Global instance for easy access
|
|
177
|
+
setup_config = SetupConfig()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: endoreg-db
|
|
3
|
-
Version: 0.8.4.
|
|
3
|
+
Version: 0.8.4.4
|
|
4
4
|
Summary: EndoReg Db Django App
|
|
5
5
|
Project-URL: Homepage, https://info.coloreg.de
|
|
6
6
|
Project-URL: Repository, https://github.com/wg-lux/endoreg-db
|
|
@@ -29,7 +29,6 @@ Requires-Dist: dotenv>=0.9.9
|
|
|
29
29
|
Requires-Dist: faker>=37.6.0
|
|
30
30
|
Requires-Dist: flake8>=7.3.0
|
|
31
31
|
Requires-Dist: gunicorn>=23.0.0
|
|
32
|
-
Requires-Dist: huggingface-hub>=0.35.3
|
|
33
32
|
Requires-Dist: icecream>=2.1.4
|
|
34
33
|
Requires-Dist: librosa==0.11.0
|
|
35
34
|
Requires-Dist: llvmlite>=0.44.0
|
|
@@ -18,13 +18,14 @@ endoreg_db/config/env.py,sha256=S244AQRkDP0PpP0MPaShgqeBJgI1BQknfER1_vUFMD4,2673
|
|
|
18
18
|
endoreg_db/data/__init__.py,sha256=Wqu24f5-FVKE5pis0wGDYsMHOTkieN40b10S5zU5240,5932
|
|
19
19
|
endoreg_db/data/db_summary.csv,sha256=K4PcufVHQ64H1i2MbCShMxReEa96I8cL6IfwCVpqF2M,1225
|
|
20
20
|
endoreg_db/data/db_summary.xlsx,sha256=pwsc_IcxNETNrYjDXjpSW83b8f-WsSunRDiJLZXENZ0,5829
|
|
21
|
+
endoreg_db/data/setup_config.yaml,sha256=ZlL_DwHNqdulPzfZzNDlsMEHC9hSrZZ3Ri9OUDJKXn8,1301
|
|
21
22
|
endoreg_db/data/ai_model/data.yaml,sha256=9XIRMS_meioGu-vYY6zUvz4RUXhRLdalaHhCTdaq4nA,306
|
|
22
23
|
endoreg_db/data/ai_model_label/label/data.yaml,sha256=qkt0FfrLvPrcW_N0GUzu3q9TpiXrvZU047xAIOk_33A,1737
|
|
23
24
|
endoreg_db/data/ai_model_label/label/polyp_classification.yaml,sha256=lHx2VwwVgKzOM_3PcuHuSIStgvMK6rHVi3WP67Qjv70,936
|
|
24
25
|
endoreg_db/data/ai_model_label/label-set/data.yaml,sha256=ocaxnkqiZgwi4sY561TbP_DEQWkPG1hBZ3olwPOqiXQ,789
|
|
25
26
|
endoreg_db/data/ai_model_label/label-set/polyp_classifications.yaml,sha256=GVmctJCgnr2lPUMttgPThNXoLcUl4XpliiuSjvE6h_Q,443
|
|
26
27
|
endoreg_db/data/ai_model_label/label-type/data.yaml,sha256=vffKYpTae_gu63_wza6LONs5ys4pna1EbrUUO6CafQs,136
|
|
27
|
-
endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml,sha256=
|
|
28
|
+
endoreg_db/data/ai_model_meta/default_multilabel_classification.yaml,sha256=VelCJXavWT4HYbPko1S8O1gv7wBZBsvz6r5FvjXTm2o,1196
|
|
28
29
|
endoreg_db/data/ai_model_type/data.yaml,sha256=vCMMo8wiI5uL2zrQROmgsHq1GrC8IdagGIgNdQunUeQ,149
|
|
29
30
|
endoreg_db/data/ai_model_video_segmentation_label/base_segmentation.yaml,sha256=EZ83vq02Cf2KfflWQ4HEe1NHmuzSCsmKtWW5Bv8jet0,4060
|
|
30
31
|
endoreg_db/data/ai_model_video_segmentation_labelset/data.yaml,sha256=07uB1ousJVNpp8B9enJ_YIdZf3y4sBPlME4bZwDv6ho,404
|
|
@@ -257,7 +258,7 @@ endoreg_db/management/commands/import_report.py,sha256=vFst-NeQdL-w62yoH4kDamq-2
|
|
|
257
258
|
endoreg_db/management/commands/import_video.py,sha256=AMvgi1eN0F_hjhgnNNYIFkJtHfjalBfh2lfDxw6VTzE,17980
|
|
258
259
|
endoreg_db/management/commands/import_video_with_classification.py,sha256=ulZH5jvAWu_pJ1kI9B3hbIO1-p_BReY0zbIQDS_d9OI,14726
|
|
259
260
|
endoreg_db/management/commands/init_default_ai_model.py,sha256=98yBigGZ5gkA-b1LPcvzS5x2jAms3pX58fU-TEAcjKw,4669
|
|
260
|
-
endoreg_db/management/commands/load_ai_model_data.py,sha256=
|
|
261
|
+
endoreg_db/management/commands/load_ai_model_data.py,sha256=O_mzGGcpnVacC4EZmEGbTp4EADNXJRsvaZoNFgh2wFU,2867
|
|
261
262
|
endoreg_db/management/commands/load_ai_model_label_data.py,sha256=jnm2720TsnRTBKF6guwnjLo7sropW_YoRjgyjo1TUr8,2143
|
|
262
263
|
endoreg_db/management/commands/load_base_db_data.py,sha256=0Go2cYbqfx6MBSeQaHPAq22yeJxOyX25xpmcBcE9Auw,9374
|
|
263
264
|
endoreg_db/management/commands/load_center_data.py,sha256=GQpbe7dxgbTgd66oBqrBXax-os3ibnPmCeSEFDVauPU,2570
|
|
@@ -290,7 +291,7 @@ endoreg_db/management/commands/load_unit_data.py,sha256=tcux-iL-ByT2ApgmHEkLllZS
|
|
|
290
291
|
endoreg_db/management/commands/load_user_groups.py,sha256=D7SK2FvZEHoE4TIXNGCjDw5_12MH9bpGZvoS7eEv0Os,1031
|
|
291
292
|
endoreg_db/management/commands/register_ai_model.py,sha256=KixTfuQR6TUfRmzB5GOos16BFOz7NL4TzLzBkgtPPgE,2510
|
|
292
293
|
endoreg_db/management/commands/reset_celery_schedule.py,sha256=U-m_FNRTw6LAwJoT9RUE4qrhmQXm7AyFToPcHYyJpIE,386
|
|
293
|
-
endoreg_db/management/commands/setup_endoreg_db.py,sha256=
|
|
294
|
+
endoreg_db/management/commands/setup_endoreg_db.py,sha256=C0ooVVmrzX-_ksoma3s3rZtJUcUsxvO4ddm1VhlYiiU,17640
|
|
294
295
|
endoreg_db/management/commands/start_filewatcher.py,sha256=3jESBqRiYPa9f35--zd70qQaYnyT0tzRO_b_HJuyteQ,4093
|
|
295
296
|
endoreg_db/management/commands/storage_management.py,sha256=NpToX59ndwTFNmnSoeppmiPdMvpjSHH7mAdIe4SvUoI,22396
|
|
296
297
|
endoreg_db/management/commands/summarize_db_content.py,sha256=pOIz3qbY4Ktmh0zV_DKFx971VD0pPx027gCD7a47EL0,10766
|
|
@@ -435,7 +436,7 @@ endoreg_db/models/medical/finding/finding_intervention.py,sha256=FBwjI15yitMpTXk
|
|
|
435
436
|
endoreg_db/models/medical/finding/finding_type.py,sha256=ohDEmLcgEpYjG5q0uhCaq2xQS8jH_rj4qyKQ2DUumqQ,1117
|
|
436
437
|
endoreg_db/models/medical/hardware/__init__.py,sha256=uX2-UpBzX2chpZEeCyqbv2BSrv3OZNG9PrB8sHEWpHQ,178
|
|
437
438
|
endoreg_db/models/medical/hardware/endoscope.py,sha256=8T8R2Bo2T29psQ3C_HTrhBogN8hiysuZkJOxUefqGoI,1657
|
|
438
|
-
endoreg_db/models/medical/hardware/endoscopy_processor.py,sha256=
|
|
439
|
+
endoreg_db/models/medical/hardware/endoscopy_processor.py,sha256=9HMTgODfJo36gDg4N3QtcH3_NOriOanwYMtIPTlULVk,6626
|
|
439
440
|
endoreg_db/models/medical/laboratory/__init__.py,sha256=595XF1ikkwzQWbUsyasU23v1kDRugrgTp3eUfrMd0UQ,62
|
|
440
441
|
endoreg_db/models/medical/laboratory/lab_value.py,sha256=uw4mjguVrqvsxQ-NzGO0DoNlSCaydI8KaJgUhuM16wo,20258
|
|
441
442
|
endoreg_db/models/medical/medication/__init__.py,sha256=BHh6ARvm2uVNswN12EQAEMFPnoGBiVwl7RCjKrW6C2I,761
|
|
@@ -464,10 +465,10 @@ endoreg_db/models/medical/risk/risk_type.py,sha256=kEugcaWSTEWH_Vxq4dcF80Iv1L4_K
|
|
|
464
465
|
endoreg_db/models/metadata/__init__.py,sha256=8I6oLj3YTmeaPGJpL0AWG5gLwp38QzrEggxSkTisv7c,474
|
|
465
466
|
endoreg_db/models/metadata/frame_ocr_result.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
466
467
|
endoreg_db/models/metadata/model_meta.py,sha256=F_r-PTLeNi4J-4EaGCQkGIguhdl7Bwba7_i56ZAjc-4,7589
|
|
467
|
-
endoreg_db/models/metadata/model_meta_logic.py,sha256=
|
|
468
|
+
endoreg_db/models/metadata/model_meta_logic.py,sha256=OhPImTQaB_a3p-h7iaxNNQkip5aaDDIOMXCV2TEyNmk,12215
|
|
468
469
|
endoreg_db/models/metadata/pdf_meta.py,sha256=BTmpSgqxmPKi0apcNjyrZAS4AFKCPXVdBd6VBeyyv6E,3174
|
|
469
470
|
endoreg_db/models/metadata/sensitive_meta.py,sha256=ekLHrW-b5uYcjfkRd0EW5ncx5ef8Bu-K6msDkpWCAbk,13034
|
|
470
|
-
endoreg_db/models/metadata/sensitive_meta_logic.py,sha256=
|
|
471
|
+
endoreg_db/models/metadata/sensitive_meta_logic.py,sha256=XN3x3p0cqLlzPSZl7e35JBUXr_QKYSq48vwF1N60N4U,32134
|
|
471
472
|
endoreg_db/models/metadata/video_meta.py,sha256=c6xWdLW3uNqJ5VPJXHCxXA3mbXw-b0uR54-TOS3qL2Q,14966
|
|
472
473
|
endoreg_db/models/metadata/video_prediction_logic.py,sha256=j5N82mHtiomeeIaf1HA65kT5d0htQfJmbI2bJb8mpxQ,7677
|
|
473
474
|
endoreg_db/models/metadata/video_prediction_meta.py,sha256=EyfctAAAVcW9L0gf76ZBc9-G8MLMcD-tc2kkjaaLH4w,10592
|
|
@@ -602,7 +603,7 @@ endoreg_db/services/pseudonym_service.py,sha256=CJhbtRa6K6SPbphgCZgEMi8AFQtB18CU
|
|
|
602
603
|
endoreg_db/services/requirements_object.py,sha256=290zf8AEbVtCoHhW4Jr7_ud-RvrqYmb1Nz9UBHtTnc0,6164
|
|
603
604
|
endoreg_db/services/segment_sync.py,sha256=YgHvIHkbW4mqCu0ACf3zjRSZnNfxWwt4gh5syUVXuE0,6400
|
|
604
605
|
endoreg_db/services/storage_aware_video_processor.py,sha256=kKFK64vXLeBSVkp1YJonU3gFDTeXZ8C4qb9QZZB99SE,13420
|
|
605
|
-
endoreg_db/services/video_import.py,sha256=
|
|
606
|
+
endoreg_db/services/video_import.py,sha256=quQ1z_hqJFcrq5pOeq74pqqmnS2I9ybJIh5D0v8qtOk,46514
|
|
606
607
|
endoreg_db/tasks/upload_tasks.py,sha256=OJq7DhNwcbWdXzHY8jz5c51BCVkPN5gSWOz-6Fx6W5M,7799
|
|
607
608
|
endoreg_db/tasks/video_ingest.py,sha256=kxFuYkHijINV0VabQKCFVpJRv6eCAw07tviONurDgg8,5265
|
|
608
609
|
endoreg_db/tasks/video_processing_tasks.py,sha256=rZ7Kr49bAR4Q-vALO2SURebrhcJ5hSFGwjF4aULrOao,14089
|
|
@@ -644,6 +645,7 @@ endoreg_db/utils/parse_and_generate_yaml.py,sha256=k7y0fl9Jbb_LNryeJYd6tebklRlu1
|
|
|
644
645
|
endoreg_db/utils/paths.py,sha256=ncXtB_l6FBVXXdk59U7v4FhSvLO7Yb0DQ-GQMcOqiTw,3398
|
|
645
646
|
endoreg_db/utils/permissions.py,sha256=IqxG9IqJBSZuxvT1ItVgGS8fMzkA2OLdDV6y8mKHSuo,5096
|
|
646
647
|
endoreg_db/utils/requirement_helpers.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
648
|
+
endoreg_db/utils/setup_config.py,sha256=yeDPStTEJm8Xy6ah5AJTpXMoPUyouxuPIsRUpqdiXf4,6775
|
|
647
649
|
endoreg_db/utils/translation.py,sha256=77Xel12pAGo0rQ0NxB7nfejvMb0GBjEmhC3I7mcU91I,1256
|
|
648
650
|
endoreg_db/utils/uuid.py,sha256=T4HXqYtKwXFqE5kPyvlgWHyllBBF6LL6N48nl9TpwBk,53
|
|
649
651
|
endoreg_db/utils/validate_endo_roi.py,sha256=Ct2H0JJW9gxYZc7099NYee4kxdKL90a3LGYahqibwms,925
|
|
@@ -786,7 +788,7 @@ endoreg_db/views/video/video_meta.py,sha256=C1wBMTtQb_yzEUrhFGAy2UHEWMk_CbU75WXX
|
|
|
786
788
|
endoreg_db/views/video/video_processing_history.py,sha256=mhFuS8RG5GV8E-lTtuD0qrq-bIpnUFp8vy9aERfC-J8,770
|
|
787
789
|
endoreg_db/views/video/video_remove_frames.py,sha256=2FmvNrSPM0fUXiBxINN6vBUUDCqDlBkNcGR3WsLDgKo,1696
|
|
788
790
|
endoreg_db/views/video/video_stream.py,sha256=kLyuf0ORTmsLeYUQkTQ6iRYqlIQozWhMMR3Lhfe_trk,12148
|
|
789
|
-
endoreg_db-0.8.4.
|
|
790
|
-
endoreg_db-0.8.4.
|
|
791
|
-
endoreg_db-0.8.4.
|
|
792
|
-
endoreg_db-0.8.4.
|
|
791
|
+
endoreg_db-0.8.4.4.dist-info/METADATA,sha256=GGQH5jWgXwF4K0rTdGb5jxxeVfRbbMdtmLf9b7MO_M0,14719
|
|
792
|
+
endoreg_db-0.8.4.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
793
|
+
endoreg_db-0.8.4.4.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
794
|
+
endoreg_db-0.8.4.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|