dv-flow-mgr 0.0.1.12952658757a1__py3-none-any.whl → 0.0.1.12960224342a1__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/package.py +2 -0
- dv_flow/mgr/package_def.py +9 -5
- dv_flow/mgr/pkg_rgy.py +3 -1
- dv_flow/mgr/task_graph_builder.py +22 -19
- {dv_flow_mgr-0.0.1.12952658757a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-0.0.1.12952658757a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/RECORD +10 -10
- {dv_flow_mgr-0.0.1.12952658757a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.12952658757a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.12952658757a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.12952658757a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/package.py
CHANGED
@@ -32,6 +32,8 @@ class Package(object):
|
|
32
32
|
tasks : Dict[str,TaskCtor] = dc.field(default_factory=dict)
|
33
33
|
|
34
34
|
def getTaskCtor(self, name : str) -> TaskCtor:
|
35
|
+
if name not in self.tasks.keys():
|
36
|
+
raise Exception("Task %s not present in package %s" % (name, self.name))
|
35
37
|
return self.tasks[name]
|
36
38
|
|
37
39
|
def __hash__(self):
|
dv_flow/mgr/package_def.py
CHANGED
@@ -23,11 +23,12 @@ import os
|
|
23
23
|
import json
|
24
24
|
import yaml
|
25
25
|
import importlib
|
26
|
+
import logging
|
26
27
|
import sys
|
27
28
|
import pydantic
|
28
29
|
import pydantic.dataclasses as dc
|
29
30
|
from pydantic import BaseModel
|
30
|
-
from typing import Any, Dict, List, Callable, Tuple
|
31
|
+
from typing import Any, Dict, List, Callable, Tuple, ClassVar
|
31
32
|
from .fragment_def import FragmentDef
|
32
33
|
from .package import Package
|
33
34
|
from .package_import_spec import PackageImportSpec, PackageSpec
|
@@ -49,6 +50,7 @@ class PackageDef(BaseModel):
|
|
49
50
|
# import_m : Dict['PackageSpec','Package'] = dc.Field(default_factory=dict)
|
50
51
|
|
51
52
|
basedir : str = None
|
53
|
+
_log : ClassVar = logging.getLogger("PackageDef")
|
52
54
|
|
53
55
|
def getTask(self, name : str) -> 'TaskDef':
|
54
56
|
for t in self.tasks:
|
@@ -56,6 +58,7 @@ class PackageDef(BaseModel):
|
|
56
58
|
return t
|
57
59
|
|
58
60
|
def mkPackage(self, session, params : Dict[str,Any] = None) -> 'Package':
|
61
|
+
self._log.debug("--> mkPackage %s" % self.name)
|
59
62
|
ret = Package(self.name)
|
60
63
|
|
61
64
|
session.push_package(ret, add=True)
|
@@ -84,6 +87,7 @@ class PackageDef(BaseModel):
|
|
84
87
|
|
85
88
|
session.pop_package(ret)
|
86
89
|
|
90
|
+
self._log.debug("<-- mkPackage %s" % self.name)
|
87
91
|
return ret
|
88
92
|
|
89
93
|
def mkTaskCtor(self, session, task, srcdir, tasks_m) -> TaskCtor:
|
@@ -166,7 +170,7 @@ class PackageDef(BaseModel):
|
|
166
170
|
field_m = {}
|
167
171
|
# First, add parameters from the base class
|
168
172
|
for fname,info in ctor_t.param_ctor.model_fields.items():
|
169
|
-
|
173
|
+
self._log.debug("Field: %s (%s)" % (fname, info.default))
|
170
174
|
field_m[fname] = (info.annotation, info.default)
|
171
175
|
ptype_m = {
|
172
176
|
"str" : str,
|
@@ -207,7 +211,7 @@ class PackageDef(BaseModel):
|
|
207
211
|
raise Exception("No value specified for param %s: %s" % (
|
208
212
|
p, str(param)))
|
209
213
|
field_m[p] = (field_m[p][0], value)
|
210
|
-
|
214
|
+
self._log.debug("field_m: %s" % str(field_m))
|
211
215
|
ctor_t.param_ctor = pydantic.create_model(
|
212
216
|
"Task%sParams" % task.name, **field_m)
|
213
217
|
else:
|
@@ -230,7 +234,7 @@ class PackageDef(BaseModel):
|
|
230
234
|
file_s.append(root)
|
231
235
|
ret = None
|
232
236
|
with open(root, "r") as fp:
|
233
|
-
|
237
|
+
PackageDef._log.debug("open %s" % root)
|
234
238
|
doc = yaml.load(fp, Loader=yaml.FullLoader)
|
235
239
|
if "package" not in doc.keys():
|
236
240
|
raise Exception("Missing 'package' key in %s" % root)
|
@@ -288,7 +292,7 @@ class PackageDef(BaseModel):
|
|
288
292
|
|
289
293
|
with open(file, "r") as fp:
|
290
294
|
doc = yaml.load(fp, Loader=yaml.FullLoader)
|
291
|
-
|
295
|
+
PackageDef._log.debug("doc: %s" % str(doc), flush=True)
|
292
296
|
if "fragment" in doc.keys():
|
293
297
|
# Merge the package definition
|
294
298
|
frag = FragmentDef(**(doc["fragment"]))
|
dv_flow/mgr/pkg_rgy.py
CHANGED
@@ -20,6 +20,7 @@
|
|
20
20
|
#*
|
21
21
|
#****************************************************************************
|
22
22
|
import os
|
23
|
+
import logging
|
23
24
|
import sys
|
24
25
|
from typing import Dict, Tuple
|
25
26
|
from .package_def import PackageDef
|
@@ -30,6 +31,7 @@ class PkgRgy(object):
|
|
30
31
|
def __init__(self):
|
31
32
|
self._pkgpath = []
|
32
33
|
self._pkg_m : Dict[str, Tuple[str,PackageDef]] = {}
|
34
|
+
self._log = logging.getLogger(type(self).__name__)
|
33
35
|
|
34
36
|
def hasPackage(self, name, search_path=True):
|
35
37
|
if name in self._pkg_m.keys():
|
@@ -108,7 +110,7 @@ class PkgRgy(object):
|
|
108
110
|
name, self._pkg_m[name][0], path))
|
109
111
|
self._pkg_m[name] = (path, None)
|
110
112
|
except Exception as e:
|
111
|
-
|
113
|
+
self._log.critical("Error loading plugin %s: %s" % (p.name, str(e)))
|
112
114
|
raise e
|
113
115
|
|
114
116
|
# self._pkgs = {}
|
@@ -21,6 +21,7 @@
|
|
21
21
|
#****************************************************************************
|
22
22
|
import os
|
23
23
|
import dataclasses as dc
|
24
|
+
import logging
|
24
25
|
from .package import Package
|
25
26
|
from .package_def import PackageDef, PackageSpec
|
26
27
|
from .pkg_rgy import PkgRgy
|
@@ -37,11 +38,14 @@ class TaskGraphBuilder(object):
|
|
37
38
|
_pkg_m : Dict[PackageSpec,Package] = dc.field(default_factory=dict)
|
38
39
|
_pkg_spec_s : List[PackageDef] = dc.field(default_factory=list)
|
39
40
|
_task_m : Dict[TaskSpec,Task] = dc.field(default_factory=dict)
|
41
|
+
_logger : logging.Logger = None
|
40
42
|
|
41
43
|
def __post_init__(self):
|
42
44
|
if self.pkg_rgy is None:
|
43
45
|
self.pkg_rgy = PkgRgy.inst()
|
44
46
|
|
47
|
+
self._logger = logging.getLogger(type(self).__name__)
|
48
|
+
|
45
49
|
if self.root_pkg is not None:
|
46
50
|
self._pkg_spec_s.append(self.root_pkg)
|
47
51
|
pkg = self.root_pkg.mkPackage(self)
|
@@ -82,7 +86,7 @@ class TaskGraphBuilder(object):
|
|
82
86
|
|
83
87
|
rundir = os.path.join(parent_rundir, pkg_name, task_name)
|
84
88
|
|
85
|
-
|
89
|
+
self._logger.debug("pkg_spec: %s" % str(pkg_spec))
|
86
90
|
self._pkg_spec_s.append(pkg_spec)
|
87
91
|
pkg = self.getPackage(pkg_spec)
|
88
92
|
|
@@ -100,7 +104,7 @@ class TaskGraphBuilder(object):
|
|
100
104
|
depends.append(self._task_m[dep])
|
101
105
|
|
102
106
|
# The returned task should have all param references resolved
|
103
|
-
|
107
|
+
self._logger.debug("task_ctor=%s" % str(ctor_t.task_ctor))
|
104
108
|
task = ctor_t.task_ctor(
|
105
109
|
name=task_name,
|
106
110
|
params=ctor_t.mkParams(),
|
@@ -117,7 +121,7 @@ class TaskGraphBuilder(object):
|
|
117
121
|
|
118
122
|
def getPackage(self, spec : PackageSpec) -> Package:
|
119
123
|
# Obtain the active package definition
|
120
|
-
|
124
|
+
self._logger.debug("--> getPackage: %s len: %d" % (spec.name, len(self._pkg_spec_s)))
|
121
125
|
if len(self._pkg_spec_s) > 0:
|
122
126
|
pkg_spec = self._pkg_spec_s[-1]
|
123
127
|
if self.root_pkg.name == pkg_spec.name:
|
@@ -130,7 +134,8 @@ class TaskGraphBuilder(object):
|
|
130
134
|
# Need a stack to track which package we are currently in
|
131
135
|
# Need a map to get a concrete package from a name with parameterization
|
132
136
|
|
133
|
-
|
137
|
+
self._logger.debug("pkg_s: %d %s" % (
|
138
|
+
len(self._pkg_s), (self._pkg_s[-1].name if len(self._pkg_s) else "<unknown>")))
|
134
139
|
|
135
140
|
# Note: _pkg_m needs to be context specific, such that imports from
|
136
141
|
# one package don't end up visible in another
|
@@ -143,9 +148,9 @@ class TaskGraphBuilder(object):
|
|
143
148
|
|
144
149
|
if pkg_def is not None:
|
145
150
|
# Look for an import alias
|
146
|
-
|
151
|
+
self._logger.debug("imports: %s" % str(pkg_def.imports))
|
147
152
|
for imp in pkg_def.imports:
|
148
|
-
|
153
|
+
self._logger.debug("imp: %s" % str(imp))
|
149
154
|
if imp.alias is not None and imp.alias == spec.name:
|
150
155
|
# Found the alias name. Just need to get an instance of this package
|
151
156
|
tgt_pkg_spec = PackageSpec(imp.name)
|
@@ -153,14 +158,12 @@ class TaskGraphBuilder(object):
|
|
153
158
|
pkg = self._pkg_m[tgt_pkg_spec]
|
154
159
|
elif self.pkg_rgy.hasPackage(tgt_pkg_spec.name):
|
155
160
|
base = self.pkg_rgy.getPackage(tgt_pkg_spec.name)
|
156
|
-
|
157
|
-
self._pkg_m = {}
|
161
|
+
self._pkg_spec_s.append(base)
|
158
162
|
pkg = base.mkPackage(self, spec.params)
|
159
|
-
self.
|
160
|
-
self._pkg_m[spec] = pkg
|
163
|
+
self._pkg_spec_s.pop()
|
161
164
|
elif imp.path is not None:
|
162
165
|
# See if we can load the package
|
163
|
-
|
166
|
+
self._logger.critical("TODO: load referenced package")
|
164
167
|
else:
|
165
168
|
raise Exception("Failed to resolve target (%s) of import alias %s" % (
|
166
169
|
imp.name,
|
@@ -174,28 +177,28 @@ class TaskGraphBuilder(object):
|
|
174
177
|
base = self.pkg_rgy.getPackage(spec.name)
|
175
178
|
if base is None:
|
176
179
|
raise Exception("Failed to find imported package %s" % spec.name)
|
180
|
+
self._pkg_spec_s.append(base)
|
177
181
|
pkg = base.mkPackage(self, spec.params)
|
178
|
-
pkg_m = self._pkg_m
|
179
|
-
self._pkg_m = {}
|
180
|
-
self._pkg_m = pkg_m
|
181
182
|
self._pkg_m[spec] = pkg
|
183
|
+
self._pkg_spec_s.pop()
|
182
184
|
break
|
183
185
|
|
184
186
|
if pkg is None:
|
185
|
-
|
187
|
+
self._logger.debug("Checking registry")
|
186
188
|
p_def = self.pkg_rgy.getPackage(spec.name)
|
187
189
|
|
188
190
|
if p_def is not None:
|
189
|
-
|
190
|
-
self._pkg_m = {}
|
191
|
+
self._pkg_spec_s.append(p_def)
|
191
192
|
pkg = p_def.mkPackage(self)
|
192
|
-
self.
|
193
|
+
self._pkg_spec_s.pop()
|
193
194
|
self._pkg_m[spec] = pkg
|
194
195
|
|
195
196
|
if pkg is None:
|
196
197
|
raise Exception("Failed to find package %s from package %s" % (
|
197
198
|
spec.name, (pkg_def.name if pkg_def is not None else "<null>")))
|
198
199
|
|
200
|
+
self._logger.debug("<-- getPackage: %s" % str(pkg))
|
201
|
+
|
199
202
|
return pkg
|
200
203
|
|
201
204
|
def getTaskCtor(self, spec : TaskSpec, pkg : PackageDef = None) -> 'TaskCtor':
|
@@ -213,7 +216,7 @@ class TaskGraphBuilder(object):
|
|
213
216
|
try:
|
214
217
|
pkg = self.getPackage(PackageSpec(pkg_name))
|
215
218
|
except Exception as e:
|
216
|
-
|
219
|
+
self._logger.critical("Failed to find package %s while looking for task %s" % (pkg_name, spec.name))
|
217
220
|
raise e
|
218
221
|
|
219
222
|
return pkg.getTaskCtor(task_name)
|
{dv_flow_mgr-0.0.1.12952658757a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/RECORD
RENAMED
@@ -2,14 +2,14 @@ dv_flow/mgr/__init__.py,sha256=IZA7I1u7RH34DrJXSkETxWFpK5Jn_A2zXfnCAzJ8XxA,289
|
|
2
2
|
dv_flow/mgr/__main__.py,sha256=big-RSuqbx7P48_8rzaZKX5YW3B2US1i0mRH_TfoeIs,1340
|
3
3
|
dv_flow/mgr/fileset.py,sha256=FNvC5sU2ArxJ0OO3v8dXTv8zX-bZ5t0a0ljne0fQQ1o,1150
|
4
4
|
dv_flow/mgr/fragment_def.py,sha256=p5i6ONtBWlDHTBFsduu3Z36_76Bn8PCIylp_xoZ7jfQ,1552
|
5
|
-
dv_flow/mgr/package.py,sha256=
|
6
|
-
dv_flow/mgr/package_def.py,sha256=
|
5
|
+
dv_flow/mgr/package.py,sha256=LAJNVOMlpWkez7eK7yfChoDKeIPakApUCpDh_No059g,1469
|
6
|
+
dv_flow/mgr/package_def.py,sha256=ay4bYuzBEzrqqJsNr1ezZF9BxEAgWeS9xxIETKe-Bzs,11595
|
7
7
|
dv_flow/mgr/package_import_spec.py,sha256=ah3r15v5Jdub2poc3sgi6Uar1L3oGoYsCPPNiOHV-a4,1760
|
8
|
-
dv_flow/mgr/pkg_rgy.py,sha256=
|
8
|
+
dv_flow/mgr/pkg_rgy.py,sha256=2R_EaeBDJn5qUq9DzSnLc37wUP36MWSv-p0LgUjJRAg,4471
|
9
9
|
dv_flow/mgr/task.py,sha256=ewJ7bCFWqwVuzHZZsX2LDZfzXWVFfFlH8yFyn-xxIVg,5043
|
10
10
|
dv_flow/mgr/task_data.py,sha256=-6Dqa3oUI7RJc1Js2SRSnhxNTcASkamXFYMN6UiknZQ,10376
|
11
11
|
dv_flow/mgr/task_def.py,sha256=96hSwqJo0MazJ1VcLhovYRmNCplsNLt47AumtyjSddU,1690
|
12
|
-
dv_flow/mgr/task_graph_builder.py,sha256=
|
12
|
+
dv_flow/mgr/task_graph_builder.py,sha256=2AxCa3tFfaoEv8Epk4jWKA5FfVpijgmBVbGQN4JTREc,8569
|
13
13
|
dv_flow/mgr/task_graph_runner.py,sha256=NwNYcOJ952lPMLwIIlYE9CoDdedqvcw2fWHYUsKFXuU,2164
|
14
14
|
dv_flow/mgr/task_graph_runner_local.py,sha256=UTBV1AKanLns99CSYtEQQ3EEkgo1hM8XsHpc8E5jkIg,4646
|
15
15
|
dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
|
@@ -20,9 +20,9 @@ dv_flow/mgr/std/fileset.py,sha256=0eBp0VIkxYbIYAt0YJg0m-6nUbPuzGkaVBtxpius7Cg,23
|
|
20
20
|
dv_flow/mgr/std/flow.dv,sha256=pSpzrPPEu_L8DHccGfArxsKYgUfyQidShZc0ShgGtsY,500
|
21
21
|
dv_flow/mgr/std/message.py,sha256=BPTHnEMD4tBufQ9LvsS9Sa_0xjaJATbBpwqosWslvVA,193
|
22
22
|
dv_flow/mgr/std/task_null.py,sha256=UEJ3fIoIMYWVsagiQC7GHD23UES7WoH4wtq94b4tcs4,265
|
23
|
-
dv_flow_mgr-0.0.1.
|
24
|
-
dv_flow_mgr-0.0.1.
|
25
|
-
dv_flow_mgr-0.0.1.
|
26
|
-
dv_flow_mgr-0.0.1.
|
27
|
-
dv_flow_mgr-0.0.1.
|
28
|
-
dv_flow_mgr-0.0.1.
|
23
|
+
dv_flow_mgr-0.0.1.12960224342a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
24
|
+
dv_flow_mgr-0.0.1.12960224342a1.dist-info/METADATA,sha256=YyEPdvYOABMUKB2gBAb6caXOqs6YcYzIuIEWiuaJqfA,13276
|
25
|
+
dv_flow_mgr-0.0.1.12960224342a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
26
|
+
dv_flow_mgr-0.0.1.12960224342a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
27
|
+
dv_flow_mgr-0.0.1.12960224342a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
28
|
+
dv_flow_mgr-0.0.1.12960224342a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.1.12952658757a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/LICENSE
RENAMED
File without changes
|
{dv_flow_mgr-0.0.1.12952658757a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|