dv-flow-mgr 0.0.1.13707193513a1__py3-none-any.whl → 0.0.1.13711323919a1__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_def.py +31 -6
- dv_flow/mgr/package_import_spec.py +1 -1
- dv_flow/mgr/pkg_rgy.py +8 -3
- dv_flow/mgr/task_graph_builder.py +17 -6
- dv_flow/mgr/task_listener_log.py +1 -1
- {dv_flow_mgr-0.0.1.13707193513a1.dist-info → dv_flow_mgr-0.0.1.13711323919a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-0.0.1.13707193513a1.dist-info → dv_flow_mgr-0.0.1.13711323919a1.dist-info}/RECORD +11 -11
- {dv_flow_mgr-0.0.1.13707193513a1.dist-info → dv_flow_mgr-0.0.1.13711323919a1.dist-info}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.13707193513a1.dist-info → dv_flow_mgr-0.0.1.13711323919a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-0.0.1.13707193513a1.dist-info → dv_flow_mgr-0.0.1.13711323919a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.13707193513a1.dist-info → dv_flow_mgr-0.0.1.13711323919a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/package_def.py
CHANGED
@@ -29,7 +29,7 @@ import sys
|
|
29
29
|
import pydantic
|
30
30
|
import pydantic.dataclasses as dc
|
31
31
|
from pydantic import BaseModel
|
32
|
-
from typing import Any, Dict, List, Callable, Tuple, ClassVar
|
32
|
+
from typing import Any, Dict, List, Callable, Tuple, ClassVar, Union
|
33
33
|
from .fragment_def import FragmentDef
|
34
34
|
from .package import Package
|
35
35
|
from .package_import_spec import PackageImportSpec, PackageSpec
|
@@ -45,11 +45,12 @@ class PackageDef(BaseModel):
|
|
45
45
|
params : Dict[str,Any] = dc.Field(default_factory=dict)
|
46
46
|
type : List[PackageSpec] = dc.Field(default_factory=list)
|
47
47
|
tasks : List[TaskDef] = dc.Field(default_factory=list)
|
48
|
-
imports : List[PackageImportSpec] = dc.Field(default_factory=list)
|
48
|
+
imports : List[Union[str,PackageImportSpec]] = dc.Field(default_factory=list)
|
49
49
|
fragments: List[str] = dc.Field(default_factory=list)
|
50
50
|
types : List[TypeDef] = dc.Field(default_factory=list)
|
51
51
|
|
52
52
|
fragment_l : List['FragmentDef'] = dc.Field(default_factory=list, exclude=True)
|
53
|
+
subpkg_m : Dict[str,'PackageDef'] = dc.Field(default_factory=dict, exclude=True)
|
53
54
|
|
54
55
|
# import_m : Dict['PackageSpec','Package'] = dc.Field(default_factory=dict)
|
55
56
|
|
@@ -281,13 +282,13 @@ class PackageDef(BaseModel):
|
|
281
282
|
self._log.debug("<-- _getParamT %s" % task.name)
|
282
283
|
return params_t
|
283
284
|
|
284
|
-
@
|
285
|
-
def load(path, exp_pkg_name=None):
|
285
|
+
@classmethod
|
286
|
+
def load(cls, path, exp_pkg_name=None):
|
286
287
|
return PackageDef._loadPkgDef(path, exp_pkg_name, [])
|
287
288
|
pass
|
288
289
|
|
289
|
-
@
|
290
|
-
def _loadPkgDef(root, exp_pkg_name, file_s):
|
290
|
+
@classmethod
|
291
|
+
def _loadPkgDef(cls, root, exp_pkg_name, file_s):
|
291
292
|
if root in file_s:
|
292
293
|
raise Exception("Recursive file processing @ %s: %s" % (root, ",".join(file_s)))
|
293
294
|
file_s.append(root)
|
@@ -326,6 +327,30 @@ class PackageDef(BaseModel):
|
|
326
327
|
for spec in pkg.fragments:
|
327
328
|
PackageDef._loadFragmentSpec(pkg, spec, file_s)
|
328
329
|
|
330
|
+
if len(pkg.imports) > 0:
|
331
|
+
cls._log.info("Loading imported packages (basedir=%s)" % pkg.basedir)
|
332
|
+
for imp in pkg.imports:
|
333
|
+
if type(imp) == str:
|
334
|
+
imp_path = imp
|
335
|
+
elif imp.path is not None:
|
336
|
+
imp_path = imp.path
|
337
|
+
else:
|
338
|
+
raise Exception("imp.path is none: %s" % str(imp))
|
339
|
+
|
340
|
+
cls._log.info("Loading imported package %s" % imp_path)
|
341
|
+
|
342
|
+
if not os.path.isabs(imp_path):
|
343
|
+
cls._log.debug("basedir: %s ; imp_path: %s" % (pkg.basedir, imp_path))
|
344
|
+
imp_path = os.path.join(pkg.basedir, imp_path)
|
345
|
+
if not os.path.isfile(imp_path):
|
346
|
+
raise Exception("Import file %s not found" % imp_path)
|
347
|
+
|
348
|
+
cls._log.info("Loading file %s" % imp_path)
|
349
|
+
|
350
|
+
sub_pkg = PackageDef.load(imp_path)
|
351
|
+
cls._log.info("Loaded imported package %s" % sub_pkg.name)
|
352
|
+
pkg.subpkg_m[sub_pkg.name] = sub_pkg
|
353
|
+
|
329
354
|
file_s.pop()
|
330
355
|
|
331
356
|
return pkg
|
@@ -46,6 +46,6 @@ class PackageSpec(object):
|
|
46
46
|
return isinstance(value, PackageSpec) and value.get_fullname() == self.get_fullname()
|
47
47
|
|
48
48
|
@dc.dataclass
|
49
|
-
class PackageImportSpec(
|
49
|
+
class PackageImportSpec(object):
|
50
50
|
path : str = dc.Field(default=None, alias="from")
|
51
51
|
alias : str = dc.Field(default=None, alias="as")
|
dv_flow/mgr/pkg_rgy.py
CHANGED
@@ -42,6 +42,7 @@ class PkgRgy(object):
|
|
42
42
|
return False
|
43
43
|
|
44
44
|
def getPackage(self, name):
|
45
|
+
self._log.debug("--> getPackage(%s)" % name)
|
45
46
|
if name in self._pkg_m.keys():
|
46
47
|
if self._pkg_m[name][1] is None:
|
47
48
|
pkg_def = PackageDef.load(self._pkg_m[name][0])
|
@@ -50,9 +51,11 @@ class PkgRgy(object):
|
|
50
51
|
self._pkg_m[name][0],
|
51
52
|
pkg_def
|
52
53
|
)
|
53
|
-
|
54
|
+
ret = self._pkg_m[name][1]
|
54
55
|
else:
|
55
|
-
|
56
|
+
ret = self._findOnPath(name)
|
57
|
+
self._log.debug("<-- getPackage(%s)" % name)
|
58
|
+
return ret
|
56
59
|
|
57
60
|
def _findOnPath(self, name):
|
58
61
|
name_s = name.split('.')
|
@@ -79,9 +82,11 @@ class PkgRgy(object):
|
|
79
82
|
return pkg
|
80
83
|
|
81
84
|
def registerPackage(self, pkg_def):
|
85
|
+
self._log.debug("--> registerPackage %s" % pkg_def.name)
|
82
86
|
if pkg_def.name in self._pkg_m.keys():
|
83
87
|
raise Exception("Duplicate package %s" % pkg_def.name)
|
84
|
-
self._pkg_m[pkg_def.name] = pkg_def
|
88
|
+
self._pkg_m[pkg_def.name] = (pkg_def.basedir, pkg_def)
|
89
|
+
self._log.debug("<-- registerPackage %s" % pkg_def.name)
|
85
90
|
|
86
91
|
def _discover_plugins(self):
|
87
92
|
# Register built-in package
|
@@ -46,13 +46,23 @@ class TaskGraphBuilder(object):
|
|
46
46
|
self.pkg_rgy = PkgRgy.inst()
|
47
47
|
|
48
48
|
self._logger = logging.getLogger(type(self).__name__)
|
49
|
+
self._logger.debug("TaskGraphBuilder: root_pkg: %s" % str(self.root_pkg))
|
49
50
|
|
50
51
|
if self.root_pkg is not None:
|
52
|
+
|
53
|
+
# Register package definitions found during loading
|
54
|
+
for subpkg in self.root_pkg.subpkg_m.values():
|
55
|
+
self._logger.debug("Registering package %s" % subpkg.name)
|
56
|
+
self.pkg_rgy.registerPackage(subpkg)
|
57
|
+
|
51
58
|
self._pkg_spec_s.append(self.root_pkg)
|
52
59
|
pkg = self.root_pkg.mkPackage(self)
|
53
60
|
self._pkg_spec_s.pop()
|
61
|
+
|
62
|
+
# Allows us to find ourselves
|
54
63
|
self._pkg_m[PackageSpec(self.root_pkg.name)] = pkg
|
55
64
|
|
65
|
+
|
56
66
|
def push_package(self, pkg : Package, add=False):
|
57
67
|
self._pkg_s.append(pkg)
|
58
68
|
if add:
|
@@ -150,12 +160,13 @@ class TaskGraphBuilder(object):
|
|
150
160
|
self._logger.debug("Search package %s for import alias %s" % (
|
151
161
|
pkg_def.name, pkg_spec.name))
|
152
162
|
for imp in pkg_def.imports:
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
163
|
+
if type(imp) != str:
|
164
|
+
self._logger.debug("imp: %s" % str(imp))
|
165
|
+
if imp.alias is not None and imp.alias == spec.name:
|
166
|
+
# Found the alias name. Just need to get an instance of this package
|
167
|
+
self._logger.debug("Found alias %s -> %s" % (imp.alias, imp.name))
|
168
|
+
pkg_name = imp.name
|
169
|
+
break
|
159
170
|
|
160
171
|
# Note: _pkg_m needs to be context specific, such that imports from
|
161
172
|
# one package don't end up visible in another
|
dv_flow/mgr/task_listener_log.py
CHANGED
{dv_flow_mgr-0.0.1.13707193513a1.dist-info → dv_flow_mgr-0.0.1.13711323919a1.dist-info}/RECORD
RENAMED
@@ -7,23 +7,23 @@ dv_flow/mgr/fileset.py,sha256=_EhtqBVn0prylXJhR3dUV2p7ocGHzNAF_ZtYNgeKJhs,1240
|
|
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=
|
11
|
-
dv_flow/mgr/package_import_spec.py,sha256=
|
10
|
+
dv_flow/mgr/package_def.py,sha256=NQlXqdGoqIEFDHbO-A4tDEc_JF3m4fdBgKOjwh6J7jA,16034
|
11
|
+
dv_flow/mgr/package_import_spec.py,sha256=K5bwbO82A7MB5WeR7kmzWk7wQmQbQVMG1BOtpSPKQRU,1755
|
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
|
14
14
|
dv_flow/mgr/param_ref_eval.py,sha256=U8QhDf1n_9bLnExdc1oQamq5-pOUXrFalOX4oyR9UoM,1138
|
15
15
|
dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
|
16
|
-
dv_flow/mgr/pkg_rgy.py,sha256=
|
16
|
+
dv_flow/mgr/pkg_rgy.py,sha256=VSk5Uq4XP2DVITsxzfJY75s54Th4PKMrBPd535BHGAs,4743
|
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
20
|
dv_flow/mgr/task_def.py,sha256=Wmh78mQLAiHXlpD2KCvFxTWtnjjwgct8fEm8gelCg1c,1987
|
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=Z4-_D5a8dtrvd6hEIym-jrgkAC8l9INsXXOsO1nQZG0,8327
|
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=3IlOQmTpdyDL-PwV8zWW2oV5lpY5LD9BFEHMxdiECFE,935
|
27
27
|
dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
|
28
28
|
dv_flow/mgr/task_node.py,sha256=leuQC3IPyZQsJKQwKBTQgvstXxH7Fk10eDINoaK7718,12212
|
29
29
|
dv_flow/mgr/task_output.py,sha256=dkJhhNRFGFQSkVsw_bGirK0_0ghTxBYq1LjRMZCVWnA,245
|
@@ -39,9 +39,9 @@ dv_flow/mgr/std/fileset.py,sha256=69cgah6jmRNGmFaLZKpMUaxVSaQ5DxtrqshhQwXhO54,29
|
|
39
39
|
dv_flow/mgr/std/flow.dv,sha256=DpDTrRBfbIt4cJKLHqk_l6_nPkeFDKLVa5Ic4FZodNM,1587
|
40
40
|
dv_flow/mgr/std/message.py,sha256=T8Ye44784rD6CT2qIAP5SD7sKPdAlGMFimc4IaPCxxE,200
|
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.13711323919a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
43
|
+
dv_flow_mgr-0.0.1.13711323919a1.dist-info/METADATA,sha256=Cvh0TWgztkYp9dPFbbkrfmLSQ4KgbQ21DBdnppeSk1g,13314
|
44
|
+
dv_flow_mgr-0.0.1.13711323919a1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
45
|
+
dv_flow_mgr-0.0.1.13711323919a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
46
|
+
dv_flow_mgr-0.0.1.13711323919a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
47
|
+
dv_flow_mgr-0.0.1.13711323919a1.dist-info/RECORD,,
|
{dv_flow_mgr-0.0.1.13707193513a1.dist-info → dv_flow_mgr-0.0.1.13711323919a1.dist-info}/LICENSE
RENAMED
File without changes
|
{dv_flow_mgr-0.0.1.13707193513a1.dist-info → dv_flow_mgr-0.0.1.13711323919a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|