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.
- dv_flow/mgr/__init__.py +2 -1
- dv_flow/mgr/cmds/cmd_graph.py +2 -3
- dv_flow/mgr/cmds/cmd_run.py +7 -9
- dv_flow/mgr/cmds/cmd_show.py +1 -2
- dv_flow/mgr/cond_def.py +16 -0
- dv_flow/mgr/config.py +7 -0
- dv_flow/mgr/config_def.py +33 -0
- dv_flow/mgr/exec_callable.py +88 -0
- dv_flow/mgr/{pkg_rgy.py → ext_rgy.py} +44 -35
- dv_flow/mgr/extend_def.py +21 -0
- dv_flow/mgr/fragment_def.py +4 -3
- dv_flow/mgr/need_def.py +6 -0
- dv_flow/mgr/null_callable.py +10 -0
- dv_flow/mgr/package.py +30 -6
- dv_flow/mgr/package_def.py +40 -444
- dv_flow/mgr/package_loader.py +701 -0
- dv_flow/mgr/param_def.py +2 -1
- dv_flow/mgr/parser.out +567 -0
- dv_flow/mgr/pytask_callable.py +25 -0
- dv_flow/mgr/root_package.py +9 -0
- dv_flow/mgr/shell_callable.py +14 -0
- dv_flow/mgr/srcinfo.py +15 -0
- dv_flow/mgr/std/flow.dv +25 -4
- dv_flow/mgr/task.py +68 -0
- dv_flow/mgr/task_def.py +36 -24
- dv_flow/mgr/task_graph_builder.py +497 -247
- dv_flow/mgr/task_listener_log.py +4 -0
- dv_flow/mgr/task_node_ctor.py +11 -3
- dv_flow/mgr/task_node_ctor_compound.py +21 -33
- dv_flow/mgr/task_node_leaf.py +25 -3
- dv_flow/mgr/task_params_ctor.py +0 -1
- dv_flow/mgr/task_run_ctxt.py +4 -0
- dv_flow/mgr/task_runner.py +2 -0
- dv_flow/mgr/util/cmds/cmd_schema.py +0 -2
- dv_flow/mgr/util/util.py +4 -3
- dv_flow/mgr/yaml_srcinfo_loader.py +55 -0
- {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/METADATA +1 -1
- dv_flow_mgr-1.0.0.14370600369a1.dist-info/RECORD +74 -0
- dv_flow_mgr-0.0.2.14182043984a1.dist-info/RECORD +0 -59
- {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/licenses/LICENSE +0 -0
- {dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/task_listener_log.py
CHANGED
@@ -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
|
dv_flow/mgr/task_node_ctor.py
CHANGED
@@ -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
|
-
-
|
38
|
-
|
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
|
-
|
37
|
-
tasks : 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
|
-
|
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
|
-
|
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(
|
85
|
+
tasks_defs.append((t, sn))
|
84
86
|
|
85
|
-
for
|
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
|
89
|
-
|
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
|
105
|
-
raise Exception("Failed to find task %s
|
106
|
-
self._log.debug("Add %s as dependency of %s" % (
|
107
|
-
|
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(
|
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(
|
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
|
|
dv_flow/mgr/task_node_leaf.py
CHANGED
@@ -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
|
-
|
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)" %
|
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 : []
|
dv_flow/mgr/task_params_ctor.py
CHANGED
dv_flow/mgr/task_run_ctxt.py
CHANGED
@@ -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)
|
dv_flow/mgr/task_runner.py
CHANGED
@@ -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 ..
|
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
|
-
|
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
|
@@ -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,,
|
{dv_flow_mgr-0.0.2.14182043984a1.dist-info → dv_flow_mgr-1.0.0.14370600369a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|