dv-flow-mgr 0.0.1.13824498694a1__tar.gz → 0.0.1.13849962851a1__tar.gz

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.
Files changed (103) hide show
  1. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/PKG-INFO +1 -1
  2. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/pyproject.toml +1 -1
  3. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/__init__.py +0 -2
  4. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/pkg_rgy.py +7 -0
  5. dv_flow_mgr-0.0.1.13849962851a1/src/dv_flow/mgr/std/create_file.py +61 -0
  6. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/std/flow.dv +16 -0
  7. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_graph_builder.py +28 -1
  8. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_node.py +24 -18
  9. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_runner.py +5 -1
  10. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow_mgr.egg-info/PKG-INFO +1 -1
  11. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow_mgr.egg-info/SOURCES.txt +1 -0
  12. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_imports.py +1 -1
  13. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_pyclass.py +1 -1
  14. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/.github/workflows/ci.yml +0 -0
  15. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/.gitignore +0 -0
  16. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/.vscode/settings.json +0 -0
  17. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/LICENSE +0 -0
  18. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/README.md +0 -0
  19. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/KeyArchitecture.md +0 -0
  20. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/Makefile +0 -0
  21. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/Notes.md +0 -0
  22. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/Roadmap.md +0 -0
  23. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/RundirLayout.md +0 -0
  24. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/Stages.md +0 -0
  25. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/Steps.md +0 -0
  26. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/Tasks.md +0 -0
  27. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/TypesAndDefs.md +0 -0
  28. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/Usecases.md +0 -0
  29. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/conf.py +0 -0
  30. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/index.rst +0 -0
  31. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/intro.rst +0 -0
  32. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/quickstart.rst +0 -0
  33. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/docs/reference.rst +0 -0
  34. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/fwperiph_dma.pss +0 -0
  35. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/ivpm.yaml +0 -0
  36. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/setup.cfg +0 -0
  37. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/__main__.py +0 -0
  38. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/cmds/cmd_run.py +0 -0
  39. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/eval_jq.py +0 -0
  40. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/expr_eval.py +0 -0
  41. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/expr_parser.py +0 -0
  42. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/fileset.py +0 -0
  43. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/fragment_def.py +0 -0
  44. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/out +0 -0
  45. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/package.py +0 -0
  46. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/package_def.py +0 -0
  47. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/package_import_spec.py +0 -0
  48. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/param.py +0 -0
  49. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/param_def.py +0 -0
  50. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/param_ref_eval.py +0 -0
  51. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/parsetab.py +0 -0
  52. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/share/flow.json +0 -0
  53. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/std/exec.py +0 -0
  54. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/std/fileset.py +0 -0
  55. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/std/message.py +0 -0
  56. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/std/task_null.py +0 -0
  57. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task.py +0 -0
  58. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_ctor.py +0 -0
  59. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_data.py +0 -0
  60. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_def.py +0 -0
  61. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_exec_data.py +0 -0
  62. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_graph_runner.py +0 -0
  63. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_graph_runner_local.py +0 -0
  64. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_impl_data.py +0 -0
  65. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_listener_log.py +0 -0
  66. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_memento.py +0 -0
  67. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_output.py +0 -0
  68. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/task_params_ctor.py +0 -0
  69. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/type.py +0 -0
  70. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/type_def.py +0 -0
  71. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow/mgr/util.py +0 -0
  72. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow_mgr.egg-info/dependency_links.txt +0 -0
  73. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow_mgr.egg-info/entry_points.txt +0 -0
  74. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow_mgr.egg-info/requires.txt +0 -0
  75. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/src/dv_flow_mgr.egg-info/top_level.txt +0 -0
  76. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/examples/example1/example1.flow +0 -0
  77. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/system/test_depends.py +0 -0
  78. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/system/test_pkg_discovery.py +0 -0
  79. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/system/test_stdlib.py +0 -0
  80. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/__init__.py +0 -0
  81. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1/files1/file1_1.sv +0 -0
  82. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1/files1/file1_2.sv +0 -0
  83. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1/files2/file2_1.sv +0 -0
  84. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1/files2/file2_2.sv +0 -0
  85. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1/flow.dv +0 -0
  86. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1 copy/files1/file1_1.sv +0 -0
  87. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1 copy/files1/file1_2.sv +0 -0
  88. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1 copy/files2/file2_1.sv +0 -0
  89. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1 copy/files2/file2_2.sv +0 -0
  90. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/fileset/test1 copy/test1.dfs +0 -0
  91. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/proj1/proj1.dfs +0 -0
  92. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/proj2/proj2.dfs +0 -0
  93. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/data/proj3/proj3.dfs +0 -0
  94. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_data_merge.py +0 -0
  95. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_expr_eval.py +0 -0
  96. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_expr_parser.py +0 -0
  97. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_fileset.py +0 -0
  98. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_markers.py +0 -0
  99. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_parse.py +0 -0
  100. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_pytask_smoke.py +0 -0
  101. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_smoke copy.sav +0 -0
  102. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_smoke.py +0 -0
  103. {dv_flow_mgr-0.0.1.13824498694a1 → dv_flow_mgr-0.0.1.13849962851a1}/tests/unit/test_stdlib.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13824498694a1
3
+ Version: 0.0.1.13849962851a1
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
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
5
5
 
6
6
  [project]
7
7
  name = "dv-flow-mgr"
8
- version = "0.0.1.13824498694a1"
8
+ version = "0.0.1.13849962851a1"
9
9
  dependencies = [
10
10
  'jq',
11
11
  'pydantic',
@@ -4,8 +4,6 @@ from .pkg_rgy import PkgRgy
4
4
  from .task_graph_runner import *
5
5
  from .task import *
6
6
  from .task_data import *
7
- from .task_graph_runner import TaskGraphRunner
8
- from .task_graph_runner_local import TaskGraphRunnerLocal
9
7
  from .task_graph_builder import TaskGraphBuilder
10
8
  from .task_node import task
11
9
  from .task_runner import TaskSetRunner
@@ -32,6 +32,13 @@ class PkgRgy(object):
32
32
  self._pkgpath = []
33
33
  self._pkg_m : Dict[str, Tuple[str,PackageDef]] = {}
34
34
  self._log = logging.getLogger(type(self).__name__)
35
+ self._override_m : Dict[str,str] = {}
36
+
37
+ def addOverride(self, key, value):
38
+ self._override_m[key] = value
39
+
40
+ def getOverrides(self):
41
+ return self._override_m
35
42
 
36
43
  def hasPackage(self, name, search_path=True):
37
44
  if name in self._pkg_m.keys():
@@ -0,0 +1,61 @@
1
+ import os
2
+ import hashlib
3
+ import logging
4
+ import pydantic.dataclasses as dc
5
+ from pydantic import BaseModel
6
+ from typing import ClassVar, List, Tuple
7
+ from dv_flow.mgr import TaskDataResult
8
+ from dv_flow.mgr import FileSet as _FileSet
9
+
10
+ class TaskCreateFileMemento(BaseModel):
11
+ name : str = ""
12
+ hash : str = ""
13
+
14
+ _log = logging.getLogger("CreateFile")
15
+
16
+ async def CreateFile(runner, input) -> TaskDataResult:
17
+ _log.debug("CreateFile run: %s: rundir=%s, type=%s filename=%s content=%s" % (
18
+ input.name,
19
+ input.rundir,
20
+ input.params.type, input.params.filename, input.params.content))
21
+
22
+ #
23
+ try:
24
+ ex_memento = TaskCreateFileMemento(**input.memento) if input.memento is not None else None
25
+ except Exception as e:
26
+ _log.error("Failed to load memento: %s" % str(e))
27
+ ex_memento = None
28
+ memento = TaskCreateFileMemento()
29
+
30
+ _log.debug("ex_memento: %s" % str(ex_memento))
31
+ _log.debug("params: %s" % str(input.params))
32
+
33
+ changed = (input.changed or ex_memento is None)
34
+
35
+ if not changed and ex_memento is not None:
36
+ if ex_memento.name != input.params.filename:
37
+ changed = True
38
+ else:
39
+ new_hash = hashlib.md5(input.params.content.encode()).hexdigest()
40
+ changed = ex_memento.hash != new_hash
41
+
42
+ if changed:
43
+ filename = os.path.join(input.rundir, input.params.filename)
44
+ os.makedirs(os.path.dirname(filename), exist_ok=True)
45
+
46
+ with open(filename, "w") as fp:
47
+ fp.write(input.params.content)
48
+
49
+ fs = _FileSet(
50
+ filetype=input.params.type,
51
+ src=input.name,
52
+ basedir=input.rundir,
53
+ files=[input.params.filename])
54
+
55
+ _log.debug("<-- FileSet(%s) changed=%s" % (input.name, changed))
56
+
57
+ return TaskDataResult(
58
+ memento=memento,
59
+ changed=changed,
60
+ output=[fs]
61
+ )
@@ -29,6 +29,22 @@ package:
29
29
  exclude:
30
30
  type: str
31
31
  value: ""
32
+ - name: CreateFile
33
+ pytask: dv_flow.mgr.std.create_file.CreateFile
34
+ passthrough: true
35
+ doc: |
36
+ Creates one or more files in the run directory from
37
+ literal content in the .dv file. Outputs a fileset
38
+ referencing all the created files.
39
+ with:
40
+ type:
41
+ desc: Content-type to use for the fileset
42
+ type: str
43
+ value: ""
44
+ filename:
45
+ type: str
46
+ content:
47
+ type: str
32
48
  - name: Exec
33
49
  pytask: dv_flow.mgr.std.exec.Exec
34
50
  with:
@@ -39,16 +39,20 @@ class TaskGraphBuilder(object):
39
39
  _pkg_m : Dict[PackageSpec,Package] = dc.field(default_factory=dict)
40
40
  _pkg_spec_s : List[PackageDef] = dc.field(default_factory=list)
41
41
  _task_m : Dict['TaskSpec',Task] = dc.field(default_factory=dict)
42
+ _override_m : Dict[str,str] = dc.field(default_factory=dict)
42
43
  _logger : logging.Logger = None
43
44
 
44
45
  def __post_init__(self):
45
46
  if self.pkg_rgy is None:
46
47
  self.pkg_rgy = PkgRgy.inst().copy()
47
48
 
49
+ # Initialize the overrides from the global registry
50
+ self._override_m.update(self.pkg_rgy.getOverrides())
51
+
48
52
  self._logger = logging.getLogger(type(self).__name__)
49
- self._logger.debug("TaskGraphBuilder: root_pkg: %s" % str(self.root_pkg))
50
53
 
51
54
  if self.root_pkg is not None:
55
+ self._logger.debug("TaskGraphBuilder: root_pkg: %s" % str(self.root_pkg))
52
56
 
53
57
  # Register package definitions found during loading
54
58
  visited = set()
@@ -61,6 +65,14 @@ class TaskGraphBuilder(object):
61
65
  # Allows us to find ourselves
62
66
  self._pkg_m[PackageSpec(self.root_pkg.name)] = pkg
63
67
 
68
+ def loadPkg(self, pkgfile : str):
69
+ pkg = PackageDef.load(pkgfile)
70
+ visited = set()
71
+ self._registerPackages(pkg, visited)
72
+
73
+ def addOverride(self, key : str, val : str):
74
+ self._override_m[key] = val
75
+
64
76
  def _registerPackages(self, pkg : PackageDef, visited):
65
77
  self._logger.debug("Packages: %s" % str(pkg))
66
78
  if pkg.name not in visited:
@@ -210,6 +222,21 @@ class TaskGraphBuilder(object):
210
222
 
211
223
  def mkTaskNode(self, task_t, name=None, srcdir=None, needs=None, **kwargs):
212
224
  self._logger.debug("--> mkTaskNode: %s" % task_t)
225
+
226
+ if task_t in self._override_m.keys():
227
+ self._logger.debug("Overriding task %s with %s" % (task_t, self._override_m[task_t]))
228
+ task_t = self._override_m[task_t]
229
+ else:
230
+ dot_idx = task_t.rfind(".")
231
+ if dot_idx != -1:
232
+ pkg = task_t[0:dot_idx]
233
+ tname = task_t[dot_idx+1:]
234
+
235
+ if pkg in self._override_m.keys():
236
+ self._logger.debug("Overriding package %s with %s" % (pkg, self._override_m[pkg]))
237
+ task_t = self._override_m[pkg] + "." + tname
238
+
239
+
213
240
  ctor = self.getTaskCtor(task_t)
214
241
  self._logger.debug("ctor: %s" % ctor.name)
215
242
  params = ctor.mkTaskParams(kwargs)
@@ -187,6 +187,30 @@ class TaskNode(object):
187
187
 
188
188
  def __hash__(self):
189
189
  return id(self)
190
+
191
+ def _matches(self, params, consumes):
192
+ """Determines if a parameter set matches a set of consumed parameters"""
193
+ self._log.debug("--> _matches: %s params=%s consumes=%s" % (
194
+ self.name, str(params), str(consumes)))
195
+ consumed = False
196
+ for c in consumes:
197
+ # All matching attribute keys must have same value
198
+ match = False
199
+ for k,v in c.items():
200
+ self._log.debug("k,v: %s,%s - hasattr=%s" % (k,v, hasattr(params, k)))
201
+ if hasattr(params, k):
202
+ self._log.debug("getattr=%s v=%s" % (getattr(params, k), v))
203
+ if getattr(params, k) == v:
204
+ match = True
205
+ else:
206
+ match = False
207
+ break
208
+ if match:
209
+ consumed = True
210
+ break
211
+ self._log.debug("<-- _matches: %s %s" % (self.name, consumed))
212
+ return consumed
213
+
190
214
 
191
215
 
192
216
  @dc.dataclass
@@ -353,24 +377,6 @@ class TaskNodeCtorWrapper(TaskNodeCtor):
353
377
  setattr(obj, key, value)
354
378
  return obj
355
379
 
356
- def _matches(self, params, consumes):
357
- """Determines if a parameter set matches a set of consumed parameters"""
358
- consumed = False
359
- for c in consumes:
360
- # All matching attribute keys must have same value
361
- match = False
362
- for k,v in c.items():
363
- if hasattr(params, k):
364
- if getattr(params, k) != v:
365
- match = True
366
- else:
367
- match = False
368
- break
369
- if match:
370
- consumed = True
371
- break
372
- return consumed
373
-
374
380
  def task(paramT,passthrough=False,consumes=None):
375
381
  """Decorator to wrap a task method as a TaskNodeCtor"""
376
382
  def wrapper(T):
@@ -38,13 +38,17 @@ class TaskRunner(object):
38
38
 
39
39
  @dc.dataclass
40
40
  class TaskSetRunner(TaskRunner):
41
- nproc : int = 8
41
+ nproc : int = -1
42
42
  status : int = 0
43
43
 
44
44
  _anon_tid : int = 1
45
45
 
46
46
  _log : ClassVar = logging.getLogger("TaskSetRunner")
47
47
 
48
+ def __post_init__(self):
49
+ if self.nproc == -1:
50
+ self.nproc = os.cpu_count()
51
+
48
52
  async def run(self, task : Union[TaskNode,List[TaskNode]]):
49
53
  # Ensure that the rundir exists or can be created
50
54
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.1.13824498694a1
3
+ Version: 0.0.1.13849962851a1
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
@@ -57,6 +57,7 @@ src/dv_flow/mgr/type_def.py
57
57
  src/dv_flow/mgr/util.py
58
58
  src/dv_flow/mgr/cmds/cmd_run.py
59
59
  src/dv_flow/mgr/share/flow.json
60
+ src/dv_flow/mgr/std/create_file.py
60
61
  src/dv_flow/mgr/std/exec.py
61
62
  src/dv_flow/mgr/std/fileset.py
62
63
  src/dv_flow/mgr/std/flow.dv
@@ -8,7 +8,7 @@ import pytest
8
8
  from typing import Any, List, Union
9
9
  import yaml
10
10
  from dv_flow.mgr import PackageDef, TaskGraphBuilder, TaskSetRunner, task, TaskDataResult
11
- from dv_flow.mgr import TaskGraphBuilder, TaskGraphRunnerLocal, PackageDef
11
+ from dv_flow.mgr import TaskGraphBuilder, PackageDef
12
12
  from dv_flow.mgr.task_runner import TaskSetRunner
13
13
  from dv_flow.mgr.task_listener_log import TaskListenerLog
14
14
  from dv_flow.mgr.fileset import FileSet
@@ -2,7 +2,7 @@
2
2
  import os
3
3
  import asyncio
4
4
  import pytest
5
- from dv_flow.mgr import TaskGraphBuilder, TaskGraphRunnerLocal, PackageDef
5
+ from dv_flow.mgr import TaskGraphBuilder, PackageDef
6
6
  from dv_flow.mgr.task_runner import TaskSetRunner
7
7
  from dv_flow.mgr.task_listener_log import TaskListenerLog
8
8
  #from dv_flow_mgr.tasklib.builtin_pkg import TaskPyClass, TaskPyClassParams