dv-flow-mgr 0.0.1.14147547123a1__py3-none-any.whl → 0.0.2.14148837747a1__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.
- dv_flow/mgr/cmds/cmd_run.py +1 -1
- dv_flow/mgr/package_def.py +1 -2
- dv_flow/mgr/std/create_file.py +4 -0
- dv_flow/mgr/task_def.py +6 -3
- dv_flow/mgr/task_graph_builder.py +16 -9
- dv_flow/mgr/task_node.py +33 -2
- dv_flow/mgr/task_node_ctor_compound.py +2 -1
- dv_flow/mgr/task_node_leaf.py +3 -0
- {dv_flow_mgr-0.0.1.14147547123a1.dist-info → dv_flow_mgr-0.0.2.14148837747a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-0.0.1.14147547123a1.dist-info → dv_flow_mgr-0.0.2.14148837747a1.dist-info}/RECORD +14 -14
- {dv_flow_mgr-0.0.1.14147547123a1.dist-info → dv_flow_mgr-0.0.2.14148837747a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.14147547123a1.dist-info → dv_flow_mgr-0.0.2.14148837747a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.14147547123a1.dist-info → dv_flow_mgr-0.0.2.14148837747a1.dist-info}/licenses/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.14147547123a1.dist-info → dv_flow_mgr-0.0.2.14148837747a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/cmds/cmd_run.py
CHANGED
dv_flow/mgr/package_def.py
CHANGED
@@ -317,7 +317,7 @@ class PackageDef(BaseModel):
|
|
317
317
|
consumes = task.consumes.copy() if isinstance(task.consumes, list) else task.consumes
|
318
318
|
needs = [] if task.needs is None else task.needs.copy()
|
319
319
|
|
320
|
-
if
|
320
|
+
if base_ctor_t is not None:
|
321
321
|
if passthrough is None:
|
322
322
|
passthrough = base_ctor_t.passthrough
|
323
323
|
if consumes is None:
|
@@ -328,7 +328,6 @@ class PackageDef(BaseModel):
|
|
328
328
|
if consumes is None:
|
329
329
|
consumes = ConsumesE.All
|
330
330
|
|
331
|
-
|
332
331
|
return (passthrough, consumes, needs)
|
333
332
|
|
334
333
|
def _getParamT(self, session, task, base_t : BaseModel):
|
dv_flow/mgr/std/create_file.py
CHANGED
@@ -66,6 +66,10 @@ async def CreateFile(runner, input) -> TaskDataResult:
|
|
66
66
|
|
67
67
|
with open(filename, "w") as fp:
|
68
68
|
fp.write(input.params.content)
|
69
|
+
memento.name = input.params.filename
|
70
|
+
memento.hash = hashlib.md5(input.params.content.encode()).hexdigest()
|
71
|
+
else:
|
72
|
+
memento = ex_memento
|
69
73
|
|
70
74
|
fs = _FileSet(
|
71
75
|
filetype=input.params.type,
|
dv_flow/mgr/task_def.py
CHANGED
@@ -50,8 +50,9 @@ class PassthroughE(enum.Enum):
|
|
50
50
|
|
51
51
|
|
52
52
|
class StrategyDef(BaseModel):
|
53
|
-
|
54
|
-
|
53
|
+
chain: Union[bool, None] = dc.Field(default=None)
|
54
|
+
matrix : Union[Dict[str,List[Any]],None] = dc.Field(
|
55
|
+
default=None,
|
55
56
|
description="Matrix of parameter values to explore")
|
56
57
|
|
57
58
|
class TaskDef(BaseModel):
|
@@ -107,5 +108,7 @@ class TaskDef(BaseModel):
|
|
107
108
|
name=self.name,
|
108
109
|
type=self.type,
|
109
110
|
depends=self.depends.copy())
|
110
|
-
return ret
|
111
|
+
return ret
|
112
|
+
|
113
|
+
TaskDef.model_rebuild()
|
111
114
|
|
@@ -203,13 +203,21 @@ class TaskGraphBuilder(object):
|
|
203
203
|
if ctxt.rundir is None or ctxt.rundir == RundirE.Unique:
|
204
204
|
self._rundir_s.pop()
|
205
205
|
|
206
|
-
def mkTaskGraph(self, task : str) -> TaskNode:
|
206
|
+
def mkTaskGraph(self, task : str, rundir=None) -> TaskNode:
|
207
207
|
self._pkg_s.clear()
|
208
208
|
self._task_m.clear()
|
209
209
|
|
210
|
-
|
210
|
+
if rundir is not None:
|
211
|
+
self._rundir_s.append(rundir)
|
212
|
+
|
213
|
+
ret = self._mkTaskGraph(task)
|
214
|
+
|
215
|
+
if rundir is not None:
|
216
|
+
self._rundir_s.pop()
|
217
|
+
|
218
|
+
return ret
|
211
219
|
|
212
|
-
def _mkTaskGraph(self, task : str
|
220
|
+
def _mkTaskGraph(self, task : str) -> TaskNode:
|
213
221
|
|
214
222
|
elems = task.split(".")
|
215
223
|
|
@@ -224,8 +232,6 @@ class TaskGraphBuilder(object):
|
|
224
232
|
else:
|
225
233
|
pkg_spec = PackageSpec(pkg_name)
|
226
234
|
|
227
|
-
rundir = os.path.join(parent_rundir, pkg_name, task_name)
|
228
|
-
|
229
235
|
self._logger.debug("pkg_spec: %s" % str(pkg_spec))
|
230
236
|
self._pkg_spec_s.append(pkg_spec)
|
231
237
|
pkg = self.getPackage(pkg_spec)
|
@@ -243,7 +249,7 @@ class TaskGraphBuilder(object):
|
|
243
249
|
need_fullname = self._resolveNeedRef(need_def)
|
244
250
|
self._logger.debug("Searching for qualifed-name task %s" % need_fullname)
|
245
251
|
if not need_fullname in self._task_m.keys():
|
246
|
-
need_t = self._mkTaskGraph(need_fullname
|
252
|
+
need_t = self._mkTaskGraph(need_fullname)
|
247
253
|
self._task_m[need_fullname] = need_t
|
248
254
|
needs.append(self._task_m[need_fullname])
|
249
255
|
|
@@ -258,7 +264,7 @@ class TaskGraphBuilder(object):
|
|
258
264
|
params=params,
|
259
265
|
name=task,
|
260
266
|
needs=needs)
|
261
|
-
task.rundir = rundir
|
267
|
+
# task.rundir = rundir
|
262
268
|
|
263
269
|
self._task_m[task.name] = task
|
264
270
|
|
@@ -359,7 +365,7 @@ class TaskGraphBuilder(object):
|
|
359
365
|
need_fullname = self._resolveNeedRef(need_def)
|
360
366
|
self._logger.debug("Searching for qualifed-name task %s" % need_fullname)
|
361
367
|
if not need_fullname in self._task_m.keys():
|
362
|
-
need_t = self._mkTaskGraph(need_fullname
|
368
|
+
need_t = self._mkTaskGraph(need_fullname)
|
363
369
|
self._task_m[need_fullname] = need_t
|
364
370
|
needs.append(self._task_m[need_fullname])
|
365
371
|
|
@@ -371,13 +377,14 @@ class TaskGraphBuilder(object):
|
|
371
377
|
name=name,
|
372
378
|
srcdir=srcdir,
|
373
379
|
needs=needs)
|
380
|
+
ret.rundir = self.get_rundir(name)
|
374
381
|
else:
|
375
382
|
raise Exception("Failed to find ctor for task %s" % task_t)
|
376
383
|
self._pkg_s.pop()
|
377
384
|
self._logger.debug("<-- mkTaskNode: %s" % task_t)
|
378
385
|
return ret
|
379
386
|
|
380
|
-
def getTaskCtor(self, spec : Union[str,'TaskSpec'], pkg : PackageDef = None) -> '
|
387
|
+
def getTaskCtor(self, spec : Union[str,'TaskSpec'], pkg : PackageDef = None) -> 'TaskNodeCtor':
|
381
388
|
from .task_def import TaskSpec
|
382
389
|
if type(spec) == str:
|
383
390
|
spec = TaskSpec(spec)
|
dv_flow/mgr/task_node.py
CHANGED
@@ -20,6 +20,7 @@
|
|
20
20
|
#*
|
21
21
|
#****************************************************************************
|
22
22
|
import enum
|
23
|
+
import json
|
23
24
|
import os
|
24
25
|
import sys
|
25
26
|
import dataclasses as dc
|
@@ -27,7 +28,7 @@ import pydantic.dataclasses as pdc
|
|
27
28
|
import logging
|
28
29
|
import toposort
|
29
30
|
from typing import Any, Callable, ClassVar, Dict, List, Tuple
|
30
|
-
from .task_data import TaskDataOutput, TaskDataResult
|
31
|
+
from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
|
31
32
|
from .param import Param
|
32
33
|
|
33
34
|
class RundirE(enum.Enum):
|
@@ -49,11 +50,11 @@ class TaskNode(object):
|
|
49
50
|
consumes : List[Any] = dc.field(default_factory=list)
|
50
51
|
needs : List[Tuple['TaskNode',bool]] = dc.field(default_factory=list)
|
51
52
|
rundir : List[str] = dc.field(default=None)
|
52
|
-
# rundir_t : RundirE = dc.field(default=RundirE.Unique)
|
53
53
|
output : TaskDataOutput = dc.field(default=None)
|
54
54
|
result : TaskDataResult = dc.field(default=None)
|
55
55
|
start : float = dc.field(default=None)
|
56
56
|
end : float = dc.field(default=None)
|
57
|
+
save_exec_data : bool = dc.field(default=True)
|
57
58
|
|
58
59
|
_log : ClassVar = logging.getLogger("TaskNode")
|
59
60
|
|
@@ -101,6 +102,36 @@ class TaskNode(object):
|
|
101
102
|
self._log.debug("<-- _matches: %s %s" % (self.name, consumed))
|
102
103
|
return consumed
|
103
104
|
|
105
|
+
def _save_exec_data(self, rundir, input : TaskDataInput):
|
106
|
+
"""Saves execution data to the rundir"""
|
107
|
+
data = {
|
108
|
+
"name": self.name,
|
109
|
+
"srcdir": self.srcdir,
|
110
|
+
"rundir": rundir,
|
111
|
+
"input": input.model_dump(warnings=False),
|
112
|
+
"needs": [need[0].name for need in self.needs],
|
113
|
+
"result": {
|
114
|
+
"status": self.result.status,
|
115
|
+
"changed": self.result.changed,
|
116
|
+
"memento": self.result.memento.model_dump() if self.result.memento else None,
|
117
|
+
},
|
118
|
+
"output": self.output.model_dump(),
|
119
|
+
}
|
120
|
+
|
121
|
+
if isinstance(self.consumes, list):
|
122
|
+
data["consumes"] = self.consumes
|
123
|
+
else:
|
124
|
+
data["consumes"] = str(self.consumes)
|
125
|
+
|
126
|
+
if isinstance(self.passthrough, list):
|
127
|
+
data["passthrough"] = self.passthrough
|
128
|
+
else:
|
129
|
+
data["passthrough"] = str(self.passthrough)
|
130
|
+
|
131
|
+
with open(os.path.join(rundir, "%s.exec_data.json" % self.name), "w") as f:
|
132
|
+
json.dump(data, f, indent=2)
|
133
|
+
f.write("\n")
|
134
|
+
|
104
135
|
|
105
136
|
|
106
137
|
|
@@ -53,9 +53,10 @@ class TaskNodeCtorCompound(TaskNodeCtor):
|
|
53
53
|
params=params,
|
54
54
|
needs=needs)
|
55
55
|
# Use the compound task's rundir
|
56
|
-
node.input.rundir = builder.get_rundir()
|
57
56
|
|
58
57
|
builder.enter_compound(node, self.task_def.rundir)
|
58
|
+
node.input.rundir = builder.get_rundir()
|
59
|
+
print("input rundir: %s" % str(node.input.rundir))
|
59
60
|
builder.addTask("in", node.input)
|
60
61
|
|
61
62
|
self._buildSubGraph(builder, node)
|
dv_flow/mgr/task_node_leaf.py
CHANGED
{dv_flow_mgr-0.0.1.14147547123a1.dist-info → dv_flow_mgr-0.0.2.14148837747a1.dist-info}/RECORD
RENAMED
@@ -7,7 +7,7 @@ dv_flow/mgr/fileset.py,sha256=4izm4-qldWLiZxWDUa5Em0iFizzS-S-O0YU6zvtbUUs,1264
|
|
7
7
|
dv_flow/mgr/fragment_def.py,sha256=AHx3ITbiNbGCzlDk5FM8Iimm0GJnWXDDRAoRC1b41jM,1647
|
8
8
|
dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
|
9
9
|
dv_flow/mgr/package.py,sha256=9FhOu1hKYKzlD88zehwrI6KAcs1E7TbXDnq4v54dqDQ,1701
|
10
|
-
dv_flow/mgr/package_def.py,sha256=
|
10
|
+
dv_flow/mgr/package_def.py,sha256=iilJPa1zJoF5OkjdtBVro_fFImEbiJqPijFkYltut-o,20881
|
11
11
|
dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
|
12
12
|
dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
|
13
13
|
dv_flow/mgr/param_def.py,sha256=mkAw3DanIxcVWRYeh9lUAfUMkpqDFly_Ku_iobr4ix8,1745
|
@@ -15,30 +15,30 @@ dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ
|
|
15
15
|
dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
|
16
16
|
dv_flow/mgr/pkg_rgy.py,sha256=d1nIjRm3ymMNJT-yiMDxCS6bFisTPvLMqh5VrfsHVKM,5404
|
17
17
|
dv_flow/mgr/task_data.py,sha256=lN7Iq8YTitEMGG4rZqYQi6Ri2HuPgBQ5oGQbW-63T8c,12436
|
18
|
-
dv_flow/mgr/task_def.py,sha256=
|
19
|
-
dv_flow/mgr/task_graph_builder.py,sha256=
|
18
|
+
dv_flow/mgr/task_def.py,sha256=Yf9bkWqSETeFUSbddbpvl2Cu3pyssvhdz0X2jxabniA,3751
|
19
|
+
dv_flow/mgr/task_graph_builder.py,sha256=dZ4BBUfy158k8uHfzowpIpwf7lt-vleAmQWl66iu3As,15130
|
20
20
|
dv_flow/mgr/task_graph_dot_writer.py,sha256=GxqiYwQJbFgUQdnPCS9vpIYmYFbSXwnXCSbGmjbxC3M,2418
|
21
21
|
dv_flow/mgr/task_listener_log.py,sha256=hrJEjSRXXoovDTcD1Cmhi3Spzw7uEJ-WP6tv6JUaa6s,4060
|
22
|
-
dv_flow/mgr/task_node.py,sha256=
|
22
|
+
dv_flow/mgr/task_node.py,sha256=7lZKsTbOS0Cuhe-TyPj9Gcuh1a4k3sliRXW81R4UGCg,4851
|
23
23
|
dv_flow/mgr/task_node_compound.py,sha256=mNu4nf9hVqu2698ue5fpE3FeAOkvJH0Ke2W9V0G3-As,2975
|
24
24
|
dv_flow/mgr/task_node_ctor.py,sha256=COFGvm5PR2B92H3uW1yhDIUCmppo9U4IfOcv_Jrsreo,3952
|
25
|
-
dv_flow/mgr/task_node_ctor_compound.py,sha256=
|
25
|
+
dv_flow/mgr/task_node_ctor_compound.py,sha256=n2Ad1jtX147cb99HTlLrx_21XUn109bJ18zDXr0pn2Q,4259
|
26
26
|
dv_flow/mgr/task_node_ctor_compound_proxy.py,sha256=D8x54nD8Pd-2-_mr1syhqVeSFfIVf100ldi3bdzmSfI,2073
|
27
27
|
dv_flow/mgr/task_node_ctor_def_base.py,sha256=_8QQHKDkONio_ve0Z409yxC0AMO8ocNBPDjRiNED1FI,1503
|
28
28
|
dv_flow/mgr/task_node_ctor_proxy.py,sha256=ViOFJ64JM4-CGFZNl89BghFuKSQ66kZVqSj4v2PA6VA,1906
|
29
29
|
dv_flow/mgr/task_node_ctor_task.py,sha256=d49g90TyPCMFR8BuWWqp4ym-MW5vGSdDR0V47Ru28JY,2232
|
30
30
|
dv_flow/mgr/task_node_ctor_wrapper.py,sha256=Nb1CVcPHZofnb-iLWDHQWAxlTOdbRrnR9DdSxY8yOec,3626
|
31
|
-
dv_flow/mgr/task_node_leaf.py,sha256=
|
31
|
+
dv_flow/mgr/task_node_leaf.py,sha256=tI9m0GcaKsBccHmZCSTzc6vKyNgXezVB5vC28B75AFg,7416
|
32
32
|
dv_flow/mgr/task_output.py,sha256=ZwyvwnYj_gHOEFAEOH3m24Xfc4Cn77hb1j7LkX8_3C4,1086
|
33
33
|
dv_flow/mgr/task_params_ctor.py,sha256=BPkbnoCtzhCxc1g8CJ6VimCcm5UAu92PXeDMhQ4lYsQ,1957
|
34
34
|
dv_flow/mgr/task_runner.py,sha256=-919VntXAe2XSuFW2dFpgvUre-NkILBnDBbAKBZYn5w,9594
|
35
35
|
dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
36
|
dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
|
37
37
|
dv_flow/mgr/cmds/cmd_graph.py,sha256=Ykw__EdwamDBZZKxQZVbtMtFl7koq5dJMShTBXSM2pk,2672
|
38
|
-
dv_flow/mgr/cmds/cmd_run.py,sha256=
|
38
|
+
dv_flow/mgr/cmds/cmd_run.py,sha256=f0zt2OxGZC50aaDR7wGDH8YBk3rMQoBl8YeRHWcJUD0,3211
|
39
39
|
dv_flow/mgr/cmds/cmd_show.py,sha256=CZlgwB3Hcu-6HS-diqnWjCcPPpO-kjIIXU3DgWXvsf4,3773
|
40
40
|
dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
|
41
|
-
dv_flow/mgr/std/create_file.py,sha256=
|
41
|
+
dv_flow/mgr/std/create_file.py,sha256=TAUhpXlTmUDUYw4Dw0cI9FPuYI84yCVkoadnWZxi_8U,2888
|
42
42
|
dv_flow/mgr/std/exec.py,sha256=UChqa_tAjvdB1NjqTsvlPgFomP8hMsX2rAOPyUonNpk,3896
|
43
43
|
dv_flow/mgr/std/fileset.py,sha256=5IxS6T-x0wzA6fdEQcfHZ9kNP8IpH9hfJ3UMhL4A6Iw,3911
|
44
44
|
dv_flow/mgr/std/flow.dv,sha256=t8m-urWYhKEAOFhG4wlrMqGHwiWDyO8H-b6-5vNQkBk,3795
|
@@ -49,9 +49,9 @@ dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,
|
|
49
49
|
dv_flow/mgr/util/util.py,sha256=yg9oTPRiO87mkCSOQpOtlG9vyKPQzY3qp4OJkEMbWyY,1443
|
50
50
|
dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
51
51
|
dv_flow/mgr/util/cmds/cmd_schema.py,sha256=lrEI-Jwb8j4I4yYOn9hq7_7NYbK8leVxLesrHyEWm-E,1879
|
52
|
-
dv_flow_mgr-0.0.
|
53
|
-
dv_flow_mgr-0.0.
|
54
|
-
dv_flow_mgr-0.0.
|
55
|
-
dv_flow_mgr-0.0.
|
56
|
-
dv_flow_mgr-0.0.
|
57
|
-
dv_flow_mgr-0.0.
|
52
|
+
dv_flow_mgr-0.0.2.14148837747a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
53
|
+
dv_flow_mgr-0.0.2.14148837747a1.dist-info/METADATA,sha256=LrYCwf6jPAr1wJkBercc0PQSJ3BUAL0B4SYETCUeWW8,13336
|
54
|
+
dv_flow_mgr-0.0.2.14148837747a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
55
|
+
dv_flow_mgr-0.0.2.14148837747a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
56
|
+
dv_flow_mgr-0.0.2.14148837747a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
57
|
+
dv_flow_mgr-0.0.2.14148837747a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.1.14147547123a1.dist-info → dv_flow_mgr-0.0.2.14148837747a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|