dv-flow-mgr 0.0.1.14147547123a1__py3-none-any.whl → 0.0.2.14148837747a1__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.
@@ -90,7 +90,7 @@ class CmdRun(object):
90
90
  for spec in args.tasks:
91
91
  if spec.find('.') == -1:
92
92
  spec = pkg.name + "." + spec
93
- task = builder.mkTaskGraph(spec)
93
+ task = builder.mkTaskGraph(spec, rundir=spec)
94
94
  tasks.append(task)
95
95
 
96
96
  asyncio.run(runner.run(tasks))
@@ -317,7 +317,7 @@ class PackageDef(BaseModel):
317
317
  consumes = task.consumes.copy() if isinstance(task.consumes, list) else task.consumes
318
318
  needs = [] if task.needs is None else task.needs.copy()
319
319
 
320
- if self.uses is not None:
320
+ if base_ctor_t is not None:
321
321
  if passthrough is None:
322
322
  passthrough = base_ctor_t.passthrough
323
323
  if consumes is None:
@@ -328,7 +328,6 @@ class PackageDef(BaseModel):
328
328
  if consumes is None:
329
329
  consumes = ConsumesE.All
330
330
 
331
-
332
331
  return (passthrough, consumes, needs)
333
332
 
334
333
  def _getParamT(self, session, task, base_t : BaseModel):
@@ -66,6 +66,10 @@ async def CreateFile(runner, input) -> TaskDataResult:
66
66
 
67
67
  with open(filename, "w") as fp:
68
68
  fp.write(input.params.content)
69
+ memento.name = input.params.filename
70
+ memento.hash = hashlib.md5(input.params.content.encode()).hexdigest()
71
+ else:
72
+ memento = ex_memento
69
73
 
70
74
  fs = _FileSet(
71
75
  filetype=input.params.type,
dv_flow/mgr/task_def.py CHANGED
@@ -50,8 +50,9 @@ class PassthroughE(enum.Enum):
50
50
 
51
51
 
52
52
  class StrategyDef(BaseModel):
53
- matrix : Dict[str,List[Any]] = dc.Field(
54
- default_factory=dict,
53
+ chain: Union[bool, None] = dc.Field(default=None)
54
+ matrix : Union[Dict[str,List[Any]],None] = dc.Field(
55
+ default=None,
55
56
  description="Matrix of parameter values to explore")
56
57
 
57
58
  class TaskDef(BaseModel):
@@ -107,5 +108,7 @@ class TaskDef(BaseModel):
107
108
  name=self.name,
108
109
  type=self.type,
109
110
  depends=self.depends.copy())
110
- return ret
111
+ return ret
112
+
113
+ TaskDef.model_rebuild()
111
114
 
@@ -203,13 +203,21 @@ class TaskGraphBuilder(object):
203
203
  if ctxt.rundir is None or ctxt.rundir == RundirE.Unique:
204
204
  self._rundir_s.pop()
205
205
 
206
- def mkTaskGraph(self, task : str) -> TaskNode:
206
+ def mkTaskGraph(self, task : str, rundir=None) -> TaskNode:
207
207
  self._pkg_s.clear()
208
208
  self._task_m.clear()
209
209
 
210
- return self._mkTaskGraph(task, self.rundir)
210
+ if rundir is not None:
211
+ self._rundir_s.append(rundir)
212
+
213
+ ret = self._mkTaskGraph(task)
214
+
215
+ if rundir is not None:
216
+ self._rundir_s.pop()
217
+
218
+ return ret
211
219
 
212
- def _mkTaskGraph(self, task : str, parent_rundir : str) -> TaskNode:
220
+ def _mkTaskGraph(self, task : str) -> TaskNode:
213
221
 
214
222
  elems = task.split(".")
215
223
 
@@ -224,8 +232,6 @@ class TaskGraphBuilder(object):
224
232
  else:
225
233
  pkg_spec = PackageSpec(pkg_name)
226
234
 
227
- rundir = os.path.join(parent_rundir, pkg_name, task_name)
228
-
229
235
  self._logger.debug("pkg_spec: %s" % str(pkg_spec))
230
236
  self._pkg_spec_s.append(pkg_spec)
231
237
  pkg = self.getPackage(pkg_spec)
@@ -243,7 +249,7 @@ class TaskGraphBuilder(object):
243
249
  need_fullname = self._resolveNeedRef(need_def)
244
250
  self._logger.debug("Searching for qualifed-name task %s" % need_fullname)
245
251
  if not need_fullname in self._task_m.keys():
246
- need_t = self._mkTaskGraph(need_fullname, rundir)
252
+ need_t = self._mkTaskGraph(need_fullname)
247
253
  self._task_m[need_fullname] = need_t
248
254
  needs.append(self._task_m[need_fullname])
249
255
 
@@ -258,7 +264,7 @@ class TaskGraphBuilder(object):
258
264
  params=params,
259
265
  name=task,
260
266
  needs=needs)
261
- task.rundir = rundir
267
+ # task.rundir = rundir
262
268
 
263
269
  self._task_m[task.name] = task
264
270
 
@@ -359,7 +365,7 @@ class TaskGraphBuilder(object):
359
365
  need_fullname = self._resolveNeedRef(need_def)
360
366
  self._logger.debug("Searching for qualifed-name task %s" % need_fullname)
361
367
  if not need_fullname in self._task_m.keys():
362
- need_t = self._mkTaskGraph(need_fullname, self.rundir)
368
+ need_t = self._mkTaskGraph(need_fullname)
363
369
  self._task_m[need_fullname] = need_t
364
370
  needs.append(self._task_m[need_fullname])
365
371
 
@@ -371,13 +377,14 @@ class TaskGraphBuilder(object):
371
377
  name=name,
372
378
  srcdir=srcdir,
373
379
  needs=needs)
380
+ ret.rundir = self.get_rundir(name)
374
381
  else:
375
382
  raise Exception("Failed to find ctor for task %s" % task_t)
376
383
  self._pkg_s.pop()
377
384
  self._logger.debug("<-- mkTaskNode: %s" % task_t)
378
385
  return ret
379
386
 
380
- def getTaskCtor(self, spec : Union[str,'TaskSpec'], pkg : PackageDef = None) -> 'TaskCtor':
387
+ def getTaskCtor(self, spec : Union[str,'TaskSpec'], pkg : PackageDef = None) -> 'TaskNodeCtor':
381
388
  from .task_def import TaskSpec
382
389
  if type(spec) == str:
383
390
  spec = TaskSpec(spec)
dv_flow/mgr/task_node.py CHANGED
@@ -20,6 +20,7 @@
20
20
  #*
21
21
  #****************************************************************************
22
22
  import enum
23
+ import json
23
24
  import os
24
25
  import sys
25
26
  import dataclasses as dc
@@ -27,7 +28,7 @@ import pydantic.dataclasses as pdc
27
28
  import logging
28
29
  import toposort
29
30
  from typing import Any, Callable, ClassVar, Dict, List, Tuple
30
- from .task_data import TaskDataOutput, TaskDataResult
31
+ from .task_data import TaskDataInput, TaskDataOutput, TaskDataResult
31
32
  from .param import Param
32
33
 
33
34
  class RundirE(enum.Enum):
@@ -49,11 +50,11 @@ class TaskNode(object):
49
50
  consumes : List[Any] = dc.field(default_factory=list)
50
51
  needs : List[Tuple['TaskNode',bool]] = dc.field(default_factory=list)
51
52
  rundir : List[str] = dc.field(default=None)
52
- # rundir_t : RundirE = dc.field(default=RundirE.Unique)
53
53
  output : TaskDataOutput = dc.field(default=None)
54
54
  result : TaskDataResult = dc.field(default=None)
55
55
  start : float = dc.field(default=None)
56
56
  end : float = dc.field(default=None)
57
+ save_exec_data : bool = dc.field(default=True)
57
58
 
58
59
  _log : ClassVar = logging.getLogger("TaskNode")
59
60
 
@@ -101,6 +102,36 @@ class TaskNode(object):
101
102
  self._log.debug("<-- _matches: %s %s" % (self.name, consumed))
102
103
  return consumed
103
104
 
105
+ def _save_exec_data(self, rundir, input : TaskDataInput):
106
+ """Saves execution data to the rundir"""
107
+ data = {
108
+ "name": self.name,
109
+ "srcdir": self.srcdir,
110
+ "rundir": rundir,
111
+ "input": input.model_dump(warnings=False),
112
+ "needs": [need[0].name for need in self.needs],
113
+ "result": {
114
+ "status": self.result.status,
115
+ "changed": self.result.changed,
116
+ "memento": self.result.memento.model_dump() if self.result.memento else None,
117
+ },
118
+ "output": self.output.model_dump(),
119
+ }
120
+
121
+ if isinstance(self.consumes, list):
122
+ data["consumes"] = self.consumes
123
+ else:
124
+ data["consumes"] = str(self.consumes)
125
+
126
+ if isinstance(self.passthrough, list):
127
+ data["passthrough"] = self.passthrough
128
+ else:
129
+ data["passthrough"] = str(self.passthrough)
130
+
131
+ with open(os.path.join(rundir, "%s.exec_data.json" % self.name), "w") as f:
132
+ json.dump(data, f, indent=2)
133
+ f.write("\n")
134
+
104
135
 
105
136
 
106
137
 
@@ -53,9 +53,10 @@ class TaskNodeCtorCompound(TaskNodeCtor):
53
53
  params=params,
54
54
  needs=needs)
55
55
  # Use the compound task's rundir
56
- node.input.rundir = builder.get_rundir()
57
56
 
58
57
  builder.enter_compound(node, self.task_def.rundir)
58
+ node.input.rundir = builder.get_rundir()
59
+ print("input rundir: %s" % str(node.input.rundir))
59
60
  builder.addTask("in", node.input)
60
61
 
61
62
  self._buildSubGraph(builder, node)
@@ -172,6 +172,9 @@ class TaskNodeLeaf(TaskNode):
172
172
  changed=self.result.changed,
173
173
  dep_m=dep_m,
174
174
  output=output)
175
+
176
+ if self.save_exec_data:
177
+ self._save_exec_data(rundir, input)
175
178
 
176
179
  # TODO:
177
180
  self._log.debug("<-- do_run: %s" % self.name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.14147547123a1
3
+ Version: 0.0.2.14148837747a1
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,7 +7,7 @@ dv_flow/mgr/fileset.py,sha256=4izm4-qldWLiZxWDUa5Em0iFizzS-S-O0YU6zvtbUUs,1264
7
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=9FhOu1hKYKzlD88zehwrI6KAcs1E7TbXDnq4v54dqDQ,1701
10
- dv_flow/mgr/package_def.py,sha256=pyuwgTszJ9n4r3WXuITSkrJuIoN6RwS6saX-_XmHgGk,20880
10
+ dv_flow/mgr/package_def.py,sha256=iilJPa1zJoF5OkjdtBVro_fFImEbiJqPijFkYltut-o,20881
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
13
  dv_flow/mgr/param_def.py,sha256=mkAw3DanIxcVWRYeh9lUAfUMkpqDFly_Ku_iobr4ix8,1745
@@ -15,30 +15,30 @@ dv_flow/mgr/param_ref_eval.py,sha256=5yH37oIX6f2qmk7GfRgNT5qZx0jm3CJFgB9lLDZZ1yQ
15
15
  dv_flow/mgr/parsetab.py,sha256=I-p3nC60t9jiNtPhKyl_sE92SiP96zJLnNdydcLy33g,3780
16
16
  dv_flow/mgr/pkg_rgy.py,sha256=d1nIjRm3ymMNJT-yiMDxCS6bFisTPvLMqh5VrfsHVKM,5404
17
17
  dv_flow/mgr/task_data.py,sha256=lN7Iq8YTitEMGG4rZqYQi6Ri2HuPgBQ5oGQbW-63T8c,12436
18
- dv_flow/mgr/task_def.py,sha256=9_VJfY8hfZI7x9LFqDxALurg6oWMQQw6rdsppcjTweM,3669
19
- dv_flow/mgr/task_graph_builder.py,sha256=J5C9PhVmiYuQRlEXkWVCzsX06rWUgxrWrFc5sIwUhbw,15029
18
+ dv_flow/mgr/task_def.py,sha256=Yf9bkWqSETeFUSbddbpvl2Cu3pyssvhdz0X2jxabniA,3751
19
+ dv_flow/mgr/task_graph_builder.py,sha256=dZ4BBUfy158k8uHfzowpIpwf7lt-vleAmQWl66iu3As,15130
20
20
  dv_flow/mgr/task_graph_dot_writer.py,sha256=GxqiYwQJbFgUQdnPCS9vpIYmYFbSXwnXCSbGmjbxC3M,2418
21
21
  dv_flow/mgr/task_listener_log.py,sha256=hrJEjSRXXoovDTcD1Cmhi3Spzw7uEJ-WP6tv6JUaa6s,4060
22
- dv_flow/mgr/task_node.py,sha256=twCozRjXcWWeQXJBSOmKM51qpJMEPr5sj9mMK_QiE6A,3728
22
+ dv_flow/mgr/task_node.py,sha256=7lZKsTbOS0Cuhe-TyPj9Gcuh1a4k3sliRXW81R4UGCg,4851
23
23
  dv_flow/mgr/task_node_compound.py,sha256=mNu4nf9hVqu2698ue5fpE3FeAOkvJH0Ke2W9V0G3-As,2975
24
24
  dv_flow/mgr/task_node_ctor.py,sha256=COFGvm5PR2B92H3uW1yhDIUCmppo9U4IfOcv_Jrsreo,3952
25
- dv_flow/mgr/task_node_ctor_compound.py,sha256=WBSdREZEATEN9dbamZo7P3oN87E7wu7r3pcUCLqDRt4,4200
25
+ dv_flow/mgr/task_node_ctor_compound.py,sha256=n2Ad1jtX147cb99HTlLrx_21XUn109bJ18zDXr0pn2Q,4259
26
26
  dv_flow/mgr/task_node_ctor_compound_proxy.py,sha256=D8x54nD8Pd-2-_mr1syhqVeSFfIVf100ldi3bdzmSfI,2073
27
27
  dv_flow/mgr/task_node_ctor_def_base.py,sha256=_8QQHKDkONio_ve0Z409yxC0AMO8ocNBPDjRiNED1FI,1503
28
28
  dv_flow/mgr/task_node_ctor_proxy.py,sha256=ViOFJ64JM4-CGFZNl89BghFuKSQ66kZVqSj4v2PA6VA,1906
29
29
  dv_flow/mgr/task_node_ctor_task.py,sha256=d49g90TyPCMFR8BuWWqp4ym-MW5vGSdDR0V47Ru28JY,2232
30
30
  dv_flow/mgr/task_node_ctor_wrapper.py,sha256=Nb1CVcPHZofnb-iLWDHQWAxlTOdbRrnR9DdSxY8yOec,3626
31
- dv_flow/mgr/task_node_leaf.py,sha256=iEz-O4943SupriqO0aI5Ai7MIvkFRMkPitN8G85-G9g,7327
31
+ dv_flow/mgr/task_node_leaf.py,sha256=tI9m0GcaKsBccHmZCSTzc6vKyNgXezVB5vC28B75AFg,7416
32
32
  dv_flow/mgr/task_output.py,sha256=ZwyvwnYj_gHOEFAEOH3m24Xfc4Cn77hb1j7LkX8_3C4,1086
33
33
  dv_flow/mgr/task_params_ctor.py,sha256=BPkbnoCtzhCxc1g8CJ6VimCcm5UAu92PXeDMhQ4lYsQ,1957
34
34
  dv_flow/mgr/task_runner.py,sha256=-919VntXAe2XSuFW2dFpgvUre-NkILBnDBbAKBZYn5w,9594
35
35
  dv_flow/mgr/type.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  dv_flow/mgr/type_def.py,sha256=NDeyplKrPnWwEv4yHkhXEMK9d9j39b5MOeLB-1Mchqo,1095
37
37
  dv_flow/mgr/cmds/cmd_graph.py,sha256=Ykw__EdwamDBZZKxQZVbtMtFl7koq5dJMShTBXSM2pk,2672
38
- dv_flow/mgr/cmds/cmd_run.py,sha256=VL0LU0zYnClQ8Id30sxMN_fHJzQFJsOuj7qDG7GTT60,3198
38
+ dv_flow/mgr/cmds/cmd_run.py,sha256=f0zt2OxGZC50aaDR7wGDH8YBk3rMQoBl8YeRHWcJUD0,3211
39
39
  dv_flow/mgr/cmds/cmd_show.py,sha256=CZlgwB3Hcu-6HS-diqnWjCcPPpO-kjIIXU3DgWXvsf4,3773
40
40
  dv_flow/mgr/share/flow.json,sha256=lNmZex9NXkYbyb2aZseQfUOkV9CMyfH0iLODEI7EPBw,5096
41
- dv_flow/mgr/std/create_file.py,sha256=wmn5N_mObx_wr2LPdKOVbNmdM71hhs3UXOv6Ap9l3Ts,2726
41
+ dv_flow/mgr/std/create_file.py,sha256=TAUhpXlTmUDUYw4Dw0cI9FPuYI84yCVkoadnWZxi_8U,2888
42
42
  dv_flow/mgr/std/exec.py,sha256=UChqa_tAjvdB1NjqTsvlPgFomP8hMsX2rAOPyUonNpk,3896
43
43
  dv_flow/mgr/std/fileset.py,sha256=5IxS6T-x0wzA6fdEQcfHZ9kNP8IpH9hfJ3UMhL4A6Iw,3911
44
44
  dv_flow/mgr/std/flow.dv,sha256=t8m-urWYhKEAOFhG4wlrMqGHwiWDyO8H-b6-5vNQkBk,3795
@@ -49,9 +49,9 @@ dv_flow/mgr/util/__main__.py,sha256=F0LXpCDpYTPalSo0dc1h_qZkip5v1AZYYh-vcYbh5s0,
49
49
  dv_flow/mgr/util/util.py,sha256=yg9oTPRiO87mkCSOQpOtlG9vyKPQzY3qp4OJkEMbWyY,1443
50
50
  dv_flow/mgr/util/cmds/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
51
51
  dv_flow/mgr/util/cmds/cmd_schema.py,sha256=lrEI-Jwb8j4I4yYOn9hq7_7NYbK8leVxLesrHyEWm-E,1879
52
- dv_flow_mgr-0.0.1.14147547123a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
53
- dv_flow_mgr-0.0.1.14147547123a1.dist-info/METADATA,sha256=61gFcfnbRS1QgZKLPgpwMtYTkObC6pF2R5l35Mqz6M8,13336
54
- dv_flow_mgr-0.0.1.14147547123a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
55
- dv_flow_mgr-0.0.1.14147547123a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
56
- dv_flow_mgr-0.0.1.14147547123a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
57
- dv_flow_mgr-0.0.1.14147547123a1.dist-info/RECORD,,
52
+ dv_flow_mgr-0.0.2.14148837747a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
53
+ dv_flow_mgr-0.0.2.14148837747a1.dist-info/METADATA,sha256=LrYCwf6jPAr1wJkBercc0PQSJ3BUAL0B4SYETCUeWW8,13336
54
+ dv_flow_mgr-0.0.2.14148837747a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
55
+ dv_flow_mgr-0.0.2.14148837747a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
56
+ dv_flow_mgr-0.0.2.14148837747a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
57
+ dv_flow_mgr-0.0.2.14148837747a1.dist-info/RECORD,,