dv-flow-mgr 0.0.1.12942385741a1__py3-none-any.whl → 0.0.1.12960224342a1__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
@@ -1,5 +1,6 @@
1
1
 
2
2
  from .package_def import *
3
+ from .pkg_rgy import PkgRgy
3
4
  from .task_graph_runner import *
4
5
  from .task import *
5
6
  from .task_data import *
dv_flow/mgr/package.py CHANGED
@@ -32,6 +32,8 @@ class Package(object):
32
32
  tasks : Dict[str,TaskCtor] = dc.field(default_factory=dict)
33
33
 
34
34
  def getTaskCtor(self, name : str) -> TaskCtor:
35
+ if name not in self.tasks.keys():
36
+ raise Exception("Task %s not present in package %s" % (name, self.name))
35
37
  return self.tasks[name]
36
38
 
37
39
  def __hash__(self):
@@ -23,11 +23,12 @@ import os
23
23
  import json
24
24
  import yaml
25
25
  import importlib
26
+ import logging
26
27
  import sys
27
28
  import pydantic
28
29
  import pydantic.dataclasses as dc
29
30
  from pydantic import BaseModel
30
- from typing import Any, Dict, List, Callable, Tuple
31
+ from typing import Any, Dict, List, Callable, Tuple, ClassVar
31
32
  from .fragment_def import FragmentDef
32
33
  from .package import Package
33
34
  from .package_import_spec import PackageImportSpec, PackageSpec
@@ -49,6 +50,7 @@ class PackageDef(BaseModel):
49
50
  # import_m : Dict['PackageSpec','Package'] = dc.Field(default_factory=dict)
50
51
 
51
52
  basedir : str = None
53
+ _log : ClassVar = logging.getLogger("PackageDef")
52
54
 
53
55
  def getTask(self, name : str) -> 'TaskDef':
54
56
  for t in self.tasks:
@@ -56,6 +58,7 @@ class PackageDef(BaseModel):
56
58
  return t
57
59
 
58
60
  def mkPackage(self, session, params : Dict[str,Any] = None) -> 'Package':
61
+ self._log.debug("--> mkPackage %s" % self.name)
59
62
  ret = Package(self.name)
60
63
 
61
64
  session.push_package(ret, add=True)
@@ -84,6 +87,7 @@ class PackageDef(BaseModel):
84
87
 
85
88
  session.pop_package(ret)
86
89
 
90
+ self._log.debug("<-- mkPackage %s" % self.name)
87
91
  return ret
88
92
 
89
93
  def mkTaskCtor(self, session, task, srcdir, tasks_m) -> TaskCtor:
@@ -166,7 +170,7 @@ class PackageDef(BaseModel):
166
170
  field_m = {}
167
171
  # First, add parameters from the base class
168
172
  for fname,info in ctor_t.param_ctor.model_fields.items():
169
- print("Field: %s (%s)" % (fname, info.default))
173
+ self._log.debug("Field: %s (%s)" % (fname, info.default))
170
174
  field_m[fname] = (info.annotation, info.default)
171
175
  ptype_m = {
172
176
  "str" : str,
@@ -207,7 +211,7 @@ class PackageDef(BaseModel):
207
211
  raise Exception("No value specified for param %s: %s" % (
208
212
  p, str(param)))
209
213
  field_m[p] = (field_m[p][0], value)
210
- print("field_m: %s" % str(field_m))
214
+ self._log.debug("field_m: %s" % str(field_m))
211
215
  ctor_t.param_ctor = pydantic.create_model(
212
216
  "Task%sParams" % task.name, **field_m)
213
217
  else:
@@ -230,7 +234,7 @@ class PackageDef(BaseModel):
230
234
  file_s.append(root)
231
235
  ret = None
232
236
  with open(root, "r") as fp:
233
- print("open %s" % root)
237
+ PackageDef._log.debug("open %s" % root)
234
238
  doc = yaml.load(fp, Loader=yaml.FullLoader)
235
239
  if "package" not in doc.keys():
236
240
  raise Exception("Missing 'package' key in %s" % root)
@@ -288,7 +292,7 @@ class PackageDef(BaseModel):
288
292
 
289
293
  with open(file, "r") as fp:
290
294
  doc = yaml.load(fp, Loader=yaml.FullLoader)
291
- print("doc: %s" % str(doc), flush=True)
295
+ PackageDef._log.debug("doc: %s" % str(doc), flush=True)
292
296
  if "fragment" in doc.keys():
293
297
  # Merge the package definition
294
298
  frag = FragmentDef(**(doc["fragment"]))
dv_flow/mgr/pkg_rgy.py CHANGED
@@ -20,6 +20,7 @@
20
20
  #*
21
21
  #****************************************************************************
22
22
  import os
23
+ import logging
23
24
  import sys
24
25
  from typing import Dict, Tuple
25
26
  from .package_def import PackageDef
@@ -30,6 +31,7 @@ class PkgRgy(object):
30
31
  def __init__(self):
31
32
  self._pkgpath = []
32
33
  self._pkg_m : Dict[str, Tuple[str,PackageDef]] = {}
34
+ self._log = logging.getLogger(type(self).__name__)
33
35
 
34
36
  def hasPackage(self, name, search_path=True):
35
37
  if name in self._pkg_m.keys():
@@ -108,7 +110,7 @@ class PkgRgy(object):
108
110
  name, self._pkg_m[name][0], path))
109
111
  self._pkg_m[name] = (path, None)
110
112
  except Exception as e:
111
- print("Error loading plugin %s: %s" % (p.name, str(e)))
113
+ self._log.critical("Error loading plugin %s: %s" % (p.name, str(e)))
112
114
  raise e
113
115
 
114
116
  # self._pkgs = {}
@@ -21,6 +21,7 @@
21
21
  #****************************************************************************
22
22
  import os
23
23
  import dataclasses as dc
24
+ import logging
24
25
  from .package import Package
25
26
  from .package_def import PackageDef, PackageSpec
26
27
  from .pkg_rgy import PkgRgy
@@ -37,11 +38,14 @@ class TaskGraphBuilder(object):
37
38
  _pkg_m : Dict[PackageSpec,Package] = dc.field(default_factory=dict)
38
39
  _pkg_spec_s : List[PackageDef] = dc.field(default_factory=list)
39
40
  _task_m : Dict[TaskSpec,Task] = dc.field(default_factory=dict)
41
+ _logger : logging.Logger = None
40
42
 
41
43
  def __post_init__(self):
42
44
  if self.pkg_rgy is None:
43
45
  self.pkg_rgy = PkgRgy.inst()
44
46
 
47
+ self._logger = logging.getLogger(type(self).__name__)
48
+
45
49
  if self.root_pkg is not None:
46
50
  self._pkg_spec_s.append(self.root_pkg)
47
51
  pkg = self.root_pkg.mkPackage(self)
@@ -82,7 +86,7 @@ class TaskGraphBuilder(object):
82
86
 
83
87
  rundir = os.path.join(parent_rundir, pkg_name, task_name)
84
88
 
85
- print("pkg_spec: %s" % str(pkg_spec))
89
+ self._logger.debug("pkg_spec: %s" % str(pkg_spec))
86
90
  self._pkg_spec_s.append(pkg_spec)
87
91
  pkg = self.getPackage(pkg_spec)
88
92
 
@@ -100,7 +104,7 @@ class TaskGraphBuilder(object):
100
104
  depends.append(self._task_m[dep])
101
105
 
102
106
  # The returned task should have all param references resolved
103
- print("task_ctor=%s" % str(ctor_t.task_ctor), flush=True)
107
+ self._logger.debug("task_ctor=%s" % str(ctor_t.task_ctor))
104
108
  task = ctor_t.task_ctor(
105
109
  name=task_name,
106
110
  params=ctor_t.mkParams(),
@@ -117,7 +121,7 @@ class TaskGraphBuilder(object):
117
121
 
118
122
  def getPackage(self, spec : PackageSpec) -> Package:
119
123
  # Obtain the active package definition
120
- print("getPackage: %s len: %d" % (spec.name, len(self._pkg_spec_s)))
124
+ self._logger.debug("--> getPackage: %s len: %d" % (spec.name, len(self._pkg_spec_s)))
121
125
  if len(self._pkg_spec_s) > 0:
122
126
  pkg_spec = self._pkg_spec_s[-1]
123
127
  if self.root_pkg.name == pkg_spec.name:
@@ -130,7 +134,8 @@ class TaskGraphBuilder(object):
130
134
  # Need a stack to track which package we are currently in
131
135
  # Need a map to get a concrete package from a name with parameterization
132
136
 
133
- print("pkg_s: %d %s" % (len(self._pkg_s), (self._pkg_s[-1].name if len(self._pkg_s) else "<unknown>")))
137
+ self._logger.debug("pkg_s: %d %s" % (
138
+ len(self._pkg_s), (self._pkg_s[-1].name if len(self._pkg_s) else "<unknown>")))
134
139
 
135
140
  # Note: _pkg_m needs to be context specific, such that imports from
136
141
  # one package don't end up visible in another
@@ -143,9 +148,9 @@ class TaskGraphBuilder(object):
143
148
 
144
149
  if pkg_def is not None:
145
150
  # Look for an import alias
146
- print("imports: %s" % str(pkg_def.imports))
151
+ self._logger.debug("imports: %s" % str(pkg_def.imports))
147
152
  for imp in pkg_def.imports:
148
- print("imp: %s" % str(imp))
153
+ self._logger.debug("imp: %s" % str(imp))
149
154
  if imp.alias is not None and imp.alias == spec.name:
150
155
  # Found the alias name. Just need to get an instance of this package
151
156
  tgt_pkg_spec = PackageSpec(imp.name)
@@ -153,11 +158,12 @@ class TaskGraphBuilder(object):
153
158
  pkg = self._pkg_m[tgt_pkg_spec]
154
159
  elif self.pkg_rgy.hasPackage(tgt_pkg_spec.name):
155
160
  base = self.pkg_rgy.getPackage(tgt_pkg_spec.name)
161
+ self._pkg_spec_s.append(base)
156
162
  pkg = base.mkPackage(self, spec.params)
157
- self._pkg_m[spec] = pkg
163
+ self._pkg_spec_s.pop()
158
164
  elif imp.path is not None:
159
165
  # See if we can load the package
160
- print("TODO: load referenced package")
166
+ self._logger.critical("TODO: load referenced package")
161
167
  else:
162
168
  raise Exception("Failed to resolve target (%s) of import alias %s" % (
163
169
  imp.name,
@@ -171,21 +177,28 @@ class TaskGraphBuilder(object):
171
177
  base = self.pkg_rgy.getPackage(spec.name)
172
178
  if base is None:
173
179
  raise Exception("Failed to find imported package %s" % spec.name)
180
+ self._pkg_spec_s.append(base)
174
181
  pkg = base.mkPackage(self, spec.params)
175
182
  self._pkg_m[spec] = pkg
183
+ self._pkg_spec_s.pop()
176
184
  break
177
185
 
178
186
  if pkg is None:
179
- print("Checking registry")
187
+ self._logger.debug("Checking registry")
180
188
  p_def = self.pkg_rgy.getPackage(spec.name)
181
189
 
182
190
  if p_def is not None:
191
+ self._pkg_spec_s.append(p_def)
183
192
  pkg = p_def.mkPackage(self)
193
+ self._pkg_spec_s.pop()
194
+ self._pkg_m[spec] = pkg
184
195
 
185
196
  if pkg is None:
186
197
  raise Exception("Failed to find package %s from package %s" % (
187
198
  spec.name, (pkg_def.name if pkg_def is not None else "<null>")))
188
199
 
200
+ self._logger.debug("<-- getPackage: %s" % str(pkg))
201
+
189
202
  return pkg
190
203
 
191
204
  def getTaskCtor(self, spec : TaskSpec, pkg : PackageDef = None) -> 'TaskCtor':
@@ -203,7 +216,7 @@ class TaskGraphBuilder(object):
203
216
  try:
204
217
  pkg = self.getPackage(PackageSpec(pkg_name))
205
218
  except Exception as e:
206
- print("Failed to find package %s while looking for task %s" % (pkg_name, spec.name))
219
+ self._logger.critical("Failed to find package %s while looking for task %s" % (pkg_name, spec.name))
207
220
  raise e
208
221
 
209
222
  return pkg.getTaskCtor(task_name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.12942385741a1
3
+ Version: 0.0.1.12960224342a1
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,15 +1,15 @@
1
- dv_flow/mgr/__init__.py,sha256=VtQfTiskn-fBaWU18s8odFPMDJ1Lx2DD4Y4Uy5EJ0Qs,261
1
+ dv_flow/mgr/__init__.py,sha256=IZA7I1u7RH34DrJXSkETxWFpK5Jn_A2zXfnCAzJ8XxA,289
2
2
  dv_flow/mgr/__main__.py,sha256=big-RSuqbx7P48_8rzaZKX5YW3B2US1i0mRH_TfoeIs,1340
3
3
  dv_flow/mgr/fileset.py,sha256=FNvC5sU2ArxJ0OO3v8dXTv8zX-bZ5t0a0ljne0fQQ1o,1150
4
4
  dv_flow/mgr/fragment_def.py,sha256=p5i6ONtBWlDHTBFsduu3Z36_76Bn8PCIylp_xoZ7jfQ,1552
5
- dv_flow/mgr/package.py,sha256=7G_ZQaTHin_mcwQu1PRsGmqfKAbdu9IC5HeLXtPgBDc,1342
6
- dv_flow/mgr/package_def.py,sha256=BWErUHH82dKTT82-dt-Q_Pls8faH9co5EZJLayL5eqo,11352
5
+ dv_flow/mgr/package.py,sha256=LAJNVOMlpWkez7eK7yfChoDKeIPakApUCpDh_No059g,1469
6
+ dv_flow/mgr/package_def.py,sha256=ay4bYuzBEzrqqJsNr1ezZF9BxEAgWeS9xxIETKe-Bzs,11595
7
7
  dv_flow/mgr/package_import_spec.py,sha256=ah3r15v5Jdub2poc3sgi6Uar1L3oGoYsCPPNiOHV-a4,1760
8
- dv_flow/mgr/pkg_rgy.py,sha256=ej8VyWH8BWdDNVqk3cSJgQq4h3bW1rgj6uCxUr7gfH8,4384
8
+ dv_flow/mgr/pkg_rgy.py,sha256=2R_EaeBDJn5qUq9DzSnLc37wUP36MWSv-p0LgUjJRAg,4471
9
9
  dv_flow/mgr/task.py,sha256=ewJ7bCFWqwVuzHZZsX2LDZfzXWVFfFlH8yFyn-xxIVg,5043
10
10
  dv_flow/mgr/task_data.py,sha256=-6Dqa3oUI7RJc1Js2SRSnhxNTcASkamXFYMN6UiknZQ,10376
11
11
  dv_flow/mgr/task_def.py,sha256=96hSwqJo0MazJ1VcLhovYRmNCplsNLt47AumtyjSddU,1690
12
- dv_flow/mgr/task_graph_builder.py,sha256=NKGRPCSkUd2Dri-qEN4-UWVHRfPprzeC8Lz8joGtM3c,7962
12
+ dv_flow/mgr/task_graph_builder.py,sha256=2AxCa3tFfaoEv8Epk4jWKA5FfVpijgmBVbGQN4JTREc,8569
13
13
  dv_flow/mgr/task_graph_runner.py,sha256=NwNYcOJ952lPMLwIIlYE9CoDdedqvcw2fWHYUsKFXuU,2164
14
14
  dv_flow/mgr/task_graph_runner_local.py,sha256=UTBV1AKanLns99CSYtEQQ3EEkgo1hM8XsHpc8E5jkIg,4646
15
15
  dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
@@ -20,9 +20,9 @@ dv_flow/mgr/std/fileset.py,sha256=0eBp0VIkxYbIYAt0YJg0m-6nUbPuzGkaVBtxpius7Cg,23
20
20
  dv_flow/mgr/std/flow.dv,sha256=pSpzrPPEu_L8DHccGfArxsKYgUfyQidShZc0ShgGtsY,500
21
21
  dv_flow/mgr/std/message.py,sha256=BPTHnEMD4tBufQ9LvsS9Sa_0xjaJATbBpwqosWslvVA,193
22
22
  dv_flow/mgr/std/task_null.py,sha256=UEJ3fIoIMYWVsagiQC7GHD23UES7WoH4wtq94b4tcs4,265
23
- dv_flow_mgr-0.0.1.12942385741a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
24
- dv_flow_mgr-0.0.1.12942385741a1.dist-info/METADATA,sha256=wtjCBdxmdymUebFBaN_yL_iBKOubJifCR4e6S5KH7MI,13276
25
- dv_flow_mgr-0.0.1.12942385741a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
26
- dv_flow_mgr-0.0.1.12942385741a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
27
- dv_flow_mgr-0.0.1.12942385741a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
28
- dv_flow_mgr-0.0.1.12942385741a1.dist-info/RECORD,,
23
+ dv_flow_mgr-0.0.1.12960224342a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
24
+ dv_flow_mgr-0.0.1.12960224342a1.dist-info/METADATA,sha256=YyEPdvYOABMUKB2gBAb6caXOqs6YcYzIuIEWiuaJqfA,13276
25
+ dv_flow_mgr-0.0.1.12960224342a1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
26
+ dv_flow_mgr-0.0.1.12960224342a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
27
+ dv_flow_mgr-0.0.1.12960224342a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
28
+ dv_flow_mgr-0.0.1.12960224342a1.dist-info/RECORD,,