dv-flow-mgr 0.0.1.12942385741a1__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/__init__.py +1 -0
- 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 +23 -10
- {dv_flow_mgr-0.0.1.12942385741a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-0.0.1.12942385741a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/RECORD +11 -11
- {dv_flow_mgr-0.0.1.12942385741a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.12942385741a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.12942385741a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.12942385741a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/__init__.py
CHANGED
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,11 +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)
|
161
|
+
self._pkg_spec_s.append(base)
|
156
162
|
pkg = base.mkPackage(self, spec.params)
|
157
|
-
self.
|
163
|
+
self._pkg_spec_s.pop()
|
158
164
|
elif imp.path is not None:
|
159
165
|
# See if we can load the package
|
160
|
-
|
166
|
+
self._logger.critical("TODO: load referenced package")
|
161
167
|
else:
|
162
168
|
raise Exception("Failed to resolve target (%s) of import alias %s" % (
|
163
169
|
imp.name,
|
@@ -171,21 +177,28 @@ class TaskGraphBuilder(object):
|
|
171
177
|
base = self.pkg_rgy.getPackage(spec.name)
|
172
178
|
if base is None:
|
173
179
|
raise Exception("Failed to find imported package %s" % spec.name)
|
180
|
+
self._pkg_spec_s.append(base)
|
174
181
|
pkg = base.mkPackage(self, spec.params)
|
175
182
|
self._pkg_m[spec] = pkg
|
183
|
+
self._pkg_spec_s.pop()
|
176
184
|
break
|
177
185
|
|
178
186
|
if pkg is None:
|
179
|
-
|
187
|
+
self._logger.debug("Checking registry")
|
180
188
|
p_def = self.pkg_rgy.getPackage(spec.name)
|
181
189
|
|
182
190
|
if p_def is not None:
|
191
|
+
self._pkg_spec_s.append(p_def)
|
183
192
|
pkg = p_def.mkPackage(self)
|
193
|
+
self._pkg_spec_s.pop()
|
194
|
+
self._pkg_m[spec] = pkg
|
184
195
|
|
185
196
|
if pkg is None:
|
186
197
|
raise Exception("Failed to find package %s from package %s" % (
|
187
198
|
spec.name, (pkg_def.name if pkg_def is not None else "<null>")))
|
188
199
|
|
200
|
+
self._logger.debug("<-- getPackage: %s" % str(pkg))
|
201
|
+
|
189
202
|
return pkg
|
190
203
|
|
191
204
|
def getTaskCtor(self, spec : TaskSpec, pkg : PackageDef = None) -> 'TaskCtor':
|
@@ -203,7 +216,7 @@ class TaskGraphBuilder(object):
|
|
203
216
|
try:
|
204
217
|
pkg = self.getPackage(PackageSpec(pkg_name))
|
205
218
|
except Exception as e:
|
206
|
-
|
219
|
+
self._logger.critical("Failed to find package %s while looking for task %s" % (pkg_name, spec.name))
|
207
220
|
raise e
|
208
221
|
|
209
222
|
return pkg.getTaskCtor(task_name)
|
{dv_flow_mgr-0.0.1.12942385741a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/RECORD
RENAMED
@@ -1,15 +1,15 @@
|
|
1
|
-
dv_flow/mgr/__init__.py,sha256=
|
1
|
+
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.12942385741a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/LICENSE
RENAMED
File without changes
|
{dv_flow_mgr-0.0.1.12942385741a1.dist-info → dv_flow_mgr-0.0.1.12960224342a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|