dv-flow-mgr 0.0.1.13979842530a1__tar.gz → 0.0.1.14097297609a1__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.
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/PKG-INFO +1 -1
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/Makefile +2 -1
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/Roadmap.md +2 -0
- dv_flow_mgr-0.0.1.14097297609a1/docs/cmdref.rst +9 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/conf.py +1 -0
- dv_flow_mgr-0.0.1.14097297609a1/docs/index.rst +21 -0
- dv_flow_mgr-0.0.1.14097297609a1/docs/pytask_api.rst +61 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/ivpm.yaml +2 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/pyproject.toml +1 -1
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/__init__.py +2 -2
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/__main__.py +26 -1
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/cmds/cmd_graph.py +82 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/cmds/cmd_run.py +2 -2
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/cmds/cmd_show.py +107 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/fileset.py +1 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/fragment_def.py +1 -1
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/package.py +3 -3
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/package_def.py +121 -33
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/param_def.py +8 -3
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/std/message.py +1 -1
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/task_data.py +24 -20
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/task_def.py +0 -1
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/task_graph_builder.py +121 -12
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_graph_dot_writer.py +78 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_node.py +102 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/task_node_compound.py +13 -1
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_node_ctor.py +118 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_node_ctor_compound.py +117 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_node_ctor_compound_proxy.py +65 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_node_ctor_def_base.py +47 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_node_ctor_proxy.py +56 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_node_ctor_task.py +64 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_node_ctor_wrapper.py +96 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/task_node_leaf.py +170 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/task_runner.py +11 -6
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/util/__init__.py +3 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/util/__main__.py +36 -0
- dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/util/cmds/cmd_schema.py +63 -0
- {dv_flow_mgr-0.0.1.13979842530a1/src/dv_flow/mgr → dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/util}/util.py +1 -1
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow_mgr.egg-info/PKG-INFO +1 -1
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow_mgr.egg-info/SOURCES.txt +18 -6
- dv_flow_mgr-0.0.1.14097297609a1/tests/unit/data/fileset/test1/files2/file2_2.sv +0 -0
- dv_flow_mgr-0.0.1.14097297609a1/tests/unit/test_compound_task.py +194 -0
- dv_flow_mgr-0.0.1.14097297609a1/tests/unit/test_dataflow.py +91 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_fileset.py +1 -1
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_markers.py +2 -8
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_pytask_smoke.py +2 -4
- dv_flow_mgr-0.0.1.13979842530a1/docs/index.rst +0 -34
- dv_flow_mgr-0.0.1.13979842530a1/docs/intro.rst +0 -191
- dv_flow_mgr-0.0.1.13979842530a1/docs/pytask_api.rst +0 -13
- dv_flow_mgr-0.0.1.13979842530a1/docs/reference.rst +0 -53
- dv_flow_mgr-0.0.1.13979842530a1/docs/stdlib.rst +0 -6
- dv_flow_mgr-0.0.1.13979842530a1/src/dv_flow/mgr/task.py +0 -181
- dv_flow_mgr-0.0.1.13979842530a1/src/dv_flow/mgr/task_ctor.py +0 -64
- dv_flow_mgr-0.0.1.13979842530a1/src/dv_flow/mgr/task_node.py +0 -425
- dv_flow_mgr-0.0.1.13979842530a1/tests/unit/test_compound_task.py +0 -44
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/.github/workflows/ci.yml +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/.gitignore +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/.vscode/settings.json +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/LICENSE +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/README.md +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/KeyArchitecture.md +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/Notes.md +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/RundirLayout.md +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/Stages.md +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/Steps.md +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/Tasks.md +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/TypesAndDefs.md +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/Usecases.md +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/docs/quickstart.rst +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/fwperiph_dma.pss +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/setup.cfg +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/eval_jq.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/expr_eval.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/expr_parser.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/out +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/package_import_spec.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/param.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/param_ref_eval.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/parsetab.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/pkg_rgy.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/share/flow.json +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/std/create_file.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/std/exec.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/std/fileset.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/std/flow.dv +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/std/task_null.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/task_listener_log.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/task_output.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/task_params_ctor.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/type.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/type_def.py +0 -0
- /dv_flow_mgr-0.0.1.13979842530a1/tests/unit/data/fileset/test1 copy/files1/file1_1.sv → /dv_flow_mgr-0.0.1.14097297609a1/src/dv_flow/mgr/util/cmds/__init__.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow_mgr.egg-info/dependency_links.txt +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow_mgr.egg-info/entry_points.txt +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow_mgr.egg-info/requires.txt +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow_mgr.egg-info/top_level.txt +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/examples/example1/example1.flow +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/system/test_depends.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/system/test_pkg_discovery.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/system/test_stdlib.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/__init__.py +0 -0
- /dv_flow_mgr-0.0.1.13979842530a1/tests/unit/data/fileset/test1/files1/file1_2.sv → /dv_flow_mgr-0.0.1.14097297609a1/tests/unit/data/fileset/test1/files1/file1_1.sv +0 -0
- /dv_flow_mgr-0.0.1.13979842530a1/tests/unit/data/fileset/test1/files2/file2_1.sv → /dv_flow_mgr-0.0.1.14097297609a1/tests/unit/data/fileset/test1/files1/file1_2.sv +0 -0
- /dv_flow_mgr-0.0.1.13979842530a1/tests/unit/data/fileset/test1/files2/file2_2.sv → /dv_flow_mgr-0.0.1.14097297609a1/tests/unit/data/fileset/test1/files2/file2_1.sv +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/data/fileset/test1/flow.dv +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1/tests/unit/data/fileset/test1 → dv_flow_mgr-0.0.1.14097297609a1/tests/unit/data/fileset/test1 copy}/files1/file1_1.sv +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/data/fileset/test1 copy/files1/file1_2.sv +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/data/fileset/test1 copy/files2/file2_1.sv +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/data/fileset/test1 copy/files2/file2_2.sv +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/data/fileset/test1 copy/test1.dfs +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/data/proj1/proj1.dfs +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/data/proj2/proj2.dfs +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/data/proj3/proj3.dfs +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_data_merge.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_expr_eval.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_expr_parser.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_imports.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_parse.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_pyclass.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_smoke copy.sav +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_smoke.py +0 -0
- {dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/tests/unit/test_stdlib.py +0 -0
@@ -1,4 +1,5 @@
|
|
1
1
|
DOCS_DIR:=$(dir $(abspath $(lastword $(MAKEFILE_LIST))))
|
2
|
+
PROJ_DIR:=$(shell cd $(DOCS_DIR)/.. ; pwd)
|
2
3
|
# Minimal makefile for Sphinx documentation
|
3
4
|
#
|
4
5
|
|
@@ -18,4 +19,4 @@ help:
|
|
18
19
|
# Catch-all target: route all unknown targets to Sphinx using the new
|
19
20
|
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
20
21
|
%: Makefile
|
21
|
-
|
22
|
+
@PYTHONPATH=$(PROJ_DIR)/src:$(PYTHONPATH) $(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
.. DV Flow Manager documentation master file, created by
|
2
|
+
sphinx-quickstart on Tue Jan 7 02:06:13 2025.
|
3
|
+
You can adapt this file completely to your liking, but it should at least
|
4
|
+
contain the root `toctree` directive.
|
5
|
+
|
6
|
+
DV Flow Manager
|
7
|
+
===============
|
8
|
+
|
9
|
+
DV Flow Manager is an execution engine for the DV Flow build
|
10
|
+
specification. This YAML-based format captures design and verification
|
11
|
+
(DV) tasks and dataflow in a way that enables concurrent execution and
|
12
|
+
efficient avoidance of redundant work.
|
13
|
+
You can learn more about the input specification <here>.
|
14
|
+
|
15
|
+
.. toctree::
|
16
|
+
:maxdepth: 2
|
17
|
+
:caption: Contents:
|
18
|
+
|
19
|
+
quickstart
|
20
|
+
cmdref
|
21
|
+
pytask_api
|
@@ -0,0 +1,61 @@
|
|
1
|
+
===============
|
2
|
+
Python Task API
|
3
|
+
===============
|
4
|
+
|
5
|
+
The core implementation for tasks is provided by a Python `async` method.
|
6
|
+
This method is passed two parameters:
|
7
|
+
|
8
|
+
* `runner` - Services that the task runner provides for the use of tasks
|
9
|
+
* `input` - The input data for the task
|
10
|
+
|
11
|
+
The method must return a `TaskDataResult` object with the execution
|
12
|
+
status of the task, result data, markers, and memento data.
|
13
|
+
|
14
|
+
TaskDataInput
|
15
|
+
=============
|
16
|
+
|
17
|
+
An object of type `TaskDataInput` is passed as the `input` parameter
|
18
|
+
of the runner method.
|
19
|
+
|
20
|
+
.. autoclass:: dv_flow.mgr.TaskDataInput
|
21
|
+
:members:
|
22
|
+
:exclude-members: model_config
|
23
|
+
|
24
|
+
TaskDataItem
|
25
|
+
=============
|
26
|
+
|
27
|
+
Data is passed between tasks via `TaskDataItem`-derived objects.
|
28
|
+
Each task may produce 0 or more `TaskDataItem` objects as output.
|
29
|
+
A task receives all the `TaskDataItem` objects produced by its
|
30
|
+
dependencies.
|
31
|
+
|
32
|
+
.. autoclass:: dv_flow.mgr.TaskDataItem
|
33
|
+
:members:
|
34
|
+
:exclude-members: model_config
|
35
|
+
|
36
|
+
|
37
|
+
TaskDataResult
|
38
|
+
==============
|
39
|
+
Task implementation methods must return an object of type
|
40
|
+
`TaskDataResult`. This object contains key data about
|
41
|
+
task execution.
|
42
|
+
|
43
|
+
.. autoclass:: dv_flow.mgr.TaskDataResult
|
44
|
+
:members:
|
45
|
+
:exclude-members: model_config
|
46
|
+
|
47
|
+
TaskMarker
|
48
|
+
==========
|
49
|
+
Tasks may produce markers to highlight key information to the
|
50
|
+
user. A marker is typically a pointer to a file location with
|
51
|
+
an associated severity level (error, warning, info).
|
52
|
+
|
53
|
+
|
54
|
+
.. autoclass:: dv_flow.mgr.TaskMarker
|
55
|
+
:members:
|
56
|
+
:exclude-members: model_config
|
57
|
+
|
58
|
+
.. autoclass:: dv_flow.mgr.TaskMarkerLoc
|
59
|
+
:members:
|
60
|
+
:exclude-members: model_config
|
61
|
+
|
{dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/__init__.py
RENAMED
@@ -21,10 +21,10 @@
|
|
21
21
|
#****************************************************************************
|
22
22
|
from .package_def import *
|
23
23
|
from .pkg_rgy import PkgRgy
|
24
|
-
from .task import *
|
25
24
|
from .task_data import *
|
26
25
|
from .task_graph_builder import TaskGraphBuilder
|
27
|
-
from .
|
26
|
+
from .task_runner import TaskRunner
|
27
|
+
from .task_node_ctor_wrapper import task
|
28
28
|
from .task_runner import TaskSetRunner
|
29
29
|
from .task_listener_log import TaskListenerLog
|
30
30
|
|
{dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/__main__.py
RENAMED
@@ -21,10 +21,14 @@
|
|
21
21
|
#****************************************************************************
|
22
22
|
import argparse
|
23
23
|
import logging
|
24
|
+
from .cmds.cmd_graph import CmdGraph
|
24
25
|
from .cmds.cmd_run import CmdRun
|
26
|
+
from .cmds.cmd_show import CmdShow
|
25
27
|
|
26
28
|
def get_parser():
|
27
|
-
parser = argparse.ArgumentParser(
|
29
|
+
parser = argparse.ArgumentParser(
|
30
|
+
description='dv_flow_mgr',
|
31
|
+
prog='dfm')
|
28
32
|
# parser.add_argument("-d", "--debug",
|
29
33
|
# help="Enable debug",
|
30
34
|
# action="store_true")
|
@@ -36,6 +40,16 @@ def get_parser():
|
|
36
40
|
# action="store_true")
|
37
41
|
subparsers = parser.add_subparsers(required=True)
|
38
42
|
|
43
|
+
graph_parser = subparsers.add_parser('graph',
|
44
|
+
help='Generates the graph of a task')
|
45
|
+
graph_parser.add_argument("task", nargs="?", help="task to graph")
|
46
|
+
graph_parser.add_argument("-f", "--format", help="Specifies the output format",
|
47
|
+
default="dot")
|
48
|
+
graph_parser.add_argument("-o", "--output",
|
49
|
+
help="Specifies the output file",
|
50
|
+
default="-")
|
51
|
+
graph_parser.set_defaults(func=CmdGraph())
|
52
|
+
|
39
53
|
run_parser = subparsers.add_parser('run', help='run a flow')
|
40
54
|
run_parser.add_argument("tasks", nargs='*', help="tasks to run")
|
41
55
|
run_parser.add_argument("-j",
|
@@ -43,6 +57,17 @@ def get_parser():
|
|
43
57
|
type=int, default=-1)
|
44
58
|
run_parser.set_defaults(func=CmdRun())
|
45
59
|
|
60
|
+
show_parser = subparsers.add_parser('show',
|
61
|
+
help='Display information about a task or tasks')
|
62
|
+
show_parser.add_argument("task", nargs='?', help="task to show")
|
63
|
+
show_parser.add_argument("-a", "--all",
|
64
|
+
action="store_true",
|
65
|
+
help="Shows all tasks required for the subject to run")
|
66
|
+
show_parser.add_argument("-v", "--verbose",
|
67
|
+
action="store_true",
|
68
|
+
help="Shows additional information about tasks")
|
69
|
+
show_parser.set_defaults(func=CmdShow())
|
70
|
+
|
46
71
|
return parser
|
47
72
|
|
48
73
|
def main():
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#****************************************************************************
|
2
|
+
#* cmd_graph.py
|
3
|
+
#*
|
4
|
+
#* Copyright 2023-2025 Matthew Ballance and Contributors
|
5
|
+
#*
|
6
|
+
#* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
7
|
+
#* not use this file except in compliance with the License.
|
8
|
+
#* You may obtain a copy of the License at:
|
9
|
+
#*
|
10
|
+
#* http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#*
|
12
|
+
#* Unless required by applicable law or agreed to in writing, software
|
13
|
+
#* distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
#* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
#* See the License for the specific language governing permissions and
|
16
|
+
#* limitations under the License.
|
17
|
+
#*
|
18
|
+
#* Created on:
|
19
|
+
#* Author:
|
20
|
+
#*
|
21
|
+
#****************************************************************************
|
22
|
+
import asyncio
|
23
|
+
import os
|
24
|
+
import logging
|
25
|
+
from typing import ClassVar
|
26
|
+
from ..util import loadProjPkgDef
|
27
|
+
from ..task_graph_builder import TaskGraphBuilder
|
28
|
+
from ..task_runner import TaskSetRunner
|
29
|
+
from ..task_listener_log import TaskListenerLog
|
30
|
+
from ..pkg_rgy import PkgRgy
|
31
|
+
from ..task_graph_dot_writer import TaskGraphDotWriter
|
32
|
+
|
33
|
+
|
34
|
+
class CmdGraph(object):
|
35
|
+
_log : ClassVar = logging.getLogger("CmdGraph")
|
36
|
+
|
37
|
+
def __call__(self, args):
|
38
|
+
|
39
|
+
# First, find the project we're working with
|
40
|
+
pkg = loadProjPkgDef(os.getcwd())
|
41
|
+
|
42
|
+
if pkg is None:
|
43
|
+
raise Exception("Failed to find a 'flow.dv' file that defines a package in %s or its parent directories" % os.getcwd())
|
44
|
+
|
45
|
+
self._log.debug("Root flow file defines package: %s" % pkg.name)
|
46
|
+
|
47
|
+
if args.task is None:
|
48
|
+
# Print out available tasks
|
49
|
+
tasks = []
|
50
|
+
for task in pkg.tasks:
|
51
|
+
tasks.append(task)
|
52
|
+
for frag in pkg._fragment_l:
|
53
|
+
for task in frag.tasks:
|
54
|
+
tasks.append(task)
|
55
|
+
tasks.sort(key=lambda x: x.name)
|
56
|
+
|
57
|
+
max_name_len = 0
|
58
|
+
for t in tasks:
|
59
|
+
if len(t.name) > max_name_len:
|
60
|
+
max_name_len = len(t.name)
|
61
|
+
|
62
|
+
print("No task specified. Available Tasks:")
|
63
|
+
for t in tasks:
|
64
|
+
desc = t.desc
|
65
|
+
if desc is None or t.desc == "":
|
66
|
+
"<no descripion>"
|
67
|
+
print("%s - %s" % (t.name.ljust(max_name_len), desc))
|
68
|
+
else:
|
69
|
+
rundir = os.path.join(pkg._basedir, "rundir")
|
70
|
+
|
71
|
+
builder = TaskGraphBuilder(root_pkg=pkg, rundir=rundir)
|
72
|
+
|
73
|
+
t = builder.mkTaskGraph(pkg.name + "." + args.task)
|
74
|
+
|
75
|
+
TaskGraphDotWriter().write(
|
76
|
+
t,
|
77
|
+
"-"
|
78
|
+
)
|
79
|
+
|
80
|
+
return 0
|
81
|
+
|
82
|
+
|
{dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/cmds/cmd_run.py
RENAMED
@@ -50,7 +50,7 @@ class CmdRun(object):
|
|
50
50
|
tasks = []
|
51
51
|
for task in pkg.tasks:
|
52
52
|
tasks.append(task)
|
53
|
-
for frag in pkg.
|
53
|
+
for frag in pkg._fragment_l:
|
54
54
|
for task in frag.tasks:
|
55
55
|
tasks.append(task)
|
56
56
|
tasks.sort(key=lambda x: x.name)
|
@@ -75,7 +75,7 @@ class CmdRun(object):
|
|
75
75
|
# Maybe separate into a task-graph builder and a task-graph runner
|
76
76
|
|
77
77
|
# TODO: allow user to specify run root -- maybe relative to some fixed directory?
|
78
|
-
rundir = os.path.join(pkg.
|
78
|
+
rundir = os.path.join(pkg._basedir, "rundir")
|
79
79
|
|
80
80
|
builder = TaskGraphBuilder(root_pkg=pkg, rundir=rundir)
|
81
81
|
runner = TaskSetRunner(rundir)
|
@@ -0,0 +1,107 @@
|
|
1
|
+
#****************************************************************************
|
2
|
+
#* cmd_show.py
|
3
|
+
#*
|
4
|
+
#* Copyright 2023-2025 Matthew Ballance and Contributors
|
5
|
+
#*
|
6
|
+
#* Licensed under the Apache License, Version 2.0 (the "License"); you may
|
7
|
+
#* not use this file except in compliance with the License.
|
8
|
+
#* You may obtain a copy of the License at:
|
9
|
+
#*
|
10
|
+
#* http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#*
|
12
|
+
#* Unless required by applicable law or agreed to in writing, software
|
13
|
+
#* distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
#* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
#* See the License for the specific language governing permissions and
|
16
|
+
#* limitations under the License.
|
17
|
+
#*
|
18
|
+
#* Created on:
|
19
|
+
#* Author:
|
20
|
+
#*
|
21
|
+
#****************************************************************************
|
22
|
+
import asyncio
|
23
|
+
import os
|
24
|
+
import logging
|
25
|
+
import toposort
|
26
|
+
from typing import ClassVar
|
27
|
+
from ..util import loadProjPkgDef
|
28
|
+
from ..task_graph_builder import TaskGraphBuilder
|
29
|
+
from ..task_runner import TaskSetRunner
|
30
|
+
from ..task_listener_log import TaskListenerLog
|
31
|
+
from ..pkg_rgy import PkgRgy
|
32
|
+
from ..task_graph_dot_writer import TaskGraphDotWriter
|
33
|
+
|
34
|
+
|
35
|
+
class CmdShow(object):
|
36
|
+
_log : ClassVar = logging.getLogger("CmdGraph")
|
37
|
+
|
38
|
+
def __call__(self, args):
|
39
|
+
|
40
|
+
# First, find the project we're working with
|
41
|
+
pkg = loadProjPkgDef(os.getcwd())
|
42
|
+
|
43
|
+
if pkg is None:
|
44
|
+
raise Exception("Failed to find a 'flow.dv' file that defines a package in %s or its parent directories" % os.getcwd())
|
45
|
+
|
46
|
+
self._log.debug("Root flow file defines package: %s" % pkg.name)
|
47
|
+
|
48
|
+
if args.task is None:
|
49
|
+
# Print out available tasks
|
50
|
+
tasks = []
|
51
|
+
for task in pkg.tasks:
|
52
|
+
tasks.append(task)
|
53
|
+
for frag in pkg._fragment_l:
|
54
|
+
for task in frag.tasks:
|
55
|
+
tasks.append(task)
|
56
|
+
tasks.sort(key=lambda x: x.name)
|
57
|
+
|
58
|
+
max_name_len = 0
|
59
|
+
for t in tasks:
|
60
|
+
if len(t.name) > max_name_len:
|
61
|
+
max_name_len = len(t.name)
|
62
|
+
|
63
|
+
print("No task specified. Available Tasks:")
|
64
|
+
for t in tasks:
|
65
|
+
desc = t.desc
|
66
|
+
if desc is None or t.desc == "":
|
67
|
+
"<no descripion>"
|
68
|
+
print("%s - %s" % (t.name.ljust(max_name_len), desc))
|
69
|
+
else:
|
70
|
+
rundir = os.path.join(pkg._basedir, "rundir")
|
71
|
+
|
72
|
+
builder = TaskGraphBuilder(root_pkg=pkg, rundir=rundir)
|
73
|
+
|
74
|
+
|
75
|
+
if args.all:
|
76
|
+
t = builder.mkTaskGraph(pkg.name + "." + args.task)
|
77
|
+
dep_m = TaskSetRunner(rundir=None).buildDepMap(t)
|
78
|
+
|
79
|
+
order = list(toposort.toposort(dep_m))
|
80
|
+
|
81
|
+
print("Task: %s" % t.name)
|
82
|
+
|
83
|
+
last_s = set()
|
84
|
+
for i,s in enumerate(order):
|
85
|
+
print("-- TaskSet %d --" % (i+1))
|
86
|
+
for t in s:
|
87
|
+
print(" - %s" % t.name)
|
88
|
+
if args.verbose and len(t.params.model_fields.items()):
|
89
|
+
print(" params:")
|
90
|
+
for name,field in t.params.model_fields.items():
|
91
|
+
print(" - %s: %s" % (name, getattr(t.params, name)))
|
92
|
+
if len(t.needs):
|
93
|
+
print(" needs:")
|
94
|
+
for n in t.needs:
|
95
|
+
print(" - %s%s" % (
|
96
|
+
n[0].name,
|
97
|
+
("*" if n[0] in last_s else "")))
|
98
|
+
last_s = s
|
99
|
+
|
100
|
+
pass
|
101
|
+
else:
|
102
|
+
# Show show info about the current task
|
103
|
+
pass
|
104
|
+
|
105
|
+
return 0
|
106
|
+
|
107
|
+
|
{dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/fileset.py
RENAMED
@@ -29,6 +29,7 @@ class FileSet(BaseModel):
|
|
29
29
|
basedir : str
|
30
30
|
name : str = ""
|
31
31
|
src : str = None
|
32
|
+
seq : int = -1
|
32
33
|
files : List[str] = dc.Field(default_factory=list)
|
33
34
|
incdirs: List[str] = dc.Field(default_factory=list)
|
34
35
|
params : Dict[str,str] = dc.Field(default_factory=dict)
|
{dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/fragment_def.py
RENAMED
@@ -34,7 +34,7 @@ class FragmentDef(BaseModel):
|
|
34
34
|
fragments: List[str] = dc.Field(default_factory=list)
|
35
35
|
types : List[TypeDef] = dc.Field(default_factory=list)
|
36
36
|
|
37
|
-
|
37
|
+
_basedir : str = None
|
38
38
|
|
39
39
|
def getTask(self, name : str) -> 'TaskDef':
|
40
40
|
for t in self.tasks:
|
{dv_flow_mgr-0.0.1.13979842530a1 → dv_flow_mgr-0.0.1.14097297609a1}/src/dv_flow/mgr/package.py
RENAMED
@@ -22,7 +22,7 @@
|
|
22
22
|
import dataclasses as dc
|
23
23
|
import logging
|
24
24
|
from typing import Any, ClassVar, Dict
|
25
|
-
from .
|
25
|
+
from .task_node_ctor import TaskNodeCtor
|
26
26
|
|
27
27
|
@dc.dataclass
|
28
28
|
class Package(object):
|
@@ -30,11 +30,11 @@ class Package(object):
|
|
30
30
|
params : Dict[str,Any] = dc.field(default_factory=dict)
|
31
31
|
# Package holds constructors for tasks
|
32
32
|
# - Dict holds the default parameters for the task
|
33
|
-
tasks : Dict[str,
|
33
|
+
tasks : Dict[str,TaskNodeCtor] = dc.field(default_factory=dict)
|
34
34
|
types : Dict[str,Any] = dc.field(default_factory=dict)
|
35
35
|
_log : ClassVar = logging.getLogger("Package")
|
36
36
|
|
37
|
-
def getTaskCtor(self, name : str) ->
|
37
|
+
def getTaskCtor(self, name : str) -> TaskNodeCtor:
|
38
38
|
self._log.debug("-- %s::getTaskCtor: %s" % (self.name, name))
|
39
39
|
if name not in self.tasks.keys():
|
40
40
|
raise Exception("Task %s not present in package %s" % (name, self.name))
|