dcicutils 8.13.3.1b11__py3-none-any.whl → 8.13.3.1b13__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.
- dcicutils/misc_utils.py +6 -0
- dcicutils/structured_data.py +9 -4
- {dcicutils-8.13.3.1b11.dist-info → dcicutils-8.13.3.1b13.dist-info}/METADATA +1 -1
- {dcicutils-8.13.3.1b11.dist-info → dcicutils-8.13.3.1b13.dist-info}/RECORD +7 -7
- {dcicutils-8.13.3.1b11.dist-info → dcicutils-8.13.3.1b13.dist-info}/LICENSE.txt +0 -0
- {dcicutils-8.13.3.1b11.dist-info → dcicutils-8.13.3.1b13.dist-info}/WHEEL +0 -0
- {dcicutils-8.13.3.1b11.dist-info → dcicutils-8.13.3.1b13.dist-info}/entry_points.txt +0 -0
dcicutils/misc_utils.py
CHANGED
@@ -5,6 +5,7 @@ This file contains functions that might be generally useful.
|
|
5
5
|
from collections import namedtuple
|
6
6
|
import appdirs
|
7
7
|
from copy import deepcopy
|
8
|
+
import concurrent.futures
|
8
9
|
import contextlib
|
9
10
|
import datetime
|
10
11
|
import functools
|
@@ -2779,3 +2780,8 @@ def create_short_uuid(length: Optional[int] = None, upper: bool = False):
|
|
2779
2780
|
if upper is True:
|
2780
2781
|
value = value.upper()
|
2781
2782
|
return value
|
2783
|
+
|
2784
|
+
|
2785
|
+
def run_concurrently(functions: List[Callable], nthreads: int = 4) -> None:
|
2786
|
+
with concurrent.futures.ThreadPoolExecutor(max_workers=nthreads) as executor:
|
2787
|
+
[_ for _ in concurrent.futures.as_completed([executor.submit(f) for f in functions])]
|
dcicutils/structured_data.py
CHANGED
@@ -57,7 +57,7 @@ class StructuredDataSet:
|
|
57
57
|
ref_lookup_nocache: bool = False,
|
58
58
|
norefs: bool = False, merge: bool = False,
|
59
59
|
progress: Optional[Callable] = None,
|
60
|
-
|
60
|
+
validator_hook: Optional[Callable] = None,
|
61
61
|
debug_sleep: Optional[str] = None) -> None:
|
62
62
|
self._progress = progress if callable(progress) else None
|
63
63
|
self._data = {}
|
@@ -76,7 +76,7 @@ class StructuredDataSet:
|
|
76
76
|
self._autoadd_properties = autoadd if isinstance(autoadd, dict) and autoadd else None
|
77
77
|
self._norefs = True if norefs is True else False
|
78
78
|
self._merge = True if merge is True else False # New merge functionality (2024-05-25)
|
79
|
-
self.
|
79
|
+
self._validator_hook = validator_hook if callable(validator_hook) else None # Testing support (2024-06-12)
|
80
80
|
self._debug_sleep = None
|
81
81
|
if debug_sleep:
|
82
82
|
try:
|
@@ -379,8 +379,13 @@ class StructuredDataSet:
|
|
379
379
|
structured_row_template = _StructuredRowTemplate(reader.header, schema)
|
380
380
|
structured_row = structured_row_template.create_row()
|
381
381
|
for column_name, value in row.items():
|
382
|
-
if self.
|
383
|
-
value = self.
|
382
|
+
if self._validator_hook:
|
383
|
+
value, validator_error = self._validator_hook(reader.sheet_name, column_name, value)
|
384
|
+
if validator_error:
|
385
|
+
self._note_error({
|
386
|
+
"src": create_dict(type=schema_name, row=reader.row_number),
|
387
|
+
"error": validator_error
|
388
|
+
}, "validation")
|
384
389
|
structured_row_template.set_value(structured_row, column_name, value, reader.file, reader.row_number)
|
385
390
|
if self._autoadd_properties:
|
386
391
|
self._add_properties(structured_row, self._autoadd_properties, schema)
|
@@ -45,7 +45,7 @@ dcicutils/license_policies/park-lab-gpl-pipeline.jsonc,sha256=vLZkwm3Js-kjV44nug
|
|
45
45
|
dcicutils/license_policies/park-lab-pipeline.jsonc,sha256=9qlY0ASy3iUMQlr3gorVcXrSfRHnVGbLhkS427UaRy4,283
|
46
46
|
dcicutils/license_utils.py,sha256=2Yxnh1T1iuMe6wluwbvpFO_zYSGPxB4-STAMc-vz-YM,47202
|
47
47
|
dcicutils/log_utils.py,sha256=7pWMc6vyrorUZQf-V-M3YC6zrPgNhuV_fzm9xqTPph0,10883
|
48
|
-
dcicutils/misc_utils.py,sha256=
|
48
|
+
dcicutils/misc_utils.py,sha256=p4MagJymETX_j4h-jx4IjjVb_dYHekWopfUK8ytw2Xs,109772
|
49
49
|
dcicutils/obfuscation_utils.py,sha256=fo2jOmDRC6xWpYX49u80bVNisqRRoPskFNX3ymFAmjw,5963
|
50
50
|
dcicutils/opensearch_utils.py,sha256=V2exmFYW8Xl2_pGFixF4I2Cc549Opwe4PhFi5twC0M8,1017
|
51
51
|
dcicutils/portal_object_utils.py,sha256=Az3n1aL-PQkN5gOFE6ZqC2XkYsqiwKlq7-tZggs1QN4,11062
|
@@ -66,7 +66,7 @@ dcicutils/secrets_utils.py,sha256=8dppXAsiHhJzI6NmOcvJV5ldvKkQZzh3Fl-cb8Wm7MI,19
|
|
66
66
|
dcicutils/sheet_utils.py,sha256=VlmzteONW5VF_Q4vo0yA5vesz1ViUah1MZ_yA1rwZ0M,33629
|
67
67
|
dcicutils/snapshot_utils.py,sha256=YDeI3vD-MhAtHwKDzfEm2q-n3l-da2yRpRR3xp0Ah1M,23021
|
68
68
|
dcicutils/ssl_certificate_utils.py,sha256=F0ifz_wnRRN9dfrfsz7aCp4UDLgHEY8LaK7PjnNvrAQ,9707
|
69
|
-
dcicutils/structured_data.py,sha256=
|
69
|
+
dcicutils/structured_data.py,sha256=1w832RpR6pKklRyV4KgMnTkL8PBlCOhwKZ8ED88dMjE,64761
|
70
70
|
dcicutils/submitr/progress_constants.py,sha256=5bxyX77ql8qEJearfHEvsvXl7D0GuUODW0T65mbRmnE,2895
|
71
71
|
dcicutils/submitr/ref_lookup_strategy.py,sha256=VJN-Oo0LLna6Vo2cu47eC-eU-yUC9NFlQP29xajejVU,4741
|
72
72
|
dcicutils/task_utils.py,sha256=MF8ujmTD6-O2AC2gRGPHyGdUrVKgtr8epT5XU8WtNjk,8082
|
@@ -75,8 +75,8 @@ dcicutils/trace_utils.py,sha256=g8kwV4ebEy5kXW6oOrEAUsurBcCROvwtZqz9fczsGRE,1769
|
|
75
75
|
dcicutils/validation_utils.py,sha256=cMZIU2cY98FYtzK52z5WUYck7urH6JcqOuz9jkXpqzg,14797
|
76
76
|
dcicutils/variant_utils.py,sha256=2H9azNx3xAj-MySg-uZ2SFqbWs4kZvf61JnK6b-h4Qw,4343
|
77
77
|
dcicutils/zip_utils.py,sha256=_Y9EmL3D2dUZhxucxHvrtmmlbZmK4FpSsHEb7rGSJLU,3265
|
78
|
-
dcicutils-8.13.3.
|
79
|
-
dcicutils-8.13.3.
|
80
|
-
dcicutils-8.13.3.
|
81
|
-
dcicutils-8.13.3.
|
82
|
-
dcicutils-8.13.3.
|
78
|
+
dcicutils-8.13.3.1b13.dist-info/LICENSE.txt,sha256=qnwSmfnEWMl5l78VPDEzAmEbLVrRqQvfUQiHT0ehrOo,1102
|
79
|
+
dcicutils-8.13.3.1b13.dist-info/METADATA,sha256=on2VP4DUbgF3RJTd79fbyg7hWNtcXU-R09K8jTmg_v4,3440
|
80
|
+
dcicutils-8.13.3.1b13.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
|
81
|
+
dcicutils-8.13.3.1b13.dist-info/entry_points.txt,sha256=W6kEWdUJk9tQ4myAgpehPdebcwvCAZ7UgB-wyPgDUMg,335
|
82
|
+
dcicutils-8.13.3.1b13.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|