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 CHANGED
@@ -32,6 +32,6 @@ from .task_runner import TaskSetRunner
32
32
  from .task_listener_log import TaskListenerLog
33
33
 
34
34
  VERSION="1.9.0"
35
- SUFFIX="15008554401rc0"
35
+ SUFFIX="15098282600rc0"
36
36
  __version__="%s%s" % (VERSION, SUFFIX)
37
37
 
@@ -10,6 +10,7 @@ from .task_data import TaskDataResult
10
10
  @dc.dataclass
11
11
  class ExecCallable(object):
12
12
  body : str
13
+ shell: str = "pytask"
13
14
  _log : ClassVar = logging.getLogger("ExecCallable")
14
15
 
15
16
  async def __call__(self, ctxt, input):
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
 
@@ -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:
@@ -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
- pass
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._eval.set("env", os.environ)
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
 
@@ -1,7 +1,9 @@
1
1
  import dataclasses as dc
2
+ from typing import Dict
2
3
 
3
4
  @dc.dataclass
4
5
  class TaskNodeCtxt(object):
5
6
  """Holds data shared with all task-graph nodes"""
6
7
  root_pkgdir : str
7
8
  root_rundir : str
9
+ env : Dict
@@ -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,
@@ -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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 1.9.15008554401rc0
3
+ Version: 1.9.15098282600rc0
4
4
  Summary: DV Flow Manager is a build system for silicon design
5
5
  Author-email: Matthew Ballance <matt.ballance@gmail.com>
6
6
  License: Apache License
@@ -1,15 +1,15 @@
1
- dv_flow/mgr/__init__.py,sha256=IQiJifqYb3hbXNG5kU7UttJPlhZ31XyFVisfvOypPHo,1315
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=NbhTVqvrTd-vsTi3cJ3iGrpVe8tfAqxFsSopaNXApRE,3117
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=BeHbTjB6KFcI5xhbl_O00YQW7MQ8efCFTD_Y8xf7I44,5651
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=bYkTXr3PS0xhi3AO8pxvqyNB9RPQRePcy6gUWJOBnvY,34889
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=IWb0C4L-v_hfnvnhS3g2rhXqutURex_U-dBJgdNxP7I,302
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=7rg9Vj3aRdaNQymrZpGRLCBUkdaMq80lMikbWxnUaIk,33429
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=dQp68ppFENK0zGo7TKaFXHInPCCsFai1yZwoBKDwJ20,166
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=q88OsuKAHC_GipZ7jBSjbybARsJkgcJhvbKjjj2TweA,3801
57
- dv_flow/mgr/task_runner.py,sha256=L7wYccjF5c59yeeEc8lHToSlQr68PTNhJgqyeV73MMc,10240
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.15008554401rc0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
80
- dv_flow_mgr-1.9.15008554401rc0.dist-info/METADATA,sha256=YCyrhzIrlkcKsaok8nRDRT2kUhH2x5pHrzGVTvKYlwE,13335
81
- dv_flow_mgr-1.9.15008554401rc0.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
82
- dv_flow_mgr-1.9.15008554401rc0.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
83
- dv_flow_mgr-1.9.15008554401rc0.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
84
- dv_flow_mgr-1.9.15008554401rc0.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.4.0)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5