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.
@@ -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
- @staticmethod
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
- @staticmethod
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(PackageSpec):
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
- return self._pkg_m[name][1]
54
+ ret = self._pkg_m[name][1]
54
55
  else:
55
- return self._findOnPath(name)
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
- self._logger.debug("imp: %s" % str(imp))
154
- if imp.alias is not None and imp.alias == spec.name:
155
- # Found the alias name. Just need to get an instance of this package
156
- self._logger.debug("Found alias %s -> %s" % (imp.alias, imp.name))
157
- pkg_name = imp.name
158
- break
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
@@ -5,7 +5,7 @@ from rich.console import Console
5
5
  class TaskListenerLog(object):
6
6
  console : Console = dc.field(default_factory=Console)
7
7
  level : int = 0
8
- quiet : bool = True
8
+ quiet : bool = False
9
9
 
10
10
  def event(self, task : 'Task', reason : 'Reason'):
11
11
  if reason == 'enter':
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13707193513a1
3
+ Version: 0.0.1.13711323919a1
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
@@ -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=q8lT8MlDF7nDYTBqtPVQSXdGeN06kceZ3qBH7WhP0Bs,14917
11
- dv_flow/mgr/package_import_spec.py,sha256=ah3r15v5Jdub2poc3sgi6Uar1L3oGoYsCPPNiOHV-a4,1760
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=2R_EaeBDJn5qUq9DzSnLc37wUP36MWSv-p0LgUjJRAg,4471
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=fEqJalmDDDzayJbuyDWAcmumDGK3XgnZmcScoBY8HGg,7887
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=u7hm8Q8ZVCIY25mNQEI3DIgSMJ_zJ5nbvqukGMXyido,934
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.13707193513a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
43
- dv_flow_mgr-0.0.1.13707193513a1.dist-info/METADATA,sha256=QKD3uz-v-roPMUvXpRfmEgwEGJ144TDe5gdbh-ia5z4,13314
44
- dv_flow_mgr-0.0.1.13707193513a1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
45
- dv_flow_mgr-0.0.1.13707193513a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
46
- dv_flow_mgr-0.0.1.13707193513a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
47
- dv_flow_mgr-0.0.1.13707193513a1.dist-info/RECORD,,
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,,