dv-flow-mgr 0.0.1.13979842530a1__py3-none-any.whl → 0.0.1.14013608039a1__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.
@@ -50,7 +50,7 @@ class CmdRun(object):
50
50
  tasks = []
51
51
  for task in pkg.tasks:
52
52
  tasks.append(task)
53
- for frag in pkg.fragment_l:
53
+ for frag in pkg._fragment_l:
54
54
  for task in frag.tasks:
55
55
  tasks.append(task)
56
56
  tasks.sort(key=lambda x: x.name)
@@ -75,7 +75,7 @@ class CmdRun(object):
75
75
  # Maybe separate into a task-graph builder and a task-graph runner
76
76
 
77
77
  # TODO: allow user to specify run root -- maybe relative to some fixed directory?
78
- rundir = os.path.join(pkg.basedir, "rundir")
78
+ rundir = os.path.join(pkg._basedir, "rundir")
79
79
 
80
80
  builder = TaskGraphBuilder(root_pkg=pkg, rundir=rundir)
81
81
  runner = TaskSetRunner(rundir)
@@ -34,7 +34,7 @@ class FragmentDef(BaseModel):
34
34
  fragments: List[str] = dc.Field(default_factory=list)
35
35
  types : List[TypeDef] = dc.Field(default_factory=list)
36
36
 
37
- basedir : str = None
37
+ _basedir : str = None
38
38
 
39
39
  def getTask(self, name : str) -> 'TaskDef':
40
40
  for t in self.tasks:
@@ -63,15 +63,33 @@ class PackageDef(BaseModel):
63
63
  default_factory=list, alias="with",
64
64
  description="List of package parameters to set")
65
65
 
66
- fragment_l : List['FragmentDef'] = dc.Field(default_factory=list, exclude=True)
67
- subpkg_m : Dict[str,'PackageDef'] = dc.Field(default_factory=dict, exclude=True)
66
+ _fragment_l : List['FragmentDef'] = []
67
+ _subpkg_m : Dict[str,'PackageDef'] = {}
68
68
 
69
69
  # import_m : Dict['PackageSpec','Package'] = dc.Field(default_factory=dict)
70
70
 
71
- basedir : str = None
71
+ _basedir : str = None
72
72
  _log : ClassVar = logging.getLogger("PackageDef")
73
73
 
74
+ @property
75
+ def fragment_l(self):
76
+ return self._fragment_l
77
+
78
+ @property
79
+ def subpkg_m(self):
80
+ return self._subpkg_m
81
+
82
+ @property
83
+ def basedir(self):
84
+ return self._basedir
85
+
86
+ @basedir.setter
87
+ def basedir(self, v):
88
+ self._basedir = v
89
+
74
90
  def __post_init__(self):
91
+ self._fragment_l = []
92
+ self._subpkg_m = {}
75
93
  for t in self.tasks:
76
94
  t.fullname = self.name + "." + t.name
77
95
 
@@ -91,13 +109,13 @@ class PackageDef(BaseModel):
91
109
  for task in self.tasks:
92
110
  if task.name in tasks_m.keys():
93
111
  raise Exception("Duplicate task %s" % task.name)
94
- tasks_m[task.name] = (task, self.basedir, ) # We'll add a TaskCtor later
112
+ tasks_m[task.name] = (task, self._basedir, ) # We'll add a TaskCtor later
95
113
 
96
- for frag in self.fragment_l:
114
+ for frag in self._fragment_l:
97
115
  for task in frag.tasks:
98
116
  if task.name in tasks_m.keys():
99
117
  raise Exception("Duplicate task %s" % task.name)
100
- tasks_m[task.name] = (task, frag.basedir, ) # We'll add a TaskCtor later
118
+ tasks_m[task.name] = (task, frag._basedir, ) # We'll add a TaskCtor later
101
119
 
102
120
  # Now we have a unified map of the tasks declared in this package
103
121
  for name in list(tasks_m.keys()):
@@ -179,14 +197,14 @@ class PackageDef(BaseModel):
179
197
 
180
198
  try:
181
199
  if modname not in sys.modules:
182
- if self.basedir not in sys.path:
183
- sys.path.append(self.basedir)
200
+ if self._basedir not in sys.path:
201
+ sys.path.append(self._basedir)
184
202
  mod = importlib.import_module(modname)
185
203
  else:
186
204
  mod = sys.modules[modname]
187
205
  except ModuleNotFoundError as e:
188
- raise Exception("Failed to import module %s (basedir=%s): %s" % (
189
- modname, self.basedir, str(e)))
206
+ raise Exception("Failed to import module %s (_basedir=%s): %s" % (
207
+ modname, self._basedir, str(e)))
190
208
 
191
209
  if not hasattr(mod, clsname):
192
210
  raise Exception("Method %s not found in module %s" % (clsname, modname))
@@ -326,10 +344,10 @@ class PackageDef(BaseModel):
326
344
  except Exception as e:
327
345
  PackageDef._log.error("Failed to load package from %s" % root)
328
346
  raise e
329
- pkg.basedir = os.path.dirname(root)
347
+ pkg._basedir = os.path.dirname(root)
330
348
 
331
349
  # for t in pkg.tasks:
332
- # t.basedir = os.path.dirname(root)
350
+ # t._basedir = os.path.dirname(root)
333
351
 
334
352
  if exp_pkg_name is not None:
335
353
  if exp_pkg_name != pkg.name:
@@ -347,7 +365,7 @@ class PackageDef(BaseModel):
347
365
  PackageDef._loadFragmentSpec(pkg, spec, file_s)
348
366
 
349
367
  if len(pkg.imports) > 0:
350
- cls._log.info("Loading imported packages (basedir=%s)" % pkg.basedir)
368
+ cls._log.info("Loading imported packages (_basedir=%s)" % pkg._basedir)
351
369
  for imp in pkg.imports:
352
370
  if type(imp) == str:
353
371
  imp_path = imp
@@ -359,8 +377,8 @@ class PackageDef(BaseModel):
359
377
  cls._log.info("Loading imported package %s" % imp_path)
360
378
 
361
379
  if not os.path.isabs(imp_path):
362
- cls._log.debug("basedir: %s ; imp_path: %s" % (pkg.basedir, imp_path))
363
- imp_path = os.path.join(pkg.basedir, imp_path)
380
+ cls._log.debug("_basedir: %s ; imp_path: %s" % (pkg._basedir, imp_path))
381
+ imp_path = os.path.join(pkg._basedir, imp_path)
364
382
 
365
383
  # Search down the tree looking for a flow.dv file
366
384
  if os.path.isdir(imp_path):
@@ -389,7 +407,7 @@ class PackageDef(BaseModel):
389
407
 
390
408
  sub_pkg = PackageDef.load(imp_path)
391
409
  cls._log.info("Loaded imported package %s" % sub_pkg.name)
392
- pkg.subpkg_m[sub_pkg.name] = sub_pkg
410
+ pkg._subpkg_m[sub_pkg.name] = sub_pkg
393
411
 
394
412
  file_s.pop()
395
413
 
@@ -407,10 +425,10 @@ class PackageDef(BaseModel):
407
425
  if "package" not in doc.keys():
408
426
  raise Exception("Missing 'package' key in %s" % root)
409
427
  pkg = PackageDef(**(doc["package"]))
410
- pkg.basedir = None
428
+ pkg._basedir = None
411
429
 
412
430
  # for t in pkg.tasks:
413
- # t.basedir = os.path.dirname(root)
431
+ # t._basedir = os.path.dirname(root)
414
432
 
415
433
  if exp_pkg_name is not None:
416
434
  if exp_pkg_name != pkg.name:
@@ -427,10 +445,10 @@ class PackageDef(BaseModel):
427
445
  # - File path
428
446
  # - Directory path
429
447
 
430
- if os.path.isfile(os.path.join(pkg.basedir, spec)):
448
+ if os.path.isfile(os.path.join(pkg._basedir, spec)):
431
449
  PackageDef._loadFragmentFile(pkg, spec, file_s)
432
- elif os.path.isdir(os.path.join(pkg.basedir, spec)):
433
- PackageDef._loadFragmentDir(pkg, os.path.join(pkg.basedir, spec), file_s)
450
+ elif os.path.isdir(os.path.join(pkg._basedir, spec)):
451
+ PackageDef._loadFragmentDir(pkg, os.path.join(pkg._basedir, spec), file_s)
434
452
  else:
435
453
  raise Exception("Fragment spec %s not found" % spec)
436
454
 
@@ -454,7 +472,7 @@ class PackageDef(BaseModel):
454
472
  if "fragment" in doc.keys():
455
473
  # Merge the package definition
456
474
  frag = FragmentDef(**(doc["fragment"]))
457
- frag.basedir = os.path.dirname(file)
458
- pkg.fragment_l.append(frag)
475
+ frag._basedir = os.path.dirname(file)
476
+ pkg._fragment_l.append(frag)
459
477
  else:
460
478
  print("Warning: file %s is not a fragment" % file)
dv_flow/mgr/param_def.py CHANGED
@@ -23,15 +23,20 @@ from typing import Any, List, Union
23
23
  from pydantic import BaseModel, Field
24
24
 
25
25
  class ListType(BaseModel):
26
- item : Union[str, 'ComplexType']
26
+ # item : Union[str, 'ComplexType']
27
+ item : Union[str, Any]
27
28
 
28
29
  class MapType(BaseModel):
29
- key : Union[str, 'ComplexType']
30
- item : Union[str, 'ComplexType']
30
+ # key : Union[str, 'ComplexType']
31
+ # item : Union[str, 'ComplexType']
32
+ key : Union[str, Any]
33
+ item : Union[str, Any]
31
34
 
32
35
  class ComplexType(BaseModel):
33
36
  list : Union[ListType, None] = None
34
37
  map : Union[MapType, None] = None
38
+ # list : Union[Any, None] = None
39
+ # map : Union[Any, None] = None
35
40
 
36
41
  class ParamDef(BaseModel):
37
42
  doc : str = None
@@ -0,0 +1,3 @@
1
+
2
+ from .util import *
3
+
@@ -0,0 +1,36 @@
1
+ import argparse
2
+ import logging
3
+ from .cmds.cmd_schema import CmdSchema
4
+
5
+ def get_parser():
6
+ parser = argparse.ArgumentParser(description="dv-flow-mgr.util")
7
+ parser.add_argument("--log-level",
8
+ help="Configures debug level [INFO, DEBUG]",
9
+ choices=("NONE", "INFO", "DEBUG"))
10
+
11
+ subparsers = parser.add_subparsers(required=True)
12
+
13
+ schema = subparsers.add_parser('schema', help='Write schema')
14
+ schema.add_argument("-o", "--output",
15
+ help="Destination file",
16
+ default="-")
17
+ schema.set_defaults(f=CmdSchema())
18
+
19
+ return parser
20
+
21
+
22
+ def main():
23
+ parser = get_parser()
24
+ args = parser.parse_args()
25
+
26
+ if args.log_level is not None and args.log_level != "NONE":
27
+ opt_m = {
28
+ "INFO": logging.INFO,
29
+ "DEBUG": logging.DEBUG
30
+ }
31
+ logging.basicConfig(level=opt_m[args.log_level])
32
+
33
+ args.f(args)
34
+
35
+ if __name__ == "__main__":
36
+ main()
File without changes
@@ -0,0 +1,63 @@
1
+
2
+ import json
3
+ import sys
4
+ from pydantic import BaseModel
5
+ import pydantic.dataclasses as pdc
6
+ from typing import Union
7
+ from ...fragment_def import FragmentDef
8
+ from ...package_def import PackageDef
9
+
10
+ class DvFlowSchema(BaseModel):
11
+ root : Union[PackageDef,FragmentDef] = pdc.Field(default=None)
12
+
13
+ class CmdSchema(object):
14
+
15
+ def __call__(self, args):
16
+ if args.output == "-":
17
+ fp = sys.stdout
18
+ else:
19
+ fp = open(args.output, "w")
20
+
21
+ root_s = DvFlowSchema.model_json_schema(
22
+ ref_template="#/defs/{model}"
23
+ )
24
+ pkg_s = PackageDef.model_json_schema(
25
+ ref_template="#/defs/{model}"
26
+ )
27
+ frag_s = FragmentDef.model_json_schema(
28
+ ref_template="#/defs/{model}"
29
+ )
30
+
31
+ defs = {}
32
+ print("root_s keys: %s" % " ".join(root_s.keys()))
33
+ print("root_s defs: %s" % " ".join(root_s["$defs"].keys()))
34
+ defs.update(root_s["$defs"])
35
+ # defs.update(pkg_s["$defs"])
36
+ # defs.update(frag_s["$defs"])
37
+
38
+ for td in defs.keys():
39
+ defs[td]["$$target"] = "#/defs/%s" % td
40
+
41
+ root = {
42
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
43
+ "$id": "https://dv-flow.github.io/flow.dv.schema.json",
44
+ "title": "DV Flow-specification schema",
45
+ "description": "Flow-specification schema",
46
+ "type": "object",
47
+ "properties": {
48
+ "package": {
49
+ "$ref": "#/defs/PackageDef",
50
+ "title": "Package Definition",
51
+ "description": "Package Definition"
52
+ },
53
+ "fragment": {
54
+ "$ref": "#/defs/FragmentDef"
55
+ }
56
+ },
57
+ "defs": defs,
58
+ }
59
+
60
+ fp.write(json.dumps(root, indent=2))
61
+
62
+ if fp != sys.stdout:
63
+ fp.close()
@@ -21,7 +21,7 @@
21
21
  #****************************************************************************
22
22
  import os
23
23
  import yaml
24
- from .package_def import PackageDef
24
+ from ..package_def import PackageDef
25
25
 
26
26
  def loadProjPkgDef(path):
27
27
  """Locates the project's flow spec and returns the PackageDef"""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13979842530a1
3
+ Version: 0.0.1.14013608039a1
4
4
  Summary: DV Flow Manager is a build system for silicon design
5
5
  Author-email: Matthew Ballance <matt.ballance@gmail.com>
6
6
  License: Apache License
@@ -4,13 +4,13 @@ dv_flow/mgr/eval_jq.py,sha256=bRsHtaN51qIOiZK1VJV52W0-vj5VH0nQ7XIFebZi5kI,1129
4
4
  dv_flow/mgr/expr_eval.py,sha256=N_8hRIgzJK9JVqhRt8F9rc4S7AAdKHMMltafqk6KhJs,3113
5
5
  dv_flow/mgr/expr_parser.py,sha256=P6u2FdSXeZbdamC3zpEnYKLcK2RULQJfSoev2Ol75fE,6543
6
6
  dv_flow/mgr/fileset.py,sha256=cfKem8w5Xw4AUQkC0gyCXof2OlnoJ1t06Iw7IvMyihs,1245
7
- dv_flow/mgr/fragment_def.py,sha256=nwxx3TW7UMa6uFMp0QEKgJdmOsO2iX89cwyD2beaGoU,1646
7
+ dv_flow/mgr/fragment_def.py,sha256=AHx3ITbiNbGCzlDk5FM8Iimm0GJnWXDDRAoRC1b41jM,1647
8
8
  dv_flow/mgr/out,sha256=d8GGBi3J43fhdLBlnsUbzBfRe0TD0QTP3nOTz54l2bI,200
9
9
  dv_flow/mgr/package.py,sha256=D-jH3jqoiQG3xZIYgteFLZ4vQ0ZfkbhnW1u6wlyAJMc,1684
10
- dv_flow/mgr/package_def.py,sha256=ZGanENWXRqYDKL8qiY4JzsGYLm2iXU85XfSAsq_7rIg,17719
10
+ dv_flow/mgr/package_def.py,sha256=0Xv759yzK5n4SKJQBGMPZ06cTNBHt1dtbgKK8fySHJw,18008
11
11
  dv_flow/mgr/package_import_spec.py,sha256=aZMpnS9a5NFY76_pYXEuO3-Mkc_xFzy73fdrUe_54Dc,1760
12
12
  dv_flow/mgr/param.py,sha256=kkxMRGf6mPjSZJsjgLKH2vJL62Sn0ZESvjBLkEYOp20,1386
13
- dv_flow/mgr/param_def.py,sha256=snLHgafVqqWcDthJUOm9zvKocFsb7-wx2WTc5ltAlhg,1591
13
+ dv_flow/mgr/param_def.py,sha256=mkAw3DanIxcVWRYeh9lUAfUMkpqDFly_Ku_iobr4ix8,1745
14
14
  dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ,1981
15
15
  dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
16
16
  dv_flow/mgr/pkg_rgy.py,sha256=d1nIjRm3ymMNJT-yiMDxCS6bFisTPvLMqh5VrfsHVKM,5404
@@ -27,8 +27,7 @@ dv_flow/mgr/task_params_ctor.py,sha256=BPkbnoCtzhCxc1g8CJ6VimCcm5UAu92PXeDMhQ4lY
27
27
  dv_flow/mgr/task_runner.py,sha256=6yoNzAGb79vgYG95ku_4Kr90cgztdisSICFfV5Ykf9c,8936
28
28
  dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
30
- dv_flow/mgr/util.py,sha256=BLp-25Ph9roqo1O3VHI5sKhwxQ0wUU7znFwcSKt0hpA,1442
31
- dv_flow/mgr/cmds/cmd_run.py,sha256=J6uCzzhtGHD9MYkvE0PpX4dkk5KlY3iW7yZ29iBO3js,3196
30
+ dv_flow/mgr/cmds/cmd_run.py,sha256=VL0LU0zYnClQ8Id30sxMN_fHJzQFJsOuj7qDG7GTT60,3198
32
31
  dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
33
32
  dv_flow/mgr/std/create_file.py,sha256=wmn5N_mObx_wr2LPdKOVbNmdM71hhs3UXOv6Ap9l3Ts,2726
34
33
  dv_flow/mgr/std/exec.py,sha256=UChqa_tAjvdB1NjqTsvlPgFomP8hMsX2rAOPyUonNpk,3896
@@ -36,9 +35,14 @@ dv_flow/mgr/std/fileset.py,sha256=5IxS6T-x0wzA6fdEQcfHZ9kNP8IpH9hfJ3UMhL4A6Iw,39
36
35
  dv_flow/mgr/std/flow.dv,sha256=rl0VZt_H-TyIJq0iERai07aDDZHI86mNozs4gUxidDA,3759
37
36
  dv_flow/mgr/std/message.py,sha256=_Gox9oBzL9ZYG1JfJ-WYPXojVLqGNaKxZ9tpLVT0LO0,1035
38
37
  dv_flow/mgr/std/task_null.py,sha256=dw6LXBXVwth6gLPeduDvlz5znAhcVpDH8r1DticD-0w,1041
39
- dv_flow_mgr-0.0.1.13979842530a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
40
- dv_flow_mgr-0.0.1.13979842530a1.dist-info/METADATA,sha256=921HoHoEZXZfxF9k4CQQbf6zkncWEd51XcfQKxy-oQA,13336
41
- dv_flow_mgr-0.0.1.13979842530a1.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
42
- dv_flow_mgr-0.0.1.13979842530a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
43
- dv_flow_mgr-0.0.1.13979842530a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
44
- dv_flow_mgr-0.0.1.13979842530a1.dist-info/RECORD,,
38
+ dv_flow/mgr/util/__init__.py,sha256=6uuA6z5cKS2hcjJw6YyEM2M79g6OpXb6tZF_Gku-AGU,22
39
+ dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,983
40
+ dv_flow/mgr/util/util.py,sha256=yg9oTPRiO87mkCSOQpOtlG9vyKPQzY3qp4OJkEMbWyY,1443
41
+ dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
+ dv_flow/mgr/util/cmds/cmd_schema.py,sha256=lrEI-Jwb8j4I4yYOn9hq7_7NYbK8leVxLesrHyEWm-E,1879
43
+ dv_flow_mgr-0.0.1.14013608039a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
44
+ dv_flow_mgr-0.0.1.14013608039a1.dist-info/METADATA,sha256=dyZoT5Y1QN06lhNQw7MyAC4TsSNVM-VyX0GRWVxuePs,13336
45
+ dv_flow_mgr-0.0.1.14013608039a1.dist-info/WHEEL,sha256=1tXe9gY0PYatrMPMDd6jXqjfpz_B-Wqm32CPfRC58XU,91
46
+ dv_flow_mgr-0.0.1.14013608039a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
47
+ dv_flow_mgr-0.0.1.14013608039a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
48
+ dv_flow_mgr-0.0.1.14013608039a1.dist-info/RECORD,,