dv-flow-mgr 0.0.2.14148897378a1__py3-none-any.whl → 0.0.2.14149088756a1__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/task_node.py +3 -1
- dv_flow/mgr/task_node_leaf.py +6 -1
- dv_flow/mgr/task_run_ctxt.py +52 -0
- {dv_flow_mgr-0.0.2.14148897378a1.dist-info → dv_flow_mgr-0.0.2.14149088756a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-0.0.2.14148897378a1.dist-info → dv_flow_mgr-0.0.2.14149088756a1.dist-info}/RECORD +9 -8
- {dv_flow_mgr-0.0.2.14148897378a1.dist-info → dv_flow_mgr-0.0.2.14149088756a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.2.14148897378a1.dist-info → dv_flow_mgr-0.0.2.14149088756a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.2.14148897378a1.dist-info → dv_flow_mgr-0.0.2.14149088756a1.dist-info}/licenses/LICENSE +0 -0
- {dv_flow_mgr-0.0.2.14148897378a1.dist-info → dv_flow_mgr-0.0.2.14149088756a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/task_node.py
CHANGED
@@ -29,6 +29,7 @@ import logging
|
|
29
29
|
import toposort
|
30
30
|
from typing import Any, Callable, ClassVar, Dict, List, Tuple
|
31
31
|
from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
|
32
|
+
from .task_run_ctxt import TaskRunCtxt
|
32
33
|
from .param import Param
|
33
34
|
|
34
35
|
class RundirE(enum.Enum):
|
@@ -102,7 +103,7 @@ class TaskNode(object):
|
|
102
103
|
self._log.debug("<-- _matches: %s %s" % (self.name, consumed))
|
103
104
|
return consumed
|
104
105
|
|
105
|
-
def _save_exec_data(self, rundir, input : TaskDataInput):
|
106
|
+
def _save_exec_data(self, rundir, ctxt : TaskRunCtxt, input : TaskDataInput):
|
106
107
|
"""Saves execution data to the rundir"""
|
107
108
|
data = {
|
108
109
|
"name": self.name,
|
@@ -110,6 +111,7 @@ class TaskNode(object):
|
|
110
111
|
"rundir": rundir,
|
111
112
|
"input": input.model_dump(warnings=False),
|
112
113
|
"needs": [need[0].name for need in self.needs],
|
114
|
+
"commands": [cmd.dump_model() for cmd in ctxt._exec_info],
|
113
115
|
"result": {
|
114
116
|
"status": self.result.status,
|
115
117
|
"changed": self.result.changed,
|
dv_flow/mgr/task_node_leaf.py
CHANGED
@@ -9,6 +9,7 @@ from typing import Any, Callable, ClassVar, Dict, List, Tuple
|
|
9
9
|
from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
|
10
10
|
from .task_def import ConsumesE, PassthroughE
|
11
11
|
from .task_node import TaskNode
|
12
|
+
from .task_run_ctxt import TaskRunCtxt
|
12
13
|
from .param_ref_eval import ParamRefEval
|
13
14
|
from .param import Param
|
14
15
|
|
@@ -114,11 +115,15 @@ class TaskNodeLeaf(TaskNode):
|
|
114
115
|
params=self.params,
|
115
116
|
inputs=inputs,
|
116
117
|
memento=memento)
|
118
|
+
|
119
|
+
ctxt = TaskRunCtxt(runner=self, rundir=input.rundir)
|
117
120
|
|
118
121
|
self._log.debug("--> Call task method %s" % str(self.task))
|
119
122
|
self.result : TaskDataResult = await self.task(self, input)
|
120
123
|
self._log.debug("<-- Call task method %s" % str(self.task))
|
121
124
|
|
125
|
+
self.result.markers.extend(ctxt._markers)
|
126
|
+
|
122
127
|
output=self.result.output.copy()
|
123
128
|
for i,out in enumerate(output):
|
124
129
|
out.src = self.name
|
@@ -174,7 +179,7 @@ class TaskNodeLeaf(TaskNode):
|
|
174
179
|
output=output)
|
175
180
|
|
176
181
|
if self.save_exec_data:
|
177
|
-
self._save_exec_data(rundir, input)
|
182
|
+
self._save_exec_data(rundir, ctxt, input)
|
178
183
|
|
179
184
|
# TODO:
|
180
185
|
self._log.debug("<-- do_run: %s" % self.name)
|
@@ -0,0 +1,52 @@
|
|
1
|
+
import asyncio
|
2
|
+
import dataclasses as dc
|
3
|
+
from pydantic import BaseModel
|
4
|
+
import pydantic.dataclasses as pdc
|
5
|
+
import os
|
6
|
+
from typing import List
|
7
|
+
from .task_data import TaskMarker, SeverityE, TaskMarkerLoc
|
8
|
+
|
9
|
+
class ExecInfo(BaseModel):
|
10
|
+
cmd : List[str] = pdc.Field(default_factory=list)
|
11
|
+
status : int = pdc.Field(default=0)
|
12
|
+
|
13
|
+
@dc.dataclass
|
14
|
+
class TaskRunCtxt(object):
|
15
|
+
runner : 'TaskRunner'
|
16
|
+
rundir : str
|
17
|
+
_markers : List[TaskMarker] = dc.field(default_factory=list)
|
18
|
+
_exec_info : List[ExecInfo] = dc.field(default_factory=list)
|
19
|
+
|
20
|
+
async def exec(self,
|
21
|
+
cmd : List[str],
|
22
|
+
logfile=None,
|
23
|
+
logfilter=None,
|
24
|
+
cwd=None,
|
25
|
+
env=None):
|
26
|
+
if logfile is None:
|
27
|
+
logfile = "cmd_%d.log" % (self._exec_info.__len__() + 1)
|
28
|
+
|
29
|
+
fp = open(os.path.join(self.rundir, logfile), "w")
|
30
|
+
proc = await asyncio.create_subprocess_exec(
|
31
|
+
*cmd,
|
32
|
+
stdout=fp,
|
33
|
+
stderr=asyncio.subprocess.STDOUT,
|
34
|
+
cwd=(cwd if cwd is not None else self.rundir),
|
35
|
+
env=env)
|
36
|
+
fp.close()
|
37
|
+
|
38
|
+
status = await proc.wait()
|
39
|
+
|
40
|
+
self._exec_info.append(ExecInfo(cmd=cmd, status=status))
|
41
|
+
|
42
|
+
if status != 0:
|
43
|
+
self.error_marker("Command failed: %s" % " ".join(cmd))
|
44
|
+
|
45
|
+
def marker(self, msg : str, severity : SeverityE, loc : TaskMarkerLoc=None):
|
46
|
+
if loc is not None:
|
47
|
+
self._markers.append(TaskMarker(msg=msg, severity=severity, loc=loc))
|
48
|
+
else:
|
49
|
+
self._markers.append(TaskMarker(msg=msg, severity=severity))
|
50
|
+
|
51
|
+
def error(self, msg : str, loc : TaskMarkerLoc=None):
|
52
|
+
self.marker(msg=msg, severity=SeverityE.Error, loc=loc)
|
{dv_flow_mgr-0.0.2.14148897378a1.dist-info → dv_flow_mgr-0.0.2.14149088756a1.dist-info}/RECORD
RENAMED
@@ -19,7 +19,7 @@ dv_flow/mgr/task_def.py,sha256=Yf9bkWqSETeFUSbddbpvl2Cu3pyssvhdz0X2jxabniA,3751
|
|
19
19
|
dv_flow/mgr/task_graph_builder.py,sha256=Z14ySv1SFanFovR8HePwKglyFSzc6JsS8Z4RLmggM6c,15316
|
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=4LlMRQ30ZdIk-nZ0FCTfyrusrQWF9LQ1g3vhgMJXMcc,4981
|
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
25
|
dv_flow/mgr/task_node_ctor_compound.py,sha256=n2Ad1jtX147cb99HTlLrx_21XUn109bJ18zDXr0pn2Q,4259
|
@@ -28,9 +28,10 @@ dv_flow/mgr/task_node_ctor_def_base.py,sha256=_8QQHKDkONio_ve0Z409yxC0AMO8ocNBPD
|
|
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=f7LvifhUCRs94t_HpqJWyBygmjiN3KWgNjv-FaALj1s,7582
|
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
|
+
dv_flow/mgr/task_run_ctxt.py,sha256=ZyO0EzhWZ6uOAYhlByQQoYizyQWmJBSt8UhobTSb6n0,1728
|
34
35
|
dv_flow/mgr/task_runner.py,sha256=-919VntXAe2XSuFW2dFpgvUre-NkILBnDBbAKBZYn5w,9594
|
35
36
|
dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
37
|
dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
|
@@ -49,9 +50,9 @@ dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,
|
|
49
50
|
dv_flow/mgr/util/util.py,sha256=yg9oTPRiO87mkCSOQpOtlG9vyKPQzY3qp4OJkEMbWyY,1443
|
50
51
|
dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
51
52
|
dv_flow/mgr/util/cmds/cmd_schema.py,sha256=lrEI-Jwb8j4I4yYOn9hq7_7NYbK8leVxLesrHyEWm-E,1879
|
52
|
-
dv_flow_mgr-0.0.2.
|
53
|
-
dv_flow_mgr-0.0.2.
|
54
|
-
dv_flow_mgr-0.0.2.
|
55
|
-
dv_flow_mgr-0.0.2.
|
56
|
-
dv_flow_mgr-0.0.2.
|
57
|
-
dv_flow_mgr-0.0.2.
|
53
|
+
dv_flow_mgr-0.0.2.14149088756a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
54
|
+
dv_flow_mgr-0.0.2.14149088756a1.dist-info/METADATA,sha256=nHqGvVQydbFlAzyHjJhoWc51_cqtJzbUbjkWFVerQus,13336
|
55
|
+
dv_flow_mgr-0.0.2.14149088756a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
56
|
+
dv_flow_mgr-0.0.2.14149088756a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
57
|
+
dv_flow_mgr-0.0.2.14149088756a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
58
|
+
dv_flow_mgr-0.0.2.14149088756a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.2.14148897378a1.dist-info → dv_flow_mgr-0.0.2.14149088756a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|