dv-flow-mgr 1.0.0.14502079593a1__py3-none-any.whl → 1.0.0.14528489065a1__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 +57 -0
- dv_flow/mgr/package_loader.py +41 -20
- dv_flow/mgr/util/__main__.py +5 -0
- dv_flow/mgr/util/cmds/cmd_workspace.py +34 -0
- dv_flow/mgr/util/util.py +1 -1
- {dv_flow_mgr-1.0.0.14502079593a1.dist-info → dv_flow_mgr-1.0.0.14528489065a1.dist-info}/METADATA +1 -1
- {dv_flow_mgr-1.0.0.14502079593a1.dist-info → dv_flow_mgr-1.0.0.14528489065a1.dist-info}/RECORD +11 -10
- {dv_flow_mgr-1.0.0.14502079593a1.dist-info → dv_flow_mgr-1.0.0.14528489065a1.dist-info}/WHEEL +0 -0
- {dv_flow_mgr-1.0.0.14502079593a1.dist-info → dv_flow_mgr-1.0.0.14528489065a1.dist-info}/entry_points.txt +0 -0
- {dv_flow_mgr-1.0.0.14502079593a1.dist-info → dv_flow_mgr-1.0.0.14528489065a1.dist-info}/licenses/LICENSE +0 -0
- {dv_flow_mgr-1.0.0.14502079593a1.dist-info → dv_flow_mgr-1.0.0.14528489065a1.dist-info}/top_level.txt +0 -0
dv_flow/mgr/package.py
CHANGED
@@ -24,6 +24,7 @@ import logging
|
|
24
24
|
from typing import Any, ClassVar, Dict, List
|
25
25
|
from .fragment_def import FragmentDef
|
26
26
|
from .package_def import PackageDef
|
27
|
+
from .srcinfo import SrcInfo
|
27
28
|
from .task import Task
|
28
29
|
|
29
30
|
@dc.dataclass
|
@@ -37,6 +38,7 @@ class Package(object):
|
|
37
38
|
types : Dict[str,Any] = dc.field(default_factory=dict)
|
38
39
|
fragment_def_l : List[FragmentDef] = dc.field(default_factory=list)
|
39
40
|
pkg_m : Dict[str, 'Package'] = dc.field(default_factory=dict)
|
41
|
+
srcinfo : SrcInfo = None
|
40
42
|
_log : ClassVar = logging.getLogger("Package")
|
41
43
|
|
42
44
|
@property
|
@@ -66,4 +68,59 @@ class Package(object):
|
|
66
68
|
|
67
69
|
def __hash__(self):
|
68
70
|
return id(self)
|
71
|
+
|
72
|
+
def to_json(self, markers=None) -> dict:
|
73
|
+
"""Convert package data to a JSON-compatible dictionary format.
|
74
|
+
|
75
|
+
Args:
|
76
|
+
markers: Optional list of marker objects, each with 'msg' and 'severity' attributes
|
77
|
+
|
78
|
+
Returns:
|
79
|
+
dict: Dictionary containing required package data and markers
|
80
|
+
"""
|
81
|
+
# Collect all imported packages recursively
|
82
|
+
imports = set()
|
83
|
+
def collect_imports(pkg):
|
84
|
+
for name, p in pkg.pkg_m.items():
|
85
|
+
if name not in imports:
|
86
|
+
imports.add(name)
|
87
|
+
collect_imports(p)
|
88
|
+
collect_imports(self)
|
89
|
+
|
90
|
+
# Get files from fragments
|
91
|
+
files = []
|
92
|
+
for frag in self.fragment_def_l:
|
93
|
+
if frag.srcinfo and frag.srcinfo.file:
|
94
|
+
files.append(frag.srcinfo.file)
|
69
95
|
|
96
|
+
def format_srcinfo(srcinfo):
|
97
|
+
if srcinfo:
|
98
|
+
ret = srcinfo.file
|
99
|
+
if srcinfo.lineno != -1:
|
100
|
+
ret += ":" + str(srcinfo.lineno)
|
101
|
+
if srcinfo.linepos != -1:
|
102
|
+
ret += ":" + str(srcinfo.linepos)
|
103
|
+
return ret
|
104
|
+
return None
|
105
|
+
result = {
|
106
|
+
"name": self.name,
|
107
|
+
"file": self.srcinfo.file if self.srcinfo else None,
|
108
|
+
"imports": sorted(list(imports)),
|
109
|
+
"files": files,
|
110
|
+
"markers": [],
|
111
|
+
"tasks": [
|
112
|
+
{
|
113
|
+
"name": name,
|
114
|
+
"srcinfo": format_srcinfo(task.srcinfo)
|
115
|
+
}
|
116
|
+
for name, task in self.task_m.items()
|
117
|
+
]
|
118
|
+
}
|
119
|
+
|
120
|
+
if markers:
|
121
|
+
result["markers"] = [
|
122
|
+
{"msg": marker.msg, "severity": marker.severity}
|
123
|
+
for marker in markers
|
124
|
+
]
|
125
|
+
|
126
|
+
return result
|
dv_flow/mgr/package_loader.py
CHANGED
@@ -11,6 +11,7 @@ from .fragment_def import FragmentDef
|
|
11
11
|
from .package_def import PackageDef
|
12
12
|
from .package import Package
|
13
13
|
from .ext_rgy import ExtRgy
|
14
|
+
from .srcinfo import SrcInfo
|
14
15
|
from .task import Task
|
15
16
|
from .task_def import TaskDef, PassthroughE, ConsumesE, RundirE
|
16
17
|
from .task_data import TaskMarker, TaskMarkerLoc, SeverityE
|
@@ -60,6 +61,7 @@ class LoaderScope(SymbolScope):
|
|
60
61
|
else:
|
61
62
|
path = self.loader.pkg_rgy.findPackagePath(pkg_name)
|
62
63
|
if path is not None:
|
64
|
+
path = os.path.normpath(path)
|
63
65
|
pkg = self.loader._loadPackage(path)
|
64
66
|
self.loader._pkg_m[pkg_name] = pkg
|
65
67
|
if pkg is not None and name in pkg.task_m.keys():
|
@@ -169,6 +171,7 @@ class PackageLoader(object):
|
|
169
171
|
|
170
172
|
def load(self, root) -> Package:
|
171
173
|
self._log.debug("--> load %s" % root)
|
174
|
+
root = os.path.normpath(root)
|
172
175
|
ret = self._loadPackage(root, None)
|
173
176
|
self._log.debug("<-- load %s" % root)
|
174
177
|
return ret
|
@@ -183,6 +186,7 @@ class PackageLoader(object):
|
|
183
186
|
pp = self.pkg_rgy.findPackagePath(nn)
|
184
187
|
if pp is None:
|
185
188
|
raise Exception("Package %s not found" % nn)
|
189
|
+
root = os.path.normpath(pp)
|
186
190
|
pp_n = self._loadPackage(pp)
|
187
191
|
pkg.pkg_m[pp_n.name] = pp_n
|
188
192
|
self._log.debug("<-- load_rgy %s" % name)
|
@@ -227,15 +231,21 @@ class PackageLoader(object):
|
|
227
231
|
# t.fullname = pkg.name + "." + t.name
|
228
232
|
|
229
233
|
except pydantic.ValidationError as e:
|
230
|
-
print("Errors: %s" % root)
|
234
|
+
# print("Errors: %s" % root)
|
231
235
|
error_paths = []
|
232
236
|
loc = None
|
237
|
+
loc_s = ""
|
233
238
|
for ee in e.errors():
|
234
239
|
# print(" Error: %s" % str(ee))
|
235
240
|
obj = doc["package"]
|
236
241
|
loc = None
|
242
|
+
print("Errors: %s" % str(ee))
|
237
243
|
for el in ee['loc']:
|
238
|
-
print("el: %s" % str(el))
|
244
|
+
# print("el: %s" % str(el))
|
245
|
+
if loc_s != "":
|
246
|
+
loc_s += "." + str(el)
|
247
|
+
else:
|
248
|
+
loc_s = str(el)
|
239
249
|
obj = obj[el]
|
240
250
|
if type(obj) == dict and 'srcinfo' in obj.keys():
|
241
251
|
loc = obj['srcinfo']
|
@@ -251,7 +261,11 @@ class PackageLoader(object):
|
|
251
261
|
severity=SeverityE.Error,
|
252
262
|
loc=marker_loc)
|
253
263
|
else:
|
254
|
-
|
264
|
+
marker_loc = TaskMarkerLoc(path=root)
|
265
|
+
marker = TaskMarker(
|
266
|
+
msg=("%s (at '%s')" % (ee['msg'], loc_s)),
|
267
|
+
severity=SeverityE.Error,
|
268
|
+
loc=marker_loc)
|
255
269
|
self.marker(marker)
|
256
270
|
|
257
271
|
if pkg_def is not None:
|
@@ -265,28 +279,34 @@ class PackageLoader(object):
|
|
265
279
|
|
266
280
|
def _mkPackage(self, pkg_def : PackageDef, root : str) -> Package:
|
267
281
|
self._log.debug("--> _mkPackage %s" % pkg_def.name)
|
268
|
-
pkg = Package(
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
self._log.debug("Add self (%s) as a subpkg of %s" % (pkg.name, pkg_scope.pkg.name))
|
273
|
-
pkg_scope.pkg.pkg_m[pkg.name] = pkg
|
282
|
+
pkg = Package(
|
283
|
+
pkg_def,
|
284
|
+
os.path.dirname(root),
|
285
|
+
srcinfo=SrcInfo(file=root))
|
274
286
|
|
275
287
|
if pkg.name in self._pkg_m.keys():
|
276
|
-
|
288
|
+
epkg = self._pkg_m[pkg.name]
|
289
|
+
if epkg.srcinfo.file != pkg.srcinfo.file:
|
290
|
+
self.error("Package %s already loaded from %s. Duplicate defined in %s" % (
|
291
|
+
pkg.name, epkg.srcinfo.file, pkg.srcinfo.file))
|
292
|
+
else:
|
293
|
+
pkg_scope = self.package_scope()
|
294
|
+
if pkg_scope is not None:
|
295
|
+
self._log.debug("Add self (%s) as a subpkg of %s" % (pkg.name, pkg_scope.pkg.name))
|
296
|
+
pkg_scope.pkg.pkg_m[pkg.name] = pkg
|
277
297
|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
298
|
+
self._pkg_m[pkg.name] = pkg
|
299
|
+
self._pkg_s.append(PackageScope(name=pkg.name, pkg=pkg, loader=self._loader_scope))
|
300
|
+
# Imports are loaded first
|
301
|
+
self._loadPackageImports(pkg, pkg_def.imports, pkg.basedir)
|
282
302
|
|
283
|
-
|
303
|
+
taskdefs = pkg_def.tasks.copy()
|
284
304
|
|
285
|
-
|
305
|
+
self._loadFragments(pkg, pkg_def.fragments, pkg.basedir, taskdefs)
|
286
306
|
|
287
|
-
|
307
|
+
self._loadTasks(pkg, taskdefs, pkg.basedir)
|
288
308
|
|
289
|
-
|
309
|
+
self._pkg_s.pop()
|
290
310
|
|
291
311
|
self._log.debug("<-- _mkPackage %s (%s)" % (pkg_def.name, pkg.name))
|
292
312
|
return pkg
|
@@ -343,6 +363,7 @@ class PackageLoader(object):
|
|
343
363
|
sub_pkg = self._pkg_path_m[imp_path]
|
344
364
|
else:
|
345
365
|
self._log.info("Loading imported file %s" % imp_path)
|
366
|
+
imp_path = os.path.normpath(imp_path)
|
346
367
|
sub_pkg = self._loadPackage(imp_path)
|
347
368
|
self._log.info("Loaded imported package %s" % sub_pkg.name)
|
348
369
|
|
@@ -701,10 +722,10 @@ class PackageLoader(object):
|
|
701
722
|
|
702
723
|
def error(self, msg, loc=None):
|
703
724
|
if loc is not None:
|
704
|
-
marker = TaskMarker(msg=msg, severity=
|
725
|
+
marker = TaskMarker(msg=msg, severity=SeverityE.Error,
|
705
726
|
loc=loc)
|
706
727
|
else:
|
707
|
-
marker = TaskMarker(msg=msg, severity=
|
728
|
+
marker = TaskMarker(msg=msg, severity=SeverityE.Error)
|
708
729
|
self.marker(marker)
|
709
730
|
|
710
731
|
def marker(self, marker):
|
dv_flow/mgr/util/__main__.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import argparse
|
2
2
|
import logging
|
3
3
|
from .cmds.cmd_schema import CmdSchema
|
4
|
+
from .cmds.cmd_workspace import CmdWorkspace
|
4
5
|
|
5
6
|
def get_parser():
|
6
7
|
parser = argparse.ArgumentParser(description="dv-flow-mgr.util")
|
@@ -16,6 +17,10 @@ def get_parser():
|
|
16
17
|
default="-")
|
17
18
|
schema.set_defaults(f=CmdSchema())
|
18
19
|
|
20
|
+
workspace = subparsers.add_parser('workspace',
|
21
|
+
help='Dumps the workspace structure in JSON')
|
22
|
+
workspace.set_defaults(f=CmdWorkspace())
|
23
|
+
|
19
24
|
return parser
|
20
25
|
|
21
26
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import json
|
2
|
+
import os
|
3
|
+
from ...package import Package
|
4
|
+
from ...util.util import loadProjPkgDef
|
5
|
+
|
6
|
+
class CmdWorkspace(object):
|
7
|
+
|
8
|
+
def __call__(self, args):
|
9
|
+
|
10
|
+
pkg : Package = None
|
11
|
+
markers = None
|
12
|
+
|
13
|
+
if os.path.isfile(os.path.join(os.getcwd(), "flow.dv")):
|
14
|
+
markers = []
|
15
|
+
def marker(m):
|
16
|
+
nonlocal markers
|
17
|
+
print("marker: %s" % str(m))
|
18
|
+
markers.append(m)
|
19
|
+
pkg = loadProjPkgDef(os.getcwd(), marker)
|
20
|
+
|
21
|
+
|
22
|
+
if pkg is None and markers is None:
|
23
|
+
print("{abc}")
|
24
|
+
elif pkg is not None:
|
25
|
+
print(json.dumps(pkg.to_json(markers)))
|
26
|
+
else:
|
27
|
+
result = {}
|
28
|
+
result["markers"] = [
|
29
|
+
{"msg": marker.msg, "severity": str(marker.severity)}
|
30
|
+
for marker in markers
|
31
|
+
]
|
32
|
+
print(json.dumps(result))
|
33
|
+
|
34
|
+
pass
|
dv_flow/mgr/util/util.py
CHANGED
@@ -33,7 +33,7 @@ def loadProjPkgDef(path, listener=None):
|
|
33
33
|
with open(os.path.join(dir, "flow.dv")) as f:
|
34
34
|
data = yaml.load(f, Loader=yaml.FullLoader)
|
35
35
|
if "package" in data.keys():
|
36
|
-
listeners = [listener] if listener is None else []
|
36
|
+
listeners = [listener] if listener is not None else []
|
37
37
|
ret = PackageLoader(marker_listeners=listeners).load(os.path.join(dir, "flow.dv"))
|
38
38
|
break
|
39
39
|
dir = os.path.dirname(dir)
|
{dv_flow_mgr-1.0.0.14502079593a1.dist-info → dv_flow_mgr-1.0.0.14528489065a1.dist-info}/RECORD
RENAMED
@@ -15,10 +15,10 @@ dv_flow/mgr/listener_list.py,sha256=BfqvEO2AyJvyc4ClU-hPgDPqWSlqvSdG-yaFEHvUrMc,
|
|
15
15
|
dv_flow/mgr/need_def.py,sha256=X52FJnhukwFsGCkIM-W6apZEdxqS5Gmm-rRO-TS83aU,173
|
16
16
|
dv_flow/mgr/null_callable.py,sha256=x6hlJ9EL6xFLSGFgd14eXbxSWxsUGF56jpbLhERjPtg,243
|
17
17
|
dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
|
18
|
-
dv_flow/mgr/package.py,sha256=
|
18
|
+
dv_flow/mgr/package.py,sha256=11R-bkr9q8eKXET9t7MstCo4s_fKLROp3lzCka08vzg,4252
|
19
19
|
dv_flow/mgr/package_def.py,sha256=-UyeFb_0Sj16RtS2vxtIxTfl-oW7adJjM1I3ZSjcRpc,5729
|
20
20
|
dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
|
21
|
-
dv_flow/mgr/package_loader.py,sha256=
|
21
|
+
dv_flow/mgr/package_loader.py,sha256=7k85_5Q6fvj0Q6dIiEuXWJPrg6Cs55qtzvvDjIO5lHA,26348
|
22
22
|
dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
|
23
23
|
dv_flow/mgr/param_def.py,sha256=hOBBRLiXJ5DakXkhrLCBAQ9GPlgq-QS52r0aflmIgbg,1832
|
24
24
|
dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ,1981
|
@@ -62,13 +62,14 @@ dv_flow/mgr/std/flow.dv,sha256=YXcbELBExqcQirSKQJ_yt6JlxyaOphP-EL09zXppaAs,4164
|
|
62
62
|
dv_flow/mgr/std/message.py,sha256=0JHLErg8whqMLAasG1fumZ2O7R7WNWeNQ9ibJaLDpVY,1029
|
63
63
|
dv_flow/mgr/std/task_null.py,sha256=dw6LXBXVwth6gLPeduDvlz5znAhcVpDH8r1DticD-0w,1041
|
64
64
|
dv_flow/mgr/util/__init__.py,sha256=6uuA6z5cKS2hcjJw6YyEM2M79g6OpXb6tZF_Gku-AGU,22
|
65
|
-
dv_flow/mgr/util/__main__.py,sha256=
|
66
|
-
dv_flow/mgr/util/util.py,sha256=
|
65
|
+
dv_flow/mgr/util/__main__.py,sha256=ioXQ-IMZctzYysJM4RswuPWNSRxtPxzEcG5hutp3Cd4,1210
|
66
|
+
dv_flow/mgr/util/util.py,sha256=moHKw_je5pU2ZCfSuFVyiBznFL5q2etTLf70cgCDJ0o,1570
|
67
67
|
dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
68
68
|
dv_flow/mgr/util/cmds/cmd_schema.py,sha256=IJzZdxCSEgIQ79LpYiM7UqJ9RJ-7yraqmBN2XVgAgXA,1752
|
69
|
-
|
70
|
-
dv_flow_mgr-1.0.0.
|
71
|
-
dv_flow_mgr-1.0.0.
|
72
|
-
dv_flow_mgr-1.0.0.
|
73
|
-
dv_flow_mgr-1.0.0.
|
74
|
-
dv_flow_mgr-1.0.0.
|
69
|
+
dv_flow/mgr/util/cmds/cmd_workspace.py,sha256=egmaIXpe5L-TePwmcfisfrG6tdiTUWSjqa9Za5WChVs,890
|
70
|
+
dv_flow_mgr-1.0.0.14528489065a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
71
|
+
dv_flow_mgr-1.0.0.14528489065a1.dist-info/METADATA,sha256=MTnLotpOD2Jsur0qkaPp62A8K-VVPce112cD4XcSEj4,13336
|
72
|
+
dv_flow_mgr-1.0.0.14528489065a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
73
|
+
dv_flow_mgr-1.0.0.14528489065a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
|
74
|
+
dv_flow_mgr-1.0.0.14528489065a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
|
75
|
+
dv_flow_mgr-1.0.0.14528489065a1.dist-info/RECORD,,
|
{dv_flow_mgr-1.0.0.14502079593a1.dist-info → dv_flow_mgr-1.0.0.14528489065a1.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|