dv-flow-mgr 0.0.2.14150065664a1__tar.gz → 0.0.2.14180123344a1__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 (117) hide show
  1. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/PKG-INFO +1 -1
  2. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/pyproject.toml +1 -1
  3. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/__main__.py +3 -0
  4. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/cmds/cmd_run.py +6 -0
  5. dv_flow_mgr-0.0.2.14180123344a1/src/dv_flow/mgr/listener_list.py +10 -0
  6. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/package_def.py +12 -1
  7. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_def.py +27 -5
  8. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_graph_builder.py +3 -0
  9. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node_ctor_compound.py +14 -4
  10. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow_mgr.egg-info/PKG-INFO +1 -1
  11. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow_mgr.egg-info/SOURCES.txt +1 -0
  12. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/.github/workflows/ci.yml +0 -0
  13. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/.gitignore +0 -0
  14. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/.vscode/settings.json +0 -0
  15. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/LICENSE +0 -0
  16. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/README.md +0 -0
  17. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/ChangeLog.md +0 -0
  18. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/KeyArchitecture.md +0 -0
  19. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/Makefile +0 -0
  20. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/Notes.md +0 -0
  21. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/Roadmap.md +0 -0
  22. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/RundirLayout.md +0 -0
  23. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/Stages.md +0 -0
  24. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/Steps.md +0 -0
  25. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/Tasks.md +0 -0
  26. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/TypesAndDefs.md +0 -0
  27. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/Usecases.md +0 -0
  28. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/cmdref.rst +0 -0
  29. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/conf.py +0 -0
  30. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/index.rst +0 -0
  31. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/pytask_api.rst +0 -0
  32. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/docs/quickstart.rst +0 -0
  33. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/fwperiph_dma.pss +0 -0
  34. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/ivpm.yaml +0 -0
  35. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/setup.cfg +0 -0
  36. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/__init__.py +0 -0
  37. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/cmds/cmd_graph.py +0 -0
  38. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/cmds/cmd_show.py +0 -0
  39. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/eval_jq.py +0 -0
  40. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/expr_eval.py +0 -0
  41. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/expr_parser.py +0 -0
  42. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/fileset.py +0 -0
  43. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/fragment_def.py +0 -0
  44. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/out +0 -0
  45. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/package.py +0 -0
  46. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/package_import_spec.py +0 -0
  47. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/param.py +0 -0
  48. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/param_def.py +0 -0
  49. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/param_ref_eval.py +0 -0
  50. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/parsetab.py +0 -0
  51. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/pkg_rgy.py +0 -0
  52. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/share/flow.json +0 -0
  53. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/std/create_file.py +0 -0
  54. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/std/exec.py +0 -0
  55. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/std/fileset.py +0 -0
  56. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/std/flow.dv +0 -0
  57. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/std/message.py +0 -0
  58. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/std/task_null.py +0 -0
  59. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_data.py +0 -0
  60. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_graph_dot_writer.py +0 -0
  61. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_listener_log.py +0 -0
  62. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node.py +0 -0
  63. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node_compound.py +0 -0
  64. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node_ctor.py +0 -0
  65. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node_ctor_compound_proxy.py +0 -0
  66. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node_ctor_def_base.py +0 -0
  67. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node_ctor_proxy.py +0 -0
  68. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node_ctor_task.py +0 -0
  69. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node_ctor_wrapper.py +0 -0
  70. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_node_leaf.py +0 -0
  71. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_output.py +0 -0
  72. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_params_ctor.py +0 -0
  73. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_run_ctxt.py +0 -0
  74. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/task_runner.py +0 -0
  75. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/type.py +0 -0
  76. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/type_def.py +0 -0
  77. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/util/__init__.py +0 -0
  78. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/util/__main__.py +0 -0
  79. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/util/cmds/__init__.py +0 -0
  80. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/util/cmds/cmd_schema.py +0 -0
  81. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow/mgr/util/util.py +0 -0
  82. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow_mgr.egg-info/dependency_links.txt +0 -0
  83. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow_mgr.egg-info/entry_points.txt +0 -0
  84. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow_mgr.egg-info/requires.txt +0 -0
  85. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/src/dv_flow_mgr.egg-info/top_level.txt +0 -0
  86. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/examples/example1/example1.flow +0 -0
  87. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/system/test_depends.py +0 -0
  88. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/system/test_pkg_discovery.py +0 -0
  89. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/system/test_stdlib.py +0 -0
  90. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/__init__.py +0 -0
  91. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1/files1/file1_1.sv +0 -0
  92. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1/files1/file1_2.sv +0 -0
  93. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1/files2/file2_1.sv +0 -0
  94. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1/files2/file2_2.sv +0 -0
  95. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1/flow.dv +0 -0
  96. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1 copy/files1/file1_1.sv +0 -0
  97. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1 copy/files1/file1_2.sv +0 -0
  98. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1 copy/files2/file2_1.sv +0 -0
  99. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1 copy/files2/file2_2.sv +0 -0
  100. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/fileset/test1 copy/test1.dfs +0 -0
  101. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/proj1/proj1.dfs +0 -0
  102. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/proj2/proj2.dfs +0 -0
  103. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/data/proj3/proj3.dfs +0 -0
  104. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_compound_task.py +0 -0
  105. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_data_merge.py +0 -0
  106. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_dataflow.py +0 -0
  107. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_expr_eval.py +0 -0
  108. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_expr_parser.py +0 -0
  109. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_fileset.py +0 -0
  110. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_imports.py +0 -0
  111. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_markers.py +0 -0
  112. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_parse.py +0 -0
  113. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_pyclass.py +0 -0
  114. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_pytask_smoke.py +0 -0
  115. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_smoke copy.sav +0 -0
  116. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_smoke.py +0 -0
  117. {dv_flow_mgr-0.0.2.14150065664a1 → dv_flow_mgr-0.0.2.14180123344a1}/tests/unit/test_stdlib.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.2.14150065664a1
3
+ Version: 0.0.2.14180123344a1
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.2.14150065664a1"
8
+ version = "0.0.2.14180123344a1"
9
9
  dependencies = [
10
10
  'jq',
11
11
  'pydantic',
@@ -55,6 +55,9 @@ def get_parser():
55
55
  run_parser.add_argument("-j",
56
56
  help="Specifies degree of parallelism. Uses all cores by default",
57
57
  type=int, default=-1)
58
+ run_parser.add_argument("-c", "--clean",
59
+ action="store_true",
60
+ help="Cleans the rundir before running")
58
61
  run_parser.set_defaults(func=CmdRun())
59
62
 
60
63
  show_parser = subparsers.add_parser('show',
@@ -77,6 +77,12 @@ class CmdRun(object):
77
77
  # TODO: allow user to specify run root -- maybe relative to some fixed directory?
78
78
  rundir = os.path.join(pkg._basedir, "rundir")
79
79
 
80
+ if args.clean:
81
+ print("Note: Cleaning rundir %s" % rundir)
82
+ if os.path.exists(rundir):
83
+ os.rmdir(rundir)
84
+ os.makedirs(rundir)
85
+
80
86
  builder = TaskGraphBuilder(root_pkg=pkg, rundir=rundir)
81
87
  runner = TaskSetRunner(rundir)
82
88
 
@@ -0,0 +1,10 @@
1
+ import dataclasses as dc
2
+ from typing import List, Callable
3
+
4
+ @dc.dataclass
5
+ class ListenerList(object):
6
+ listeners : List[Callable] = dc.field(default_factory=list)
7
+
8
+ def __call__(self, *args, **kwargs):
9
+ for l in self.listeners:
10
+ l(*args, **kwargs)
@@ -64,6 +64,7 @@ class PackageDef(BaseModel):
64
64
  params : List[ParamDef] = dc.Field(
65
65
  default_factory=list, alias="with",
66
66
  description="List of package parameters to set")
67
+ srcinfo : Any = dc.Field(default=None)
67
68
 
68
69
  _fragment_l : List['FragmentDef'] = []
69
70
  _subpkg_m : Dict[str,'PackageDef'] = {}
@@ -410,13 +411,23 @@ class PackageDef(BaseModel):
410
411
 
411
412
  @classmethod
412
413
  def _loadPkgDef(cls, root, exp_pkg_name, file_s):
414
+ from yaml.loader import SafeLoader
415
+
416
+ class SafeLineLoader(SafeLoader):
417
+ def construct_mapping(self, node, deep=False):
418
+ # print("construct")
419
+ mapping = super(SafeLineLoader, self).construct_mapping(node, deep=deep)
420
+ # Add 1 so line numbering starts at 1
421
+ # mapping['_srcinfo'] = node.start_mark.line + 1
422
+ return mapping
423
+
413
424
  if root in file_s:
414
425
  raise Exception("Recursive file processing @ %s: %s" % (root, ",".join(file_s)))
415
426
  file_s.append(root)
416
427
  ret = None
417
428
  with open(root, "r") as fp:
418
429
  PackageDef._log.debug("open %s" % root)
419
- doc = yaml.load(fp, Loader=yaml.FullLoader)
430
+ doc = yaml.load(fp, Loader=SafeLineLoader)
420
431
  if "package" not in doc.keys():
421
432
  raise Exception("Missing 'package' key in %s" % root)
422
433
  try:
@@ -19,6 +19,7 @@
19
19
  #* Author:
20
20
  #*
21
21
  #****************************************************************************
22
+ import pydantic
22
23
  import pydantic.dataclasses as dc
23
24
  import enum
24
25
  from pydantic import BaseModel
@@ -48,13 +49,31 @@ class PassthroughE(enum.Enum):
48
49
  All = "all"
49
50
  Unused = "unused"
50
51
 
51
-
52
52
  class StrategyDef(BaseModel):
53
53
  chain: Union[bool, None] = dc.Field(default=None)
54
54
  matrix : Union[Dict[str,List[Any]],None] = dc.Field(
55
55
  default=None,
56
56
  description="Matrix of parameter values to explore")
57
57
 
58
+ class TaskExecDef(BaseModel):
59
+ pytask : Union[str, None] = dc.Field(
60
+ default=None,
61
+ description="Python method to execute to implement this task")
62
+ pydep : Union[str, None] = dc.Field(
63
+ default=None,
64
+ description="Python method to check up-to-date status for this task")
65
+
66
+ class TasksBuilder(BaseModel):
67
+ # TODO: control how much data this task is provided?
68
+ pydef : Union[str, None] = dc.Field(
69
+ default=None,
70
+ description="Python method to build the subgraph")
71
+
72
+ class Tasks(BaseModel):
73
+ tasks: Union[List['TaskDef'], TasksBuilder] = dc.Field(
74
+ default_factory=list,
75
+ description="Sub-tasks")
76
+
58
77
  class TaskDef(BaseModel):
59
78
  """Holds definition information (ie the YAML view) for a task"""
60
79
  name : str = dc.Field(
@@ -72,7 +91,7 @@ class TaskDef(BaseModel):
72
91
  description="Python method to execute to implement this task")
73
92
  strategy : StrategyDef = dc.Field(
74
93
  default=None)
75
- tasks: List['TaskDef'] = dc.Field(
94
+ tasks: Union[List['TaskDef'], TasksBuilder] = dc.Field(
76
95
  default_factory=list,
77
96
  description="Sub-tasks")
78
97
  desc : str = dc.Field(
@@ -100,9 +119,12 @@ class TaskDef(BaseModel):
100
119
  consumes : Union[ConsumesE, List[Any], None] = dc.Field(
101
120
  default=None,
102
121
  description="Specifies matching patterns for parameter sets that this task consumes")
103
-
104
- # out: List[TaskOutput] = dc.Field(default_factory=list)
105
-
122
+
123
+ def __init__(self, **data):
124
+ # print("--> task_def %s" % str(data))
125
+ super().__init__(**data)
126
+ # print("<-- task_def %s" % str(data))
127
+
106
128
  def copy(self) -> 'TaskDef':
107
129
  ret = TaskDef(
108
130
  name=self.name,
@@ -22,6 +22,7 @@
22
22
  import os
23
23
  import dataclasses as dc
24
24
  import logging
25
+ from typing import Callable
25
26
  from .package import Package
26
27
  from .package_def import PackageDef, PackageSpec
27
28
  from .pkg_rgy import PkgRgy
@@ -48,6 +49,7 @@ class TaskGraphBuilder(object):
48
49
  root_pkg : PackageDef
49
50
  rundir : str
50
51
  pkg_rgy : PkgRgy = None
52
+ marker_l : Callable = lambda *args, **kwargs: None
51
53
  _pkg_s : List[Package] = dc.field(default_factory=list)
52
54
  _pkg_m : Dict[PackageSpec,Package] = dc.field(default_factory=dict)
53
55
  _pkg_spec_s : List[PackageDef] = dc.field(default_factory=list)
@@ -330,6 +332,7 @@ class TaskGraphBuilder(object):
330
332
  self._pkg_spec_s.pop()
331
333
  self._pkg_m[spec] = pkg
332
334
  else:
335
+ self.error("Failed to find package %s" % spec.name)
333
336
  raise Exception("Failed to find definition of package %s" % spec.name)
334
337
 
335
338
  self._logger.debug("<-- getPackage: %s" % str(pkg))
@@ -73,13 +73,23 @@ class TaskNodeCtorCompound(TaskNodeCtor):
73
73
  # Need to get the parent name
74
74
  needs = []
75
75
  for n in t.needs:
76
- need_name = "%s.%s" % (builder.package().name, n)
77
- task = builder.findTask(n)
78
- if task is None:
76
+ # 'n' is the dependency as specified by the user
77
+ # Need to perform a search
78
+ # - Look locally inside the compound task (pkg.compound.name)
79
+ # - Look for the fully-qualified task name
80
+ # - Look for the task name in the package
81
+
82
+ names = []
83
+ for pref in (builder.get_name_prefix((), "", builder.package().name)):
84
+ need_name = n if pref == "" else ("%s.%s" % (pref, n))
85
+ names.append(need_name)
79
86
  task = builder.findTask(need_name)
80
87
 
88
+ if task is not None:
89
+ break
90
+
81
91
  if task is None:
82
- raise Exception("Failed to find task %s (%s)" % (n, need_name))
92
+ raise Exception("Failed to find task %s (searched %s)" % (n, str(names)))
83
93
  self._log.debug("Add %s as dependency of %s" % (
84
94
  task.name, t.name
85
95
  ))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dv-flow-mgr
3
- Version: 0.0.2.14150065664a1
3
+ Version: 0.0.2.14180123344a1
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
@@ -29,6 +29,7 @@ src/dv_flow/mgr/expr_eval.py
29
29
  src/dv_flow/mgr/expr_parser.py
30
30
  src/dv_flow/mgr/fileset.py
31
31
  src/dv_flow/mgr/fragment_def.py
32
+ src/dv_flow/mgr/listener_list.py
32
33
  src/dv_flow/mgr/out
33
34
  src/dv_flow/mgr/package.py
34
35
  src/dv_flow/mgr/package_def.py