dv-flow-mgr 0.0.1.13661289604a1__py3-none-any.whl → 0.0.1.13667970156a1__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 +1 -0
- dv_flow/mgr/package_def.py +28 -5
- dv_flow/mgr/task_def.py +1 -0
- dv_flow/mgr/task_graph_builder.py +15 -2
- dv_flow/mgr/task_listener_log.py +9 -3
- dv_flow/mgr/task_node.py +23 -21
- {dv_flow_mgr-0.0.1.13661289604a1.dist-info → dv_flow_mgr-0.0.1.13667970156a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-0.0.1.13661289604a1.dist-info → dv_flow_mgr-0.0.1.13667970156a1.dist-info}/RECORD +12 -12
- {dv_flow_mgr-0.0.1.13661289604a1.dist-info → dv_flow_mgr-0.0.1.13667970156a1.dist-info}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.13661289604a1.dist-info → dv_flow_mgr-0.0.1.13667970156a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.13661289604a1.dist-info → dv_flow_mgr-0.0.1.13667970156a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.13661289604a1.dist-info → dv_flow_mgr-0.0.1.13667970156a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/__init__.py
CHANGED
dv_flow/mgr/package_def.py
CHANGED
@@ -56,6 +56,10 @@ class PackageDef(BaseModel):
|
|
56
56
|
basedir : str = None
|
57
57
|
_log : ClassVar = logging.getLogger("PackageDef")
|
58
58
|
|
59
|
+
def __post_init__(self):
|
60
|
+
for t in self.tasks:
|
61
|
+
t.fullname = self.name + "." + t.name
|
62
|
+
|
59
63
|
def getTask(self, name : str) -> 'TaskDef':
|
60
64
|
for t in self.tasks:
|
61
65
|
if t.name == name:
|
@@ -83,11 +87,13 @@ class PackageDef(BaseModel):
|
|
83
87
|
# Now we have a unified map of the tasks declared in this package
|
84
88
|
for name in list(tasks_m.keys()):
|
85
89
|
task_i = tasks_m[name]
|
90
|
+
fullname = self.name + "." + name
|
86
91
|
if len(task_i) < 3:
|
87
92
|
# Need to create the task ctor
|
88
93
|
ctor_t = self.mkTaskCtor(session, task_i[0], task_i[1], tasks_m)
|
89
94
|
tasks_m[name] = (task_i[0], task_i[1], ctor_t)
|
90
95
|
ret.tasks[name] = tasks_m[name][2]
|
96
|
+
ret.tasks[fullname] = tasks_m[name][2]
|
91
97
|
|
92
98
|
session.pop_package(ret)
|
93
99
|
|
@@ -95,7 +101,7 @@ class PackageDef(BaseModel):
|
|
95
101
|
return ret
|
96
102
|
|
97
103
|
def getTaskCtor(self, session, task_name, tasks_m):
|
98
|
-
self._log.debug("--> getTaskCtor")
|
104
|
+
self._log.debug("--> getTaskCtor %s" % task_name)
|
99
105
|
# Find package (not package_def) that implements this task
|
100
106
|
# Insert an indirect reference to that tasks's constructor
|
101
107
|
last_dot = task_name.rfind('.')
|
@@ -132,6 +138,7 @@ class PackageDef(BaseModel):
|
|
132
138
|
needs = [] if task.needs is None else task.needs.copy()
|
133
139
|
|
134
140
|
if task.uses is not None:
|
141
|
+
self._log.debug("Uses: %s" % task.uses)
|
135
142
|
base_ctor_t = self.getTaskCtor(session, task.uses, tasks_m)
|
136
143
|
base_params = base_ctor_t.mkTaskParams()
|
137
144
|
|
@@ -160,7 +167,7 @@ class PackageDef(BaseModel):
|
|
160
167
|
callable = getattr(mod, clsname)
|
161
168
|
|
162
169
|
# Determine if we need to use a new
|
163
|
-
paramT = self._getParamT(task, base_params)
|
170
|
+
paramT = self._getParamT(session, task, base_params)
|
164
171
|
|
165
172
|
if callable is not None:
|
166
173
|
ctor_t = TaskNodeCtorTask(
|
@@ -184,7 +191,7 @@ class PackageDef(BaseModel):
|
|
184
191
|
ctor_t = TaskNodeCtorTask(
|
185
192
|
name=task.name,
|
186
193
|
srcdir=srcdir,
|
187
|
-
paramT=
|
194
|
+
paramT=paramT,
|
188
195
|
passthrough=passthrough,
|
189
196
|
needs=needs,
|
190
197
|
task=TaskNull)
|
@@ -192,7 +199,8 @@ class PackageDef(BaseModel):
|
|
192
199
|
self._log.debug("<-- %s::mkTaskCtor %s" % (self.name, task.name))
|
193
200
|
return ctor_t
|
194
201
|
|
195
|
-
def _getParamT(self, task, base_t : BaseModel):
|
202
|
+
def _getParamT(self, session, task, base_t : BaseModel):
|
203
|
+
self._log.debug("--> _getParamT %s" % task.fullname)
|
196
204
|
# Get the base parameter type (if available)
|
197
205
|
# We will build a new type with updated fields
|
198
206
|
|
@@ -214,6 +222,8 @@ class PackageDef(BaseModel):
|
|
214
222
|
fields = []
|
215
223
|
field_m : Dict[str,int] = {}
|
216
224
|
|
225
|
+
pkg = session.package()
|
226
|
+
|
217
227
|
# First, pull out existing fields (if there's a base type)
|
218
228
|
if base_t is not None:
|
219
229
|
self._log.debug("Base type: %s" % str(base_t))
|
@@ -255,6 +265,11 @@ class PackageDef(BaseModel):
|
|
255
265
|
|
256
266
|
params_t = pydantic.create_model("Task%sParams" % task.name, **field_m)
|
257
267
|
|
268
|
+
self._log.debug("== Params")
|
269
|
+
for name,info in params_t.model_fields.items():
|
270
|
+
self._log.debug(" %s: %s" % (name, str(info)))
|
271
|
+
|
272
|
+
self._log.debug("<-- _getParamT %s" % task.name)
|
258
273
|
return params_t
|
259
274
|
|
260
275
|
@staticmethod
|
@@ -273,7 +288,15 @@ class PackageDef(BaseModel):
|
|
273
288
|
doc = yaml.load(fp, Loader=yaml.FullLoader)
|
274
289
|
if "package" not in doc.keys():
|
275
290
|
raise Exception("Missing 'package' key in %s" % root)
|
276
|
-
|
291
|
+
try:
|
292
|
+
pkg = PackageDef(**(doc["package"]))
|
293
|
+
|
294
|
+
for t in pkg.tasks:
|
295
|
+
t.fullname = pkg.name + "." + t.name
|
296
|
+
|
297
|
+
except Exception as e:
|
298
|
+
PackageDef._log.error("Failed to load package from %s" % root)
|
299
|
+
raise e
|
277
300
|
pkg.basedir = os.path.dirname(root)
|
278
301
|
|
279
302
|
# for t in pkg.tasks:
|
dv_flow/mgr/task_def.py
CHANGED
@@ -33,6 +33,7 @@ class TaskSpec(object):
|
|
33
33
|
class TaskDef(BaseModel):
|
34
34
|
"""Holds definition information (ie the YAML view) for a task"""
|
35
35
|
name : str
|
36
|
+
fullname : str = dc.Field(default=None)
|
36
37
|
# type : Union[str,TaskSpec] = dc.Field(default_factory=list)
|
37
38
|
uses : str = dc.Field(default=None)
|
38
39
|
pytask : str = dc.Field(default=None)
|
@@ -27,7 +27,7 @@ from .package_def import PackageDef, PackageSpec
|
|
27
27
|
from .pkg_rgy import PkgRgy
|
28
28
|
from .task import Task
|
29
29
|
from .task_node import TaskNodeCtor
|
30
|
-
from typing import Dict, List
|
30
|
+
from typing import Dict, List, Union
|
31
31
|
|
32
32
|
@dc.dataclass
|
33
33
|
class TaskGraphBuilder(object):
|
@@ -178,8 +178,21 @@ class TaskGraphBuilder(object):
|
|
178
178
|
self._logger.debug("<-- getPackage: %s" % str(pkg))
|
179
179
|
|
180
180
|
return pkg
|
181
|
+
|
182
|
+
def mkTaskNode(self, typename, name=None, srcdir=None, needs=None, **kwargs):
|
183
|
+
ctor = self.getTaskCtor(typename)
|
184
|
+
params = ctor.mkTaskParams(**kwargs)
|
185
|
+
return ctor.mkTaskNode(
|
186
|
+
params=params,
|
187
|
+
name=name,
|
188
|
+
srcdir=srcdir,
|
189
|
+
needs=needs)
|
181
190
|
|
182
|
-
def getTaskCtor(self, spec : 'TaskSpec', pkg : PackageDef = None) -> 'TaskCtor':
|
191
|
+
def getTaskCtor(self, spec : Union[str,'TaskSpec'], pkg : PackageDef = None) -> 'TaskCtor':
|
192
|
+
from .task_def import TaskSpec
|
193
|
+
if type(spec) == str:
|
194
|
+
spec = TaskSpec(spec)
|
195
|
+
|
183
196
|
self._logger.debug("--> getTaskCtor %s" % spec.name)
|
184
197
|
spec_e = spec.name.split(".")
|
185
198
|
task_name = spec_e[-1]
|
dv_flow/mgr/task_listener_log.py
CHANGED
@@ -1,15 +1,21 @@
|
|
1
1
|
import dataclasses as dc
|
2
|
+
from rich.console import Console
|
2
3
|
|
4
|
+
@dc.dataclass
|
3
5
|
class TaskListenerLog(object):
|
6
|
+
console : Console = dc.field(default_factory=Console)
|
7
|
+
level : int = 0
|
4
8
|
|
5
9
|
def event(self, task : 'Task', reason : 'Reason'):
|
6
10
|
if reason == 'enter':
|
7
|
-
|
11
|
+
self.level += 1
|
12
|
+
self.console.print("[green]>[%d][/green] Task %s" % (self.level, task.name))
|
8
13
|
elif reason == 'leave':
|
9
14
|
for m in task.result.markers:
|
10
15
|
print(" %s" % m)
|
11
|
-
print("< Task %s" % task.name
|
16
|
+
self.console.print("[green]<[%d][/green] Task %s" % (self.level, task.name))
|
17
|
+
self.level -= 1
|
12
18
|
else:
|
13
|
-
print("- Task %s" % task.name
|
19
|
+
self.console.print("[red]-[/red] Task %s" % task.name)
|
14
20
|
pass
|
15
21
|
|
dv_flow/mgr/task_node.py
CHANGED
@@ -108,6 +108,29 @@ class TaskNodeCtor(object):
|
|
108
108
|
paramT : Any
|
109
109
|
passthrough : bool
|
110
110
|
|
111
|
+
def __call__(self,
|
112
|
+
name=None,
|
113
|
+
srcdir=None,
|
114
|
+
params=None,
|
115
|
+
needs=None,
|
116
|
+
passthrough=None,
|
117
|
+
**kwargs):
|
118
|
+
"""Convenience method for direct creation of tasks"""
|
119
|
+
if params is None:
|
120
|
+
params = self.mkTaskParams(kwargs)
|
121
|
+
|
122
|
+
node = self.mkTaskNode(
|
123
|
+
srcdir=srcdir,
|
124
|
+
params=params,
|
125
|
+
name=name,
|
126
|
+
needs=needs)
|
127
|
+
if passthrough is not None:
|
128
|
+
node.passthrough = passthrough
|
129
|
+
else:
|
130
|
+
node.passthrough = self.passthrough
|
131
|
+
|
132
|
+
return node
|
133
|
+
|
111
134
|
def getNeeds(self) -> List[str]:
|
112
135
|
return []
|
113
136
|
|
@@ -188,28 +211,7 @@ class TaskNodeCtorTask(TaskNodeCtorDefBase):
|
|
188
211
|
class TaskNodeCtorWrapper(TaskNodeCtor):
|
189
212
|
T : Any
|
190
213
|
|
191
|
-
def __call__(self,
|
192
|
-
name=None,
|
193
|
-
srcdir=None,
|
194
|
-
params=None,
|
195
|
-
needs=None,
|
196
|
-
passthrough=None,
|
197
|
-
**kwargs):
|
198
|
-
"""Convenience method for direct creation of tasks"""
|
199
|
-
if params is None:
|
200
|
-
params = self.mkTaskParams(kwargs)
|
201
|
-
|
202
|
-
node = self.mkTaskNode(
|
203
|
-
srcdir=srcdir,
|
204
|
-
params=params,
|
205
|
-
name=name,
|
206
|
-
needs=needs)
|
207
|
-
if passthrough is not None:
|
208
|
-
node.passthrough = passthrough
|
209
|
-
else:
|
210
|
-
node.passthrough = self.passthrough
|
211
214
|
|
212
|
-
return node
|
213
215
|
|
214
216
|
def mkTaskNode(self, params, srcdir=None, name=None, needs=None) -> TaskNode:
|
215
217
|
node = TaskNode(name, srcdir, params, self.T, needs=needs)
|
{dv_flow_mgr-0.0.1.13661289604a1.dist-info → dv_flow_mgr-0.0.1.13667970156a1.dist-info}/RECORD
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
dv_flow/mgr/__init__.py,sha256=
|
1
|
+
dv_flow/mgr/__init__.py,sha256=2iTpSe1M8g_u2UlAQFa3XFfqcw8gBOWdBvrstce1c5E,403
|
2
2
|
dv_flow/mgr/__main__.py,sha256=uik6gDAvtZNG0yyDKYc4FTl6R1QHAR543jNG2lCAa6E,1771
|
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
|
@@ -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=ek60ERvWFOVlL71_Fgk1-RWQMrkxNt4USrfZXwLS2d0,14603
|
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,15 +17,15 @@ 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=T06dvQegPJunH8ekuN5aPxIVcaUWiv5qkfqbZnCacLk,1923
|
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=okqJDDu6qyubXQoyI-r0jUTd53Tq7ISSYCymZh_Cppw,7708
|
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=5N-WG6ii-R6XPbgPR6zcfKjABOoGYab6I_04Lfwux5Q,705
|
27
27
|
dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
|
28
|
-
dv_flow/mgr/task_node.py,sha256=
|
28
|
+
dv_flow/mgr/task_node.py,sha256=BxkjUJU7WdIhyBbP7FMBFY6EgHenhnnYGGdGW3Xukck,8450
|
29
29
|
dv_flow/mgr/task_output.py,sha256=l-W-FvVo6YDah1RQS-I9N0KUtB3vp-kl7lxIdmNz0l4,178
|
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
|
@@ -39,9 +39,9 @@ dv_flow/mgr/std/fileset.py,sha256=abHgTxz25FD1ep5QXlCZKt4gCyfplJsjx6LyfQ11f_Q,26
|
|
39
39
|
dv_flow/mgr/std/flow.dv,sha256=jlFOh3xVECOzHws7x6YvJ9eCIGHM5gsPeEnheiGOukY,1553
|
40
40
|
dv_flow/mgr/std/message.py,sha256=CWrBKImbXKe2d7hJ223U3Ifuxo54zLpFPJviE8BUJvk,188
|
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.13667970156a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
43
|
+
dv_flow_mgr-0.0.1.13667970156a1.dist-info/METADATA,sha256=KkpZBeRE5Av-3wHTQewdBoyjAtM3voZTDxeXsjrsjhs,13276
|
44
|
+
dv_flow_mgr-0.0.1.13667970156a1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
45
|
+
dv_flow_mgr-0.0.1.13667970156a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
46
|
+
dv_flow_mgr-0.0.1.13667970156a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
47
|
+
dv_flow_mgr-0.0.1.13667970156a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.1.13661289604a1.dist-info → dv_flow_mgr-0.0.1.13667970156a1.dist-info}/LICENSE
RENAMED
File without changes
|
{dv_flow_mgr-0.0.1.13661289604a1.dist-info → dv_flow_mgr-0.0.1.13667970156a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|