dv-flow-mgr 0.0.1.13661289604a1__py3-none-any.whl → 0.0.1.13667970156a1__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
@@ -9,4 +9,5 @@ from .task_graph_runner_local import TaskGraphRunnerLocal
9
9
  from .task_graph_builder import TaskGraphBuilder
10
10
  from .task_node import task
11
11
  from .task_runner import TaskSetRunner
12
+ from .task_listener_log import TaskListenerLog
12
13
 
@@ -56,6 +56,10 @@ class PackageDef(BaseModel):
56
56
  basedir : str = None
57
57
  _log : ClassVar = logging.getLogger("PackageDef")
58
58
 
59
+ def __post_init__(self):
60
+ for t in self.tasks:
61
+ t.fullname = self.name + "." + t.name
62
+
59
63
  def getTask(self, name : str) -> 'TaskDef':
60
64
  for t in self.tasks:
61
65
  if t.name == name:
@@ -83,11 +87,13 @@ class PackageDef(BaseModel):
83
87
  # Now we have a unified map of the tasks declared in this package
84
88
  for name in list(tasks_m.keys()):
85
89
  task_i = tasks_m[name]
90
+ fullname = self.name + "." + name
86
91
  if len(task_i) < 3:
87
92
  # Need to create the task ctor
88
93
  ctor_t = self.mkTaskCtor(session, task_i[0], task_i[1], tasks_m)
89
94
  tasks_m[name] = (task_i[0], task_i[1], ctor_t)
90
95
  ret.tasks[name] = tasks_m[name][2]
96
+ ret.tasks[fullname] = tasks_m[name][2]
91
97
 
92
98
  session.pop_package(ret)
93
99
 
@@ -95,7 +101,7 @@ class PackageDef(BaseModel):
95
101
  return ret
96
102
 
97
103
  def getTaskCtor(self, session, task_name, tasks_m):
98
- self._log.debug("--> getTaskCtor")
104
+ self._log.debug("--> getTaskCtor %s" % task_name)
99
105
  # Find package (not package_def) that implements this task
100
106
  # Insert an indirect reference to that tasks's constructor
101
107
  last_dot = task_name.rfind('.')
@@ -132,6 +138,7 @@ class PackageDef(BaseModel):
132
138
  needs = [] if task.needs is None else task.needs.copy()
133
139
 
134
140
  if task.uses is not None:
141
+ self._log.debug("Uses: %s" % task.uses)
135
142
  base_ctor_t = self.getTaskCtor(session, task.uses, tasks_m)
136
143
  base_params = base_ctor_t.mkTaskParams()
137
144
 
@@ -160,7 +167,7 @@ class PackageDef(BaseModel):
160
167
  callable = getattr(mod, clsname)
161
168
 
162
169
  # Determine if we need to use a new
163
- paramT = self._getParamT(task, base_params)
170
+ paramT = self._getParamT(session, task, base_params)
164
171
 
165
172
  if callable is not None:
166
173
  ctor_t = TaskNodeCtorTask(
@@ -184,7 +191,7 @@ class PackageDef(BaseModel):
184
191
  ctor_t = TaskNodeCtorTask(
185
192
  name=task.name,
186
193
  srcdir=srcdir,
187
- paramT=TaskNullParams,
194
+ paramT=paramT,
188
195
  passthrough=passthrough,
189
196
  needs=needs,
190
197
  task=TaskNull)
@@ -192,7 +199,8 @@ class PackageDef(BaseModel):
192
199
  self._log.debug("<-- %s::mkTaskCtor %s" % (self.name, task.name))
193
200
  return ctor_t
194
201
 
195
- def _getParamT(self, task, base_t : BaseModel):
202
+ def _getParamT(self, session, task, base_t : BaseModel):
203
+ self._log.debug("--> _getParamT %s" % task.fullname)
196
204
  # Get the base parameter type (if available)
197
205
  # We will build a new type with updated fields
198
206
 
@@ -214,6 +222,8 @@ class PackageDef(BaseModel):
214
222
  fields = []
215
223
  field_m : Dict[str,int] = {}
216
224
 
225
+ pkg = session.package()
226
+
217
227
  # First, pull out existing fields (if there's a base type)
218
228
  if base_t is not None:
219
229
  self._log.debug("Base type: %s" % str(base_t))
@@ -255,6 +265,11 @@ class PackageDef(BaseModel):
255
265
 
256
266
  params_t = pydantic.create_model("Task%sParams" % task.name, **field_m)
257
267
 
268
+ self._log.debug("== Params")
269
+ for name,info in params_t.model_fields.items():
270
+ self._log.debug(" %s: %s" % (name, str(info)))
271
+
272
+ self._log.debug("<-- _getParamT %s" % task.name)
258
273
  return params_t
259
274
 
260
275
  @staticmethod
@@ -273,7 +288,15 @@ class PackageDef(BaseModel):
273
288
  doc = yaml.load(fp, Loader=yaml.FullLoader)
274
289
  if "package" not in doc.keys():
275
290
  raise Exception("Missing 'package' key in %s" % root)
276
- pkg = PackageDef(**(doc["package"]))
291
+ try:
292
+ pkg = PackageDef(**(doc["package"]))
293
+
294
+ for t in pkg.tasks:
295
+ t.fullname = pkg.name + "." + t.name
296
+
297
+ except Exception as e:
298
+ PackageDef._log.error("Failed to load package from %s" % root)
299
+ raise e
277
300
  pkg.basedir = os.path.dirname(root)
278
301
 
279
302
  # for t in pkg.tasks:
dv_flow/mgr/task_def.py CHANGED
@@ -33,6 +33,7 @@ class TaskSpec(object):
33
33
  class TaskDef(BaseModel):
34
34
  """Holds definition information (ie the YAML view) for a task"""
35
35
  name : str
36
+ fullname : str = dc.Field(default=None)
36
37
  # type : Union[str,TaskSpec] = dc.Field(default_factory=list)
37
38
  uses : str = dc.Field(default=None)
38
39
  pytask : str = dc.Field(default=None)
@@ -27,7 +27,7 @@ from .package_def import PackageDef, PackageSpec
27
27
  from .pkg_rgy import PkgRgy
28
28
  from .task import Task
29
29
  from .task_node import TaskNodeCtor
30
- from typing import Dict, List
30
+ from typing import Dict, List, Union
31
31
 
32
32
  @dc.dataclass
33
33
  class TaskGraphBuilder(object):
@@ -178,8 +178,21 @@ class TaskGraphBuilder(object):
178
178
  self._logger.debug("<-- getPackage: %s" % str(pkg))
179
179
 
180
180
  return pkg
181
+
182
+ def mkTaskNode(self, typename, name=None, srcdir=None, needs=None, **kwargs):
183
+ ctor = self.getTaskCtor(typename)
184
+ params = ctor.mkTaskParams(**kwargs)
185
+ return ctor.mkTaskNode(
186
+ params=params,
187
+ name=name,
188
+ srcdir=srcdir,
189
+ needs=needs)
181
190
 
182
- def getTaskCtor(self, spec : 'TaskSpec', pkg : PackageDef = None) -> 'TaskCtor':
191
+ def getTaskCtor(self, spec : Union[str,'TaskSpec'], pkg : PackageDef = None) -> 'TaskCtor':
192
+ from .task_def import TaskSpec
193
+ if type(spec) == str:
194
+ spec = TaskSpec(spec)
195
+
183
196
  self._logger.debug("--> getTaskCtor %s" % spec.name)
184
197
  spec_e = spec.name.split(".")
185
198
  task_name = spec_e[-1]
@@ -1,15 +1,21 @@
1
1
  import dataclasses as dc
2
+ from rich.console import Console
2
3
 
4
+ @dc.dataclass
3
5
  class TaskListenerLog(object):
6
+ console : Console = dc.field(default_factory=Console)
7
+ level : int = 0
4
8
 
5
9
  def event(self, task : 'Task', reason : 'Reason'):
6
10
  if reason == 'enter':
7
- print("> Task %s" % task.name, flush=True)
11
+ self.level += 1
12
+ self.console.print("[green]>[%d][/green] Task %s" % (self.level, task.name))
8
13
  elif reason == 'leave':
9
14
  for m in task.result.markers:
10
15
  print(" %s" % m)
11
- print("< Task %s" % task.name, flush=True)
16
+ self.console.print("[green]<[%d][/green] Task %s" % (self.level, task.name))
17
+ self.level -= 1
12
18
  else:
13
- print("- Task %s" % task.name, flush=True)
19
+ self.console.print("[red]-[/red] Task %s" % task.name)
14
20
  pass
15
21
 
dv_flow/mgr/task_node.py CHANGED
@@ -108,6 +108,29 @@ class TaskNodeCtor(object):
108
108
  paramT : Any
109
109
  passthrough : bool
110
110
 
111
+ def __call__(self,
112
+ name=None,
113
+ srcdir=None,
114
+ params=None,
115
+ needs=None,
116
+ passthrough=None,
117
+ **kwargs):
118
+ """Convenience method for direct creation of tasks"""
119
+ if params is None:
120
+ params = self.mkTaskParams(kwargs)
121
+
122
+ node = self.mkTaskNode(
123
+ srcdir=srcdir,
124
+ params=params,
125
+ name=name,
126
+ needs=needs)
127
+ if passthrough is not None:
128
+ node.passthrough = passthrough
129
+ else:
130
+ node.passthrough = self.passthrough
131
+
132
+ return node
133
+
111
134
  def getNeeds(self) -> List[str]:
112
135
  return []
113
136
 
@@ -188,28 +211,7 @@ class TaskNodeCtorTask(TaskNodeCtorDefBase):
188
211
  class TaskNodeCtorWrapper(TaskNodeCtor):
189
212
  T : Any
190
213
 
191
- def __call__(self,
192
- name=None,
193
- srcdir=None,
194
- params=None,
195
- needs=None,
196
- passthrough=None,
197
- **kwargs):
198
- """Convenience method for direct creation of tasks"""
199
- if params is None:
200
- params = self.mkTaskParams(kwargs)
201
-
202
- node = self.mkTaskNode(
203
- srcdir=srcdir,
204
- params=params,
205
- name=name,
206
- needs=needs)
207
- if passthrough is not None:
208
- node.passthrough = passthrough
209
- else:
210
- node.passthrough = self.passthrough
211
214
 
212
- return node
213
215
 
214
216
  def mkTaskNode(self, params, srcdir=None, name=None, needs=None) -> TaskNode:
215
217
  node = TaskNode(name, srcdir, params, self.T, needs=needs)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13661289604a1
3
+ Version: 0.0.1.13667970156a1
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=3t0drSGSlmRfZyoXpj2PkBBUMScaRThyjwxxm9jwAQY,356
1
+ dv_flow/mgr/__init__.py,sha256=2iTpSe1M8g_u2UlAQFa3XFfqcw8gBOWdBvrstce1c5E,403
2
2
  dv_flow/mgr/__main__.py,sha256=uik6gDAvtZNG0yyDKYc4FTl6R1QHAR543jNG2lCAa6E,1771
3
3
  dv_flow/mgr/eval_jq.py,sha256=Ue-qkyNW6uOu2Wy8u6nrTbPPY7ujaHd0-4iki0eV3Ec,294
4
4
  dv_flow/mgr/expr_eval.py,sha256=Mp0TvrV6gZWcj1uYwLfPNI-ARwwdAfwntE5byLBfBuY,2276
@@ -7,7 +7,7 @@ dv_flow/mgr/fileset.py,sha256=ewyjKLzuOecZg0vtabN_UkbzNEnk1sXgrH8uDyeKB60,1184
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=EdKwyxqvWT8xQmALGa6BbNv0PMbDLZTr3A27L9coIzc,13761
10
+ dv_flow/mgr/package_def.py,sha256=ek60ERvWFOVlL71_Fgk1-RWQMrkxNt4USrfZXwLS2d0,14603
11
11
  dv_flow/mgr/package_import_spec.py,sha256=ah3r15v5Jdub2poc3sgi6Uar1L3oGoYsCPPNiOHV-a4,1760
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
@@ -17,15 +17,15 @@ dv_flow/mgr/pkg_rgy.py,sha256=2R_EaeBDJn5qUq9DzSnLc37wUP36MWSv-p0LgUjJRAg,4471
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
- dv_flow/mgr/task_def.py,sha256=PORXrUBoynoj_oYAVISR5NW53OZevZ6hL4T7TutkkHo,1879
20
+ dv_flow/mgr/task_def.py,sha256=T06dvQegPJunH8ekuN5aPxIVcaUWiv5qkfqbZnCacLk,1923
21
21
  dv_flow/mgr/task_exec_data.py,sha256=aT__kmVmNxqnS_GbTRS1vrYgKiv8cH-HUSmRb6YYKsI,640
22
- dv_flow/mgr/task_graph_builder.py,sha256=sswBPUZg71dFT8kaB0towbWIadhNdbTy5gLgvC2uiVA,7276
22
+ dv_flow/mgr/task_graph_builder.py,sha256=okqJDDu6qyubXQoyI-r0jUTd53Tq7ISSYCymZh_Cppw,7708
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=B9-LEgSF2QwcUREBoUjEsS0rRYg1_ilFHBUKlNeT5YA,444
26
+ dv_flow/mgr/task_listener_log.py,sha256=5N-WG6ii-R6XPbgPR6zcfKjABOoGYab6I_04Lfwux5Q,705
27
27
  dv_flow/mgr/task_memento.py,sha256=C7VTQpBhDEoYuDmE6YTM-6TLMLnqHp6Y0Vat1aTgtCs,1096
28
- dv_flow/mgr/task_node.py,sha256=iQKiDTC8Oz8tQwLzJF4NpsREg8JPXI-rju5tG7P6dfw,8448
28
+ dv_flow/mgr/task_node.py,sha256=BxkjUJU7WdIhyBbP7FMBFY6EgHenhnnYGGdGW3Xukck,8450
29
29
  dv_flow/mgr/task_output.py,sha256=l-W-FvVo6YDah1RQS-I9N0KUtB3vp-kl7lxIdmNz0l4,178
30
30
  dv_flow/mgr/task_params_ctor.py,sha256=aXgB8o9xFPjaEjGW_xYkEC0N0apzGzGUPDj7g2ZLvus,1112
31
31
  dv_flow/mgr/task_runner.py,sha256=Ky10BWKy_NhvJp2nsbB0pyS8n1K0pKatBEmTdD1ZKOc,7071
@@ -39,9 +39,9 @@ dv_flow/mgr/std/fileset.py,sha256=abHgTxz25FD1ep5QXlCZKt4gCyfplJsjx6LyfQ11f_Q,26
39
39
  dv_flow/mgr/std/flow.dv,sha256=jlFOh3xVECOzHws7x6YvJ9eCIGHM5gsPeEnheiGOukY,1553
40
40
  dv_flow/mgr/std/message.py,sha256=CWrBKImbXKe2d7hJ223U3Ifuxo54zLpFPJviE8BUJvk,188
41
41
  dv_flow/mgr/std/task_null.py,sha256=UKwUnqwFPBY8BO44ZAPcgehQB59kHZFa1qyZc1TwUqE,196
42
- dv_flow_mgr-0.0.1.13661289604a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
43
- dv_flow_mgr-0.0.1.13661289604a1.dist-info/METADATA,sha256=V3jd8ZAWmysqtJOp69hwulv43S9RGefshb3nt4NE6M4,13276
44
- dv_flow_mgr-0.0.1.13661289604a1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
45
- dv_flow_mgr-0.0.1.13661289604a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
46
- dv_flow_mgr-0.0.1.13661289604a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
47
- dv_flow_mgr-0.0.1.13661289604a1.dist-info/RECORD,,
42
+ dv_flow_mgr-0.0.1.13667970156a1.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
43
+ dv_flow_mgr-0.0.1.13667970156a1.dist-info/METADATA,sha256=KkpZBeRE5Av-3wHTQewdBoyjAtM3voZTDxeXsjrsjhs,13276
44
+ dv_flow_mgr-0.0.1.13667970156a1.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
45
+ dv_flow_mgr-0.0.1.13667970156a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
46
+ dv_flow_mgr-0.0.1.13667970156a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
47
+ dv_flow_mgr-0.0.1.13667970156a1.dist-info/RECORD,,