dv-flow-mgr 0.0.2.14182043984a1__py3-none-any.whl → 1.0.0.14370600369a1__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 (43) hide show
  1. dv_flow/mgr/__init__.py +2 -1
  2. dv_flow/mgr/cmds/cmd_graph.py +2 -3
  3. dv_flow/mgr/cmds/cmd_run.py +7 -9
  4. dv_flow/mgr/cmds/cmd_show.py +1 -2
  5. dv_flow/mgr/cond_def.py +16 -0
  6. dv_flow/mgr/config.py +7 -0
  7. dv_flow/mgr/config_def.py +33 -0
  8. dv_flow/mgr/exec_callable.py +88 -0
  9. dv_flow/mgr/{pkg_rgy.py → ext_rgy.py} +44 -35
  10. dv_flow/mgr/extend_def.py +21 -0
  11. dv_flow/mgr/fragment_def.py +4 -3
  12. dv_flow/mgr/need_def.py +6 -0
  13. dv_flow/mgr/null_callable.py +10 -0
  14. dv_flow/mgr/package.py +30 -6
  15. dv_flow/mgr/package_def.py +40 -444
  16. dv_flow/mgr/package_loader.py +701 -0
  17. dv_flow/mgr/param_def.py +2 -1
  18. dv_flow/mgr/parser.out +567 -0
  19. dv_flow/mgr/pytask_callable.py +25 -0
  20. dv_flow/mgr/root_package.py +9 -0
  21. dv_flow/mgr/shell_callable.py +14 -0
  22. dv_flow/mgr/srcinfo.py +15 -0
  23. dv_flow/mgr/std/flow.dv +25 -4
  24. dv_flow/mgr/task.py +68 -0
  25. dv_flow/mgr/task_def.py +36 -24
  26. dv_flow/mgr/task_graph_builder.py +497 -247
  27. dv_flow/mgr/task_listener_log.py +4 -0
  28. dv_flow/mgr/task_node_ctor.py +11 -3
  29. dv_flow/mgr/task_node_ctor_compound.py +21 -33
  30. dv_flow/mgr/task_node_leaf.py +25 -3
  31. dv_flow/mgr/task_params_ctor.py +0 -1
  32. dv_flow/mgr/task_run_ctxt.py +4 -0
  33. dv_flow/mgr/task_runner.py +2 -0
  34. dv_flow/mgr/util/cmds/cmd_schema.py +0 -2
  35. dv_flow/mgr/util/util.py +4 -3
  36. dv_flow/mgr/yaml_srcinfo_loader.py +55 -0
  37. {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/METADATA +1 -1
  38. dv_flow_mgr-1.0.0.14370600369a1.dist-info/RECORD +74 -0
  39. dv_flow_mgr-0.0.2.14182043984a1.dist-info/RECORD +0 -59
  40. {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/WHEEL +0 -0
  41. {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/entry_points.txt +0 -0
  42. {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/licenses/LICENSE +0 -0
  43. {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/top_level.txt +0 -0
@@ -33,6 +33,10 @@ class TaskListenerLog(object):
33
33
  def __post_init__(self):
34
34
  self.console = Console(highlight=False)
35
35
 
36
+ def marker(self, marker):
37
+ """Receives markers during loading"""
38
+ pass
39
+
36
40
  def event(self, task : 'Task', reason : 'Reason'):
37
41
  if reason == 'enter':
38
42
  self.level += 1
@@ -33,9 +33,13 @@ from .param import Param
33
33
  @dc.dataclass
34
34
  class TaskNodeCtor(object):
35
35
  """
36
- Factory for a specific task type
37
- - Produces a task parameters object, applying value-setting instructions
38
- - Produces a TaskNode
36
+ Factory for a specific task type. A TaskNodeCtor has two clients.
37
+ - The graph builder may call it. In this case, 'needs', passthrough,
38
+ and consumes are known. Also, the default parameters block is built
39
+ - It may be called to programmatically create a task from a Python
40
+ workflow (eg pytest-dv-flow). In this case, the API call may supply
41
+ additional needs, specify passthrough and consumes requirements,
42
+ and customize parameter values
39
43
  """
40
44
  name : str
41
45
  srcdir : str
@@ -44,6 +48,10 @@ class TaskNodeCtor(object):
44
48
  consumes : List[Any]
45
49
  needs : List[str]
46
50
 
51
+ def __post_init__(self):
52
+ if self.paramT is None:
53
+ raise Exception("paramT must be specified for TaskNodeCtor")
54
+
47
55
  def __call__(self,
48
56
  builder=None,
49
57
  name=None,
@@ -25,6 +25,7 @@ import dataclasses as dc
25
25
  import logging
26
26
  from pydantic import BaseModel
27
27
  from typing import Any, Callable, ClassVar, Dict, List, Tuple
28
+ from .task import Task
28
29
  from .task_def import TaskDef, RundirE
29
30
  from .task_data import TaskDataOutput, TaskDataResult
30
31
  from .task_node import TaskNode
@@ -33,8 +34,8 @@ from .task_node_compound import TaskNodeCompound
33
34
 
34
35
  @dc.dataclass
35
36
  class TaskNodeCtorCompound(TaskNodeCtor):
36
- task_def : TaskDef
37
- tasks : List[TaskNodeCtor] = dc.field(default_factory=list)
37
+ task : Task
38
+ tasks : List[Task] = dc.field(default_factory=list)
38
39
 
39
40
  _log : ClassVar = logging.getLogger("TaskNodeCtorCompound")
40
41
 
@@ -54,9 +55,9 @@ class TaskNodeCtorCompound(TaskNodeCtor):
54
55
  needs=needs)
55
56
  # Use the compound task's rundir
56
57
 
57
- builder.enter_compound(node, self.task_def.rundir)
58
+ # TODO:
59
+ builder.enter_compound(node, RundirE.Unique)
58
60
  node.input.rundir = builder.get_rundir()
59
- print("input rundir: %s" % str(node.input.rundir))
60
61
  builder.addTask("in", node.input)
61
62
 
62
63
  self._buildSubGraph(builder, node)
@@ -73,57 +74,44 @@ class TaskNodeCtorCompound(TaskNodeCtor):
73
74
  tasks_defs = []
74
75
  for t in self.tasks:
75
76
  # Initially,
76
- sn = t.mkTaskNode(
77
+ # builder.get
78
+ sn = t.ctor.mkTaskNode(
77
79
  builder=builder,
78
- params=t.mkTaskParams(),
80
+ params=t.ctor.mkTaskParams(),
79
81
  name=t.name,
80
82
  needs=[])
81
83
  nodes.append(sn)
82
84
  builder.addTask(t.name, sn)
83
- tasks_defs.append(sn, t)
85
+ tasks_defs.append((t, sn))
84
86
 
85
- for t,td in tasks_defs:
87
+ # Build out the needs for each task
88
+ for t,tn in tasks_defs:
86
89
  # Need to get the parent name
87
90
  needs = []
88
- for n in td.needs:
89
- # 'n' is the dependency as specified by the user
90
- # Need to perform a search
91
- # - Look locally inside the compound task (pkg.compound.name)
92
- # - Look for the fully-qualified task name
93
- # - Look for the task name in the package
94
-
95
- names = []
96
- for pref in (builder.get_name_prefix(), "", builder.package().name):
97
- need_name = n if pref == "" else ("%s.%s" % (pref, n))
98
- names.append(need_name)
99
- task = builder.findTask(need_name)
100
-
101
- if task is not None:
102
- break
91
+ for n in t.needs:
92
+ sn = builder.findTask(n.name)
103
93
 
104
- if task is None:
105
- raise Exception("Failed to find task %s (searched %s)" % (n, str(names)))
106
- self._log.debug("Add %s as dependency of %s" % (
107
- task.name, t.name
108
- ))
109
- needs.append(task)
110
- t.needs.extends(needs)
94
+ if sn is None:
95
+ raise Exception("Failed to find task %s" % n.name)
96
+ self._log.debug("Add %s as dependency of %s" % (sn.name, t.name))
97
+ needs.append((sn, False))
98
+ tn.needs.extend(needs)
111
99
 
112
100
  in_t = builder.findTask("in")
113
101
 
114
102
 
115
103
  for n in nodes:
116
-
117
104
  # If this node references one of the others, then
118
105
  # it takes input from that node, and not the 'in' node
119
106
  has_ref = False
107
+ self._log.debug("Node: %s (task=%s)" % (n.name, str(n)))
120
108
  for nt in n.needs:
121
109
  self._log.debug("nt: %s %s" % (nt[0].name, str(n.needs)))
122
110
  if nt[0] in nodes or nt[0] is in_t:
123
111
  has_ref = True
124
112
  break
125
113
  if not has_ref:
126
- n.needs.append([builder.findTask("in"), False])
114
+ n.needs.append((builder.findTask("in"), False))
127
115
 
128
116
  # Only add a dependency on the node if no other node references it
129
117
  is_ref = False
@@ -133,7 +121,7 @@ class TaskNodeCtorCompound(TaskNodeCtor):
133
121
  is_ref = True
134
122
  break
135
123
  if not is_ref:
136
- node.needs.append([n, False])
124
+ node.needs.append((n, False))
137
125
 
138
126
  self._log.debug("nodes: %d (%d %d)" % (len(nodes), len(self.tasks), len(node.needs)))
139
127
 
@@ -6,7 +6,7 @@ import pydantic.dataclasses as pdc
6
6
  import logging
7
7
  import toposort
8
8
  from typing import Any, Callable, ClassVar, Dict, List, Tuple
9
- from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
9
+ from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult, TaskMarker, SeverityE
10
10
  from .task_def import ConsumesE, PassthroughE
11
11
  from .task_node import TaskNode
12
12
  from .task_run_ctxt import TaskRunCtxt
@@ -88,11 +88,15 @@ class TaskNodeLeaf(TaskNode):
88
88
  # Default inputs is the list of parameter sets that match 'consumes'
89
89
  inputs = []
90
90
  if isinstance(self.consumes, list) and len(self.consumes):
91
+ self._log.debug("consumes(list): %s" % str(self.consumes))
91
92
  for in_p in in_params:
92
93
  if self._matches(in_p, self.consumes):
93
94
  inputs.append(in_p)
94
95
  elif self.consumes == ConsumesE.All:
95
96
  inputs = in_params.copy()
97
+ self._log.debug("consumes(all): %s" % str(self.consumes))
98
+ else:
99
+ self._log.debug("consumes(unknown): %s" % str(self.consumes))
96
100
 
97
101
  for name,field in self.params.model_fields.items():
98
102
  value = getattr(self.params, name)
@@ -119,7 +123,23 @@ class TaskNodeLeaf(TaskNode):
119
123
  ctxt = TaskRunCtxt(runner=runner, rundir=input.rundir)
120
124
 
121
125
  self._log.debug("--> Call task method %s" % str(self.task))
122
- self.result : TaskDataResult = await self.task(ctxt, input)
126
+ try:
127
+ self.result : TaskDataResult = await self.task(ctxt, input)
128
+ except Exception as e:
129
+ print("== Task threw exception ==")
130
+ self._log.error("Task %s failed: %s" % (self.name, str(e)))
131
+ self._log.exception(e)
132
+ self.result = TaskDataResult(
133
+ status=1,
134
+ changed=False,
135
+ output=[],
136
+ markers=[
137
+ TaskMarker(
138
+ msg="Task implementation raised an exception: %s" % str(e),
139
+ severity=SeverityE.Error
140
+ )
141
+ ],
142
+ memento=None)
123
143
  self._log.debug("<-- Call task method %s" % str(self.task))
124
144
 
125
145
  self.result.markers.extend(ctxt._markers)
@@ -163,7 +183,9 @@ class TaskNodeLeaf(TaskNode):
163
183
  getattr(out, "src", "<unknown>")))
164
184
  output.append(out)
165
185
  else:
166
- self._log.debug("non-passthrough: %s (only local outputs propagated)" % self.name)
186
+ self._log.debug("non-passthrough: %s (only local outputs propagated) %s" % (
187
+ self.name,
188
+ str(self.passthrough)))
167
189
  # empty dependency map
168
190
  # dep_m = {
169
191
  # self.name : []
@@ -48,5 +48,4 @@ class TaskParamsCtor(object):
48
48
  val = getattr(self.values[i], field.name)
49
49
  setattr(params, field.name, val)
50
50
 
51
- print("params: %s" % str(params))
52
51
  return params
@@ -79,3 +79,7 @@ class TaskRunCtxt(object):
79
79
  def error(self, msg : str, loc : TaskMarkerLoc=None):
80
80
  """Add an error marker related to the task's execution"""
81
81
  self.marker(msg=msg, severity=SeverityE.Error, loc=loc)
82
+
83
+ def info(self, msg : str, loc : TaskMarkerLoc=None):
84
+ """Add an error marker related to the task's execution"""
85
+ self.marker(msg=msg, severity=SeverityE.Info, loc=loc)
@@ -143,6 +143,7 @@ class TaskSetRunner(TaskRunner):
143
143
  if not os.path.isdir(rundir):
144
144
  os.makedirs(rundir, exist_ok=True)
145
145
 
146
+ self._log.debug("start task %s" % t.name)
146
147
  self._notify(t, "enter")
147
148
  t.start = datetime.now()
148
149
  coro = asyncio.Task(t.do_run(
@@ -188,6 +189,7 @@ class TaskSetRunner(TaskRunner):
188
189
  if active_task_l[i][1] == d:
189
190
  tt = active_task_l[i][0]
190
191
  tt.end = datetime.now()
192
+ self._log.debug("complete task %s" % tt.name)
191
193
  if tt.result is None:
192
194
  raise Exception("Task %s did not produce a result" % tt.name)
193
195
  if tt.result.memento is not None:
@@ -29,8 +29,6 @@ class CmdSchema(object):
29
29
  )
30
30
 
31
31
  defs = {}
32
- print("root_s keys: %s" % " ".join(root_s.keys()))
33
- print("root_s defs: %s" % " ".join(root_s["$defs"].keys()))
34
32
  defs.update(root_s["$defs"])
35
33
  # defs.update(pkg_s["$defs"])
36
34
  # defs.update(frag_s["$defs"])
dv_flow/mgr/util/util.py CHANGED
@@ -21,9 +21,9 @@
21
21
  #****************************************************************************
22
22
  import os
23
23
  import yaml
24
- from ..package_def import PackageDef
24
+ from ..package_loader import PackageLoader
25
25
 
26
- def loadProjPkgDef(path):
26
+ def loadProjPkgDef(path, listener=None):
27
27
  """Locates the project's flow spec and returns the PackageDef"""
28
28
 
29
29
  dir = path
@@ -33,7 +33,8 @@ def loadProjPkgDef(path):
33
33
  with open(os.path.join(dir, "flow.dv")) as f:
34
34
  data = yaml.load(f, Loader=yaml.FullLoader)
35
35
  if "package" in data.keys():
36
- ret = PackageDef.load(os.path.join(dir, "flow.dv"))
36
+ listeners = [listener] if listener is None else []
37
+ ret = PackageLoader(marker_listeners=listeners).load(os.path.join(dir, "flow.dv"))
37
38
  break
38
39
  dir = os.path.dirname(dir)
39
40
  return ret
@@ -0,0 +1,55 @@
1
+
2
+ from yaml.loader import SafeLoader
3
+
4
+ class YamlSrcInfoLoader(SafeLoader):
5
+ scopes = {
6
+ "tasks",
7
+ "body",
8
+ "package",
9
+ "fragment"
10
+ }
11
+
12
+ def __init__(self, filename):
13
+ self.filename = filename
14
+
15
+ def __call__(self, stream):
16
+ super().__init__(stream)
17
+ return self
18
+
19
+ def construct_document(self, node):
20
+ ret = super().construct_document(node)
21
+
22
+ # We only support srcinfo on certain elements
23
+ if ret is not None:
24
+ scope_s = []
25
+ self.prune_srcinfo_dict(ret, scope_s)
26
+
27
+ return ret
28
+
29
+ def prune_srcinfo_dict(self, ret, scope_s):
30
+ if "srcinfo" in ret.keys() and len(scope_s) and scope_s[-1] not in YamlSrcInfoLoader.scopes:
31
+ ret.pop('srcinfo')
32
+
33
+ for k,v in ret.items():
34
+ scope_s.append(k)
35
+ if type(v) == dict:
36
+ self.prune_srcinfo_dict(v, scope_s)
37
+ elif type(v) == list:
38
+ self.prune_srcinfo_list(v, scope_s)
39
+ scope_s.pop()
40
+
41
+ def prune_srcinfo_list(self, ret, scope_s):
42
+ for v in ret:
43
+ if type(v) == dict:
44
+ self.prune_srcinfo_dict(v, scope_s)
45
+ elif type(v) == list:
46
+ self.prune_srcinfo_list(v, scope_s)
47
+
48
+ def construct_mapping(self, node, deep=False):
49
+ mapping = super().construct_mapping(node, deep=deep)
50
+ mapping['srcinfo'] = {
51
+ "file": self.filename,
52
+ "lineno": node.start_mark.line + 1,
53
+ "linepos": node.start_mark.column + 1
54
+ }
55
+ return mapping
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.2.14182043984a1
3
+ Version: 1.0.0.14370600369a1
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,74 @@
1
+ dv_flow/mgr/__init__.py,sha256=dsBbrdDvG4Y2ZlQIxU-0SuJMultZbIGLnvmpD0B0ICo,1235
2
+ dv_flow/mgr/__main__.py,sha256=4_MJIH-FxIFXrk5pvic9bBereeZxQsrxnESA4SZ5q9U,3600
3
+ dv_flow/mgr/cond_def.py,sha256=2ZkzPusqVkN1fFMTvkDl9O_OJLPdD_cK3xzX9J75RMw,343
4
+ dv_flow/mgr/config.py,sha256=nF_hM-RwJLvgfbwRe11a1wsAu_SihSd5qOxQi7I6lvU,108
5
+ dv_flow/mgr/config_def.py,sha256=_71YbjaHbSx7REWxG3uDw8lh8-k7UzEvSXlEFy2V1Rc,1121
6
+ dv_flow/mgr/eval_jq.py,sha256=bRsHtaN51qIOiZK1VJV52W0-vj5VH0nQ7XIFebZi5kI,1129
7
+ dv_flow/mgr/exec_callable.py,sha256=NbhTVqvrTd-vsTi3cJ3iGrpVe8tfAqxFsSopaNXApRE,3117
8
+ dv_flow/mgr/expr_eval.py,sha256=N_8hRIgzJK9JVqhRt8F9rc4S7AAdKHMMltafqk6KhJs,3113
9
+ dv_flow/mgr/expr_parser.py,sha256=P6u2FdSXeZbdamC3zpEnYKLcK2RULQJfSoev2Ol75fE,6543
10
+ dv_flow/mgr/ext_rgy.py,sha256=BeHbTjB6KFcI5xhbl_O00YQW7MQ8efCFTD_Y8xf7I44,5651
11
+ dv_flow/mgr/extend_def.py,sha256=Ndh4z4XqqimtoS8-6ZNMDOvkVpVmEaWZsNEPM26PDZ0,653
12
+ dv_flow/mgr/fileset.py,sha256=4izm4-qldWLiZxWDUa5Em0iFizzS-S-O0YU6zvtbUUs,1264
13
+ dv_flow/mgr/fragment_def.py,sha256=2qx6KWiHCDvnb9JXnqIOb4n6kemAClAYuBoM6ex6xJE,1696
14
+ dv_flow/mgr/listener_list.py,sha256=BfqvEO2AyJvyc4ClU-hPgDPqWSlqvSdG-yaFEHvUrMc,272
15
+ dv_flow/mgr/need_def.py,sha256=X52FJnhukwFsGCkIM-W6apZEdxqS5Gmm-rRO-TS83aU,173
16
+ dv_flow/mgr/null_callable.py,sha256=x6hlJ9EL6xFLSGFgd14eXbxSWxsUGF56jpbLhERjPtg,243
17
+ dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
18
+ dv_flow/mgr/package.py,sha256=PvOuNfuy-SlaiMDzT5SU48OlPJrhS9vpNCgX06KNyTo,2336
19
+ dv_flow/mgr/package_def.py,sha256=-UyeFb_0Sj16RtS2vxtIxTfl-oW7adJjM1I3ZSjcRpc,5729
20
+ dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
21
+ dv_flow/mgr/package_loader.py,sha256=LsPAcCKfAiEapC0I3m3Jv6Ra6YsQCXAqJe3_ETE6m_U,25071
22
+ dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
23
+ dv_flow/mgr/param_def.py,sha256=hOBBRLiXJ5DakXkhrLCBAQ9GPlgq-QS52r0aflmIgbg,1832
24
+ dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ,1981
25
+ dv_flow/mgr/parser.out,sha256=yYS7meH_rdSrYLZSTwGveLPQOE6PYP4aiqjvbyl3DT4,22575
26
+ dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
27
+ dv_flow/mgr/pytask_callable.py,sha256=JiFN2vq6qanI6FXJBeidwiBSn6t0oC0izPJ01c5QJTE,688
28
+ dv_flow/mgr/root_package.py,sha256=nYLOpZVQEDbY0Ui5X5UNeUHXOvqRENew7B2zpC2V2gQ,136
29
+ dv_flow/mgr/shell_callable.py,sha256=IWb0C4L-v_hfnvnhS3g2rhXqutURex_U-dBJgdNxP7I,302
30
+ dv_flow/mgr/srcinfo.py,sha256=xrfp-relVr7hYNbxOjY5jqX4H0nNMm9HK5AAM6_Piyk,366
31
+ dv_flow/mgr/task.py,sha256=Xe1sCCTN4yJwhB2Aw_rywdlmVPY2CDnuwZisULuOXhw,2036
32
+ dv_flow/mgr/task_data.py,sha256=lN7Iq8YTitEMGG4rZqYQi6Ri2HuPgBQ5oGQbW-63T8c,12436
33
+ dv_flow/mgr/task_def.py,sha256=vA16E5sieAyjrYgQy32DZ_HLdxivjRrm4XNkOKofnKc,5033
34
+ dv_flow/mgr/task_graph_builder.py,sha256=SMGuYXWGwTXchd_ObKFNzbpXmlOTAWr0_YWN4XLbMWI,24178
35
+ dv_flow/mgr/task_graph_dot_writer.py,sha256=GxqiYwQJbFgUQdnPCS9vpIYmYFbSXwnXCSbGmjbxC3M,2418
36
+ dv_flow/mgr/task_listener_log.py,sha256=QH7hAVO1agYJoOx16XqjWv1c-jk5zb6p6A-hic7OMU0,4150
37
+ dv_flow/mgr/task_node.py,sha256=JXq2QimCZKxfhhkdhM-HKk4JbxpIlpW65xUJ0hVlQc0,4981
38
+ dv_flow/mgr/task_node_compound.py,sha256=mNu4nf9hVqu2698ue5fpE3FeAOkvJH0Ke2W9V0G3-As,2975
39
+ dv_flow/mgr/task_node_ctor.py,sha256=YsoVMX5WbpbzcHvEK7ps_ZRV-J7MZ3F8NNozQw7vbog,4418
40
+ dv_flow/mgr/task_node_ctor_compound.py,sha256=290JdcTnL3b3Gv7s_wRLjdM02ezKhc9QnxZE0mv72i8,4379
41
+ dv_flow/mgr/task_node_ctor_compound_proxy.py,sha256=D8x54nD8Pd-2-_mr1syhqVeSFfIVf100ldi3bdzmSfI,2073
42
+ dv_flow/mgr/task_node_ctor_def_base.py,sha256=_8QQHKDkONio_ve0Z409yxC0AMO8ocNBPDjRiNED1FI,1503
43
+ dv_flow/mgr/task_node_ctor_proxy.py,sha256=ViOFJ64JM4-CGFZNl89BghFuKSQ66kZVqSj4v2PA6VA,1906
44
+ dv_flow/mgr/task_node_ctor_task.py,sha256=d49g90TyPCMFR8BuWWqp4ym-MW5vGSdDR0V47Ru28JY,2232
45
+ dv_flow/mgr/task_node_ctor_wrapper.py,sha256=Nb1CVcPHZofnb-iLWDHQWAxlTOdbRrnR9DdSxY8yOec,3626
46
+ dv_flow/mgr/task_node_leaf.py,sha256=wp0wCstQ8eyEJwJcbCqdpei6FvLE0C3-EEBPMjGv3-Y,8488
47
+ dv_flow/mgr/task_output.py,sha256=ZwyvwnYj_gHOEFAEOH3m24Xfc4Cn77hb1j7LkX8_3C4,1086
48
+ dv_flow/mgr/task_params_ctor.py,sha256=qlrzibGAFHmbqOu88jEoh1wOSFHu68Gwdgc259-50e8,1915
49
+ dv_flow/mgr/task_run_ctxt.py,sha256=w1EOG9R16j0eT8fNcOCqlfyFrw277onsSur607eNprY,2811
50
+ dv_flow/mgr/task_runner.py,sha256=6wtaEh7iflnAtBZk73LNYNo6Kv4aOYKy-7bW5e5Zkxk,9722
51
+ dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
53
+ dv_flow/mgr/yaml_srcinfo_loader.py,sha256=5ibJ9lpM7HYpgkRxozlZJx8hnUqjfq1cmYQm3ZhVgv8,1589
54
+ dv_flow/mgr/cmds/cmd_graph.py,sha256=mvOE_PCq7l9htVbUiBNv6iu6WvFJJJ2KhrCcsNsDGNM,2641
55
+ dv_flow/mgr/cmds/cmd_run.py,sha256=AdGe1ioQJzEvVyq1oHT67uoHAyfiPoHXWf-cbvmhGYU,3288
56
+ dv_flow/mgr/cmds/cmd_show.py,sha256=UD4HEguZZomKBO-UyOCYyftINBPG1Ka1p_XQvkHBTkw,3743
57
+ dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
58
+ dv_flow/mgr/std/create_file.py,sha256=TAUhpXlTmUDUYw4Dw0cI9FPuYI84yCVkoadnWZxi_8U,2888
59
+ dv_flow/mgr/std/exec.py,sha256=UChqa_tAjvdB1NjqTsvlPgFomP8hMsX2rAOPyUonNpk,3896
60
+ dv_flow/mgr/std/fileset.py,sha256=5IxS6T-x0wzA6fdEQcfHZ9kNP8IpH9hfJ3UMhL4A6Iw,3911
61
+ dv_flow/mgr/std/flow.dv,sha256=sBLzgslJzU0iS4AMxByXVUKDUoSwg4mlC8Wtiz6UhKs,4130
62
+ dv_flow/mgr/std/message.py,sha256=0JHLErg8whqMLAasG1fumZ2O7R7WNWeNQ9ibJaLDpVY,1029
63
+ dv_flow/mgr/std/task_null.py,sha256=dw6LXBXVwth6gLPeduDvlz5znAhcVpDH8r1DticD-0w,1041
64
+ dv_flow/mgr/util/__init__.py,sha256=6uuA6z5cKS2hcjJw6YyEM2M79g6OpXb6tZF_Gku-AGU,22
65
+ dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,983
66
+ dv_flow/mgr/util/util.py,sha256=cBNt3JJ0PGLlUQFTtBLi12i2j_9gNgSBtKdwS3VfF5Y,1566
67
+ dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ dv_flow/mgr/util/cmds/cmd_schema.py,sha256=IJzZdxCSEgIQ79LpYiM7UqJ9RJ-7yraqmBN2XVgAgXA,1752
69
+ dv_flow_mgr-1.0.0.14370600369a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
70
+ dv_flow_mgr-1.0.0.14370600369a1.dist-info/METADATA,sha256=wA6InzFEAFz6GWxSba-dGN9jtvIiIUrextWYLmraWlI,13336
71
+ dv_flow_mgr-1.0.0.14370600369a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
72
+ dv_flow_mgr-1.0.0.14370600369a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
73
+ dv_flow_mgr-1.0.0.14370600369a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
74
+ dv_flow_mgr-1.0.0.14370600369a1.dist-info/RECORD,,
@@ -1,59 +0,0 @@
1
- dv_flow/mgr/__init__.py,sha256=hzwGMkN3t6RkfZSCHi_6mvEkCzEOd91EZBv9F2ZCa-8,1193
2
- dv_flow/mgr/__main__.py,sha256=4_MJIH-FxIFXrk5pvic9bBereeZxQsrxnESA4SZ5q9U,3600
3
- dv_flow/mgr/eval_jq.py,sha256=bRsHtaN51qIOiZK1VJV52W0-vj5VH0nQ7XIFebZi5kI,1129
4
- dv_flow/mgr/expr_eval.py,sha256=N_8hRIgzJK9JVqhRt8F9rc4S7AAdKHMMltafqk6KhJs,3113
5
- dv_flow/mgr/expr_parser.py,sha256=P6u2FdSXeZbdamC3zpEnYKLcK2RULQJfSoev2Ol75fE,6543
6
- dv_flow/mgr/fileset.py,sha256=4izm4-qldWLiZxWDUa5Em0iFizzS-S-O0YU6zvtbUUs,1264
7
- dv_flow/mgr/fragment_def.py,sha256=AHx3ITbiNbGCzlDk5FM8Iimm0GJnWXDDRAoRC1b41jM,1647
8
- dv_flow/mgr/listener_list.py,sha256=BfqvEO2AyJvyc4ClU-hPgDPqWSlqvSdG-yaFEHvUrMc,272
9
- dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
10
- dv_flow/mgr/package.py,sha256=9FhOu1hKYKzlD88zehwrI6KAcs1E7TbXDnq4v54dqDQ,1701
11
- dv_flow/mgr/package_def.py,sha256=uwyIEoRjkhvWsnYsQ-Q6tcZWobKRjRh4fJ9GQG4qsYE,21442
12
- dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
13
- dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
14
- dv_flow/mgr/param_def.py,sha256=mkAw3DanIxcVWRYeh9lUAfUMkpqDFly_Ku_iobr4ix8,1745
15
- dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ,1981
16
- dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
17
- dv_flow/mgr/pkg_rgy.py,sha256=d1nIjRm3ymMNJT-yiMDxCS6bFisTPvLMqh5VrfsHVKM,5404
18
- dv_flow/mgr/task_data.py,sha256=lN7Iq8YTitEMGG4rZqYQi6Ri2HuPgBQ5oGQbW-63T8c,12436
19
- dv_flow/mgr/task_def.py,sha256=ClCPFLlpT70Nxcr4xxBJBtdRxwFHq5YUtEDNVCiqFtE,4559
20
- dv_flow/mgr/task_graph_builder.py,sha256=b97detx0zawWy5dsVq2ZUjU710V2fmYkMxT04q9sSTs,15797
21
- dv_flow/mgr/task_graph_dot_writer.py,sha256=GxqiYwQJbFgUQdnPCS9vpIYmYFbSXwnXCSbGmjbxC3M,2418
22
- dv_flow/mgr/task_listener_log.py,sha256=hrJEjSRXXoovDTcD1Cmhi3Spzw7uEJ-WP6tv6JUaa6s,4060
23
- dv_flow/mgr/task_node.py,sha256=JXq2QimCZKxfhhkdhM-HKk4JbxpIlpW65xUJ0hVlQc0,4981
24
- dv_flow/mgr/task_node_compound.py,sha256=mNu4nf9hVqu2698ue5fpE3FeAOkvJH0Ke2W9V0G3-As,2975
25
- dv_flow/mgr/task_node_ctor.py,sha256=COFGvm5PR2B92H3uW1yhDIUCmppo9U4IfOcv_Jrsreo,3952
26
- dv_flow/mgr/task_node_ctor_compound.py,sha256=6SSulKk20PTLAgcwGqGear-jZBHhSYg_XypTYzX8iAc,4946
27
- dv_flow/mgr/task_node_ctor_compound_proxy.py,sha256=D8x54nD8Pd-2-_mr1syhqVeSFfIVf100ldi3bdzmSfI,2073
28
- dv_flow/mgr/task_node_ctor_def_base.py,sha256=_8QQHKDkONio_ve0Z409yxC0AMO8ocNBPDjRiNED1FI,1503
29
- dv_flow/mgr/task_node_ctor_proxy.py,sha256=ViOFJ64JM4-CGFZNl89BghFuKSQ66kZVqSj4v2PA6VA,1906
30
- dv_flow/mgr/task_node_ctor_task.py,sha256=d49g90TyPCMFR8BuWWqp4ym-MW5vGSdDR0V47Ru28JY,2232
31
- dv_flow/mgr/task_node_ctor_wrapper.py,sha256=Nb1CVcPHZofnb-iLWDHQWAxlTOdbRrnR9DdSxY8yOec,3626
32
- dv_flow/mgr/task_node_leaf.py,sha256=IXPYnjDJvfXEKWfmiyIMdS9DKcUU-PxGNPwyJBiOXyw,7584
33
- dv_flow/mgr/task_output.py,sha256=ZwyvwnYj_gHOEFAEOH3m24Xfc4Cn77hb1j7LkX8_3C4,1086
34
- dv_flow/mgr/task_params_ctor.py,sha256=BPkbnoCtzhCxc1g8CJ6VimCcm5UAu92PXeDMhQ4lYsQ,1957
35
- dv_flow/mgr/task_run_ctxt.py,sha256=t2kGR-GbUC3s5YTYLxYmP43LRUvGKjqdGK5clRpAkzw,2624
36
- dv_flow/mgr/task_runner.py,sha256=-919VntXAe2XSuFW2dFpgvUre-NkILBnDBbAKBZYn5w,9594
37
- dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
39
- dv_flow/mgr/cmds/cmd_graph.py,sha256=Ykw__EdwamDBZZKxQZVbtMtFl7koq5dJMShTBXSM2pk,2672
40
- dv_flow/mgr/cmds/cmd_run.py,sha256=ADFBetIVk_CwMQXO3oSNdtUgrxx8FyQj9LYQ2cA8nuo,3394
41
- dv_flow/mgr/cmds/cmd_show.py,sha256=CZlgwB3Hcu-6HS-diqnWjCcPPpO-kjIIXU3DgWXvsf4,3773
42
- dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
43
- dv_flow/mgr/std/create_file.py,sha256=TAUhpXlTmUDUYw4Dw0cI9FPuYI84yCVkoadnWZxi_8U,2888
44
- dv_flow/mgr/std/exec.py,sha256=UChqa_tAjvdB1NjqTsvlPgFomP8hMsX2rAOPyUonNpk,3896
45
- dv_flow/mgr/std/fileset.py,sha256=5IxS6T-x0wzA6fdEQcfHZ9kNP8IpH9hfJ3UMhL4A6Iw,3911
46
- dv_flow/mgr/std/flow.dv,sha256=t8m-urWYhKEAOFhG4wlrMqGHwiWDyO8H-b6-5vNQkBk,3795
47
- dv_flow/mgr/std/message.py,sha256=0JHLErg8whqMLAasG1fumZ2O7R7WNWeNQ9ibJaLDpVY,1029
48
- dv_flow/mgr/std/task_null.py,sha256=dw6LXBXVwth6gLPeduDvlz5znAhcVpDH8r1DticD-0w,1041
49
- dv_flow/mgr/util/__init__.py,sha256=6uuA6z5cKS2hcjJw6YyEM2M79g6OpXb6tZF_Gku-AGU,22
50
- dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,983
51
- dv_flow/mgr/util/util.py,sha256=yg9oTPRiO87mkCSOQpOtlG9vyKPQzY3qp4OJkEMbWyY,1443
52
- dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
- dv_flow/mgr/util/cmds/cmd_schema.py,sha256=lrEI-Jwb8j4I4yYOn9hq7_7NYbK8leVxLesrHyEWm-E,1879
54
- dv_flow_mgr-0.0.2.14182043984a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
55
- dv_flow_mgr-0.0.2.14182043984a1.dist-info/METADATA,sha256=4vV1cbCnI2zL7Ew0v6YRd6syDPb5naXkUa07s0wSoFE,13336
56
- dv_flow_mgr-0.0.2.14182043984a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
57
- dv_flow_mgr-0.0.2.14182043984a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
58
- dv_flow_mgr-0.0.2.14182043984a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
59
- dv_flow_mgr-0.0.2.14182043984a1.dist-info/RECORD,,