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 CHANGED
@@ -32,6 +32,6 @@ from .task_runner import TaskSetRunner
32
32
  from .task_listener_log import TaskListenerLog
33
33
 
34
34
  VERSION="1.9.0"
35
- SUFFIX="14960994514rc0"
35
+ SUFFIX="14984445659rc0"
36
36
  __version__="%s%s" % (VERSION, SUFFIX)
37
37
 
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
 
@@ -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")
@@ -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 = self.findPackage(pkg_name)
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._pkg_s.append(PackageScope(name=pkg.name, pkg=pkg, loader=self._loader_scope))
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._pkg_s.pop()
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
- closest = self.find_closest_name(taskdef.uses)
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
-
@@ -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
- self.console.print("%s" % msg)
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
- self.console.print("%s%s" % (
114
- msg,
115
- ("(%s)" % rundir) if rundir is not None else ""))
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 1.9.14960994514rc0
3
+ Version: 1.9.14984445659rc0
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
@@ -1,4 +1,4 @@
1
- dv_flow/mgr/__init__.py,sha256=rrgP6VRo_ZaomShkYYncWAMoUHqMTseK1mKomWt7zDc,1315
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=L1ba5xguOZWuyg9s4MfafKgSoIka3SgAQzYAmcV7XgQ,4430
22
- dv_flow/mgr/package_def.py,sha256=1O1SBJATnw-zeYKRNENgw-RWxZK0hxNQhnncfE_NR-U,5674
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=jfZj1TuYWmuSEVT8Yon8bC0GWJtdynWwugbgZEJsQKY,35389
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=Ai-6X5BOoGsaNTgnlXEW0-czrjJm7__ShNK501CUmko,4337
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.14960994514rc0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
80
- dv_flow_mgr-1.9.14960994514rc0.dist-info/METADATA,sha256=dyvqC49RYtsFFrDxcmaUsRwcqRkmFpEsBomitexCeEM,13335
81
- dv_flow_mgr-1.9.14960994514rc0.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
82
- dv_flow_mgr-1.9.14960994514rc0.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
83
- dv_flow_mgr-1.9.14960994514rc0.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
84
- dv_flow_mgr-1.9.14960994514rc0.dist-info/RECORD,,
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,,