dv-flow-mgr 1.9.14960994514rc0__py3-none-any.whl → 1.9.14984445659rc0__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 -1
- dv_flow/mgr/package.py +7 -1
- dv_flow/mgr/package_def.py +5 -0
- dv_flow/mgr/package_loader.py +41 -55
- dv_flow/mgr/task_listener_log.py +15 -4
- {dv_flow_mgr-1.9.14960994514rc0.dist-info → dv_flow_mgr-1.9.14984445659rc0.dist-info}/METADATA +1 -1
- {dv_flow_mgr-1.9.14960994514rc0.dist-info → dv_flow_mgr-1.9.14984445659rc0.dist-info}/RECORD +11 -11
- {dv_flow_mgr-1.9.14960994514rc0.dist-info → dv_flow_mgr-1.9.14984445659rc0.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-1.9.14960994514rc0.dist-info → dv_flow_mgr-1.9.14984445659rc0.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-1.9.14960994514rc0.dist-info → dv_flow_mgr-1.9.14984445659rc0.dist-info}/licenses/LICENSE +0 -0
- {dv_flow_mgr-1.9.14960994514rc0.dist-info → dv_flow_mgr-1.9.14984445659rc0.dist-info}/top_level.txt +0 -0
dv_flow/mgr/__init__.py
CHANGED
dv_flow/mgr/package.py
CHANGED
@@ -21,13 +21,18 @@
|
|
21
21
|
#****************************************************************************
|
22
22
|
import dataclasses as dc
|
23
23
|
import logging
|
24
|
-
from typing import Any, ClassVar, Dict, List
|
24
|
+
from typing import Any, ClassVar, Dict, List, Union
|
25
25
|
from .fragment_def import FragmentDef
|
26
26
|
from .package_def import PackageDef
|
27
27
|
from .srcinfo import SrcInfo
|
28
28
|
from .task import Task
|
29
29
|
from .type import Type
|
30
30
|
|
31
|
+
@dc.dataclass
|
32
|
+
class Override(object):
|
33
|
+
target : Union[str, 'Package']
|
34
|
+
override : Union[str, 'Package']
|
35
|
+
|
31
36
|
@dc.dataclass
|
32
37
|
class Package(object):
|
33
38
|
pkg_def : PackageDef
|
@@ -39,6 +44,7 @@ class Package(object):
|
|
39
44
|
type_m : Dict[str,Type] = dc.field(default_factory=dict)
|
40
45
|
fragment_def_l : List[FragmentDef] = dc.field(default_factory=list)
|
41
46
|
pkg_m : Dict[str, 'Package'] = dc.field(default_factory=dict)
|
47
|
+
# overrides : Dict[str, str]
|
42
48
|
srcinfo : SrcInfo = None
|
43
49
|
_log : ClassVar = logging.getLogger("Package")
|
44
50
|
|
dv_flow/mgr/package_def.py
CHANGED
@@ -39,6 +39,9 @@ from .srcinfo import SrcInfo
|
|
39
39
|
from .task_def import TaskDef
|
40
40
|
from .type_def import TypeDef
|
41
41
|
|
42
|
+
class Override(BaseModel):
|
43
|
+
name : str = dc.Field()
|
44
|
+
override : str = dc.Field(alias="with")
|
42
45
|
|
43
46
|
class PackageDef(BaseModel):
|
44
47
|
name : str = dc.Field(
|
@@ -50,6 +53,8 @@ class PackageDef(BaseModel):
|
|
50
53
|
imports : List[Union[str,PackageImportSpec]] = dc.Field(
|
51
54
|
default_factory=list,
|
52
55
|
description="List of packages to import")
|
56
|
+
overrides : Dict[str, str] = dc.Field(default_factory=dict,
|
57
|
+
description="Overrides for packages and parameters")
|
53
58
|
fragments: List[str] = dc.Field(
|
54
59
|
default_factory=list,
|
55
60
|
description="List of fragments to include")
|
dv_flow/mgr/package_loader.py
CHANGED
@@ -27,6 +27,7 @@ class SymbolScope(object):
|
|
27
27
|
name : str
|
28
28
|
task_m : Dict[str,Task] = dc.field(default_factory=dict)
|
29
29
|
type_m : Dict[str,Type] = dc.field(default_factory=dict)
|
30
|
+
override_m : Dict[str,Any] = dc.field(default_factory=dict)
|
30
31
|
|
31
32
|
def add(self, task, name):
|
32
33
|
self.task_m[name] = task
|
@@ -71,11 +72,29 @@ class LoaderScope(SymbolScope):
|
|
71
72
|
# Split the name into elements
|
72
73
|
name_elems = name.split('.')
|
73
74
|
|
75
|
+
def find_pkg(pkg_name):
|
76
|
+
pkg = None
|
77
|
+
|
78
|
+
if pkg_name in self.loader._pkg_m.keys():
|
79
|
+
pkg = self.loader._pkg_m[pkg_name]
|
80
|
+
else:
|
81
|
+
path = self.loader.pkg_rgy.findPackagePath(pkg_name)
|
82
|
+
if path is not None:
|
83
|
+
path = os.path.normpath(path)
|
84
|
+
pkg = self.loader._loadPackage(path)
|
85
|
+
self.loader._pkg_m[pkg_name] = pkg
|
86
|
+
if pkg is not None:
|
87
|
+
self._log.debug("Found pkg %s (%s)" % (pkg_name, str(pkg.task_m.keys())))
|
88
|
+
else:
|
89
|
+
self._log.debug("Failed to find pkg %s" % pkg_name)
|
90
|
+
|
91
|
+
return pkg
|
92
|
+
|
74
93
|
if len(name_elems) > 1:
|
75
94
|
for i in range(len(name_elems)-1, -1, -1):
|
76
95
|
pkg_name = ".".join(name_elems[:i+1])
|
77
96
|
|
78
|
-
pkg =
|
97
|
+
pkg = find_pkg(pkg_name)
|
79
98
|
if pkg is not None:
|
80
99
|
break;
|
81
100
|
|
@@ -107,25 +126,6 @@ class LoaderScope(SymbolScope):
|
|
107
126
|
self._log.debug("<-- findType: %s (%s)" % (name, str(ret)))
|
108
127
|
|
109
128
|
return ret
|
110
|
-
|
111
|
-
def findPackage(self, name) -> Package:
|
112
|
-
pkg = None
|
113
|
-
|
114
|
-
if name in self.loader._pkg_m.keys():
|
115
|
-
pkg = self.loader._pkg_m[name]
|
116
|
-
else:
|
117
|
-
path = self.loader.pkg_rgy.findPackagePath(name)
|
118
|
-
if path is not None:
|
119
|
-
path = os.path.normpath(path)
|
120
|
-
pkg = self.loader._loadPackage(path)
|
121
|
-
self.loader._pkg_m[name] = pkg
|
122
|
-
if pkg is not None:
|
123
|
-
self._log.debug("Found pkg %s (%s)" % (name, str(pkg.task_m.keys())))
|
124
|
-
else:
|
125
|
-
self._log.debug("Failed to find pkg %s" % name)
|
126
|
-
|
127
|
-
return pkg
|
128
|
-
|
129
129
|
|
130
130
|
@dc.dataclass
|
131
131
|
class PackageScope(SymbolScope):
|
@@ -276,6 +276,16 @@ class PackageLoader(object):
|
|
276
276
|
ret = scope
|
277
277
|
break
|
278
278
|
return ret
|
279
|
+
|
280
|
+
def push_package_scope(self, pkg):
|
281
|
+
if len(self._pkg_s):
|
282
|
+
# Pull forward the overrides
|
283
|
+
pkg.override_m = self._pkg_s[-1].override_m.copy()
|
284
|
+
self._pkg_s.append(pkg)
|
285
|
+
pass
|
286
|
+
|
287
|
+
def pop_package_scope(self):
|
288
|
+
self._pkg_s.pop()
|
279
289
|
|
280
290
|
def _loadPackage(self, root, exp_pkg_name=None) -> Package:
|
281
291
|
if root in self._file_s:
|
@@ -358,6 +368,13 @@ class PackageLoader(object):
|
|
358
368
|
# TODO: handle 'uses' for packages
|
359
369
|
pkg.paramT = self._getParamT(pkg_def, None)
|
360
370
|
|
371
|
+
# Apply any overrides from above
|
372
|
+
|
373
|
+
# Now, apply these overrides to the
|
374
|
+
for target,override in pkg_def.overrides.items():
|
375
|
+
# TODO: expand target, override
|
376
|
+
pass
|
377
|
+
|
361
378
|
pkg_scope = self.package_scope()
|
362
379
|
if pkg_scope is not None:
|
363
380
|
self._log.debug("Add self (%s) as a subpkg of %s" % (pkg.name, pkg_scope.pkg.name))
|
@@ -375,7 +392,8 @@ class PackageLoader(object):
|
|
375
392
|
pkg_scope.pkg.pkg_m[pkg.name] = pkg
|
376
393
|
|
377
394
|
self._pkg_m[pkg.name] = pkg
|
378
|
-
self.
|
395
|
+
self.push_package_scope(PackageScope(name=pkg.name, pkg=pkg, loader=self._loader_scope))
|
396
|
+
|
379
397
|
# Imports are loaded first
|
380
398
|
self._loadPackageImports(pkg, pkg_def.imports, pkg.basedir)
|
381
399
|
|
@@ -387,7 +405,7 @@ class PackageLoader(object):
|
|
387
405
|
self._loadTypes(pkg, typedefs)
|
388
406
|
self._loadTasks(pkg, taskdefs, pkg.basedir)
|
389
407
|
|
390
|
-
self.
|
408
|
+
self.pop_package_scope()
|
391
409
|
|
392
410
|
self._log.debug("<-- _mkPackage %s (%s)" % (pkg_def.name, pkg.name))
|
393
411
|
return pkg
|
@@ -593,13 +611,7 @@ class PackageLoader(object):
|
|
593
611
|
task.uses = self._findTaskOrType(taskdef.uses)
|
594
612
|
|
595
613
|
if task.uses is None:
|
596
|
-
|
597
|
-
if closest:
|
598
|
-
self.error("failed to resolve task-uses %s. Did you mean %s?" % (
|
599
|
-
taskdef.uses,
|
600
|
-
closest), taskdef.srcinfo)
|
601
|
-
else:
|
602
|
-
self.error("failed to resolve task-uses %s" % taskdef.uses, taskdef.srcinfo)
|
614
|
+
self.error("failed to resolve task-uses %s" % taskdef.uses, taskdef.srcinfo)
|
603
615
|
continue
|
604
616
|
|
605
617
|
passthrough, consumes, rundir = self._getPTConsumesRundir(taskdef, task.uses)
|
@@ -936,29 +948,3 @@ class PackageLoader(object):
|
|
936
948
|
def marker(self, marker):
|
937
949
|
for l in self.marker_listeners:
|
938
950
|
l(marker)
|
939
|
-
|
940
|
-
def find_closest_name(self, name):
|
941
|
-
import difflib
|
942
|
-
|
943
|
-
# First see if we can find the package
|
944
|
-
|
945
|
-
name_s = set()
|
946
|
-
pkg_s = set()
|
947
|
-
for p in self._pkg_m.values():
|
948
|
-
self._gatherTaskNames(name_s, pkg_s, p)
|
949
|
-
|
950
|
-
closest_matches = difflib.get_close_matches(name, name_s)
|
951
|
-
|
952
|
-
if closest_matches and len(closest_matches) > 0:
|
953
|
-
closest_match = closest_matches[0]
|
954
|
-
self._log.debug("Closest match: %s" % closest_match)
|
955
|
-
return closest_match
|
956
|
-
|
957
|
-
def _gatherTaskNames(self, name_s, pkg_s, pkg):
|
958
|
-
if pkg.name not in pkg_s:
|
959
|
-
pkg_s.add(pkg.name)
|
960
|
-
for t in pkg.task_m.keys():
|
961
|
-
name_s.add(t)
|
962
|
-
for p in pkg.pkg_m.values():
|
963
|
-
self._gatherTaskNames(name_s, pkg_s, p)
|
964
|
-
|
dv_flow/mgr/task_listener_log.py
CHANGED
@@ -100,9 +100,17 @@ class TaskListenerLog(object):
|
|
100
100
|
sev_pref,
|
101
101
|
(" " + name) if name is not None and name != "" else "",
|
102
102
|
m.msg)
|
103
|
+
|
104
|
+
# Escape anything that looks like a styling marker
|
105
|
+
msg = msg.replace("[", "\\[")
|
106
|
+
|
103
107
|
|
104
108
|
if m.loc is not None:
|
105
|
-
|
109
|
+
|
110
|
+
try:
|
111
|
+
self.console.print("%s" % msg)
|
112
|
+
except Exception as e:
|
113
|
+
self._log.error("Problem displaying message \"%s\" to the console: %s" % (msg, e))
|
106
114
|
if m.loc.line != -1 and m.loc.pos != -1:
|
107
115
|
self.console.print(" %s:%d:%d" % (m.loc.path, m.loc.line, m.loc.pos))
|
108
116
|
elif m.loc.line != -1:
|
@@ -110,9 +118,12 @@ class TaskListenerLog(object):
|
|
110
118
|
else:
|
111
119
|
self.console.print(" %s" % m.loc.path)
|
112
120
|
else:
|
113
|
-
|
114
|
-
|
115
|
-
|
121
|
+
try:
|
122
|
+
self.console.print("%s%s" % (
|
123
|
+
msg,
|
124
|
+
("(%s)" % rundir) if rundir is not None else ""))
|
125
|
+
except Exception as e:
|
126
|
+
self._log.error("Problem displaying message \"%s\" to the console: %s" % (msg, e))
|
116
127
|
|
117
128
|
pass
|
118
129
|
|
{dv_flow_mgr-1.9.14960994514rc0.dist-info → dv_flow_mgr-1.9.14984445659rc0.dist-info}/RECORD
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
dv_flow/mgr/__init__.py,sha256
|
1
|
+
dv_flow/mgr/__init__.py,sha256=-6xIQMeY8cnLTIa2To7xXMSSvPpXHuUX6NiFj5XUMog,1315
|
2
2
|
dv_flow/mgr/__main__.py,sha256=BogNdBkXhgg05E8_IumNkVoag6WwvfbpiI8346oOtPo,3844
|
3
3
|
dv_flow/mgr/cond_def.py,sha256=2ZkzPusqVkN1fFMTvkDl9O_OJLPdD_cK3xzX9J75RMw,343
|
4
4
|
dv_flow/mgr/config.py,sha256=b2MVlVVNB0psk8x4bQRAYshkpNJrtyMtV1Ymhmx9AfM,137
|
@@ -18,10 +18,10 @@ dv_flow/mgr/name_resolution.py,sha256=yeOQuPRWaZRWbEc-82W7qO854RY1qicqC4IYxk8jpv
|
|
18
18
|
dv_flow/mgr/need_def.py,sha256=X52FJnhukwFsGCkIM-W6apZEdxqS5Gmm-rRO-TS83aU,173
|
19
19
|
dv_flow/mgr/null_callable.py,sha256=x6hlJ9EL6xFLSGFgd14eXbxSWxsUGF56jpbLhERjPtg,243
|
20
20
|
dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
|
21
|
-
dv_flow/mgr/package.py,sha256=
|
22
|
-
dv_flow/mgr/package_def.py,sha256=
|
21
|
+
dv_flow/mgr/package.py,sha256=qz17dfKW3csOiACUe4TqrOnd8Z2d_DxYbLmP0OwhKZ8,4580
|
22
|
+
dv_flow/mgr/package_def.py,sha256=h3_FIKQB0vqfcu1jRAZuB8W8Kozr62oaKNchxeNjpWk,5898
|
23
23
|
dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
|
24
|
-
dv_flow/mgr/package_loader.py,sha256=
|
24
|
+
dv_flow/mgr/package_loader.py,sha256=bYkTXr3PS0xhi3AO8pxvqyNB9RPQRePcy6gUWJOBnvY,34889
|
25
25
|
dv_flow/mgr/package_node.py,sha256=CccD2ECiIXy9JBkRR3c7qDxeBiLiPbRT9CqR-Al_niI,214
|
26
26
|
dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
|
27
27
|
dv_flow/mgr/param_def.py,sha256=9uO-7UI4OotYixQBo8Nwb2o8FQRFxxJylYCZm9rjt48,1917
|
@@ -38,7 +38,7 @@ dv_flow/mgr/task_def.py,sha256=lhiOL7E_TfW7Ytg5qipE6d2cqTkfVqAOs1MZgtCqeLg,5257
|
|
38
38
|
dv_flow/mgr/task_gen_ctxt.py,sha256=1QQqqgaCjJSlzTV0SASpTb69vINFrDq3aqjYCKUkx3s,846
|
39
39
|
dv_flow/mgr/task_graph_builder.py,sha256=pqzazJjA36g-ETuvxfEl6JV6035koJJPqSF_L-Egtgg,32716
|
40
40
|
dv_flow/mgr/task_graph_dot_writer.py,sha256=qK4Imy9o2_F1aKoU1tJ-qoBHslq2BhSMbdjAUPfpN7I,6009
|
41
|
-
dv_flow/mgr/task_listener_log.py,sha256=
|
41
|
+
dv_flow/mgr/task_listener_log.py,sha256=5skg1QAp3jmInsjoxI2htul4DKv6ID0T9Z5itk4wudQ,4763
|
42
42
|
dv_flow/mgr/task_listener_trace.py,sha256=7B-V2YK8uXd_QSGBq_7USmbe5CleVvwumU0CpsmxZvg,6224
|
43
43
|
dv_flow/mgr/task_node.py,sha256=OC3rkeRSFv9wmgkMZ_7eJu7nuXGJcwW_b6FGQM-w7AU,5231
|
44
44
|
dv_flow/mgr/task_node_compound.py,sha256=0biBPT_2SpCPJL7DFaFY27_K7kNxJ1taIut3Fv12HXk,3347
|
@@ -76,9 +76,9 @@ dv_flow/mgr/util/util.py,sha256=BO7iqP_c9ttmXkojq7nKDN-g8wl1_Pco9k-KnrXxjwE,1889
|
|
76
76
|
dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
77
|
dv_flow/mgr/util/cmds/cmd_schema.py,sha256=IJzZdxCSEgIQ79LpYiM7UqJ9RJ-7yraqmBN2XVgAgXA,1752
|
78
78
|
dv_flow/mgr/util/cmds/cmd_workspace.py,sha256=egmaIXpe5L-TePwmcfisfrG6tdiTUWSjqa9Za5WChVs,890
|
79
|
-
dv_flow_mgr-1.9.
|
80
|
-
dv_flow_mgr-1.9.
|
81
|
-
dv_flow_mgr-1.9.
|
82
|
-
dv_flow_mgr-1.9.
|
83
|
-
dv_flow_mgr-1.9.
|
84
|
-
dv_flow_mgr-1.9.
|
79
|
+
dv_flow_mgr-1.9.14984445659rc0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
80
|
+
dv_flow_mgr-1.9.14984445659rc0.dist-info/METADATA,sha256=b3MThxkBzbiwjPJ2n-9_BBAbtJpe5H2qP9wQTsv-too,13335
|
81
|
+
dv_flow_mgr-1.9.14984445659rc0.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
|
82
|
+
dv_flow_mgr-1.9.14984445659rc0.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
83
|
+
dv_flow_mgr-1.9.14984445659rc0.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
84
|
+
dv_flow_mgr-1.9.14984445659rc0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
{dv_flow_mgr-1.9.14960994514rc0.dist-info → dv_flow_mgr-1.9.14984445659rc0.dist-info}/top_level.txt
RENAMED
File without changes
|