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 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
@@ -1,2 +1,2 @@
1
1
  # Do not change! Do not track in version control!
2
- __version__ = "0.3.1"
2
+ __version__ = "0.3.3"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: earthkit-workflows
3
- Version: 0.3.1
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=vbTeHpvorGnTR3LU_j_GG0exOHZDCbDPtAHDuaPSBXU,7084
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=w2X9irSOwbkSgwRbpAXps8YpISoSlhWU_Df4DN82KEc,3708
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=9hFWBL09VYa_AGad8HlcImH1F5wocwnWBbYnJeWTiQU,72
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.1.dist-info/licenses/LICENSE,sha256=73MJ7twXMKnWwmzmrMiFwUeY7c6JTvxphVggeUq9Sq4,11381
87
- earthkit_workflows-0.3.1.dist-info/METADATA,sha256=M2OT8EmhpvrAqW26_aiWpptmQb8lQSp8DyA8W8Cina0,1571
88
- earthkit_workflows-0.3.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
89
- earthkit_workflows-0.3.1.dist-info/top_level.txt,sha256=oNrH3Km3hK5kDkTOiM-8G8OQglvZcy-gUKy7rlooWXs,17
90
- earthkit_workflows-0.3.1.dist-info/RECORD,,
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,,