dv-flow-mgr 0.0.1.12849118090a1__py3-none-any.whl → 0.0.1.12911707440a1__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.
Files changed (52) hide show
  1. {dv_flow_mgr → dv_flow/mgr}/__init__.py +1 -1
  2. {dv_flow_mgr → dv_flow/mgr}/__main__.py +1 -1
  3. dv_flow/mgr/cmds/cmd_run.py +90 -0
  4. {dv_flow_mgr → dv_flow/mgr}/package_def.py +96 -4
  5. dv_flow/mgr/pkg_rgy.py +78 -0
  6. {dv_flow_mgr/tasklib → dv_flow/mgr}/std/fileset.py +3 -3
  7. {dv_flow_mgr/tasklib → dv_flow/mgr}/std/flow.dv +6 -2
  8. {dv_flow_mgr/tasklib → dv_flow/mgr}/std/message.py +1 -1
  9. {dv_flow_mgr/tasklib → dv_flow/mgr}/std/task_fileset.py +5 -5
  10. dv_flow/mgr/std/task_null.py +10 -0
  11. {dv_flow_mgr → dv_flow/mgr}/task.py +11 -4
  12. {dv_flow_mgr → dv_flow/mgr}/task_data.py +18 -2
  13. {dv_flow_mgr → dv_flow/mgr}/task_def.py +2 -1
  14. dv_flow/mgr/task_graph_builder.py +190 -0
  15. dv_flow/mgr/task_graph_runner.py +71 -0
  16. dv_flow/mgr/task_graph_runner_local.py +79 -0
  17. dv_flow/mgr/util.py +19 -0
  18. {dv_flow_mgr-0.0.1.12849118090a1.dist-info → dv_flow_mgr-0.0.1.12911707440a1.dist-info}/METADATA +1 -1
  19. dv_flow_mgr-0.0.1.12911707440a1.dist-info/RECORD +31 -0
  20. dv_flow_mgr-0.0.1.12911707440a1.dist-info/entry_points.txt +2 -0
  21. dv_flow_mgr-0.0.1.12911707440a1.dist-info/top_level.txt +1 -0
  22. dv_flow_mgr/cmds/cmd_run.py +0 -28
  23. dv_flow_mgr/session.py +0 -324
  24. dv_flow_mgr/tasklib/builtin_pkg.py +0 -62
  25. dv_flow_mgr/tasklib/hdl/sim/mti_pkg.py +0 -11
  26. dv_flow_mgr/tasklib/hdl/sim/mti_task_sim_image.py +0 -69
  27. dv_flow_mgr/tasklib/hdl/sim/mti_task_sim_run.py +0 -47
  28. dv_flow_mgr/tasklib/hdl/sim/pkg_hdl_sim.py +0 -8
  29. dv_flow_mgr/tasklib/hdl/sim/task_sim_image.py +0 -16
  30. dv_flow_mgr/tasklib/hdl/sim/vcs_pkg.py +0 -14
  31. dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_image.py +0 -49
  32. dv_flow_mgr/tasklib/hdl/sim/vcs_task_sim_run.py +0 -45
  33. dv_flow_mgr/tasklib/hdl/sim/vl_task_sim_image.py +0 -96
  34. dv_flow_mgr/tasklib/hdl/sim/vlt_pkg.py +0 -14
  35. dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_image.py +0 -50
  36. dv_flow_mgr/tasklib/hdl/sim/vlt_task_sim_run.py +0 -45
  37. dv_flow_mgr/tasklib/std/pkg_std.py +0 -15
  38. dv_flow_mgr/tasklib/std/std.dfs +0 -7
  39. dv_flow_mgr/tasklib/std/task_null.py +0 -26
  40. dv_flow_mgr-0.0.1.12849118090a1.dist-info/RECORD +0 -42
  41. dv_flow_mgr-0.0.1.12849118090a1.dist-info/entry_points.txt +0 -2
  42. dv_flow_mgr-0.0.1.12849118090a1.dist-info/top_level.txt +0 -1
  43. {dv_flow_mgr → dv_flow/mgr}/fileset.py +0 -0
  44. {dv_flow_mgr → dv_flow/mgr}/flow.py +0 -0
  45. {dv_flow_mgr → dv_flow/mgr}/fragment_def.py +0 -0
  46. {dv_flow_mgr → dv_flow/mgr}/package.py +0 -0
  47. {dv_flow_mgr → dv_flow/mgr}/package_import_spec.py +0 -0
  48. {dv_flow_mgr → dv_flow/mgr}/parameters.py +0 -0
  49. {dv_flow_mgr → dv_flow/mgr}/share/flow.json +0 -0
  50. {dv_flow_mgr → dv_flow/mgr}/task_memento.py +0 -0
  51. {dv_flow_mgr-0.0.1.12849118090a1.dist-info → dv_flow_mgr-0.0.1.12911707440a1.dist-info}/LICENSE +0 -0
  52. {dv_flow_mgr-0.0.1.12849118090a1.dist-info → dv_flow_mgr-0.0.1.12911707440a1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,190 @@
1
+ import os
2
+ import dataclasses as dc
3
+ from .package import Package
4
+ from .package_def import PackageDef, PackageSpec
5
+ from .pkg_rgy import PkgRgy
6
+ from .task import Task, TaskCtor, TaskSpec
7
+ from typing import Dict, List
8
+
9
+ @dc.dataclass
10
+ class TaskGraphBuilder(object):
11
+ """The Task-Graph Builder knows how to discover packages and construct task graphs"""
12
+ root_pkg : PackageDef
13
+ rundir : str
14
+ pkg_rgy : PkgRgy = None
15
+ _pkg_s : List[Package] = dc.field(default_factory=list)
16
+ _pkg_m : Dict[PackageSpec,Package] = dc.field(default_factory=dict)
17
+ _pkg_def_m : Dict[str,PackageDef] = dc.field(default_factory=dict)
18
+ _pkg_spec_s : List[PackageDef] = dc.field(default_factory=list)
19
+ _task_m : Dict[TaskSpec,Task] = dc.field(default_factory=dict)
20
+
21
+ def __post_init__(self):
22
+ if self.pkg_rgy is None:
23
+ self.pkg_rgy = PkgRgy.inst()
24
+
25
+ if self.root_pkg is not None:
26
+ self._pkg_spec_s.append(self.root_pkg)
27
+ pkg = self.root_pkg.mkPackage(self)
28
+ self._pkg_spec_s.pop()
29
+ self._pkg_m[PackageSpec(self.root_pkg.name)] = pkg
30
+
31
+ def push_package(self, pkg : Package):
32
+ self._pkg_s.append(pkg)
33
+
34
+ def pop_package(self, pkg : Package):
35
+ self._pkg_s.pop()
36
+
37
+ def package(self):
38
+ return self._pkg_s[-1]
39
+
40
+ def mkTaskGraph(self, task : str) -> Task:
41
+ self._pkg_s.clear()
42
+ self._task_m.clear()
43
+
44
+ return self._mkTaskGraph(task, self.rundir)
45
+
46
+ def _mkTaskGraph(self, task : str, parent_rundir : str) -> Task:
47
+
48
+ elems = task.split(".")
49
+
50
+ pkg_name = ".".join(elems[0:-1])
51
+ task_name = elems[-1]
52
+
53
+ if pkg_name == "":
54
+ if len(self._pkg_spec_s) == 0:
55
+ raise Exception("No package context for %s" % task)
56
+ pkg_spec = self._pkg_spec_s[-1]
57
+ pkg_name = pkg_spec.name
58
+ else:
59
+ pkg_spec = PackageSpec(pkg_name)
60
+
61
+ rundir = os.path.join(parent_rundir, pkg_name, task_name)
62
+
63
+ print("pkg_spec: %s" % str(pkg_spec))
64
+ self._pkg_spec_s.append(pkg_spec)
65
+ pkg = self.getPackage(pkg_spec)
66
+
67
+ self._pkg_s.append(pkg)
68
+
69
+ ctor_t : TaskCtor = pkg.getTaskCtor(task_name)
70
+
71
+ depends = []
72
+
73
+ # The returned task should have all param references resolved
74
+ print("task_ctor=%s" % str(ctor_t.task_ctor), flush=True)
75
+ task = ctor_t.task_ctor(
76
+ name=task_name,
77
+ session=self,
78
+ params=ctor_t.mkParams(),
79
+ depends=depends,
80
+ rundir=rundir,
81
+ srcdir=ctor_t.srcdir)
82
+
83
+ for i,d in enumerate(task.depend_refs):
84
+ if d in self._task_m.keys():
85
+ task.depends.append(self._task_m[d])
86
+ else:
87
+ print("mkTaskGraph: %s" % d)
88
+ task.depends.append(self._mkTaskGraph(d, parent_rundir))
89
+
90
+ self._task_m[task.name] = task
91
+
92
+ self._pkg_s.pop()
93
+ self._pkg_spec_s.pop()
94
+
95
+ return task
96
+
97
+ def getPackage(self, spec : PackageSpec) -> Package:
98
+ # Obtain the active package definition
99
+ print("getPackage: %s len: %d" % (spec.name, len(self._pkg_spec_s)))
100
+ if len(self._pkg_spec_s) > 0:
101
+ pkg_spec = self._pkg_spec_s[-1]
102
+ print("pkg_spec: %s ; root_pkg: %s" % (pkg_spec.name, self.root_pkg.name))
103
+ if self.root_pkg.name == pkg_spec.name:
104
+ pkg_def = self.root_pkg
105
+ else:
106
+ pkg_def = self.pkg_rgy.getPackage(pkg_spec.name)
107
+ else:
108
+ pkg_def = None
109
+
110
+ print("spec: %s ; _pkg_def_m: %s" % (str(spec), str(self._pkg_def_m.keys())))
111
+
112
+ # Need a stack to track which package we are currently in
113
+ # Need a map to get a concrete package from a name with parameterization
114
+
115
+ print("pkg_s: %d %s" % (len(self._pkg_s), (self._pkg_s[-1].name if len(self._pkg_s) else "<unknown>")))
116
+
117
+ # Note: _pkg_m needs to be context specific, such that imports from
118
+ # one package don't end up visible in another
119
+ if len(self._pkg_s) and spec.name == self._pkg_s[-1].name:
120
+ pkg = self._pkg_s[-1]
121
+ if spec in self._pkg_m.keys():
122
+ pkg = self._pkg_m[spec]
123
+ elif spec in self._pkg_def_m.keys():
124
+ pkg = self._pkg_def_m[spec].mkPackage(self)
125
+ self._pkg_m[spec] = pkg
126
+ else:
127
+ pkg = None
128
+
129
+ if pkg_def is not None:
130
+ # Look for an import alias
131
+ print("imports: %s" % str(pkg_def.imports))
132
+ for imp in pkg_def.imports:
133
+ print("imp: %s" % str(imp))
134
+ if imp.alias is not None and imp.alias == spec.name:
135
+ # Found the alias name. Just need to get an instance of this package
136
+ tgt_pkg_spec = PackageSpec(imp.name)
137
+ if tgt_pkg_spec in self._pkg_m.keys():
138
+ pkg = self._pkg_m[tgt_pkg_spec]
139
+ elif tgt_pkg_spec in self._pkg_def_m.keys():
140
+ base = self._pkg_def_m[tgt_pkg_spec]
141
+ pkg = base.mkPackage(self, spec.params)
142
+ self._pkg_m[spec] = pkg
143
+ elif imp.path is not None:
144
+ # See if we can load the package
145
+ print("TODO: load referenced package")
146
+ else:
147
+ raise Exception("Import alias %s not found" % imp.name)
148
+ break
149
+ else:
150
+ # Need to compare the spec with the full import spec
151
+ imp_spec = PackageSpec(imp.name)
152
+ # TODO: set parameters
153
+ if imp_spec == spec:
154
+ base = self._pkg_def_m[PackageSpec(spec.name)]
155
+ pkg = base.mkPackage(self, spec.params)
156
+ self._pkg_m[spec] = pkg
157
+ break
158
+
159
+ if pkg is None:
160
+ print("Checking registry")
161
+ p_def = self.pkg_rgy.getPackage(spec.name)
162
+
163
+ if p_def is not None:
164
+ pkg = p_def.mkPackage(self)
165
+
166
+ if pkg is None:
167
+ raise Exception("Failed to find package %s from package %s" % (
168
+ spec.name, (pkg_def.name if pkg_def is not None else "<null>")))
169
+
170
+ return pkg
171
+
172
+ def getTaskCtor(self, spec : TaskSpec, pkg : PackageDef = None) -> 'TaskCtor':
173
+ spec_e = spec.name.split(".")
174
+ task_name = spec_e[-1]
175
+
176
+ if len(spec_e) == 1:
177
+ # Just have a task name. Use the current package
178
+ if len(self._pkg_s) == 0:
179
+ raise Exception("No package context for task %s" % spec.name)
180
+ pkg = self._pkg_s[-1]
181
+ else:
182
+ pkg_name = ".".join(spec_e[0:-1])
183
+
184
+ try:
185
+ pkg = self.getPackage(PackageSpec(pkg_name))
186
+ except Exception as e:
187
+ print("Failed to find package %s while looking for task %s" % (pkg_name, spec.name))
188
+ raise e
189
+
190
+ return pkg.getTaskCtor(task_name)
@@ -0,0 +1,71 @@
1
+ #****************************************************************************
2
+ #* session.py
3
+ #*
4
+ #* Copyright 2023 Matthew Ballance and Contributors
5
+ #*
6
+ #* Licensed under the Apache License, Version 2.0 (the "License"); you may
7
+ #* not use this file except in compliance with the License.
8
+ #* You may obtain a copy of the License at:
9
+ #*
10
+ #* http://www.apache.org/licenses/LICENSE-2.0
11
+ #*
12
+ #* Unless required by applicable law or agreed to in writing, software
13
+ #* distributed under the License is distributed on an "AS IS" BASIS,
14
+ #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ #* See the License for the specific language governing permissions and
16
+ #* limitations under the License.
17
+ #*
18
+ #* Created on:
19
+ #* Author:
20
+ #*
21
+ #****************************************************************************
22
+ import asyncio
23
+ import os
24
+ import yaml
25
+ import dataclasses as dc
26
+ from typing import Any, Callable, ClassVar, Dict, List
27
+ from .task import Task
28
+ from .task_data import TaskData
29
+
30
+ @dc.dataclass
31
+ class TaskGraphRunner(object):
32
+ """Session manages execution of a task graph"""
33
+
34
+ rundir : str
35
+
36
+ _inst : ClassVar['TaskGraphRunner'] = None
37
+
38
+ # Search path for .dfs files
39
+ create_subprocess : Callable = asyncio.create_subprocess_exec
40
+ _root_dir : str = None
41
+
42
+ async def exec(self, *args, **kwargs):
43
+ return self.create_subprocess(*args, **kwargs)
44
+
45
+ # def load(self):
46
+ # if not os.path.isdir(self.srcdir):
47
+ # raise Exception("Root directory %s does not exist" % self.srcdir)
48
+
49
+ # if not os.path.isfile(os.path.join(self.srcdir, "flow.dv")):
50
+ # raise Exception("No root flow file")
51
+
52
+ # self._root_dir = os.path.dirname(self.srcdir)
53
+ # self.package = PackageDef.load(os.path.join(self.srcdir, "flow.dv"), [])
54
+
55
+ # return self.package
56
+
57
+
58
+ async def run(self, task : str) -> 'TaskData':
59
+ impl = self.mkTaskGraph(task)
60
+ return await impl.do_run()
61
+
62
+ async def runTask(self, task : Task) -> 'TaskData':
63
+ return await task.do_run()
64
+
65
+ def queueTask(self, task : Task):
66
+ """Queue a task for execution"""
67
+ pass
68
+
69
+
70
+
71
+
@@ -0,0 +1,79 @@
1
+ #****************************************************************************
2
+ #* session.py
3
+ #*
4
+ #* Copyright 2023 Matthew Ballance and Contributors
5
+ #*
6
+ #* Licensed under the Apache License, Version 2.0 (the "License"); you may
7
+ #* not use this file except in compliance with the License.
8
+ #* You may obtain a copy of the License at:
9
+ #*
10
+ #* http://www.apache.org/licenses/LICENSE-2.0
11
+ #*
12
+ #* Unless required by applicable law or agreed to in writing, software
13
+ #* distributed under the License is distributed on an "AS IS" BASIS,
14
+ #* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ #* See the License for the specific language governing permissions and
16
+ #* limitations under the License.
17
+ #*
18
+ #* Created on:
19
+ #* Author:
20
+ #*
21
+ #****************************************************************************
22
+ import asyncio
23
+ import os
24
+ import yaml
25
+ import dataclasses as dc
26
+ from typing import Any, Callable, ClassVar, Dict, List, Union
27
+ from .fragment_def import FragmentDef
28
+ from .package import Package
29
+ from .pkg_rgy import PkgRgy
30
+ from .package_def import PackageDef, PackageSpec
31
+ from .task import Task, TaskSpec, TaskCtor
32
+ from .task_data import TaskData
33
+ from .task_graph_runner import TaskGraphRunner
34
+
35
+ @dc.dataclass
36
+ class TaskGraphRunnerLocal(TaskGraphRunner):
37
+ """Session manages execution of a task graph"""
38
+
39
+ rundir : str
40
+ nproc : int = -1
41
+ _workers : List = dc.field(default_factory=list)
42
+
43
+ _inst : ClassVar['TaskGraphRunner'] = None
44
+
45
+ # Search path for .dfs files
46
+ create_subprocess : Callable = asyncio.create_subprocess_exec
47
+ _root_dir : str = None
48
+
49
+ def __post_init__(self):
50
+ if self.nproc == -1:
51
+ self.nproc = os.cpu_count()
52
+ for _ in range(self.nproc):
53
+ self._workers.append(LocalRunnerWorker(self))
54
+
55
+
56
+ async def exec(self, *args, **kwargs):
57
+ return await self.create_subprocess(*args, **kwargs)
58
+
59
+ async def run(self, task : Union[Task,List[Task]]) -> List['TaskData']:
60
+ if isinstance(task, Task):
61
+ task = [task]
62
+
63
+ run_o = list(t.do_run() for t in task)
64
+
65
+ return await asyncio.gather(*run_o)
66
+
67
+ async def runTask(self, task : Task) -> 'TaskData':
68
+ return await task.do_run()
69
+
70
+ def queueTask(self, task : Task):
71
+ """Queue a task for execution"""
72
+ pass
73
+
74
+ @dc.dataclass
75
+ class LocalRunnerWorker(object):
76
+ runner : TaskGraphRunnerLocal
77
+ pass
78
+
79
+
dv_flow/mgr/util.py ADDED
@@ -0,0 +1,19 @@
1
+ import os
2
+ import yaml
3
+ from .package_def import PackageDef
4
+
5
+ def loadProjPkgDef(path):
6
+ """Locates the project's flow spec and returns the PackageDef"""
7
+
8
+ dir = path
9
+ ret = None
10
+ while dir != "/" and dir != "" and os.path.isdir(dir):
11
+ if os.path.exists(os.path.join(dir, "flow.dv")):
12
+ with open(os.path.join(dir, "flow.dv")) as f:
13
+ data = yaml.load(f, Loader=yaml.FullLoader)
14
+ if "package" in data.keys():
15
+ ret = PackageDef.load(os.path.join(dir, "flow.dv"))
16
+ break
17
+ dir = os.path.dirname(dir)
18
+ return ret
19
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.12849118090a1
3
+ Version: 0.0.1.12911707440a1
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
@@ -0,0 +1,31 @@
1
+ dv_flow/mgr/__init__.py,sha256=Ms7IJnAbW08GwaanCI64ad_QWZd_XPGfua0WhYr57Jg,107
2
+ dv_flow/mgr/__main__.py,sha256=pHXC_c-XSPUYQsBDxk5y7LtQ5kA5pKGhhzu4ko5jh7k,513
3
+ dv_flow/mgr/fileset.py,sha256=FNvC5sU2ArxJ0OO3v8dXTv8zX-bZ5t0a0ljne0fQQ1o,1150
4
+ dv_flow/mgr/flow.py,sha256=UdgJOIqBS2wTRpO-sNWCCqO9oQFxDfGPGVD0r42aTrA,1562
5
+ dv_flow/mgr/fragment_def.py,sha256=p5i6ONtBWlDHTBFsduu3Z36_76Bn8PCIylp_xoZ7jfQ,1552
6
+ dv_flow/mgr/package.py,sha256=k6gaDun9mJeGwGsFP5YOYOaFLmKb3KyPZy5wGRgJd_E,1965
7
+ dv_flow/mgr/package_def.py,sha256=hT8wr4ghH61rjK6VEovqTKVUuO_EwrCB5JQuFR-whiU,11455
8
+ dv_flow/mgr/package_import_spec.py,sha256=bStPa727wAKMcixydVY1Ht6ylzXsSMy2K31HWPXhc9k,921
9
+ dv_flow/mgr/parameters.py,sha256=kUjRss5VtMMz5eL3-Z_M6BS-wFs7MhQu3ANXO54UPo0,896
10
+ dv_flow/mgr/pkg_rgy.py,sha256=y7HOBZAgKHL4ItnFvjT0lWC_ne81qJi4lJGNLt69au0,2581
11
+ dv_flow/mgr/task.py,sha256=gaMlOiV4pKmEBzewTkVle3RN2zfKPkSdYW3oJX0j_Jg,6421
12
+ dv_flow/mgr/task_data.py,sha256=-6Dqa3oUI7RJc1Js2SRSnhxNTcASkamXFYMN6UiknZQ,10376
13
+ dv_flow/mgr/task_def.py,sha256=96hSwqJo0MazJ1VcLhovYRmNCplsNLt47AumtyjSddU,1690
14
+ dv_flow/mgr/task_graph_builder.py,sha256=qx-59f14-oJJi2qx_zYTaP3PvvxxQCNyYqQ6jDjx_OM,7218
15
+ dv_flow/mgr/task_graph_runner.py,sha256=x2e-wpJFhZ4Zkov30PtC8CuKyOK6htA1SKzmrcVBI9M,2154
16
+ dv_flow/mgr/task_graph_runner_local.py,sha256=-69HoOGkEPHL897RJGB7gItjqXDL_8eam267af4G77E,2420
17
+ dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
18
+ dv_flow/mgr/util.py,sha256=WKwMF4vwYdte5wzieSTDpZTmZU0sjQro3Ofi9moCayE,613
19
+ dv_flow/mgr/cmds/cmd_run.py,sha256=PqAbPMwqovaaq14tnNrCvP7-De8lMI09X0R7d6RIbwY,2691
20
+ dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
21
+ dv_flow/mgr/std/fileset.py,sha256=qY4RMqTHZaFZk68Y3oXtDv2_Ezu1r4wYvaRvr0GTyIY,2352
22
+ dv_flow/mgr/std/flow.dv,sha256=pSpzrPPEu_L8DHccGfArxsKYgUfyQidShZc0ShgGtsY,500
23
+ dv_flow/mgr/std/message.py,sha256=BPTHnEMD4tBufQ9LvsS9Sa_0xjaJATbBpwqosWslvVA,193
24
+ dv_flow/mgr/std/task_fileset.py,sha256=UzTYONvK0X9rgy3rP9LiX4giBU8SyCCJav0LSNUJ1Qg,3140
25
+ dv_flow/mgr/std/task_null.py,sha256=UEJ3fIoIMYWVsagiQC7GHD23UES7WoH4wtq94b4tcs4,265
26
+ dv_flow_mgr-0.0.1.12911707440a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
27
+ dv_flow_mgr-0.0.1.12911707440a1.dist-info/METADATA,sha256=tjOZgtwJrZwNzN011TtAKggCWYSik3b60ZXkBNB3MbI,13252
28
+ dv_flow_mgr-0.0.1.12911707440a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
29
+ dv_flow_mgr-0.0.1.12911707440a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
30
+ dv_flow_mgr-0.0.1.12911707440a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
31
+ dv_flow_mgr-0.0.1.12911707440a1.dist-info/RECORD,,
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ dfm = dv_flow.mgr.__main__:main
@@ -1,28 +0,0 @@
1
- import asyncio
2
- import os
3
- from ..session import Session
4
-
5
- class CmdRun(object):
6
-
7
- def __call__(self, args):
8
- srcdir = os.getcwd()
9
- rundir = os.path.join(srcdir, "rundir")
10
-
11
- session = Session(srcdir, rundir)
12
-
13
- package = session.load(srcdir)
14
-
15
- graphs = []
16
- for task in args.tasks:
17
- if task.find(".") == -1:
18
- task = package.name + "." + task
19
- subgraph = session.mkTaskGraph(task)
20
- graphs.append(subgraph)
21
-
22
- awaitables = [subgraph.do_run() for subgraph in graphs]
23
- print("%d awaitables" % len(awaitables))
24
-
25
- out = asyncio.get_event_loop().run_until_complete(asyncio.gather(*awaitables))
26
-
27
- print("out: %s" % str(out))
28
-