dv-flow-mgr 0.0.1.14147547123a1__py3-none-any.whl → 0.0.2.14148165289a1__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.
@@ -317,7 +317,8 @@ 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
+ print("-- uses")
321
322
  if passthrough is None:
322
323
  passthrough = base_ctor_t.passthrough
323
324
  if consumes is None:
@@ -328,7 +329,6 @@ class PackageDef(BaseModel):
328
329
  if consumes is None:
329
330
  consumes = ConsumesE.All
330
331
 
331
-
332
332
  return (passthrough, consumes, needs)
333
333
 
334
334
  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
@@ -107,5 +107,7 @@ class TaskDef(BaseModel):
107
107
  name=self.name,
108
108
  type=self.type,
109
109
  depends=self.depends.copy())
110
- return ret
110
+ return ret
111
+
112
+ TaskDef.model_rebuild()
111
113
 
@@ -207,9 +207,9 @@ class TaskGraphBuilder(object):
207
207
  self._pkg_s.clear()
208
208
  self._task_m.clear()
209
209
 
210
- return self._mkTaskGraph(task, self.rundir)
210
+ return self._mkTaskGraph(task)
211
211
 
212
- def _mkTaskGraph(self, task : str, parent_rundir : str) -> TaskNode:
212
+ def _mkTaskGraph(self, task : str) -> TaskNode:
213
213
 
214
214
  elems = task.split(".")
215
215
 
@@ -224,8 +224,6 @@ class TaskGraphBuilder(object):
224
224
  else:
225
225
  pkg_spec = PackageSpec(pkg_name)
226
226
 
227
- rundir = os.path.join(parent_rundir, pkg_name, task_name)
228
-
229
227
  self._logger.debug("pkg_spec: %s" % str(pkg_spec))
230
228
  self._pkg_spec_s.append(pkg_spec)
231
229
  pkg = self.getPackage(pkg_spec)
@@ -243,7 +241,7 @@ class TaskGraphBuilder(object):
243
241
  need_fullname = self._resolveNeedRef(need_def)
244
242
  self._logger.debug("Searching for qualifed-name task %s" % need_fullname)
245
243
  if not need_fullname in self._task_m.keys():
246
- need_t = self._mkTaskGraph(need_fullname, rundir)
244
+ need_t = self._mkTaskGraph(need_fullname)
247
245
  self._task_m[need_fullname] = need_t
248
246
  needs.append(self._task_m[need_fullname])
249
247
 
@@ -258,7 +256,7 @@ class TaskGraphBuilder(object):
258
256
  params=params,
259
257
  name=task,
260
258
  needs=needs)
261
- task.rundir = rundir
259
+ # task.rundir = rundir
262
260
 
263
261
  self._task_m[task.name] = task
264
262
 
@@ -359,7 +357,7 @@ class TaskGraphBuilder(object):
359
357
  need_fullname = self._resolveNeedRef(need_def)
360
358
  self._logger.debug("Searching for qualifed-name task %s" % need_fullname)
361
359
  if not need_fullname in self._task_m.keys():
362
- need_t = self._mkTaskGraph(need_fullname, self.rundir)
360
+ need_t = self._mkTaskGraph(need_fullname)
363
361
  self._task_m[need_fullname] = need_t
364
362
  needs.append(self._task_m[need_fullname])
365
363
 
@@ -371,13 +369,14 @@ class TaskGraphBuilder(object):
371
369
  name=name,
372
370
  srcdir=srcdir,
373
371
  needs=needs)
372
+ ret.rundir = self.get_rundir(name)
374
373
  else:
375
374
  raise Exception("Failed to find ctor for task %s" % task_t)
376
375
  self._pkg_s.pop()
377
376
  self._logger.debug("<-- mkTaskNode: %s" % task_t)
378
377
  return ret
379
378
 
380
- def getTaskCtor(self, spec : Union[str,'TaskSpec'], pkg : PackageDef = None) -> 'TaskCtor':
379
+ def getTaskCtor(self, spec : Union[str,'TaskSpec'], pkg : PackageDef = None) -> 'TaskNodeCtor':
381
380
  from .task_def import TaskSpec
382
381
  if type(spec) == str:
383
382
  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.14148165289a1
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=OfFIgKKYa0FWFEeAptJuCfwbOpGeTNRp9skax9lZhDY,20910
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,20 +15,20 @@ 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=82dNRih_OTqq4gZNMtOmQ1DvzqqitKda6igpLVY82A8,3693
19
+ dv_flow/mgr/task_graph_builder.py,sha256=wJDZGeuQfS3C5w-ovYE5O8casZ-Irp-TZlGYVb1G5kg,14959
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
@@ -38,7 +38,7 @@ dv_flow/mgr/cmds/cmd_graph.py,sha256=Ykw__EdwamDBZZKxQZVbtMtFl7koq5dJMShTBXSM2pk
38
38
  dv_flow/mgr/cmds/cmd_run.py,sha256=VL0LU0zYnClQ8Id30sxMN_fHJzQFJsOuj7qDG7GTT60,3198
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.14148165289a1.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
53
+ dv_flow_mgr-0.0.2.14148165289a1.dist-info/METADATA,sha256=Yw1ZOx3YbC_sT77QcD_2e5-zitdJPFBGFAMqThGvHVQ,13336
54
+ dv_flow_mgr-0.0.2.14148165289a1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
55
+ dv_flow_mgr-0.0.2.14148165289a1.dist-info/entry_points.txt,sha256=1roy8wAFM48LabOvr6jiOw0MUs-qE8X3Vf8YykPazxk,50
56
+ dv_flow_mgr-0.0.2.14148165289a1.dist-info/top_level.txt,sha256=amfVTkggzYPtWwLqNmRukfz1Buu0pGS2SrYBBLhXm04,8
57
+ dv_flow_mgr-0.0.2.14148165289a1.dist-info/RECORD,,