hpc-beeflow 0.1.10.dev0__tar.gz → 0.1.11.dev0__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.
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/PKG-INFO +9 -6
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/README.rst +1 -0
- hpc_beeflow-0.1.11.dev0/beeflow/__init__.py +1 -0
- hpc_beeflow-0.1.11.dev0/beeflow/client/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/client/bee_client.py +88 -39
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/client/core.py +51 -51
- hpc_beeflow-0.1.11.dev0/beeflow/client/remote_client.py +178 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/cloud_launcher.py +5 -3
- hpc_beeflow-0.1.11.dev0/beeflow/common/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/api.py +1 -1
- hpc_beeflow-0.1.11.dev0/beeflow/common/build/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build/container_drivers.py +7 -5
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build_interfaces.py +3 -5
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cli.py +1 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/__init__.py +4 -2
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/chameleoncloud.py +1 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/google.py +2 -2
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/config_driver.py +91 -63
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/config_utils.py +1 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/config_validator.py +3 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/connection.py +1 -1
- hpc_beeflow-0.1.11.dev0/beeflow/common/crt/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/crt/charliecloud_driver.py +21 -14
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/crt_interface.py +3 -2
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cwl/cwl.py +143 -56
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/examples/Dockerfile.comd-x86_64 +78 -0
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/examples/README.txt +51 -0
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/examples/cat_grep_tar.py +48 -0
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/examples/comd.py +48 -0
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/examples/comd_driver.py +82 -0
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/examples/comd_pre.sh +2 -0
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/workflow.py +185 -0
- hpc_beeflow-0.1.11.dev0/beeflow/common/db/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/client_db.py +18 -8
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/tm_db.py +2 -2
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/wfm_db.py +7 -3
- hpc_beeflow-0.1.11.dev0/beeflow/common/deps/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/deps/container_manager.py +1 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/deps/neo4j_manager.py +1 -1
- hpc_beeflow-0.1.11.dev0/beeflow/common/gdb/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/gdb_driver.py +18 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/generate_graph.py +2 -5
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/neo4j_cypher.py +91 -13
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/neo4j_driver.py +50 -6
- hpc_beeflow-0.1.11.dev0/beeflow/common/integration/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/integration/utils.py +6 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/integration_test.py +30 -5
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/parser/__init__.py +1 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/parser/parser.py +3 -3
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/validation.py +6 -4
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/wf_data.py +1 -4
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/wf_interface.py +14 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/__init__.py +1 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/flux_worker.py +10 -8
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/lsf_worker.py +1 -10
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/slurm_worker.py +107 -89
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/utils.py +19 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/worker.py +31 -6
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker_interface.py +3 -2
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cat-grep-fail/lorem.txt +49 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/README.txt +3 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/cat.cwl +17 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/cat2.cwl +17 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/grep0.cwl +18 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/grep1.cwl +18 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/grep2.cwl +18 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/grep3.cwl +18 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/input.yml +8 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/lorem.txt +49 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/tar.cwl +24 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/tar2.cwl +24 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/workflow.cwl +78 -0
- {hpc_beeflow-0.1.10.dev0/beeflow/data/dockerfiles/pennant-graph → hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/pennant-build}/graph_pennant.py +4 -3
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree.py +4 -2
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regression.py +4 -2
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_code.py +4 -2
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset.py +4 -2
- {hpc_beeflow-0.1.10.dev0/beeflow/data/cwl/bee_workflows/pennant-build → hpc_beeflow-0.1.11.dev0/beeflow/data/dockerfiles/pennant-graph}/graph_pennant.py +4 -3
- hpc_beeflow-0.1.11.dev0/beeflow/remote/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/remote/remote.py +1 -2
- hpc_beeflow-0.1.11.dev0/beeflow/scheduler/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/algorithms.py +4 -4
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/resource_allocation.py +4 -3
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/scheduler.py +7 -7
- hpc_beeflow-0.1.11.dev0/beeflow/task_manager/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/background.py +17 -7
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/task_actions.py +1 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/utils.py +4 -2
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/mocks.py +35 -35
- hpc_beeflow-0.1.11.dev0/beeflow/tests/test_charliecloud_driver.py +70 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_config_driver.py +62 -1
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_config_validator.py +5 -5
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_db_client.py +11 -3
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_db_sched.py +5 -3
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_db_tm.py +5 -3
- hpc_beeflow-0.1.11.dev0/beeflow/tests/test_neo4j_cypher.py +80 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_parser.py +16 -16
- hpc_beeflow-0.1.11.dev0/beeflow/tests/test_remote.py +112 -0
- hpc_beeflow-0.1.11.dev0/beeflow/tests/test_remote_client.py +275 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_scheduler_resource_allocation.py +4 -2
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_scheduler_rest.py +5 -5
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_slurm_worker.py +32 -14
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_tm.py +3 -3
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_wf_interface.py +3 -3
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_wf_manager.py +2 -1
- hpc_beeflow-0.1.11.dev0/beeflow/tests/test_wf_update.py +139 -0
- hpc_beeflow-0.1.11.dev0/beeflow/wf_manager/__init__.py +1 -0
- hpc_beeflow-0.1.11.dev0/beeflow/wf_manager/resources/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/resources/wf_actions.py +11 -3
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/resources/wf_list.py +4 -3
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/resources/wf_update.py +33 -22
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/resources/wf_utils.py +40 -13
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/wf_manager.py +2 -8
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/pyproject.toml +7 -9
- hpc_beeflow-0.1.10.dev0/beeflow/common/cwl/examples/cat_grep_tar_driver.py +0 -75
- hpc_beeflow-0.1.10.dev0/beeflow/common/cwl/examples/comd_driver.py +0 -50
- hpc_beeflow-0.1.10.dev0/beeflow/wf_manager/common/wf_db.py +0 -342
- hpc_beeflow-0.1.10.dev0/beeflow/wf_manager/resources/wf_metadata.py +0 -18
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/LICENSE +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/client/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build/build_driver.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build/utils.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cli_connection.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/cloud.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/constants.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/openstack.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/provider.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/container_path.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/crt/crt_driver.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/crt/singularity_driver.py +0 -0
- {hpc_beeflow-0.1.10.dev0/beeflow/data/cwl/bee_workflows/cat-grep-fail → hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/examples}/lorem.txt +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/bdb.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/sched_db.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/deps/celery_manager.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/deps/redis_manager.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/expr.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/DESIGN.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/graphml_key_updater.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/integration/generated_workflows.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/log.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/parser/.gitignore +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/parser/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/paths.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/states.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/tab_completion.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/wf_profiler.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/simple_worker.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cloud_templates/dora.jinja +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cloud_templates/dora.yaml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_output.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_output_err.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_split.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_worker001.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_worker002.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/input/small.fasta +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/cat.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep0.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep1.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/input.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/tar.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/workflow.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/post_run.sh +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/pre_run.sh +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/post_run.sh +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/pre_run.sh +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/cf-summit.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/Dockerfile.clamr-lanl-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-darwin.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-no-owrite.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/copyContainer_containerName.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerFile_containerName.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerPull.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/cf-singularity.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem_bin.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/graph.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_1_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_2_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_4_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-graph-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.sh +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_1_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_2_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_4_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_8_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pytest.ini +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/cancel.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc-nc.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/lorem.txt +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/builder/dockerFile.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/builder/dockerPull.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/grep-wordcount/gc.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/grep-wordcount/lorem.txt +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/helloworld.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/helloworld_input.yaml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/DAG_example-1.png +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_multiply_example_workflow.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_step1.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/isolated test.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/job.yaml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply_step2.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/workflow_generater_python.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_output.txt +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_tool.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/expectedValue.txt +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/hiring1.txt +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regress_output.txt +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/machinelearning_pipeline.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/out.PNG +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_tool.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset_tool.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/regress_tool.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.builder_demo +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-lanl-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-ppc64le +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.comd-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.deb9ompi-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.lulesh-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.neo4j +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.nwchem-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.pennant-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.vaspompi-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.comd-x86_64-wpmix +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.debian +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.openmpi-3.1.5 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/dont-init-ucx-on-intel-cray.patch +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/pennant-graph/Dockerfile.pennant-graph-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.sh +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/scheduler.yaml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/serializable.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/task.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/task_manager.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/task_submit.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/42.tgz +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/README.md +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/cf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/mv_script.cwl +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/mv_script.sh +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf.tgz +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/gdb.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_cloud.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_config_utils.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_container_path.py +0 -0
- {hpc_beeflow-0.1.10.dev0 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_scheduler.py +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: hpc-beeflow
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.11.dev0
|
|
4
4
|
Summary: A software package for containerizing HPC applications and managing job workflows
|
|
5
|
-
Home-page: https://github.com/lanl/BEE
|
|
6
5
|
Keywords: bee,hpc,workflow,cluster,computing
|
|
7
6
|
Author: BEE-LANL Dev Team
|
|
8
7
|
Author-email: bee-dev@lanl.gov
|
|
9
|
-
Requires-Python: >=3.8.3,<=3.
|
|
8
|
+
Requires-Python: >=3.8.3,<=3.13.0
|
|
10
9
|
Classifier: Environment :: Console
|
|
11
10
|
Classifier: Environment :: OpenStack
|
|
12
11
|
Classifier: Environment :: Other Environment
|
|
@@ -19,7 +18,8 @@ Classifier: Programming Language :: Python :: 3
|
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.9
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
-
Classifier: Programming Language :: Python :: 3
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
23
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
24
|
Classifier: Topic :: Scientific/Engineering
|
|
25
25
|
Classifier: Topic :: System :: Clustering
|
|
@@ -34,7 +34,7 @@ Requires-Dist: celery[redis,sqlalchemy] (>=5.3.4,<6.0.0)
|
|
|
34
34
|
Requires-Dist: cffi (>=1.15.1,<2.0.0)
|
|
35
35
|
Requires-Dist: cwl-utils (>=0.16,<0.17)
|
|
36
36
|
Requires-Dist: docutils (==0.18.1)
|
|
37
|
-
Requires-Dist: fastapi (==0.
|
|
37
|
+
Requires-Dist: fastapi (==0.115.8)
|
|
38
38
|
Requires-Dist: flask_restful (==0.3.9)
|
|
39
39
|
Requires-Dist: google-api-python-client (>=2.66.0,<3.0.0) ; extra == "cloud-extras"
|
|
40
40
|
Requires-Dist: graphviz (>=0.20.3,<0.21.0)
|
|
@@ -42,6 +42,8 @@ Requires-Dist: gunicorn (>=20.1,<23.0)
|
|
|
42
42
|
Requires-Dist: jsonpickle (>=2.2.0,<3.0.0)
|
|
43
43
|
Requires-Dist: neo4j (>=5,<6)
|
|
44
44
|
Requires-Dist: networkx (==3.1)
|
|
45
|
+
Requires-Dist: pre-commit (==3.5.0)
|
|
46
|
+
Requires-Dist: pylint (==3.2.7)
|
|
45
47
|
Requires-Dist: python-daemon (>=2.3.1,<3.0.0)
|
|
46
48
|
Requires-Dist: python-heatclient (>=3.1.0,<4.0.0) ; extra == "cloud-extras"
|
|
47
49
|
Requires-Dist: python-openstackclient (>=6.0.0,<7.0.0) ; extra == "cloud-extras"
|
|
@@ -110,6 +112,7 @@ Contributors:
|
|
|
110
112
|
* Patricia Grubel - `pagrubel <https://github.com/pagrubel>`_
|
|
111
113
|
* Qiang Guan - `guanxyz <https://github.com/guanxyz>`_
|
|
112
114
|
* Ragini Gupta - `raginigupta6 <https://github.com/raginigupta6>`_
|
|
115
|
+
* Aaron R Hall - `arhall0 <https://github.com/arhall0>`_
|
|
113
116
|
* Leah Howell - `Leahh02 <https://github.com/Leahh02>`_
|
|
114
117
|
* Andres Quan - `aquan9 <https://github.com/aquan9>`_
|
|
115
118
|
* Quincy Wofford - `qwofford <https://github.com/qwofford>`_
|
|
@@ -56,6 +56,7 @@ Contributors:
|
|
|
56
56
|
* Patricia Grubel - `pagrubel <https://github.com/pagrubel>`_
|
|
57
57
|
* Qiang Guan - `guanxyz <https://github.com/guanxyz>`_
|
|
58
58
|
* Ragini Gupta - `raginigupta6 <https://github.com/raginigupta6>`_
|
|
59
|
+
* Aaron R Hall - `arhall0 <https://github.com/arhall0>`_
|
|
59
60
|
* Leah Howell - `Leahh02 <https://github.com/Leahh02>`_
|
|
60
61
|
* Andres Quan - `aquan9 <https://github.com/aquan9>`_
|
|
61
62
|
* Quincy Wofford - `qwofford <https://github.com/qwofford>`_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""beeflow module."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""beeflow client module."""
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
This script provides a client interface to the user to manage workflows.
|
|
5
5
|
Capablities include submitting, starting, listing, pausing and cancelling workflows.
|
|
6
6
|
"""
|
|
7
|
+
|
|
8
|
+
# Disable W0511: This allows us to have TODOs in the code
|
|
9
|
+
# Disable R1732: Significant code restructuring required to fix
|
|
10
|
+
# pylint:disable=W0511,R1732
|
|
11
|
+
|
|
7
12
|
import os
|
|
8
13
|
import sys
|
|
9
14
|
import logging
|
|
@@ -11,6 +16,7 @@ import inspect
|
|
|
11
16
|
import pathlib
|
|
12
17
|
import shutil
|
|
13
18
|
import subprocess
|
|
19
|
+
import getpass
|
|
14
20
|
import tarfile
|
|
15
21
|
import tempfile
|
|
16
22
|
import textwrap
|
|
@@ -27,13 +33,14 @@ from beeflow.common.connection import Connection
|
|
|
27
33
|
from beeflow.common import paths
|
|
28
34
|
from beeflow.common.parser import CwlParser
|
|
29
35
|
from beeflow.common.wf_data import generate_workflow_id
|
|
30
|
-
from beeflow.client import core
|
|
36
|
+
from beeflow.client import core # pylint: disable=R0401 #WIP
|
|
37
|
+
from beeflow.client import remote_client
|
|
31
38
|
from beeflow.wf_manager.resources import wf_utils
|
|
32
39
|
from beeflow.common.db import client_db
|
|
33
40
|
from beeflow.common.db import bdb
|
|
34
41
|
|
|
35
42
|
# Length of a shortened workflow ID
|
|
36
|
-
short_id_len = 6 #
|
|
43
|
+
short_id_len = 6 # pylint: disable=C0103 # not a constant
|
|
37
44
|
|
|
38
45
|
# Maximum length of a workflow ID
|
|
39
46
|
MAX_ID_LEN = 32
|
|
@@ -79,15 +86,78 @@ def get_hostname():
|
|
|
79
86
|
return curr_hn
|
|
80
87
|
|
|
81
88
|
|
|
89
|
+
def set_backend_status(new_status):
|
|
90
|
+
"""Set backend flag to true in database."""
|
|
91
|
+
db = bdb.connect_db(client_db, db_path())
|
|
92
|
+
db.info.set_backend_status(new_status)
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def check_backend_status():
|
|
96
|
+
"""Check if backend flag has been set."""
|
|
97
|
+
db = bdb.connect_db(client_db, db_path())
|
|
98
|
+
status = db.info.get_backend_status()
|
|
99
|
+
return status
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def reset_client_db():
|
|
103
|
+
"""Reset client db when beeflow is stopped."""
|
|
104
|
+
setup_hostname("")
|
|
105
|
+
set_backend_status("")
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def check_backend_jobs(start_hn, command=False):
|
|
109
|
+
"""Check if there is an instance of beeflow running on a backend node."""
|
|
110
|
+
user_name = getpass.getuser()
|
|
111
|
+
cmd = ['squeue', '-u', f'{user_name}', '-o', '%N', '-h']
|
|
112
|
+
resp = subprocess.run(cmd, text=True, check=True, stdout=subprocess.PIPE)
|
|
113
|
+
|
|
114
|
+
# iterate through available nodes
|
|
115
|
+
data = resp.stdout.splitlines()
|
|
116
|
+
cur_alloc = False
|
|
117
|
+
if get_hostname() in data:
|
|
118
|
+
cur_alloc = True
|
|
119
|
+
|
|
120
|
+
if cur_alloc:
|
|
121
|
+
if command:
|
|
122
|
+
warn(f'beeflow was started on "{get_hostname()}" and you are trying to '
|
|
123
|
+
f'run a command on "{start_hn}".')
|
|
124
|
+
sys.exit(1)
|
|
125
|
+
else:
|
|
126
|
+
warn(f'beeflow was started on compute node "{get_hostname()}" '
|
|
127
|
+
'and it is still running. ')
|
|
128
|
+
sys.exit(1)
|
|
129
|
+
else: # beeflow was started on compute node but user no longer owns node
|
|
130
|
+
if command:
|
|
131
|
+
warn('beeflow has not been started!')
|
|
132
|
+
sys.exit(1)
|
|
133
|
+
else:
|
|
134
|
+
warn('beeflow was started on a compute node (no longer owned by user) and '
|
|
135
|
+
'not stopped correctly. ')
|
|
136
|
+
warn("Resetting client database.")
|
|
137
|
+
reset_client_db()
|
|
138
|
+
setup_hostname(start_hn) # add to client db
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def check_db_flags(start_hn):
|
|
142
|
+
"""Check that beeflow was stopped correctly during the last run."""
|
|
143
|
+
if get_hostname() and get_hostname() != start_hn and check_backend_status() == "":
|
|
144
|
+
warn(f'Error: beeflow is already running on "{get_hostname()}".')
|
|
145
|
+
sys.exit(1)
|
|
146
|
+
if get_hostname() and get_hostname() != start_hn and check_backend_status() == "true":
|
|
147
|
+
check_backend_jobs(start_hn)
|
|
148
|
+
|
|
149
|
+
|
|
82
150
|
def check_hostname(curr_hn):
|
|
83
151
|
"""Check current front end name matches the one beeflow was started on."""
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if start_hn and curr_hn != start_hn: # noqa: don't use set instead
|
|
87
|
-
warn(f'beeflow was started on "{start_hn}" and you are trying to '
|
|
152
|
+
if get_hostname() and curr_hn != get_hostname() and check_backend_status() == "":
|
|
153
|
+
warn(f'beeflow was started on "{get_hostname()}" and you are trying to '
|
|
88
154
|
f'run a command on "{curr_hn}".')
|
|
89
|
-
|
|
155
|
+
sys.exit(1)
|
|
156
|
+
elif get_hostname() and curr_hn != get_hostname() and check_backend_status() == "true":
|
|
157
|
+
check_backend_jobs(curr_hn, command=True)
|
|
158
|
+
if get_hostname() == "" and check_backend_status() == "":
|
|
90
159
|
warn('beeflow has not been started!')
|
|
160
|
+
sys.exit(1)
|
|
91
161
|
|
|
92
162
|
|
|
93
163
|
def error_exit(msg, include_caller=True):
|
|
@@ -103,7 +173,7 @@ def error_exit(msg, include_caller=True):
|
|
|
103
173
|
raise ClientError(msg) from None
|
|
104
174
|
|
|
105
175
|
|
|
106
|
-
def error_handler(resp): #
|
|
176
|
+
def error_handler(resp): # pylint: disable=R1710 # error handler doesn't need to return an expression
|
|
107
177
|
"""Handle a 500 error in a response."""
|
|
108
178
|
if resp.status_code != 500:
|
|
109
179
|
return resp
|
|
@@ -167,7 +237,7 @@ def get_wf_list():
|
|
|
167
237
|
|
|
168
238
|
def check_short_id_collision():
|
|
169
239
|
"""Check short workflow IDs for colliions; increase short ID length if detected."""
|
|
170
|
-
global short_id_len
|
|
240
|
+
global short_id_len
|
|
171
241
|
workflow_list = get_wf_list()
|
|
172
242
|
if workflow_list:
|
|
173
243
|
while short_id_len < MAX_ID_LEN:
|
|
@@ -227,6 +297,7 @@ def get_wf_status(wf_id):
|
|
|
227
297
|
|
|
228
298
|
app = typer.Typer(no_args_is_help=True, add_completion=False, cls=NaturalOrderGroup)
|
|
229
299
|
app.add_typer(core.app, name='core')
|
|
300
|
+
app.add_typer(remote_client.app, name='remote')
|
|
230
301
|
app.add_typer(config_driver.app, name='config')
|
|
231
302
|
|
|
232
303
|
|
|
@@ -254,6 +325,8 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
254
325
|
workdir = workdir.resolve()
|
|
255
326
|
|
|
256
327
|
tarball_path = ""
|
|
328
|
+
workflow = None
|
|
329
|
+
wf_tarball = None
|
|
257
330
|
if os.path.exists(wf_path):
|
|
258
331
|
# Check to see if the wf_path is a tarball or a directory. Package if directory
|
|
259
332
|
if os.path.isdir(wf_path):
|
|
@@ -406,13 +479,13 @@ def package(wf_path: pathlib.Path = typer.Argument(...,
|
|
|
406
479
|
# Just use tar with subprocess. Python's tar library is not performant.
|
|
407
480
|
return_code = subprocess.run(['tar', '-C', parent_dir, '-czf', tarball, wf_dir],
|
|
408
481
|
check=True).returncode
|
|
409
|
-
package_path = package_dest.resolve()/tarball
|
|
482
|
+
package_path = package_dest.resolve()/tarball
|
|
410
483
|
|
|
411
484
|
# Get the curent working directory
|
|
412
485
|
cwd = pathlib.Path().absolute()
|
|
413
486
|
if package_dest != cwd:
|
|
414
487
|
# Move the tarball if the directory it's wanted in is not in the current working directory
|
|
415
|
-
tarball_path = cwd/tarball
|
|
488
|
+
tarball_path = cwd/tarball
|
|
416
489
|
shutil.move(tarball_path, package_path)
|
|
417
490
|
|
|
418
491
|
if return_code != 0:
|
|
@@ -515,25 +588,6 @@ def query(wf_id: str = typer.Argument(..., callback=match_short_id)):
|
|
|
515
588
|
return wf_status, tasks_status
|
|
516
589
|
|
|
517
590
|
|
|
518
|
-
@app.command()
|
|
519
|
-
def metadata(wf_id: str = typer.Argument(..., callback=match_short_id)):
|
|
520
|
-
"""Get metadata about a given workflow."""
|
|
521
|
-
try:
|
|
522
|
-
conn = _wfm_conn()
|
|
523
|
-
resp = conn.get(_resource(wf_id) + '/metadata', timeout=60)
|
|
524
|
-
except requests.exceptions.ConnectionError:
|
|
525
|
-
error_exit('Could not reach WF Manager.')
|
|
526
|
-
|
|
527
|
-
if resp.status_code != requests.codes.okay: # noqa (pylama doesn't know about the okay member)
|
|
528
|
-
error_exit('Could not successfully query workflow manager')
|
|
529
|
-
|
|
530
|
-
# Print and or return the metadata
|
|
531
|
-
data = resp.json()
|
|
532
|
-
for key, value in data.items():
|
|
533
|
-
typer.echo(f'{key} = {value}')
|
|
534
|
-
return data
|
|
535
|
-
|
|
536
|
-
|
|
537
591
|
@app.command()
|
|
538
592
|
def pause(wf_id: str = typer.Argument(..., callback=match_short_id)):
|
|
539
593
|
"""Pause a workflow (Running tasks will finish)."""
|
|
@@ -612,6 +666,7 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
|
|
|
612
666
|
help='working directory for workflow containing input + output files')
|
|
613
667
|
):
|
|
614
668
|
"""Reexecute an archived workflow."""
|
|
669
|
+
wf_tarball = None
|
|
615
670
|
if os.path.exists(wf_path):
|
|
616
671
|
wf_tarball = open(wf_path, 'rb')
|
|
617
672
|
else:
|
|
@@ -655,7 +710,7 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
|
|
|
655
710
|
except requests.exceptions.ConnectionError:
|
|
656
711
|
error_exit('Could not reach WF Manager.')
|
|
657
712
|
|
|
658
|
-
if resp.status_code != requests.codes.created: #
|
|
713
|
+
if resp.status_code != requests.codes.created: # pylint: disable=E1101
|
|
659
714
|
error_exit(f"Reexecute for {wf_name} failed. Please check the WF Manager.")
|
|
660
715
|
|
|
661
716
|
wf_id = resp.json()['wf_id']
|
|
@@ -684,19 +739,18 @@ def dag(wf_id: str = typer.Argument(..., callback=match_short_id),
|
|
|
684
739
|
# Check if the workflow is archived
|
|
685
740
|
wf_status = get_wf_status(wf_id)
|
|
686
741
|
if wf_status == 'Archived':
|
|
687
|
-
copy_dag_in_archive = False
|
|
688
742
|
bee_workdir = wf_utils.get_bee_workdir()
|
|
689
743
|
mount_dir = os.path.join(bee_workdir, 'gdb_mount')
|
|
690
744
|
graphmls_dir = mount_dir + '/graphmls'
|
|
691
745
|
typer.secho("Workflow has been archived. All new DAGs will look the same as the one "
|
|
692
746
|
"in the archive directory.",
|
|
693
747
|
fg=typer.colors.MAGENTA)
|
|
748
|
+
wf_utils.export_dag(wf_id, output_dir, graphmls_dir, no_dag_dir)
|
|
694
749
|
else:
|
|
695
|
-
copy_dag_in_archive = True
|
|
696
750
|
wf_dir = wf_utils.get_workflow_dir(wf_id)
|
|
697
751
|
graphmls_dir = wf_dir + '/graphmls'
|
|
698
752
|
os.makedirs(graphmls_dir, exist_ok=True)
|
|
699
|
-
|
|
753
|
+
wf_utils.export_dag(wf_id, output_dir, graphmls_dir, no_dag_dir, wf_dir)
|
|
700
754
|
typer.secho(f"DAG for workflow {_short_id(wf_id)} has been exported successfully.",
|
|
701
755
|
fg=typer.colors.GREEN)
|
|
702
756
|
|
|
@@ -720,8 +774,3 @@ def main():
|
|
|
720
774
|
|
|
721
775
|
if __name__ == "__main__":
|
|
722
776
|
app()
|
|
723
|
-
|
|
724
|
-
# Ignore W0511: This allows us to have TODOs in the code
|
|
725
|
-
# Ignore R1732: Significant code restructuring required to fix
|
|
726
|
-
# Ignore R1714: Not using a set instead
|
|
727
|
-
# pylama:ignore=W0511,R1732
|
|
@@ -9,7 +9,6 @@ services is specified using the appropriate flag(s) then ONLY those services
|
|
|
9
9
|
will be started.
|
|
10
10
|
"""
|
|
11
11
|
import os
|
|
12
|
-
import re
|
|
13
12
|
import signal
|
|
14
13
|
import subprocess
|
|
15
14
|
import socket
|
|
@@ -19,18 +18,18 @@ import datetime
|
|
|
19
18
|
import time
|
|
20
19
|
import importlib.metadata
|
|
21
20
|
from pathlib import Path
|
|
22
|
-
import packaging
|
|
23
21
|
|
|
24
22
|
import daemon
|
|
25
23
|
import typer
|
|
26
24
|
|
|
27
25
|
|
|
28
|
-
from beeflow.client import bee_client
|
|
26
|
+
from beeflow.client import bee_client # pylint: disable=R0401 #WIP
|
|
29
27
|
from beeflow.common.config_driver import BeeConfig as bc
|
|
30
28
|
from beeflow.common.config_driver import AlterConfig
|
|
31
29
|
from beeflow.common import cli_connection
|
|
32
30
|
from beeflow.common import paths
|
|
33
31
|
from beeflow.wf_manager.resources import wf_utils
|
|
32
|
+
import beeflow.common.worker.utils as worker_utils
|
|
34
33
|
|
|
35
34
|
from beeflow.common.deps import container_manager
|
|
36
35
|
from beeflow.common.deps import neo4j_manager
|
|
@@ -52,11 +51,7 @@ class ComponentManager:
|
|
|
52
51
|
"""Return a decorator function to be called."""
|
|
53
52
|
|
|
54
53
|
def wrap(fn):
|
|
55
|
-
"""
|
|
56
|
-
if bc.get('DEFAULT', 'remote_api') is False and 'remote_api' in name:
|
|
57
|
-
return
|
|
58
|
-
|
|
59
|
-
# Add the component to the list.
|
|
54
|
+
"""Add the component to the list."""
|
|
60
55
|
self.components[name] = {
|
|
61
56
|
'fn': fn,
|
|
62
57
|
'deps': deps,
|
|
@@ -112,7 +107,7 @@ class ComponentManager:
|
|
|
112
107
|
"""Poll each process to check for errors, restart failed processes."""
|
|
113
108
|
# Max number of times a component can be restarted
|
|
114
109
|
max_restarts = bc.get('DEFAULT', 'max_restarts')
|
|
115
|
-
for name in self.procs: #
|
|
110
|
+
for name in self.procs: # pylint: disable=C0206 # no need to iterate with items() since self.procs may be set
|
|
116
111
|
component = self.components[name]
|
|
117
112
|
if component['failed']:
|
|
118
113
|
continue
|
|
@@ -168,23 +163,7 @@ def need_slurmrestd():
|
|
|
168
163
|
and not bc.get('slurm', 'use_commands'))
|
|
169
164
|
|
|
170
165
|
|
|
171
|
-
def
|
|
172
|
-
"""Get the newest slurmrestd version."""
|
|
173
|
-
resp = subprocess.run(["slurmrestd", "-s", "list"], check=True, stderr=subprocess.PIPE,
|
|
174
|
-
text=True).stderr
|
|
175
|
-
resp = resp.split("\n")
|
|
176
|
-
# Confirm slurmrestd format is the same
|
|
177
|
-
# If the slurmrestd list outputs has changed potentially something else has broken
|
|
178
|
-
if "Possible OpenAPI plugins" not in resp[0]:
|
|
179
|
-
print("Slurmrestd OpenAPI format has changed and things may break")
|
|
180
|
-
api_versions = [line.split('/')[1] for line in resp[1:] if re.search(r"openapi/v\d+\.\d+\.\d+",
|
|
181
|
-
line)]
|
|
182
|
-
# Sort the versions and grab the newest one
|
|
183
|
-
newest_api = sorted(api_versions, key=packaging.version.Version, reverse=True)[0]
|
|
184
|
-
return newest_api
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
def init_components():
|
|
166
|
+
def init_components(remote=False):
|
|
188
167
|
"""Initialize the components and component manager."""
|
|
189
168
|
mgr = ComponentManager()
|
|
190
169
|
|
|
@@ -217,12 +196,13 @@ def init_components():
|
|
|
217
196
|
return launch_with_gunicorn('beeflow.scheduler.scheduler:create_app()',
|
|
218
197
|
paths.sched_socket(), stdout=fp, stderr=fp)
|
|
219
198
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
199
|
+
if remote:
|
|
200
|
+
@mgr.component('remote_api', ('wf_manager', 'task_manager'))
|
|
201
|
+
def start_remote_api():
|
|
202
|
+
"""Start the remote API."""
|
|
203
|
+
fp = open_log('remote_api')
|
|
204
|
+
return launch_with_gunicorn('beeflow.remote.remote:create_app()',
|
|
205
|
+
paths.remote_socket(), stdout=fp, stderr=fp)
|
|
226
206
|
|
|
227
207
|
@mgr.component('celery', ('redis',))
|
|
228
208
|
def celery():
|
|
@@ -265,16 +245,14 @@ def init_components():
|
|
|
265
245
|
"""Start BEESlurmRestD. Returns a Popen process object."""
|
|
266
246
|
bee_workdir = bc.get('DEFAULT', 'bee_workdir')
|
|
267
247
|
slurmrestd_log = '/'.join([bee_workdir, 'logs', 'restd.log'])
|
|
268
|
-
openapi_version =
|
|
269
|
-
|
|
270
|
-
# Detect the newest version of the slurmrestd API
|
|
271
|
-
openapi_version = get_slurmrestd_version()
|
|
248
|
+
openapi_version = worker_utils.get_slurmrestd_version()
|
|
249
|
+
print(f"Inferred slurmrestd version: {openapi_version}")
|
|
272
250
|
slurm_args = f'-s openapi/{openapi_version}'
|
|
273
251
|
# The following adds the db plugin we opted not to use for now
|
|
274
252
|
# slurm_args = f'-s openapi/{openapi_version},openapi/db{openapi_version}'
|
|
275
253
|
slurm_socket = paths.slurm_socket()
|
|
276
254
|
subprocess.run(['rm', '-f', slurm_socket], check=True)
|
|
277
|
-
fp = open(slurmrestd_log, 'w', encoding='utf-8') #
|
|
255
|
+
fp = open(slurmrestd_log, 'w', encoding='utf-8') # pylint: disable=R1732
|
|
278
256
|
cmd = ['slurmrestd']
|
|
279
257
|
cmd.extend(slurm_args.split())
|
|
280
258
|
cmd.append(f'unix:{slurm_socket}')
|
|
@@ -296,7 +274,7 @@ def load_check_charliecloud():
|
|
|
296
274
|
if not shutil.which('ch-run'):
|
|
297
275
|
lmod = os.environ.get('MODULESHOME')
|
|
298
276
|
sys.path.insert(0, lmod + '/init')
|
|
299
|
-
from env_modules_python import module #
|
|
277
|
+
from env_modules_python import module # pylint: disable=C0415 # No need to import at top
|
|
300
278
|
module("load", "charliecloud")
|
|
301
279
|
# Try loading the Charliecloud module then test again
|
|
302
280
|
if not shutil.which('ch-run'):
|
|
@@ -325,18 +303,29 @@ def load_check_charliecloud():
|
|
|
325
303
|
|
|
326
304
|
def check_dependencies(backend=False):
|
|
327
305
|
"""Check for various dependencies in the environment."""
|
|
328
|
-
#
|
|
306
|
+
# Note: Code block of lines 309-320 is for SLURM scheduler!
|
|
307
|
+
# Check if running on compute node under Slurm scheduler and --backend not specified
|
|
329
308
|
if not backend and os.environ.get('SLURM_JOB_NODELIST') is not None:
|
|
330
|
-
warn('Slurm job node detected! Beeflow should not be run on a compute node.')
|
|
309
|
+
warn('Slurm job node detected! Beeflow should not be run on a compute node. ')
|
|
331
310
|
warn(f'SLURM_JOB_NODELIST = {os.environ.get("SLURM_JOB_NODELIST")}')
|
|
311
|
+
bee_client.reset_client_db()
|
|
332
312
|
sys.exit(1)
|
|
313
|
+
# Check if running on front end with --backend flag specified
|
|
314
|
+
if backend and os.environ.get('SLURM_JOB_NODELIST') is None:
|
|
315
|
+
warn('Slurm node was not detected! Are you sure you are on a compute node? ')
|
|
316
|
+
warn("Please run 'beeflow core start' again without the --backend flag.")
|
|
317
|
+
bee_client.reset_client_db()
|
|
318
|
+
sys.exit(1)
|
|
319
|
+
|
|
320
|
+
# TO DO: Add checks when using Flux scheduler
|
|
321
|
+
|
|
333
322
|
print('Checking dependencies...')
|
|
334
323
|
# Check for Charliecloud and its version
|
|
335
324
|
load_check_charliecloud()
|
|
336
325
|
# Check for the flux API
|
|
337
326
|
if bc.get('DEFAULT', 'workload_scheduler') == 'Flux':
|
|
338
327
|
try:
|
|
339
|
-
import flux #
|
|
328
|
+
import flux # pylint: disable=W0611,C0415 # don't need to check whether flux api is actually installed
|
|
340
329
|
except ModuleNotFoundError:
|
|
341
330
|
warn('Failed to import flux Python API. Please make sure you can '
|
|
342
331
|
'use flux in your environment.')
|
|
@@ -390,7 +379,7 @@ class Beeflow:
|
|
|
390
379
|
|
|
391
380
|
def daemonize(mgr, base_components):
|
|
392
381
|
"""Start beeflow as a daemon, monitoring all processes."""
|
|
393
|
-
def handle_terminate(signum, stack): #
|
|
382
|
+
def handle_terminate(signum, stack): # pylint: disable=W0613
|
|
394
383
|
"""Handle a terminate signal."""
|
|
395
384
|
# Kill all subprocesses
|
|
396
385
|
mgr.kill()
|
|
@@ -413,19 +402,27 @@ app = typer.Typer(no_args_is_help=True)
|
|
|
413
402
|
@app.command()
|
|
414
403
|
def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
415
404
|
help='run in the foreground'), backend: bool = typer.Option(False, '--backend',
|
|
416
|
-
'-B', help='allow to run on a backend node')
|
|
405
|
+
'-B', help='allow to run on a backend node'), remote: bool = typer.Option(False,
|
|
406
|
+
'--remote', '-R', help='allow remote connection')):
|
|
417
407
|
"""Start all BEE components."""
|
|
418
408
|
start_hn = socket.gethostname() # hostname when beeflow starts
|
|
419
|
-
if bee_client.get_hostname() == "":
|
|
409
|
+
if bee_client.get_hostname() == "" and bee_client.check_backend_status() == "":
|
|
420
410
|
bee_client.setup_hostname(start_hn) # add to client db
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
411
|
+
else:
|
|
412
|
+
time.sleep(10) # giving Slurm time to relinquish compute node, if necessary
|
|
413
|
+
bee_client.check_db_flags(start_hn)
|
|
414
|
+
|
|
424
415
|
if backend: # allow beeflow to run on backend node
|
|
425
416
|
check_dependencies(backend=True)
|
|
417
|
+
bee_client.set_backend_status("true") # add flag to db
|
|
426
418
|
else:
|
|
427
419
|
check_dependencies()
|
|
428
|
-
|
|
420
|
+
|
|
421
|
+
if remote: # turn on REST API for remote connection
|
|
422
|
+
mgr = init_components(remote=True)
|
|
423
|
+
else:
|
|
424
|
+
mgr = init_components()
|
|
425
|
+
|
|
429
426
|
beeflow_log = paths.log_fname('beeflow')
|
|
430
427
|
sock_path = paths.beeflow_socket()
|
|
431
428
|
if bc.get('DEFAULT', 'workload_scheduler') == 'Slurm' and not need_slurmrestd():
|
|
@@ -470,9 +467,10 @@ def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
|
470
467
|
def status():
|
|
471
468
|
"""Check the status of beeflow and the components."""
|
|
472
469
|
status_hn = socket.gethostname() # hostname when beeflow core status returned
|
|
470
|
+
bee_client.check_hostname(status_hn)
|
|
473
471
|
resp = cli_connection.send(paths.beeflow_socket(), {'type': 'status'})
|
|
474
472
|
if resp is None:
|
|
475
|
-
bee_client.check_hostname(status_hn)
|
|
473
|
+
# bee_client.check_hostname(status_hn) # need to remove since checked in line 465?
|
|
476
474
|
sys.exit(1)
|
|
477
475
|
print('beeflow components:')
|
|
478
476
|
for comp, stat in resp['components'].items():
|
|
@@ -492,6 +490,7 @@ def info():
|
|
|
492
490
|
def stop(query='yes'):
|
|
493
491
|
"""Stop the current running beeflow daemon."""
|
|
494
492
|
stop_hn = socket.gethostname() # hostname when beeflow core stop returned
|
|
493
|
+
bee_client.check_hostname(stop_hn)
|
|
495
494
|
# Check workflow states; warn if there are active states, pause running workflows
|
|
496
495
|
workflow_list = bee_client.get_wf_list()
|
|
497
496
|
concern_states = {'Running', 'Initializing', 'Waiting'}
|
|
@@ -514,13 +513,13 @@ def stop(query='yes'):
|
|
|
514
513
|
bee_client.pause(wf_id)
|
|
515
514
|
resp = cli_connection.send(paths.beeflow_socket(), {'type': 'quit'})
|
|
516
515
|
if resp is None:
|
|
517
|
-
bee_client.check_hostname(stop_hn)
|
|
516
|
+
# bee_client.check_hostname(stop_hn) # need to remove since checked in line 487?
|
|
518
517
|
sys.exit(1)
|
|
519
518
|
# As long as it returned something, we should be good
|
|
520
519
|
beeflow_log = paths.log_fname('beeflow')
|
|
521
520
|
if query == "yes":
|
|
522
521
|
print(f'Beeflow has stopped. Check the log at "{beeflow_log}".')
|
|
523
|
-
bee_client.
|
|
522
|
+
bee_client.reset_client_db()
|
|
524
523
|
|
|
525
524
|
|
|
526
525
|
def archive_dir(dir_to_archive):
|
|
@@ -579,6 +578,7 @@ def reset(archive: bool = typer.Option(False, '--archive', '-a',
|
|
|
579
578
|
Shutdown beeflow and all BEE components.
|
|
580
579
|
Delete the bee_workdir directory which results in:
|
|
581
580
|
Removing the archive of all workflows.
|
|
581
|
+
(unless archives is configured elsewhere).
|
|
582
582
|
Removing the archive of workflow containers
|
|
583
583
|
(unless container_archive is configured elsewhere).
|
|
584
584
|
Reset all databases associated with the beeflow app.
|