dv-flow-mgr 0.0.1.13667970156a1__py3-none-any.whl → 0.0.1.13703952342a1__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/__main__.py +15 -10
- dv_flow/mgr/cmds/cmd_run.py +5 -24
- dv_flow/mgr/package_def.py +11 -2
- dv_flow/mgr/std/message.py +1 -1
- dv_flow/mgr/task_def.py +2 -0
- dv_flow/mgr/task_graph_builder.py +8 -4
- dv_flow/mgr/task_listener_log.py +8 -2
- dv_flow/mgr/task_node.py +98 -9
- dv_flow/mgr/task_output.py +3 -2
- {dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/METADATA +3 -1
- {dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/RECORD +15 -15
- {dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/__main__.py
CHANGED
@@ -25,12 +25,15 @@ from .cmds.cmd_run import CmdRun
|
|
25
25
|
|
26
26
|
def get_parser():
|
27
27
|
parser = argparse.ArgumentParser(description='dv_flow_mgr')
|
28
|
-
parser.add_argument("-d", "--debug",
|
29
|
-
|
30
|
-
|
31
|
-
parser.add_argument("-
|
32
|
-
help="
|
33
|
-
|
28
|
+
# parser.add_argument("-d", "--debug",
|
29
|
+
# help="Enable debug",
|
30
|
+
# action="store_true")
|
31
|
+
parser.add_argument("--log-level",
|
32
|
+
help="Configures debug level [INFO, DEBUG]",
|
33
|
+
choices=("NONE", "INFO", "DEBUG"))
|
34
|
+
# parser.add_argument("-v", "--verbose",
|
35
|
+
# help="Enable verbose output",
|
36
|
+
# action="store_true")
|
34
37
|
subparsers = parser.add_subparsers(required=True)
|
35
38
|
|
36
39
|
run_parser = subparsers.add_parser('run', help='run a flow')
|
@@ -43,10 +46,12 @@ def main():
|
|
43
46
|
parser = get_parser()
|
44
47
|
args = parser.parse_args()
|
45
48
|
|
46
|
-
if args.
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
if args.log_level is not None and args.log_level != "NONE":
|
50
|
+
opt_m = {
|
51
|
+
"INFO": logging.INFO,
|
52
|
+
"DEBUG": logging.DEBUG
|
53
|
+
}
|
54
|
+
logging.basicConfig(level=opt_m[args.log_level])
|
50
55
|
|
51
56
|
args.func(args)
|
52
57
|
|
dv_flow/mgr/cmds/cmd_run.py
CHANGED
@@ -6,6 +6,8 @@ from ..task_graph_runner import TaskGraphRunner
|
|
6
6
|
from ..util import loadProjPkgDef
|
7
7
|
from ..task_graph_builder import TaskGraphBuilder
|
8
8
|
from ..task_graph_runner_local import TaskGraphRunnerLocal
|
9
|
+
from ..task_runner import TaskSetRunner
|
10
|
+
from ..task_listener_log import TaskListenerLog
|
9
11
|
from ..pkg_rgy import PkgRgy
|
10
12
|
|
11
13
|
|
@@ -57,7 +59,9 @@ class CmdRun(object):
|
|
57
59
|
rundir = os.path.join(pkg.basedir, "rundir")
|
58
60
|
|
59
61
|
builder = TaskGraphBuilder(root_pkg=pkg, rundir=rundir)
|
60
|
-
runner =
|
62
|
+
runner = TaskSetRunner(rundir)
|
63
|
+
|
64
|
+
runner.add_listener(TaskListenerLog().event)
|
61
65
|
|
62
66
|
tasks = []
|
63
67
|
|
@@ -69,27 +73,4 @@ class CmdRun(object):
|
|
69
73
|
|
70
74
|
asyncio.run(runner.run(tasks))
|
71
75
|
|
72
|
-
# rgy = PkgRgy.inst()
|
73
|
-
# rgy.registerPackage(pkg)
|
74
|
-
|
75
|
-
|
76
|
-
# srcdir = os.getcwd()
|
77
|
-
|
78
|
-
# session = Session(srcdir, rundir)
|
79
|
-
|
80
|
-
# package = session.load(srcdir)
|
81
|
-
|
82
|
-
# graphs = []
|
83
|
-
# for task in args.tasks:
|
84
|
-
# if task.find(".") == -1:
|
85
|
-
# task = package.name + "." + task
|
86
|
-
# subgraph = session.mkTaskGraph(task)
|
87
|
-
# graphs.append(subgraph)
|
88
|
-
|
89
|
-
# awaitables = [subgraph.do_run() for subgraph in graphs]
|
90
|
-
# print("%d awaitables" % len(awaitables))
|
91
|
-
|
92
|
-
# out = asyncio.get_event_loop().run_until_complete(asyncio.gather(*awaitables))
|
93
|
-
|
94
|
-
# print("out: %s" % str(out))
|
95
76
|
|
dv_flow/mgr/package_def.py
CHANGED
@@ -134,7 +134,8 @@ class PackageDef(BaseModel):
|
|
134
134
|
ctor_t : TaskCtor = None
|
135
135
|
base_params : BaseModel = None
|
136
136
|
callable = None
|
137
|
-
passthrough =
|
137
|
+
passthrough = task.passthrough
|
138
|
+
consumes = task.consumes
|
138
139
|
needs = [] if task.needs is None else task.needs.copy()
|
139
140
|
|
140
141
|
if task.uses is not None:
|
@@ -142,6 +143,11 @@ class PackageDef(BaseModel):
|
|
142
143
|
base_ctor_t = self.getTaskCtor(session, task.uses, tasks_m)
|
143
144
|
base_params = base_ctor_t.mkTaskParams()
|
144
145
|
|
146
|
+
if base_ctor_t is None:
|
147
|
+
self._log.error("Failed to load task ctor %s" % task.uses)
|
148
|
+
else:
|
149
|
+
self._log.debug("No 'uses' specified")
|
150
|
+
|
145
151
|
# Determine the implementation constructor first
|
146
152
|
if task.pytask is not None:
|
147
153
|
# Built-in impl
|
@@ -175,6 +181,7 @@ class PackageDef(BaseModel):
|
|
175
181
|
srcdir=srcdir,
|
176
182
|
paramT=paramT, # TODO: need to determine the parameter type
|
177
183
|
passthrough=passthrough,
|
184
|
+
consumes=consumes,
|
178
185
|
needs=needs, # TODO: need to determine the needs
|
179
186
|
task=callable)
|
180
187
|
elif base_ctor_t is not None:
|
@@ -184,6 +191,7 @@ class PackageDef(BaseModel):
|
|
184
191
|
srcdir=srcdir,
|
185
192
|
paramT=paramT, # TODO: need to determine the parameter type
|
186
193
|
passthrough=passthrough,
|
194
|
+
consumes=consumes,
|
187
195
|
needs=needs,
|
188
196
|
uses=base_ctor_t)
|
189
197
|
else:
|
@@ -193,6 +201,7 @@ class PackageDef(BaseModel):
|
|
193
201
|
srcdir=srcdir,
|
194
202
|
paramT=paramT,
|
195
203
|
passthrough=passthrough,
|
204
|
+
consumes=consumes,
|
196
205
|
needs=needs,
|
197
206
|
task=TaskNull)
|
198
207
|
|
@@ -376,7 +385,7 @@ class PackageDef(BaseModel):
|
|
376
385
|
|
377
386
|
with open(file, "r") as fp:
|
378
387
|
doc = yaml.load(fp, Loader=yaml.FullLoader)
|
379
|
-
PackageDef._log.debug("doc: %s" % str(doc)
|
388
|
+
PackageDef._log.debug("doc: %s" % str(doc))
|
380
389
|
if "fragment" in doc.keys():
|
381
390
|
# Merge the package definition
|
382
391
|
frag = FragmentDef(**(doc["fragment"]))
|
dv_flow/mgr/std/message.py
CHANGED
dv_flow/mgr/task_def.py
CHANGED
@@ -42,6 +42,8 @@ class TaskDef(BaseModel):
|
|
42
42
|
needs : List[Union[str,TaskSpec]] = dc.Field(default_factory=list, alias="needs")
|
43
43
|
params: Dict[str,Union[str,ParamDef]] = dc.Field(default_factory=dict, alias="with")
|
44
44
|
passthrough: bool = dc.Field(default=False)
|
45
|
+
consumes : List[Any] = dc.Field(default_factory=list)
|
46
|
+
|
45
47
|
# out: List[TaskOutput] = dc.Field(default_factory=list)
|
46
48
|
|
47
49
|
def copy(self) -> 'TaskDef':
|
@@ -179,14 +179,18 @@ class TaskGraphBuilder(object):
|
|
179
179
|
|
180
180
|
return pkg
|
181
181
|
|
182
|
-
def mkTaskNode(self,
|
183
|
-
|
184
|
-
|
185
|
-
|
182
|
+
def mkTaskNode(self, task_t, name=None, srcdir=None, needs=None, **kwargs):
|
183
|
+
self._logger.debug("--> mkTaskNode: %s" % task_t)
|
184
|
+
ctor = self.getTaskCtor(task_t)
|
185
|
+
self._logger.debug("ctor: %s" % ctor.name)
|
186
|
+
params = ctor.mkTaskParams(kwargs)
|
187
|
+
ret = ctor.mkTaskNode(
|
186
188
|
params=params,
|
187
189
|
name=name,
|
188
190
|
srcdir=srcdir,
|
189
191
|
needs=needs)
|
192
|
+
self._logger.debug("<-- mkTaskNode: %s" % task_t)
|
193
|
+
return ret
|
190
194
|
|
191
195
|
def getTaskCtor(self, spec : Union[str,'TaskSpec'], pkg : PackageDef = None) -> 'TaskCtor':
|
192
196
|
from .task_def import TaskSpec
|
dv_flow/mgr/task_listener_log.py
CHANGED
@@ -5,15 +5,21 @@ from rich.console import Console
|
|
5
5
|
class TaskListenerLog(object):
|
6
6
|
console : Console = dc.field(default_factory=Console)
|
7
7
|
level : int = 0
|
8
|
+
quiet : bool = True
|
8
9
|
|
9
10
|
def event(self, task : 'Task', reason : 'Reason'):
|
10
11
|
if reason == 'enter':
|
11
12
|
self.level += 1
|
12
|
-
|
13
|
+
if not self.quiet:
|
14
|
+
self.console.print("[green]>[%d][/green] Task %s" % (self.level, task.name))
|
13
15
|
elif reason == 'leave':
|
14
16
|
for m in task.result.markers:
|
15
17
|
print(" %s" % m)
|
16
|
-
|
18
|
+
if self.quiet:
|
19
|
+
if task.result.changed:
|
20
|
+
self.console.print("[green]Done:[/green] %s" % (task.name,))
|
21
|
+
else:
|
22
|
+
self.console.print("[green]<[%d][/green] Task %s" % (self.level, task.name))
|
17
23
|
self.level -= 1
|
18
24
|
else:
|
19
25
|
self.console.print("[red]-[/red] Task %s" % task.name)
|
dv_flow/mgr/task_node.py
CHANGED
@@ -3,6 +3,7 @@ import sys
|
|
3
3
|
import dataclasses as dc
|
4
4
|
import pydantic.dataclasses as pdc
|
5
5
|
import logging
|
6
|
+
import toposort
|
6
7
|
from typing import Any, Callable, ClassVar, Dict, List
|
7
8
|
from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
|
8
9
|
from .task_params_ctor import TaskParamsCtor
|
@@ -23,6 +24,7 @@ class TaskNode(object):
|
|
23
24
|
# Runtime fields -- these get populated during execution
|
24
25
|
changed : bool = False
|
25
26
|
passthrough : bool = False
|
27
|
+
consumes : List[Any] = dc.field(default_factory=list)
|
26
28
|
needs : List['TaskNode'] = dc.field(default_factory=list)
|
27
29
|
rundir : str = dc.field(default=None)
|
28
30
|
output : TaskDataOutput = dc.field(default=None)
|
@@ -38,19 +40,46 @@ class TaskNode(object):
|
|
38
40
|
runner,
|
39
41
|
rundir,
|
40
42
|
memento : Any = None) -> 'TaskDataResult':
|
43
|
+
self._log.debug("--> do_run: %s" % self.name)
|
41
44
|
changed = False
|
42
45
|
for dep in self.needs:
|
43
46
|
changed |= dep.changed
|
44
47
|
|
45
48
|
# TODO: Form dep-map from inputs
|
46
|
-
|
47
|
-
|
49
|
+
|
50
|
+
dep_m = {}
|
51
|
+
for need in self.needs:
|
52
|
+
self._log.debug("dep %s dep_m: %s" % (need.name, str(dep_m)))
|
53
|
+
for subdep in need.output.dep_m.keys():
|
54
|
+
if subdep not in dep_m.keys():
|
55
|
+
dep_m[subdep] = []
|
56
|
+
dep_m[subdep].extend(need.output.dep_m[subdep])
|
57
|
+
|
58
|
+
self._log.debug("input dep_m: %s" % str(dep_m))
|
59
|
+
sorted = toposort.toposort(dep_m)
|
60
|
+
|
61
|
+
in_params_m = {}
|
48
62
|
for need in self.needs:
|
49
|
-
|
63
|
+
for p in need.output.output:
|
64
|
+
if p.src not in in_params_m.keys():
|
65
|
+
in_params_m[p.src] = []
|
66
|
+
in_params_m[p.src].append(p)
|
67
|
+
|
68
|
+
# in_params holds parameter sets ordered by dependency
|
69
|
+
in_params = []
|
70
|
+
for sorted_s in sorted:
|
71
|
+
self._log.debug("sorted_s: %s" % str(sorted_s))
|
72
|
+
for dep in sorted_s:
|
73
|
+
if dep in in_params_m.keys():
|
74
|
+
self._log.debug("(%s) Extend with: %s" % (dep, str(in_params_m[dep])))
|
75
|
+
in_params.extend(in_params_m[dep])
|
76
|
+
|
77
|
+
self._log.debug("in_params[1]: %s" % ",".join(p.src for p in in_params))
|
50
78
|
|
51
79
|
# Create an evaluator for substituting param values
|
52
80
|
eval = ParamRefEval()
|
53
81
|
|
82
|
+
self._log.debug("in_params[2]: %s" % ",".join(p.src for p in in_params))
|
54
83
|
eval.setVar("in", in_params)
|
55
84
|
|
56
85
|
for name,field in self.params.model_fields.items():
|
@@ -58,6 +87,7 @@ class TaskNode(object):
|
|
58
87
|
if type(value) == str:
|
59
88
|
if value.find("${{") != -1:
|
60
89
|
new_val = eval.eval(value)
|
90
|
+
self._log.debug("Param %s: Evaluate expression \"%s\" => \"%s\"" % (name, value, new_val))
|
61
91
|
setattr(self.params, name, new_val)
|
62
92
|
elif isinstance(value, list):
|
63
93
|
for i,elem in enumerate(value):
|
@@ -75,20 +105,63 @@ class TaskNode(object):
|
|
75
105
|
params=self.params,
|
76
106
|
memento=memento)
|
77
107
|
|
78
|
-
|
108
|
+
self._log.debug("--> Call task method %s" % str(self.task))
|
79
109
|
self.result : TaskDataResult = await self.task(self, input)
|
80
|
-
|
110
|
+
self._log.debug("<-- Call task method %s" % str(self.task))
|
81
111
|
|
82
|
-
|
83
|
-
|
112
|
+
output=self.result.output.copy()
|
113
|
+
for out in output:
|
114
|
+
out.src = self.name
|
115
|
+
|
116
|
+
self._log.debug("output[1]: %s" % str(output))
|
117
|
+
|
118
|
+
if self.passthrough:
|
119
|
+
self._log.debug("passthrough: %s" % self.name)
|
120
|
+
# Add an entry for ourselves
|
121
|
+
dep_m[self.name] = list(need.name for need in self.needs)
|
122
|
+
|
123
|
+
if self.consumes is None and len(self.consumes):
|
124
|
+
self._log.debug("Propagating all input parameters to output")
|
125
|
+
for need in self.needs:
|
126
|
+
output.extend(need.output.output)
|
127
|
+
else:
|
128
|
+
# Filter out parameter sets that were consumed
|
129
|
+
self._log.debug("Propagating non-consumed input parameters to output")
|
130
|
+
for need in self.needs:
|
131
|
+
for out in need.output.output:
|
132
|
+
consumed = False
|
133
|
+
for c in self.consumes:
|
134
|
+
match = False
|
135
|
+
for k,v in c.items():
|
136
|
+
if hasattr(out, k) and getattr(out, k) == v:
|
137
|
+
match = True
|
138
|
+
break
|
139
|
+
if match:
|
140
|
+
consumed = True
|
141
|
+
break
|
142
|
+
|
143
|
+
if not consumed:
|
144
|
+
self._log.debug("Propagating type %s from %s" % (
|
145
|
+
getattr(out, "type", "<unknown>"),
|
146
|
+
getattr(out, "src", "<unknown>")))
|
147
|
+
output.append(out)
|
148
|
+
else:
|
149
|
+
# empty dependency map
|
150
|
+
dep_m = {
|
151
|
+
self.name : []
|
152
|
+
}
|
153
|
+
|
154
|
+
self._log.debug("output dep_m: %s" % str(dep_m))
|
155
|
+
self._log.debug("output[2]: %s" % str(output))
|
84
156
|
|
85
157
|
# Store the result
|
86
158
|
self.output = TaskDataOutput(
|
87
159
|
changed=self.result.changed,
|
88
160
|
dep_m=dep_m,
|
89
|
-
output=
|
161
|
+
output=output)
|
90
162
|
|
91
163
|
# TODO:
|
164
|
+
self._log.debug("<-- do_run: %s" % self.name)
|
92
165
|
|
93
166
|
return self.result
|
94
167
|
|
@@ -107,6 +180,7 @@ class TaskNodeCtor(object):
|
|
107
180
|
srcdir : str
|
108
181
|
paramT : Any
|
109
182
|
passthrough : bool
|
183
|
+
consumes : List[Any]
|
110
184
|
|
111
185
|
def __call__(self,
|
112
186
|
name=None,
|
@@ -114,6 +188,7 @@ class TaskNodeCtor(object):
|
|
114
188
|
params=None,
|
115
189
|
needs=None,
|
116
190
|
passthrough=None,
|
191
|
+
consumes=None,
|
117
192
|
**kwargs):
|
118
193
|
"""Convenience method for direct creation of tasks"""
|
119
194
|
if params is None:
|
@@ -128,6 +203,16 @@ class TaskNodeCtor(object):
|
|
128
203
|
node.passthrough = passthrough
|
129
204
|
else:
|
130
205
|
node.passthrough = self.passthrough
|
206
|
+
if consumes is not None:
|
207
|
+
if node.consumes is None:
|
208
|
+
node.consumes = consumes
|
209
|
+
else:
|
210
|
+
node.consumes.extend(consumes)
|
211
|
+
else:
|
212
|
+
if node.consumes is None:
|
213
|
+
node.consumes = self.consumes
|
214
|
+
else:
|
215
|
+
node.consumes.extend(consumes)
|
131
216
|
|
132
217
|
return node
|
133
218
|
|
@@ -191,6 +276,7 @@ class TaskNodeCtorProxy(TaskNodeCtorDefBase):
|
|
191
276
|
srcdir = self.srcdir
|
192
277
|
node = self.uses.mkTaskNode(params=params, srcdir=srcdir, name=name, needs=needs)
|
193
278
|
node.passthrough = self.passthrough
|
279
|
+
node.consumes = self.consumes
|
194
280
|
return node
|
195
281
|
|
196
282
|
@dc.dataclass
|
@@ -203,6 +289,7 @@ class TaskNodeCtorTask(TaskNodeCtorDefBase):
|
|
203
289
|
|
204
290
|
node = TaskNode(name, srcdir, params, self.task, needs=needs)
|
205
291
|
node.passthrough = self.passthrough
|
292
|
+
node.consumes = self.consumes
|
206
293
|
node.task = self.task
|
207
294
|
|
208
295
|
return node
|
@@ -216,6 +303,7 @@ class TaskNodeCtorWrapper(TaskNodeCtor):
|
|
216
303
|
def mkTaskNode(self, params, srcdir=None, name=None, needs=None) -> TaskNode:
|
217
304
|
node = TaskNode(name, srcdir, params, self.T, needs=needs)
|
218
305
|
node.passthrough = self.passthrough
|
306
|
+
node.consumes = self.consumes
|
219
307
|
return node
|
220
308
|
|
221
309
|
def mkTaskParams(self, params : Dict = None) -> Any:
|
@@ -245,7 +333,7 @@ class TaskNodeCtorWrapper(TaskNodeCtor):
|
|
245
333
|
setattr(obj, key, value)
|
246
334
|
return obj
|
247
335
|
|
248
|
-
def task(paramT,passthrough=False):
|
336
|
+
def task(paramT,passthrough=False,consumes=None):
|
249
337
|
"""Decorator to wrap a task method as a TaskNodeCtor"""
|
250
338
|
def wrapper(T):
|
251
339
|
task_mname = T.__module__
|
@@ -255,6 +343,7 @@ def task(paramT,passthrough=False):
|
|
255
343
|
srcdir=os.path.dirname(os.path.abspath(task_module.__file__)),
|
256
344
|
paramT=paramT,
|
257
345
|
passthrough=passthrough,
|
346
|
+
consumes=consumes,
|
258
347
|
T=T)
|
259
348
|
return ctor
|
260
349
|
return wrapper
|
dv_flow/mgr/task_output.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
from pydantic import BaseModel, Field
|
2
|
-
from typing import Any, List
|
2
|
+
from typing import Any, Dict, List
|
3
3
|
|
4
4
|
class TaskOutput(BaseModel):
|
5
5
|
type : str
|
6
|
-
params : List[Any] = Field(default_factory=list, alias="with")
|
6
|
+
params : List[Any] = Field(default_factory=list, alias="with")
|
7
|
+
deps : Dict[str,List[str]] = Field(default_factory=dict)
|
{dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: dv-flow-mgr
|
3
|
-
Version: 0.0.1.
|
3
|
+
Version: 0.0.1.13703952342a1
|
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
|
@@ -206,7 +206,9 @@ License: Apache License
|
|
206
206
|
limitations under the License.
|
207
207
|
|
208
208
|
License-File: LICENSE
|
209
|
+
Requires-Dist: jq
|
209
210
|
Requires-Dist: pydantic
|
210
211
|
Requires-Dist: pyyaml
|
212
|
+
Requires-Dist: rich
|
211
213
|
Requires-Dist: toposort
|
212
214
|
Requires-Dist: svdep
|
{dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/RECORD
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
dv_flow/mgr/__init__.py,sha256=2iTpSe1M8g_u2UlAQFa3XFfqcw8gBOWdBvrstce1c5E,403
|
2
|
-
dv_flow/mgr/__main__.py,sha256=
|
2
|
+
dv_flow/mgr/__main__.py,sha256=_qiAyACu_Ugo64EIQDWmC0v92nHeaZCxequXTKoCRyo,2030
|
3
3
|
dv_flow/mgr/eval_jq.py,sha256=Ue-qkyNW6uOu2Wy8u6nrTbPPY7ujaHd0-4iki0eV3Ec,294
|
4
4
|
dv_flow/mgr/expr_eval.py,sha256=Mp0TvrV6gZWcj1uYwLfPNI-ARwwdAfwntE5byLBfBuY,2276
|
5
5
|
dv_flow/mgr/expr_parser.py,sha256=FhBTkKKkJXubGHUzmcMWubPfPklYLGzVz1jK4-dYb44,5702
|
@@ -7,7 +7,7 @@ dv_flow/mgr/fileset.py,sha256=ewyjKLzuOecZg0vtabN_UkbzNEnk1sXgrH8uDyeKB60,1184
|
|
7
7
|
dv_flow/mgr/fragment_def.py,sha256=cyzp1XeWtNOaagScmeS-BPsoXj9j2LTBbKq5ZUioz8I,1641
|
8
8
|
dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
|
9
9
|
dv_flow/mgr/package.py,sha256=878twhPD-E1pFlDNUtuyeFEgJ_Y89b560og4St-Iwrs,1679
|
10
|
-
dv_flow/mgr/package_def.py,sha256=
|
10
|
+
dv_flow/mgr/package_def.py,sha256=q8lT8MlDF7nDYTBqtPVQSXdGeN06kceZ3qBH7WhP0Bs,14917
|
11
11
|
dv_flow/mgr/package_import_spec.py,sha256=ah3r15v5Jdub2poc3sgi6Uar1L3oGoYsCPPNiOHV-a4,1760
|
12
12
|
dv_flow/mgr/param.py,sha256=3BY-ucig6JRw73FhjyJQL-vpd57qhAzixgZ8I5FoUpw,553
|
13
13
|
dv_flow/mgr/param_def.py,sha256=gLua-EQiY8V2CFX-2svLRIlrs8PEeGh4-EPtn4a2Mng,712
|
@@ -17,31 +17,31 @@ dv_flow/mgr/pkg_rgy.py,sha256=2R_EaeBDJn5qUq9DzSnLc37wUP36MWSv-p0LgUjJRAg,4471
|
|
17
17
|
dv_flow/mgr/task.py,sha256=kLQSvnVwj9ROIDtxq8lLu-4mJizTxOqvUeogmgN6QAA,5976
|
18
18
|
dv_flow/mgr/task_ctor.py,sha256=hlfl-UVvyjzLFN6D0Oel9eBs0xUQPqCX7gQ0uEHoL7o,1382
|
19
19
|
dv_flow/mgr/task_data.py,sha256=F0X-e0IHTh06Z0F67TWIUPKuJYf6JPzZyMPrDzOJvK0,11409
|
20
|
-
dv_flow/mgr/task_def.py,sha256=
|
20
|
+
dv_flow/mgr/task_def.py,sha256=t5_oDTngtEPRdipQnuJ2ofJrpva1kTecHl4w4mI4GXE,1982
|
21
21
|
dv_flow/mgr/task_exec_data.py,sha256=aT__kmVmNxqnS_GbTRS1vrYgKiv8cH-HUSmRb6YYKsI,640
|
22
|
-
dv_flow/mgr/task_graph_builder.py,sha256=
|
22
|
+
dv_flow/mgr/task_graph_builder.py,sha256=fEqJalmDDDzayJbuyDWAcmumDGK3XgnZmcScoBY8HGg,7887
|
23
23
|
dv_flow/mgr/task_graph_runner.py,sha256=jUGI49QvxUCfQoKQDDk2psbeapIcCg72qNOW1JipHzM,2182
|
24
24
|
dv_flow/mgr/task_graph_runner_local.py,sha256=OrydPwtQ8E7hYWvSXx0h7lI3nfUNFyklULhsyMwz9dA,4687
|
25
25
|
dv_flow/mgr/task_impl_data.py,sha256=bFPijoKrh9x7fZN2DsvRJp0UHo-gGM0VjtDQISyfhFk,321
|
26
|
-
dv_flow/mgr/task_listener_log.py,sha256=
|
26
|
+
dv_flow/mgr/task_listener_log.py,sha256=u7hm8Q8ZVCIY25mNQEI3DIgSMJ_zJ5nbvqukGMXyido,934
|
27
27
|
dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
|
28
|
-
dv_flow/mgr/task_node.py,sha256=
|
29
|
-
dv_flow/mgr/task_output.py,sha256=
|
28
|
+
dv_flow/mgr/task_node.py,sha256=leuQC3IPyZQsJKQwKBTQgvstXxH7Fk10eDINoaK7718,12212
|
29
|
+
dv_flow/mgr/task_output.py,sha256=dkJhhNRFGFQSkVsw_bGirK0_0ghTxBYq1LjRMZCVWnA,245
|
30
30
|
dv_flow/mgr/task_params_ctor.py,sha256=aXgB8o9xFPjaEjGW_xYkEC0N0apzGzGUPDj7g2ZLvus,1112
|
31
31
|
dv_flow/mgr/task_runner.py,sha256=Ky10BWKy_NhvJp2nsbB0pyS8n1K0pKatBEmTdD1ZKOc,7071
|
32
32
|
dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
33
|
dv_flow/mgr/type_def.py,sha256=KdhuNlfw-NKU-4VZFCnMPyj775yEB7cpr5tz73a9yuQ,259
|
34
34
|
dv_flow/mgr/util.py,sha256=06eVyURF4ga-s8C9Sd3ZSDebwO4QS0XXaB8xADVbWRc,1437
|
35
|
-
dv_flow/mgr/cmds/cmd_run.py,sha256=
|
35
|
+
dv_flow/mgr/cmds/cmd_run.py,sha256=r5j-T121oXYDyOYfrCZSjzeblp1awiAn17HkPtLaGg4,2372
|
36
36
|
dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
|
37
37
|
dv_flow/mgr/std/exec.py,sha256=ETx9xSxhdCD_iw6pcmhrafDCJ-41AneyEAPwQf3q-3w,452
|
38
38
|
dv_flow/mgr/std/fileset.py,sha256=abHgTxz25FD1ep5QXlCZKt4gCyfplJsjx6LyfQ11f_Q,2683
|
39
39
|
dv_flow/mgr/std/flow.dv,sha256=jlFOh3xVECOzHws7x6YvJ9eCIGHM5gsPeEnheiGOukY,1553
|
40
|
-
dv_flow/mgr/std/message.py,sha256=
|
40
|
+
dv_flow/mgr/std/message.py,sha256=T8Ye44784rD6CT2qIAP5SD7sKPdAlGMFimc4IaPCxxE,200
|
41
41
|
dv_flow/mgr/std/task_null.py,sha256=UKwUnqwFPBY8BO44ZAPcgehQB59kHZFa1qyZc1TwUqE,196
|
42
|
-
dv_flow_mgr-0.0.1.
|
43
|
-
dv_flow_mgr-0.0.1.
|
44
|
-
dv_flow_mgr-0.0.1.
|
45
|
-
dv_flow_mgr-0.0.1.
|
46
|
-
dv_flow_mgr-0.0.1.
|
47
|
-
dv_flow_mgr-0.0.1.
|
42
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
43
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/METADATA,sha256=N1CO707jpDo9FEXJ2Xujl7IGNo4Bt8LRW1NrpJnK47k,13314
|
44
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
45
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
46
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
47
|
+
dv_flow_mgr-0.0.1.13703952342a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/LICENSE
RENAMED
File without changes
|
{dv_flow_mgr-0.0.1.13667970156a1.dist-info → dv_flow_mgr-0.0.1.13703952342a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|