dv-flow-mgr 1.9.15008554401rc0__py3-none-any.whl → 1.9.15098282600rc0__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/__init__.py +1 -1
- dv_flow/mgr/exec_callable.py +1 -0
- dv_flow/mgr/ext_rgy.py +3 -0
- dv_flow/mgr/package_loader.py +4 -0
- dv_flow/mgr/shell_callable.py +27 -1
- dv_flow/mgr/task_graph_builder.py +8 -3
- dv_flow/mgr/task_node_ctxt.py +2 -0
- dv_flow/mgr/task_run_ctxt.py +8 -1
- dv_flow/mgr/task_runner.py +6 -0
- {dv_flow_mgr-1.9.15008554401rc0.dist-info → dv_flow_mgr-1.9.15098282600rc0.dist-info}/METADATA +1 -1
- {dv_flow_mgr-1.9.15008554401rc0.dist-info → dv_flow_mgr-1.9.15098282600rc0.dist-info}/RECORD +15 -15
- {dv_flow_mgr-1.9.15008554401rc0.dist-info → dv_flow_mgr-1.9.15098282600rc0.dist-info}/WHEEL +1 -1
- {dv_flow_mgr-1.9.15008554401rc0.dist-info → dv_flow_mgr-1.9.15098282600rc0.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-1.9.15008554401rc0.dist-info → dv_flow_mgr-1.9.15098282600rc0.dist-info}/licenses/LICENSE +0 -0
- {dv_flow_mgr-1.9.15008554401rc0.dist-info → dv_flow_mgr-1.9.15098282600rc0.dist-info}/top_level.txt +0 -0
dv_flow/mgr/__init__.py
CHANGED
dv_flow/mgr/exec_callable.py
CHANGED
dv_flow/mgr/ext_rgy.py
CHANGED
@@ -98,6 +98,9 @@ class ExtRgy(object):
|
|
98
98
|
|
99
99
|
# Register built-in shells
|
100
100
|
self._shell_m["shell"] = ShellCallable
|
101
|
+
self._shell_m["bash"] = ShellCallable
|
102
|
+
self._shell_m["csh"] = ShellCallable
|
103
|
+
self._shell_m["tcsh"] = ShellCallable
|
101
104
|
self._shell_m["pytask"] = ExecCallable
|
102
105
|
|
103
106
|
|
dv_flow/mgr/package_loader.py
CHANGED
@@ -225,6 +225,7 @@ class PackageScope(SymbolScope):
|
|
225
225
|
class PackageLoader(object):
|
226
226
|
pkg_rgy : ExtRgy = dc.field(default=None)
|
227
227
|
marker_listeners : List[Callable] = dc.field(default_factory=list)
|
228
|
+
env : Dict[str, str] = dc.field(default=None)
|
228
229
|
_log : ClassVar = logging.getLogger("PackageLoader")
|
229
230
|
_file_s : List[str] = dc.field(default_factory=list)
|
230
231
|
_pkg_s : List[PackageScope] = dc.field(default_factory=list)
|
@@ -236,6 +237,9 @@ class PackageLoader(object):
|
|
236
237
|
if self.pkg_rgy is None:
|
237
238
|
self.pkg_rgy = ExtRgy.inst()
|
238
239
|
|
240
|
+
if self.env is None:
|
241
|
+
self.env = os.environ.copy()
|
242
|
+
|
239
243
|
self._loader_scope = LoaderScope(name=None, loader=self)
|
240
244
|
|
241
245
|
def load(self, root) -> Package:
|
dv_flow/mgr/shell_callable.py
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
import asyncio
|
1
2
|
import dataclasses as dc
|
2
3
|
import logging
|
4
|
+
import os
|
3
5
|
from typing import ClassVar, List
|
4
6
|
from .task_data import TaskDataResult
|
5
7
|
|
@@ -10,5 +12,29 @@ class ShellCallable(object):
|
|
10
12
|
_log : ClassVar = logging.getLogger("ShellCallable")
|
11
13
|
|
12
14
|
async def __call__(self, ctxt, input):
|
13
|
-
|
15
|
+
|
16
|
+
shell = ("/bin/%s" % self.shell) if self.shell != "shell" else "/bin/sh"
|
17
|
+
# Setup environment for the call
|
18
|
+
env = ctxt.env.copy()
|
19
|
+
env["TASK_SRCDIR"] = input.srcdir
|
20
|
+
env["TASK_RUNDIR"] = input.rundir
|
21
|
+
# env["TASK_PARAMS"] = input.params.dumpto_json()
|
22
|
+
fp = open(os.path.join(input.rundir, "%s.log" % input.name), "w")
|
23
|
+
|
24
|
+
proc = await asyncio.create_subprocess_shell(
|
25
|
+
self.body,
|
26
|
+
shell=self.shell,
|
27
|
+
env=env,
|
28
|
+
cwd=input.rundir,
|
29
|
+
stdout=fp,
|
30
|
+
stderr=asyncio.subprocess.STDOUT)
|
31
|
+
|
32
|
+
status = await proc.wait()
|
33
|
+
|
34
|
+
fp.close()
|
35
|
+
|
36
|
+
return TaskDataResult(
|
37
|
+
status=status
|
38
|
+
)
|
39
|
+
|
14
40
|
|
@@ -67,6 +67,7 @@ class TaskGraphBuilder(object):
|
|
67
67
|
rundir : str
|
68
68
|
loader : PackageLoader = None
|
69
69
|
marker_l : Callable = lambda *args, **kwargs: None
|
70
|
+
env : Dict[str, str] = dc.field(default=None)
|
70
71
|
_pkg_m : Dict[PackageSpec,Package] = dc.field(default_factory=dict)
|
71
72
|
_pkg_params_m : Dict[str,Any] = dc.field(default_factory=dict)
|
72
73
|
_pkg_spec_s : List[PackageDef] = dc.field(default_factory=list)
|
@@ -94,7 +95,10 @@ class TaskGraphBuilder(object):
|
|
94
95
|
self._shell_m.update(ExtRgy.inst()._shell_m)
|
95
96
|
self._task_rundir_s.append([self.rundir])
|
96
97
|
|
97
|
-
self.
|
98
|
+
if self.env is None:
|
99
|
+
self.env = os.environ.copy()
|
100
|
+
|
101
|
+
self._eval.set("env", self.env)
|
98
102
|
|
99
103
|
|
100
104
|
|
@@ -104,7 +108,8 @@ class TaskGraphBuilder(object):
|
|
104
108
|
|
105
109
|
self._ctxt = TaskNodeCtxt(
|
106
110
|
root_pkgdir=self.root_pkg.basedir,
|
107
|
-
root_rundir=self.rundir
|
111
|
+
root_rundir=self.rundir,
|
112
|
+
env=self.env)
|
108
113
|
|
109
114
|
self._eval.set("root", {
|
110
115
|
"dir": self.root_pkg.basedir
|
@@ -690,7 +695,7 @@ class TaskGraphBuilder(object):
|
|
690
695
|
shell = task.shell if task.shell is not None else "shell"
|
691
696
|
if shell in self._shell_m.keys():
|
692
697
|
self._log.debug("Use shell implementation")
|
693
|
-
callable = self._shell_m[shell](task.run)
|
698
|
+
callable = self._shell_m[shell](task.run, task.shell)
|
694
699
|
else:
|
695
700
|
raise Exception("Shell %s not found" % shell)
|
696
701
|
|
dv_flow/mgr/task_node_ctxt.py
CHANGED
dv_flow/mgr/task_run_ctxt.py
CHANGED
@@ -3,7 +3,7 @@ import dataclasses as dc
|
|
3
3
|
from pydantic import BaseModel
|
4
4
|
import pydantic.dataclasses as pdc
|
5
5
|
import os
|
6
|
-
from typing import List
|
6
|
+
from typing import Dict, List
|
7
7
|
from .task_data import TaskMarker, SeverityE, TaskMarkerLoc
|
8
8
|
from .task_node_ctxt import TaskNodeCtxt
|
9
9
|
|
@@ -28,6 +28,10 @@ class TaskRunCtxt(object):
|
|
28
28
|
def root_rundir(self):
|
29
29
|
return self.ctxt.root_rundir
|
30
30
|
|
31
|
+
@property
|
32
|
+
def env(self):
|
33
|
+
return self.ctxt.env if self.ctxt is not None else os.environ
|
34
|
+
|
31
35
|
def mkDataItem(self, type, **kwargs):
|
32
36
|
"""
|
33
37
|
Create a data item in the task's rundir. The data item will be
|
@@ -66,6 +70,9 @@ class TaskRunCtxt(object):
|
|
66
70
|
if logfile is None:
|
67
71
|
logfile = "cmd_%d.log" % (self._exec_info.__len__() + 1)
|
68
72
|
|
73
|
+
if env is None:
|
74
|
+
env = self._env
|
75
|
+
|
69
76
|
fp = open(os.path.join(self.rundir, logfile), "w")
|
70
77
|
proc = await asyncio.create_subprocess_exec(
|
71
78
|
*cmd,
|
dv_flow/mgr/task_runner.py
CHANGED
@@ -34,12 +34,17 @@ from .task_node import TaskNode, RundirE
|
|
34
34
|
@dc.dataclass
|
35
35
|
class TaskRunner(object):
|
36
36
|
rundir : str
|
37
|
+
env : Dict[str, str] = dc.field(default=None)
|
37
38
|
|
38
39
|
# List of [Listener:Callable[Task],Recurisve:bool]
|
39
40
|
listeners : List[Tuple[Callable['Task','Reason'], bool]] = dc.field(default_factory=list)
|
40
41
|
|
41
42
|
_log : ClassVar = logging.getLogger("TaskRunner")
|
42
43
|
|
44
|
+
def __post_init__(self):
|
45
|
+
if self.env is None:
|
46
|
+
self.env = os.environ.copy()
|
47
|
+
|
43
48
|
def add_listener(self, l, recursive=False):
|
44
49
|
self.listeners.append((l, recursive))
|
45
50
|
|
@@ -68,6 +73,7 @@ class TaskSetRunner(TaskRunner):
|
|
68
73
|
_log : ClassVar = logging.getLogger("TaskSetRunner")
|
69
74
|
|
70
75
|
def __post_init__(self):
|
76
|
+
super().__post_init__()
|
71
77
|
if self.nproc == -1:
|
72
78
|
self.nproc = os.cpu_count()
|
73
79
|
|
{dv_flow_mgr-1.9.15008554401rc0.dist-info → dv_flow_mgr-1.9.15098282600rc0.dist-info}/RECORD
RENAMED
@@ -1,15 +1,15 @@
|
|
1
|
-
dv_flow/mgr/__init__.py,sha256=
|
1
|
+
dv_flow/mgr/__init__.py,sha256=wbon6N-qG1wXMKxECf0ccm5tx7GD9nbmDRQCKBZ1WC4,1315
|
2
2
|
dv_flow/mgr/__main__.py,sha256=BogNdBkXhgg05E8_IumNkVoag6WwvfbpiI8346oOtPo,3844
|
3
3
|
dv_flow/mgr/cond_def.py,sha256=2ZkzPusqVkN1fFMTvkDl9O_OJLPdD_cK3xzX9J75RMw,343
|
4
4
|
dv_flow/mgr/config.py,sha256=b2MVlVVNB0psk8x4bQRAYshkpNJrtyMtV1Ymhmx9AfM,137
|
5
5
|
dv_flow/mgr/config_def.py,sha256=N5nBc_2VPrx0pCDyIe-VPhQ7ItnbyJqrak3ZiPEAbtI,1040
|
6
6
|
dv_flow/mgr/data_callable.py,sha256=-GeMgBUdUEcdAkWsqvUYcpKqUd5BQsFgi6ARflnp2B8,687
|
7
7
|
dv_flow/mgr/eval_jq.py,sha256=bRsHtaN51qIOiZK1VJV52W0-vj5VH0nQ7XIFebZi5kI,1129
|
8
|
-
dv_flow/mgr/exec_callable.py,sha256=
|
8
|
+
dv_flow/mgr/exec_callable.py,sha256=tB2kBJeBPvq8pYOnZCaCvTYeu_MiezFfHUEqTAW3GQA,3143
|
9
9
|
dv_flow/mgr/exec_gen_callable.py,sha256=KLAKgu0c6nrEzfy85qeogH64VOFDBa6anslSBajykOE,3039
|
10
10
|
dv_flow/mgr/expr_eval.py,sha256=ojHo3U_QGqm0CWVSEGtFJRo3jrjiTKhy_B58yRNxN8g,4814
|
11
11
|
dv_flow/mgr/expr_parser.py,sha256=LMLe4RTbgcQVIpuZIi1vowHsKRgRmzKzomGvlJL8kJI,7110
|
12
|
-
dv_flow/mgr/ext_rgy.py,sha256=
|
12
|
+
dv_flow/mgr/ext_rgy.py,sha256=UD7nvMF5g3GiSYr7iLbk68_67UwzqUE7vsKCTaFrQr8,5788
|
13
13
|
dv_flow/mgr/extend_def.py,sha256=Ndh4z4XqqimtoS8-6ZNMDOvkVpVmEaWZsNEPM26PDZ0,653
|
14
14
|
dv_flow/mgr/fileset.py,sha256=kSjz-RiuQdKGMVjmbGK5YlwY-vJKSHmgggu-1_H0DHU,1320
|
15
15
|
dv_flow/mgr/fragment_def.py,sha256=2qx6KWiHCDvnb9JXnqIOb4n6kemAClAYuBoM6ex6xJE,1696
|
@@ -21,7 +21,7 @@ dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
|
|
21
21
|
dv_flow/mgr/package.py,sha256=qz17dfKW3csOiACUe4TqrOnd8Z2d_DxYbLmP0OwhKZ8,4580
|
22
22
|
dv_flow/mgr/package_def.py,sha256=h3_FIKQB0vqfcu1jRAZuB8W8Kozr62oaKNchxeNjpWk,5898
|
23
23
|
dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
|
24
|
-
dv_flow/mgr/package_loader.py,sha256=
|
24
|
+
dv_flow/mgr/package_loader.py,sha256=TFvx4bqVXKWoRTopy4Qz8-tSkSsAC5GRK3KMoNTiE9E,35010
|
25
25
|
dv_flow/mgr/package_node.py,sha256=CccD2ECiIXy9JBkRR3c7qDxeBiLiPbRT9CqR-Al_niI,214
|
26
26
|
dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
|
27
27
|
dv_flow/mgr/param_def.py,sha256=9uO-7UI4OotYixQBo8Nwb2o8FQRFxxJylYCZm9rjt48,1917
|
@@ -30,13 +30,13 @@ dv_flow/mgr/parser.out,sha256=mWx6hgqORUFhM2OlxV2gp43Y7w3sX2u4ua4t-5wqmck,27566
|
|
30
30
|
dv_flow/mgr/parsetab.py,sha256=S2o2FfobhhVWKwZg_GA7zFg62VwT7tiRxxNZJIyqP98,4351
|
31
31
|
dv_flow/mgr/pytask_callable.py,sha256=JiFN2vq6qanI6FXJBeidwiBSn6t0oC0izPJ01c5QJTE,688
|
32
32
|
dv_flow/mgr/root_package.py,sha256=nYLOpZVQEDbY0Ui5X5UNeUHXOvqRENew7B2zpC2V2gQ,136
|
33
|
-
dv_flow/mgr/shell_callable.py,sha256=
|
33
|
+
dv_flow/mgr/shell_callable.py,sha256=2b51yewHTFsoDMAldaB44ZMXkG2LaLR3go0DdM72HEs,1051
|
34
34
|
dv_flow/mgr/srcinfo.py,sha256=xrfp-relVr7hYNbxOjY5jqX4H0nNMm9HK5AAM6_Piyk,366
|
35
35
|
dv_flow/mgr/task.py,sha256=XQ-mVyDGvpU4gB6GmnNeTQhxKqFXiblShh7qd_-SIbM,2387
|
36
36
|
dv_flow/mgr/task_data.py,sha256=lN7Iq8YTitEMGG4rZqYQi6Ri2HuPgBQ5oGQbW-63T8c,12436
|
37
37
|
dv_flow/mgr/task_def.py,sha256=lhiOL7E_TfW7Ytg5qipE6d2cqTkfVqAOs1MZgtCqeLg,5257
|
38
38
|
dv_flow/mgr/task_gen_ctxt.py,sha256=1QQqqgaCjJSlzTV0SASpTb69vINFrDq3aqjYCKUkx3s,846
|
39
|
-
dv_flow/mgr/task_graph_builder.py,sha256=
|
39
|
+
dv_flow/mgr/task_graph_builder.py,sha256=1uca7YjYAVv1dS5sWk-ztqgdIwJyp9iHkwuzBlwtQPc,33590
|
40
40
|
dv_flow/mgr/task_graph_dot_writer.py,sha256=qK4Imy9o2_F1aKoU1tJ-qoBHslq2BhSMbdjAUPfpN7I,6009
|
41
41
|
dv_flow/mgr/task_listener_log.py,sha256=XcmBT-946DyrEYwNwbg7ejnB6Q3koybE7AekSWGxNGQ,4774
|
42
42
|
dv_flow/mgr/task_listener_trace.py,sha256=7B-V2YK8uXd_QSGBq_7USmbe5CleVvwumU0CpsmxZvg,6224
|
@@ -49,12 +49,12 @@ dv_flow/mgr/task_node_ctor_def_base.py,sha256=_8QQHKDkONio_ve0Z409yxC0AMO8ocNBPD
|
|
49
49
|
dv_flow/mgr/task_node_ctor_proxy.py,sha256=ViOFJ64JM4-CGFZNl89BghFuKSQ66kZVqSj4v2PA6VA,1906
|
50
50
|
dv_flow/mgr/task_node_ctor_task.py,sha256=d49g90TyPCMFR8BuWWqp4ym-MW5vGSdDR0V47Ru28JY,2232
|
51
51
|
dv_flow/mgr/task_node_ctor_wrapper.py,sha256=KMSYd4ik2Si7UXhNMeXAPHBwwrFkuhpeTMeYRpWv0hw,3718
|
52
|
-
dv_flow/mgr/task_node_ctxt.py,sha256=
|
52
|
+
dv_flow/mgr/task_node_ctxt.py,sha256=KHt_kQch6LDq70Oor7z2xbepiiaK2jyp4S-KWZGsRjo,205
|
53
53
|
dv_flow/mgr/task_node_leaf.py,sha256=nULlu-veyPC-PXdoQhahkLgqpdKNzaoD0XUlCw0EuZ4,9109
|
54
54
|
dv_flow/mgr/task_output.py,sha256=ZwyvwnYj_gHOEFAEOH3m24Xfc4Cn77hb1j7LkX8_3C4,1086
|
55
55
|
dv_flow/mgr/task_params_ctor.py,sha256=qlrzibGAFHmbqOu88jEoh1wOSFHu68Gwdgc259-50e8,1915
|
56
|
-
dv_flow/mgr/task_run_ctxt.py,sha256=
|
57
|
-
dv_flow/mgr/task_runner.py,sha256=
|
56
|
+
dv_flow/mgr/task_run_ctxt.py,sha256=Eh-b92NWGDiDw23NmNk-_jWTH5_qaO8FSlwVXN2jI-U,3968
|
57
|
+
dv_flow/mgr/task_runner.py,sha256=hfA4eGOmw-Rzur5qgcUKEwQB97Ka5AYv9QPrVZJWHUs,10422
|
58
58
|
dv_flow/mgr/type.py,sha256=hoJTatlPC0yOazKSWduK-5CfY38RPkc6qXFzOCcVSdM,723
|
59
59
|
dv_flow/mgr/type_def.py,sha256=4sge3PibO1jDnS0cXdX0PiurcKbDA3kT6rb4DGIKwEM,1176
|
60
60
|
dv_flow/mgr/yaml_srcinfo_loader.py,sha256=29BNRiB8Hj1FepkrLtdjHSv5U_85Q432gBeeK80nKEA,1606
|
@@ -76,9 +76,9 @@ dv_flow/mgr/util/util.py,sha256=BO7iqP_c9ttmXkojq7nKDN-g8wl1_Pco9k-KnrXxjwE,1889
|
|
76
76
|
dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
77
|
dv_flow/mgr/util/cmds/cmd_schema.py,sha256=IJzZdxCSEgIQ79LpYiM7UqJ9RJ-7yraqmBN2XVgAgXA,1752
|
78
78
|
dv_flow/mgr/util/cmds/cmd_workspace.py,sha256=egmaIXpe5L-TePwmcfisfrG6tdiTUWSjqa9Za5WChVs,890
|
79
|
-
dv_flow_mgr-1.9.
|
80
|
-
dv_flow_mgr-1.9.
|
81
|
-
dv_flow_mgr-1.9.
|
82
|
-
dv_flow_mgr-1.9.
|
83
|
-
dv_flow_mgr-1.9.
|
84
|
-
dv_flow_mgr-1.9.
|
79
|
+
dv_flow_mgr-1.9.15098282600rc0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
80
|
+
dv_flow_mgr-1.9.15098282600rc0.dist-info/METADATA,sha256=qr-g-nTWrI_eu7eG-6B99n5QW20iV2R9WlrMttCV3J4,13335
|
81
|
+
dv_flow_mgr-1.9.15098282600rc0.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
|
82
|
+
dv_flow_mgr-1.9.15098282600rc0.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
83
|
+
dv_flow_mgr-1.9.15098282600rc0.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
84
|
+
dv_flow_mgr-1.9.15098282600rc0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
{dv_flow_mgr-1.9.15008554401rc0.dist-info → dv_flow_mgr-1.9.15098282600rc0.dist-info}/top_level.txt
RENAMED
File without changes
|