earthkit-workflows 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.
- cascade/gateway/router.py +3 -1
- cascade/low/func.py +37 -0
- earthkit/workflows/_version.py +1 -1
- {earthkit_workflows-0.3.1.dist-info → earthkit_workflows-0.3.3.dist-info}/METADATA +1 -1
- {earthkit_workflows-0.3.1.dist-info → earthkit_workflows-0.3.3.dist-info}/RECORD +8 -8
- {earthkit_workflows-0.3.1.dist-info → earthkit_workflows-0.3.3.dist-info}/WHEEL +0 -0
- {earthkit_workflows-0.3.1.dist-info → earthkit_workflows-0.3.3.dist-info}/licenses/LICENSE +0 -0
- {earthkit_workflows-0.3.1.dist-info → earthkit_workflows-0.3.3.dist-info}/top_level.txt +0 -0
cascade/gateway/router.py
CHANGED
|
@@ -186,6 +186,8 @@ class JobRouter:
|
|
|
186
186
|
for job_id, proc in self.procs.items():
|
|
187
187
|
logger.debug(f"awaiting job {job_id}")
|
|
188
188
|
try:
|
|
189
|
+
proc.terminate()
|
|
189
190
|
proc.wait(2)
|
|
190
191
|
except subprocess.TimeoutExpired:
|
|
191
|
-
logger.error(f"{job_id=} failed to terminate")
|
|
192
|
+
logger.error(f"{job_id=} failed to terminate, killing")
|
|
193
|
+
proc.kill()
|
cascade/low/func.py
CHANGED
|
@@ -17,6 +17,7 @@ from typing import (
|
|
|
17
17
|
Generic,
|
|
18
18
|
Iterable,
|
|
19
19
|
Iterator,
|
|
20
|
+
Mapping,
|
|
20
21
|
NoReturn,
|
|
21
22
|
Optional,
|
|
22
23
|
Protocol,
|
|
@@ -155,3 +156,39 @@ def resolve_callable(s: str) -> Callable:
|
|
|
155
156
|
module_name, function_name = s.rsplit(".", 1)
|
|
156
157
|
module = importlib.import_module(module_name)
|
|
157
158
|
return module.__dict__[function_name]
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def pydantic_recursive_collect(
|
|
162
|
+
base: BaseModel | Iterable, attr: str, prefix: str = "."
|
|
163
|
+
) -> list[tuple[str, Any]]:
|
|
164
|
+
"""Recurse into base, visiting each sub-model, list, dictionary, etc, invoking `attr` if present
|
|
165
|
+
and collecting results. Assumes the `attr` has signature `Callable[[self], list[T]]`. The collected
|
|
166
|
+
results are (source, item), where item is returned by `attr` and source is the dot-separated path
|
|
167
|
+
of the issuer -- eg if base has BaseModel field `x` whose `attr` yields [1, 2], then this returns
|
|
168
|
+
[(.x, 1), (.x, 2)]
|
|
169
|
+
"""
|
|
170
|
+
|
|
171
|
+
# NOTE a bit ugly, instead of attr it would be better to accept a signature/protocol type
|
|
172
|
+
|
|
173
|
+
results: list[str] = []
|
|
174
|
+
if hasattr(base, attr):
|
|
175
|
+
results.extend((prefix, e) for e in getattr(base, attr)())
|
|
176
|
+
generator: Iterable[tuple[Any, Any]]
|
|
177
|
+
if isinstance(base, BaseModel):
|
|
178
|
+
generator = base
|
|
179
|
+
formatter = lambda k: f"{k}."
|
|
180
|
+
elif isinstance(base, Mapping):
|
|
181
|
+
generator = base.items()
|
|
182
|
+
formatter = lambda k: f"{k}."
|
|
183
|
+
elif isinstance(base, Iterable):
|
|
184
|
+
generator = enumerate(base)
|
|
185
|
+
formatter = lambda k: f"[{k}]."
|
|
186
|
+
else:
|
|
187
|
+
return results
|
|
188
|
+
for k, v in generator:
|
|
189
|
+
# we exclude the string as a circuit-breaker optimisation
|
|
190
|
+
if isinstance(v, str):
|
|
191
|
+
continue
|
|
192
|
+
if isinstance(v, BaseModel) or isinstance(v, Iterable):
|
|
193
|
+
results.extend(pydantic_recursive_collect(v, attr, prefix + formatter(k)))
|
|
194
|
+
return results
|
earthkit/workflows/_version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# Do not change! Do not track in version control!
|
|
2
|
-
__version__ = "0.3.
|
|
2
|
+
__version__ = "0.3.3"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: earthkit-workflows
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: Earthkit Workflows is a Python library for declaring earthkit task DAGs, as well as scheduling and executing them on heterogeneous computing systems.
|
|
5
5
|
Author-email: "European Centre for Medium-Range Weather Forecasts (ECMWF)" <software.support@ecmwf.int>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -29,13 +29,13 @@ cascade/gateway/__init__.py,sha256=1EzMKdLFXEucj0YWOlyVqLx4suOntitwM03T_rRubIk,8
|
|
|
29
29
|
cascade/gateway/__main__.py,sha256=OcT5Amo0tE1-3StHuTOeQCaABmMBO3XLDK4t4b8oeeQ,647
|
|
30
30
|
cascade/gateway/api.py,sha256=-7HTUhK9idszVCwiVwyHMcNx7n6qRcyPWsLx2e19n3A,2511
|
|
31
31
|
cascade/gateway/client.py,sha256=tc-BXDXb0h7gjLMveATR8yOFqFT9fd7fXdx3PjIcTHs,4022
|
|
32
|
-
cascade/gateway/router.py,sha256=
|
|
32
|
+
cascade/gateway/router.py,sha256=p1QT7cMAzLgmfvNYqEtENsnHPPzDbIXcnNuWoI5aejM,7154
|
|
33
33
|
cascade/gateway/server.py,sha256=srqmtOuzzon5GV5jR1wUVh744Ct336BQs5Gzd3mhsPA,3733
|
|
34
34
|
cascade/low/__init__.py,sha256=5cw2taOGITK_gFbICftzK2YLdEAnLUY5OzblFzdHss4,769
|
|
35
35
|
cascade/low/builders.py,sha256=_u5X8G_EF00hFt8Anv9AXo6yPf1O8MHDmqs2kKmREl0,7073
|
|
36
36
|
cascade/low/core.py,sha256=txya9rgks2b1ze9yLvFvrZCs8sCCtDUlfNwz4sHgybM,5994
|
|
37
37
|
cascade/low/execution_context.py,sha256=BJ9rc-vpm9eOLpAFFexEliUawr6r-DCDtFgTEKYftCA,6215
|
|
38
|
-
cascade/low/func.py,sha256=
|
|
38
|
+
cascade/low/func.py,sha256=ihL5n3cK-IJnATgP4Dub2m-Mp_jHMxJzCA1v4uMEsi8,5211
|
|
39
39
|
cascade/low/into.py,sha256=QvjrcBuHfu7qpEkeB0EJu1EAaRxOEZskUnyjkRJ_9gA,3391
|
|
40
40
|
cascade/low/tracing.py,sha256=qvGVKB1huwcYoyvMYN-2wQ92pLQTErocTjpIjWv9glA,4511
|
|
41
41
|
cascade/low/views.py,sha256=UwafO2EQHre17GjG8hdzO8b6qBRtTRtDlhOc1pTf8Io,1822
|
|
@@ -53,7 +53,7 @@ cascade/shm/disk.py,sha256=Fdl_pKOseaXroRp01OwqWVsdI-sSmiFizIFCdxBuMWM,2653
|
|
|
53
53
|
cascade/shm/func.py,sha256=ZWikgnSLCmbSoW2LDRJwtjxdwTxkR00OUHAsIRQ-ChE,638
|
|
54
54
|
cascade/shm/server.py,sha256=5Ub9bnBmDto9BwfjX3h3sJeiLzZN4lawgtLfvK-vcMU,5036
|
|
55
55
|
earthkit/workflows/__init__.py,sha256=f17AdiV9g4eRN8m4dUnSU58RoLRqk1e6iMRrQiBUSKk,1880
|
|
56
|
-
earthkit/workflows/_version.py,sha256=
|
|
56
|
+
earthkit/workflows/_version.py,sha256=JTDTUt1BYSv9yiR48Riwpm5YvK2xpFLe9Yl8KX1W8i0,72
|
|
57
57
|
earthkit/workflows/decorators.py,sha256=DM4QAtQ2glUUcDecwPkXcdlu4dio7MvgpcdmU5LYvD8,937
|
|
58
58
|
earthkit/workflows/fluent.py,sha256=OpN2ncU0UeIyvDcdMe4woH7ZGtUhxFMB3ZQTU0nCshU,30141
|
|
59
59
|
earthkit/workflows/mark.py,sha256=PdsXmRfhw1SyyJ74mzFPsLRqMCdlYv556fFX4bqlh9Y,1319
|
|
@@ -83,8 +83,8 @@ earthkit/workflows/graph/split.py,sha256=t-Sji5eZb01QO1szqmDNTodDDALqdo-0R0x1ESs
|
|
|
83
83
|
earthkit/workflows/graph/transform.py,sha256=BZ8n7ePUnuGgoHkMqZC3SLzifu4oq6q6t6vka0khFtg,3842
|
|
84
84
|
earthkit/workflows/graph/visit.py,sha256=MP-aFSqOl7aqJY2i7QTgY4epqb6yM7_lK3ofvOqfahw,1755
|
|
85
85
|
earthkit/workflows/plugins/__init__.py,sha256=WcX4qbEhgTXabIbogydtzNmZ2tB_SuW6NzNkOYQfS-Y,61
|
|
86
|
-
earthkit_workflows-0.3.
|
|
87
|
-
earthkit_workflows-0.3.
|
|
88
|
-
earthkit_workflows-0.3.
|
|
89
|
-
earthkit_workflows-0.3.
|
|
90
|
-
earthkit_workflows-0.3.
|
|
86
|
+
earthkit_workflows-0.3.3.dist-info/licenses/LICENSE,sha256=73MJ7twXMKnWwmzmrMiFwUeY7c6JTvxphVggeUq9Sq4,11381
|
|
87
|
+
earthkit_workflows-0.3.3.dist-info/METADATA,sha256=DVMvtcARGr5s402T0-LXONNHc-OZyZgT-8fkT6s-sVg,1571
|
|
88
|
+
earthkit_workflows-0.3.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
89
|
+
earthkit_workflows-0.3.3.dist-info/top_level.txt,sha256=oNrH3Km3hK5kDkTOiM-8G8OQglvZcy-gUKy7rlooWXs,17
|
|
90
|
+
earthkit_workflows-0.3.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|