hpc-beeflow 0.1.9.dev4__tar.gz → 0.1.10.dev1__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.9.dev4 → hpc_beeflow-0.1.10.dev1}/PKG-INFO +11 -5
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/README.rst +1 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/client/bee_client.py +190 -37
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/client/core.py +87 -20
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/config_driver.py +197 -98
- hpc_beeflow-0.1.10.dev1/beeflow/common/config_utils.py +42 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/config_validator.py +3 -1
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/crt/charliecloud_driver.py +19 -12
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cwl/cwl.py +136 -52
- hpc_beeflow-0.1.10.dev1/beeflow/common/cwl/examples/Dockerfile.comd-x86_64 +78 -0
- hpc_beeflow-0.1.10.dev1/beeflow/common/cwl/examples/README.txt +51 -0
- hpc_beeflow-0.1.10.dev1/beeflow/common/cwl/examples/cat_grep_tar.py +48 -0
- hpc_beeflow-0.1.10.dev1/beeflow/common/cwl/examples/comd.py +43 -0
- hpc_beeflow-0.1.10.dev1/beeflow/common/cwl/examples/comd_driver.py +82 -0
- hpc_beeflow-0.1.10.dev1/beeflow/common/cwl/workflow.py +172 -0
- hpc_beeflow-0.1.10.dev1/beeflow/common/db/client_db.py +67 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/deps/neo4j_manager.py +71 -31
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/gdb/gdb_driver.py +15 -1
- hpc_beeflow-0.1.10.dev1/beeflow/common/gdb/generate_graph.py +114 -0
- hpc_beeflow-0.1.10.dev1/beeflow/common/gdb/graphml_key_updater.py +71 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/gdb/neo4j_cypher.py +72 -13
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/gdb/neo4j_driver.py +21 -3
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/integration_test.py +2 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/paths.py +11 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/wf_interface.py +13 -2
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/worker/slurm_worker.py +20 -8
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/worker/utils.py +19 -0
- hpc_beeflow-0.1.10.dev1/beeflow/data/cwl/bee_workflows/cat-grep-fail/lorem.txt +49 -0
- hpc_beeflow-0.1.10.dev1/beeflow/data/dockerfiles/Dockerfile.neo4j +2 -0
- hpc_beeflow-0.1.10.dev1/beeflow/remote/remote.py +161 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/task_manager/utils.py +4 -2
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/mocks.py +8 -3
- hpc_beeflow-0.1.10.dev1/beeflow/tests/test_charliecloud_driver.py +70 -0
- hpc_beeflow-0.1.10.dev1/beeflow/tests/test_config_driver.py +166 -0
- hpc_beeflow-0.1.10.dev1/beeflow/tests/test_config_utils.py +114 -0
- hpc_beeflow-0.1.10.dev1/beeflow/tests/test_db_client.py +43 -0
- hpc_beeflow-0.1.10.dev1/beeflow/tests/test_neo4j_cypher.py +56 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_slurm_worker.py +10 -5
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_wf_interface.py +31 -14
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_wf_manager.py +1 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/wf_manager/resources/wf_actions.py +8 -1
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/wf_manager/resources/wf_list.py +12 -15
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/wf_manager/resources/wf_update.py +15 -5
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/wf_manager/resources/wf_utils.py +26 -14
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/wf_manager/wf_manager.py +0 -2
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/pyproject.toml +8 -4
- hpc_beeflow-0.1.9.dev4/beeflow/common/cwl/examples/cat_grep_tar_driver.py +0 -75
- hpc_beeflow-0.1.9.dev4/beeflow/common/cwl/examples/comd_driver.py +0 -50
- hpc_beeflow-0.1.9.dev4/beeflow/data/dockerfiles/Dockerfile.neo4j-ppc64le +0 -42
- hpc_beeflow-0.1.9.dev4/beeflow/wf_manager/resources/wf_metadata.py +0 -18
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/LICENSE +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/client/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/cloud_launcher.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/api.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/build/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/build/build_driver.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/build/container_drivers.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/build/utils.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/build_interfaces.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cli.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cli_connection.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cloud/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cloud/__init__.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cloud/chameleoncloud.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cloud/cloud.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cloud/constants.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cloud/google.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cloud/openstack.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/cloud/provider.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/connection.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/container_path.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/crt/crt_driver.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/crt/singularity_driver.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/crt_interface.py +0 -0
- {hpc_beeflow-0.1.9.dev4/beeflow/data/cwl/bee_workflows/cat-grep-fail → hpc_beeflow-0.1.10.dev1/beeflow/common/cwl/examples}/lorem.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/db/bdb.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/db/sched_db.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/db/tm_db.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/db/wfm_db.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/deps/celery_manager.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/deps/container_manager.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/deps/redis_manager.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/expr.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/gdb/DESIGN.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/integration/generated_workflows.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/integration/utils.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/log.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/parser/.gitignore +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/parser/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/parser/__init__.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/parser/parser.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/states.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/tab_completion.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/validation.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/wf_data.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/wf_profiler.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/worker/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/worker/__init__.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/worker/flux_worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/worker/lsf_worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/worker/simple_worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/worker/worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/common/worker_interface.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cloud_templates/dora.jinja +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cloud_templates/dora.yaml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/blast/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/blast/blast.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/blast/blast_output.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/blast/blast_output_err.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/blast/blast_split.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/blast/blast_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/blast/blast_worker001.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/blast/blast_worker002.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/blast/input/small.fasta +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/cat-grep-fail/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/cat-grep-fail/cat.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep0.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep1.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/cat-grep-fail/input.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/cat-grep-fail/tar.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/cat-grep-fail/workflow.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ci/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ci/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/post_run.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/pre_run.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/post_run.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/pre_run.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/cf-summit.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/Dockerfile.clamr-lanl-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-darwin.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-no-owrite.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/copyContainer_containerName.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerFile_containerName.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerPull.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/cf-singularity.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/nwchem-mpi/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem_bin.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant/graph.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant/pennant.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant/pennant_1_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant/pennant_2_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant/pennant_4_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant/pennant_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-graph-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/graph.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/pennant.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_1_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_2_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_4_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_8_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/pytest.ini +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/simple-workflows/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/simple-workflows/cancel.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc-nc.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/lorem.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/builder/dockerFile.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/builder/dockerPull.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/grep-wordcount/gc.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/grep-wordcount/lorem.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/helloworld.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/helloworld_input.yaml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/DAG_example-1.png +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_multiply_example_workflow.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_step1.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/isolated test.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/job.yaml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply_step2.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/workflow_generater_python.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_output.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_tool.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/expectedValue.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/hiring1.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regress_output.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regression.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/machinelearning_pipeline.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/out.PNG +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_code.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_tool.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset_tool.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/regress_tool.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.builder_demo +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.clamr-lanl-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.clamr-ppc64le +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.comd-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.deb9ompi-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.lulesh-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.nwchem-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.pennant-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/Dockerfile.vaspompi-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.comd-x86_64-wpmix +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.debian +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.openmpi-3.1.5 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/comd-pmix-support/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/comd-pmix-support/dont-init-ucx-on-intel-cray.patch +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/pennant-graph/Dockerfile.pennant-graph-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/scheduler/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/scheduler/algorithms.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/scheduler/resource_allocation.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/scheduler/scheduler.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/scheduler/scheduler.yaml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/scheduler/serializable.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/scheduler/task.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/task_manager/background.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/task_manager/task_actions.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/task_manager/task_manager.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/task_manager/task_submit.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/42.tgz +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/cf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/clamr-wf/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/clamr-wf/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/clamr-wf/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/clamr-wf/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/clamr-wf/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/clamr-wf/mv_script.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/clamr-wf/mv_script.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/clamr-wf.tgz +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/gdb.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_cloud.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_config_validator.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_container_path.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_db_sched.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_db_tm.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_parser.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_scheduler.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_scheduler_resource_allocation.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_scheduler_rest.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/tests/test_tm.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev1}/beeflow/wf_manager/common/wf_db.py +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hpc-beeflow
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.10.dev1
|
|
4
4
|
Summary: A software package for containerizing HPC applications and managing job workflows
|
|
5
5
|
Home-page: https://github.com/lanl/BEE
|
|
6
6
|
Keywords: bee,hpc,workflow,cluster,computing
|
|
7
7
|
Author: BEE-LANL Dev Team
|
|
8
8
|
Author-email: bee-dev@lanl.gov
|
|
9
|
-
Requires-Python: >=3.8.3,<=3.
|
|
9
|
+
Requires-Python: >=3.8.3,<=3.13.0
|
|
10
10
|
Classifier: Environment :: Console
|
|
11
11
|
Classifier: Environment :: OpenStack
|
|
12
12
|
Classifier: Environment :: Other Environment
|
|
@@ -19,7 +19,8 @@ Classifier: Programming Language :: Python :: 3
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.9
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
-
Classifier: Programming Language :: Python :: 3
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
24
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
24
25
|
Classifier: Topic :: Scientific/Engineering
|
|
25
26
|
Classifier: Topic :: System :: Clustering
|
|
@@ -34,17 +35,21 @@ Requires-Dist: celery[redis,sqlalchemy] (>=5.3.4,<6.0.0)
|
|
|
34
35
|
Requires-Dist: cffi (>=1.15.1,<2.0.0)
|
|
35
36
|
Requires-Dist: cwl-utils (>=0.16,<0.17)
|
|
36
37
|
Requires-Dist: docutils (==0.18.1)
|
|
38
|
+
Requires-Dist: fastapi (==0.109.2)
|
|
37
39
|
Requires-Dist: flask_restful (==0.3.9)
|
|
38
40
|
Requires-Dist: google-api-python-client (>=2.66.0,<3.0.0) ; extra == "cloud-extras"
|
|
41
|
+
Requires-Dist: graphviz (>=0.20.3,<0.21.0)
|
|
39
42
|
Requires-Dist: gunicorn (>=20.1,<23.0)
|
|
40
43
|
Requires-Dist: jsonpickle (>=2.2.0,<3.0.0)
|
|
41
44
|
Requires-Dist: neo4j (>=5,<6)
|
|
45
|
+
Requires-Dist: networkx (==3.1)
|
|
42
46
|
Requires-Dist: python-daemon (>=2.3.1,<3.0.0)
|
|
43
47
|
Requires-Dist: python-heatclient (>=3.1.0,<4.0.0) ; extra == "cloud-extras"
|
|
44
48
|
Requires-Dist: python-openstackclient (>=6.0.0,<7.0.0) ; extra == "cloud-extras"
|
|
45
|
-
Requires-Dist: requests (
|
|
46
|
-
Requires-Dist: requests-
|
|
49
|
+
Requires-Dist: requests (>=2.32.3,<3.0.0)
|
|
50
|
+
Requires-Dist: requests-unixsocket2 (>=0.4.2,<0.5.0)
|
|
47
51
|
Requires-Dist: typer (>=0.5.0,<0.6.0)
|
|
52
|
+
Requires-Dist: uvicorn (==0.27.1)
|
|
48
53
|
Project-URL: Repository, https://github.com/lanl/BEE
|
|
49
54
|
Description-Content-Type: text/x-rst
|
|
50
55
|
|
|
@@ -106,6 +111,7 @@ Contributors:
|
|
|
106
111
|
* Patricia Grubel - `pagrubel <https://github.com/pagrubel>`_
|
|
107
112
|
* Qiang Guan - `guanxyz <https://github.com/guanxyz>`_
|
|
108
113
|
* Ragini Gupta - `raginigupta6 <https://github.com/raginigupta6>`_
|
|
114
|
+
* Aaron R Hall - `arhall0 <https://github.com/arhall0>`_
|
|
109
115
|
* Leah Howell - `Leahh02 <https://github.com/Leahh02>`_
|
|
110
116
|
* Andres Quan - `aquan9 <https://github.com/aquan9>`_
|
|
111
117
|
* 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>`_
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""bee-client.
|
|
3
3
|
|
|
4
|
-
This script provides
|
|
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
7
|
import os
|
|
@@ -11,6 +11,8 @@ import inspect
|
|
|
11
11
|
import pathlib
|
|
12
12
|
import shutil
|
|
13
13
|
import subprocess
|
|
14
|
+
import getpass
|
|
15
|
+
import tarfile
|
|
14
16
|
import tempfile
|
|
15
17
|
import textwrap
|
|
16
18
|
import time
|
|
@@ -18,6 +20,7 @@ import importlib.metadata
|
|
|
18
20
|
import jsonpickle
|
|
19
21
|
import requests
|
|
20
22
|
import typer
|
|
23
|
+
import yaml
|
|
21
24
|
|
|
22
25
|
from beeflow.common import config_driver
|
|
23
26
|
from beeflow.common.cli import NaturalOrderGroup
|
|
@@ -27,6 +30,8 @@ from beeflow.common.parser import CwlParser
|
|
|
27
30
|
from beeflow.common.wf_data import generate_workflow_id
|
|
28
31
|
from beeflow.client import core
|
|
29
32
|
from beeflow.wf_manager.resources import wf_utils
|
|
33
|
+
from beeflow.common.db import client_db
|
|
34
|
+
from beeflow.common.db import bdb
|
|
30
35
|
|
|
31
36
|
# Length of a shortened workflow ID
|
|
32
37
|
short_id_len = 6 #noqa: Not a constant
|
|
@@ -39,6 +44,7 @@ _INTERACTIVE = False
|
|
|
39
44
|
|
|
40
45
|
|
|
41
46
|
logging.basicConfig(level=logging.WARNING)
|
|
47
|
+
logging.getLogger("neo4j").setLevel(logging.WARNING)
|
|
42
48
|
WORKFLOW_MANAGER = 'bee_wfm/v1/jobs/'
|
|
43
49
|
|
|
44
50
|
|
|
@@ -50,6 +56,104 @@ class ClientError(Exception):
|
|
|
50
56
|
self.args = args
|
|
51
57
|
|
|
52
58
|
|
|
59
|
+
def warn(*pargs):
|
|
60
|
+
"""Print a red warning message."""
|
|
61
|
+
typer.secho(' '.join(pargs), fg=typer.colors.RED, file=sys.stderr)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def db_path():
|
|
65
|
+
"""Return the client database path."""
|
|
66
|
+
bee_workdir = config_driver.BeeConfig.get('DEFAULT', 'bee_workdir')
|
|
67
|
+
return os.path.join(bee_workdir, 'client.db')
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def setup_hostname(start_hn):
|
|
71
|
+
"""Set up front end name when beeflow core start is returned."""
|
|
72
|
+
db = bdb.connect_db(client_db, db_path())
|
|
73
|
+
db.info.set_hostname(start_hn)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def get_hostname():
|
|
77
|
+
"""Check if beeflow is running somewhere else."""
|
|
78
|
+
db = bdb.connect_db(client_db, db_path())
|
|
79
|
+
curr_hn = db.info.get_hostname()
|
|
80
|
+
return curr_hn
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
def set_backend_status(new_status):
|
|
84
|
+
"""Set backend flag to true in database."""
|
|
85
|
+
db = bdb.connect_db(client_db, db_path())
|
|
86
|
+
db.info.set_backend_status(new_status)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def check_backend_status():
|
|
90
|
+
"""Check if backend flag has been set."""
|
|
91
|
+
db = bdb.connect_db(client_db, db_path())
|
|
92
|
+
status = db.info.get_backend_status()
|
|
93
|
+
return status
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def reset_client_db():
|
|
97
|
+
"""Reset client db when beeflow is stopped."""
|
|
98
|
+
setup_hostname("")
|
|
99
|
+
set_backend_status("")
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def check_backend_jobs(start_hn, command=False):
|
|
103
|
+
"""Check if there is an instance of beeflow running on a backend node."""
|
|
104
|
+
user_name = getpass.getuser()
|
|
105
|
+
cmd = ['squeue', '-u', f'{user_name}', '-o', '%N', '-h']
|
|
106
|
+
resp = subprocess.run(cmd, text=True, check=True, stdout=subprocess.PIPE)
|
|
107
|
+
|
|
108
|
+
# iterate through available nodes
|
|
109
|
+
data = resp.stdout.splitlines()
|
|
110
|
+
cur_alloc = False
|
|
111
|
+
if get_hostname() in data:
|
|
112
|
+
cur_alloc = True
|
|
113
|
+
|
|
114
|
+
if cur_alloc:
|
|
115
|
+
if command:
|
|
116
|
+
warn(f'beeflow was started on "{get_hostname()}" and you are trying to '
|
|
117
|
+
f'run a command on "{start_hn}".')
|
|
118
|
+
sys.exit(1)
|
|
119
|
+
else:
|
|
120
|
+
warn(f'beeflow was started on compute node "{get_hostname()}" '
|
|
121
|
+
'and it is still running. ')
|
|
122
|
+
sys.exit(1)
|
|
123
|
+
else: # beeflow was started on compute node but user no longer owns node
|
|
124
|
+
if command:
|
|
125
|
+
warn('beeflow has not been started!')
|
|
126
|
+
sys.exit(1)
|
|
127
|
+
else:
|
|
128
|
+
warn('beeflow was started on a compute node (no longer owned by user) and '
|
|
129
|
+
'not stopped correctly. ')
|
|
130
|
+
warn("Resetting client database.")
|
|
131
|
+
reset_client_db()
|
|
132
|
+
setup_hostname(start_hn) # add to client db
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def check_db_flags(start_hn):
|
|
136
|
+
"""Check that beeflow was stopped correctly during the last run."""
|
|
137
|
+
if get_hostname() and get_hostname() != start_hn and check_backend_status() == "":
|
|
138
|
+
warn(f'Error: beeflow is already running on "{get_hostname()}".')
|
|
139
|
+
sys.exit(1)
|
|
140
|
+
if get_hostname() and get_hostname() != start_hn and check_backend_status() == "true":
|
|
141
|
+
check_backend_jobs(start_hn)
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def check_hostname(curr_hn):
|
|
145
|
+
"""Check current front end name matches the one beeflow was started on."""
|
|
146
|
+
if get_hostname() and curr_hn != get_hostname() and check_backend_status() == "":
|
|
147
|
+
warn(f'beeflow was started on "{get_hostname()}" and you are trying to '
|
|
148
|
+
f'run a command on "{curr_hn}".')
|
|
149
|
+
sys.exit(1)
|
|
150
|
+
elif get_hostname() and curr_hn != get_hostname() and check_backend_status() == "true":
|
|
151
|
+
check_backend_jobs(curr_hn, command=True)
|
|
152
|
+
if get_hostname() == "" and check_backend_status() == "":
|
|
153
|
+
warn('beeflow has not been started!')
|
|
154
|
+
sys.exit(1)
|
|
155
|
+
|
|
156
|
+
|
|
53
157
|
def error_exit(msg, include_caller=True):
|
|
54
158
|
"""Print a message and exit or raise an error with that message."""
|
|
55
159
|
if include_caller:
|
|
@@ -112,7 +216,11 @@ def get_wf_list():
|
|
|
112
216
|
conn = _wfm_conn()
|
|
113
217
|
resp = conn.get(_url(), timeout=60)
|
|
114
218
|
except requests.exceptions.ConnectionError:
|
|
115
|
-
|
|
219
|
+
if get_hostname() == "":
|
|
220
|
+
warn('beeflow has not been started!')
|
|
221
|
+
sys.exit(1)
|
|
222
|
+
else:
|
|
223
|
+
error_exit('Could not reach WF Manager.')
|
|
116
224
|
|
|
117
225
|
if resp.status_code != requests.codes.okay: # pylint: disable=no-member
|
|
118
226
|
error_exit('WF Manager did not return workflow list')
|
|
@@ -192,7 +300,7 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
192
300
|
main_cwl: str = typer.Argument(...,
|
|
193
301
|
help='filename of main CWL (if using CWL tarball), '
|
|
194
302
|
+ 'path of main CWL (if using CWL directory)'),
|
|
195
|
-
|
|
303
|
+
yaml_file: str = typer.Argument(...,
|
|
196
304
|
help='filename of yaml file (if using CWL tarball), '
|
|
197
305
|
+ 'path of yaml file (if using CWL directory)'),
|
|
198
306
|
workdir: pathlib.Path = typer.Argument(...,
|
|
@@ -215,16 +323,17 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
215
323
|
if os.path.isdir(wf_path):
|
|
216
324
|
print("Detected directory instead of packaged workflow. Packaging Directory...")
|
|
217
325
|
main_cwl_path = pathlib.Path(main_cwl).resolve()
|
|
218
|
-
yaml_path = pathlib.Path(
|
|
326
|
+
yaml_path = pathlib.Path(yaml_file).resolve()
|
|
219
327
|
|
|
220
328
|
if not main_cwl_path.exists():
|
|
221
329
|
error_exit(f'Main CWL file {main_cwl} does not exist')
|
|
222
330
|
if not yaml_path.exists():
|
|
223
|
-
error_exit(f'YAML file {
|
|
331
|
+
error_exit(f'YAML file {yaml_file} does not exist')
|
|
224
332
|
|
|
225
333
|
# Packaging in temp dir, after copying alternate cwl_main or yaml file
|
|
226
334
|
cwl_indir = is_parent(wf_path, main_cwl_path)
|
|
227
335
|
yaml_indir = is_parent(wf_path, yaml_path)
|
|
336
|
+
|
|
228
337
|
# Always create temp dir for the workflow
|
|
229
338
|
tempdir_path = pathlib.Path(tempfile.mkdtemp())
|
|
230
339
|
tempdir_wf_path = pathlib.Path(tempdir_path / wf_name)
|
|
@@ -232,15 +341,16 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
232
341
|
if not cwl_indir:
|
|
233
342
|
shutil.copy2(main_cwl, tempdir_wf_path)
|
|
234
343
|
if not yaml_indir:
|
|
235
|
-
shutil.copy2(
|
|
344
|
+
shutil.copy2(yaml_file, tempdir_wf_path)
|
|
236
345
|
package_path = package(tempdir_wf_path, tempdir_path)
|
|
237
346
|
else:
|
|
238
347
|
package_path = wf_path
|
|
348
|
+
|
|
239
349
|
# Untar and parse workflow
|
|
240
350
|
untar_path = pathlib.Path(tempfile.mkdtemp())
|
|
241
351
|
untar_wf_path = unpackage(package_path, untar_path)
|
|
242
352
|
main_cwl_path = untar_wf_path / pathlib.Path(main_cwl).name
|
|
243
|
-
yaml_path = untar_wf_path / pathlib.Path(
|
|
353
|
+
yaml_path = untar_wf_path / pathlib.Path(yaml_file).name
|
|
244
354
|
parser = CwlParser()
|
|
245
355
|
workflow_id = generate_workflow_id()
|
|
246
356
|
workflow, tasks = parser.parse_workflow(workflow_id, str(main_cwl_path),
|
|
@@ -304,16 +414,19 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
304
414
|
|
|
305
415
|
# Store provided arguments in text file for future reference
|
|
306
416
|
wf_dir = wf_utils.get_workflow_dir(wf_id)
|
|
307
|
-
sub_wf_dir = wf_dir + "/submit_command_args.
|
|
417
|
+
sub_wf_dir = wf_dir + "/submit_command_args.yaml"
|
|
308
418
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
419
|
+
cmd = {
|
|
420
|
+
'wf_name': wf_name,
|
|
421
|
+
'wf_path': str(wf_path),
|
|
422
|
+
'main_cwl': main_cwl,
|
|
423
|
+
'yaml': yaml_file,
|
|
424
|
+
'workdir': workdir,
|
|
425
|
+
'wf_id': wf_id
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
with open(sub_wf_dir, "w", encoding='utf-8') as command_file:
|
|
429
|
+
yaml.dump(cmd, command_file)
|
|
317
430
|
|
|
318
431
|
return wf_id
|
|
319
432
|
|
|
@@ -457,31 +570,15 @@ def query(wf_id: str = typer.Argument(..., callback=match_short_id)):
|
|
|
457
570
|
wf_status = resp.json()['wf_status']
|
|
458
571
|
typer.echo(wf_status)
|
|
459
572
|
for _task_id, task_name, task_state in tasks_status:
|
|
460
|
-
|
|
573
|
+
if wf_status == 'No Start':
|
|
574
|
+
typer.echo(f'{task_name}')
|
|
575
|
+
else:
|
|
576
|
+
typer.echo(f'{task_name}--{task_state}')
|
|
461
577
|
|
|
462
578
|
logging.info('Query workflow: {resp.text}')
|
|
463
579
|
return wf_status, tasks_status
|
|
464
580
|
|
|
465
581
|
|
|
466
|
-
@app.command()
|
|
467
|
-
def metadata(wf_id: str = typer.Argument(..., callback=match_short_id)):
|
|
468
|
-
"""Get metadata about a given workflow."""
|
|
469
|
-
try:
|
|
470
|
-
conn = _wfm_conn()
|
|
471
|
-
resp = conn.get(_resource(wf_id) + '/metadata', timeout=60)
|
|
472
|
-
except requests.exceptions.ConnectionError:
|
|
473
|
-
error_exit('Could not reach WF Manager.')
|
|
474
|
-
|
|
475
|
-
if resp.status_code != requests.codes.okay: # noqa (pylama doesn't know about the okay member)
|
|
476
|
-
error_exit('Could not successfully query workflow manager')
|
|
477
|
-
|
|
478
|
-
# Print and or return the metadata
|
|
479
|
-
data = resp.json()
|
|
480
|
-
for key, value in data.items():
|
|
481
|
-
typer.echo(f'{key} = {value}')
|
|
482
|
-
return data
|
|
483
|
-
|
|
484
|
-
|
|
485
582
|
@app.command()
|
|
486
583
|
def pause(wf_id: str = typer.Argument(..., callback=match_short_id)):
|
|
487
584
|
"""Pause a workflow (Running tasks will finish)."""
|
|
@@ -518,7 +615,7 @@ def cancel(wf_id: str = typer.Argument(..., callback=match_short_id)):
|
|
|
518
615
|
"""Cancel a paused or running workflow."""
|
|
519
616
|
long_wf_id = wf_id
|
|
520
617
|
wf_status = get_wf_status(wf_id)
|
|
521
|
-
if wf_status in ('Running', 'Paused'):
|
|
618
|
+
if wf_status in ('Running', 'Paused', 'No Start'):
|
|
522
619
|
try:
|
|
523
620
|
conn = _wfm_conn()
|
|
524
621
|
resp = conn.delete(_resource(long_wf_id), json={'option': 'cancel'}, timeout=60)
|
|
@@ -570,6 +667,26 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
|
|
|
570
667
|
workdir = os.path.abspath(workdir)
|
|
571
668
|
if not os.path.exists(workdir):
|
|
572
669
|
error_exit(f"Workflow working directory \"{workdir}\" doesn't exist")
|
|
670
|
+
cwl_path = pathlib.Path(tempfile.mkdtemp())
|
|
671
|
+
archive_id = str(wf_path.stem)
|
|
672
|
+
with tarfile.open(wf_path) as archive:
|
|
673
|
+
archive_cmd = yaml.load(archive.extractfile(
|
|
674
|
+
str(pathlib.Path(archive_id) / 'submit_command_args.yaml')).read(),
|
|
675
|
+
Loader=yaml.Loader)
|
|
676
|
+
|
|
677
|
+
cwl_files = [
|
|
678
|
+
tarinfo for tarinfo in archive.getmembers()
|
|
679
|
+
if tarinfo.name.startswith(archive_id + '/cwl_files/')
|
|
680
|
+
and tarinfo.isreg()
|
|
681
|
+
]
|
|
682
|
+
for path in cwl_files:
|
|
683
|
+
path.name = os.path.basename(path.name)
|
|
684
|
+
archive.extractall(path=cwl_path, members=cwl_files)
|
|
685
|
+
|
|
686
|
+
main_cwl = cwl_path / pathlib.Path(archive_cmd['main_cwl']).name
|
|
687
|
+
yaml_file = cwl_path / pathlib.Path(archive_cmd['yaml']).name
|
|
688
|
+
|
|
689
|
+
return submit(wf_name, pathlib.Path(cwl_path), main_cwl, yaml_file, pathlib.Path(workdir))
|
|
573
690
|
|
|
574
691
|
data = {
|
|
575
692
|
'wf_filename': os.path.basename(wf_path).encode(),
|
|
@@ -593,6 +710,42 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
|
|
|
593
710
|
return wf_id
|
|
594
711
|
|
|
595
712
|
|
|
713
|
+
@app.command()
|
|
714
|
+
def dag(wf_id: str = typer.Argument(..., callback=match_short_id),
|
|
715
|
+
output_dir: pathlib.Path = typer.Argument(...,
|
|
716
|
+
help='Path to the where the dag output will be'),
|
|
717
|
+
no_dag_dir: bool = typer.Option(False, '--no-dag-dir',
|
|
718
|
+
help='do not make a subdirectory within ouput_dir for the dags')):
|
|
719
|
+
"""Export a DAG of the workflow to a GraphML file."""
|
|
720
|
+
output_dir = output_dir.resolve()
|
|
721
|
+
# Make sure output_dir is an absolute path and exists
|
|
722
|
+
output_dir = os.path.expanduser(output_dir)
|
|
723
|
+
output_dir = os.path.abspath(output_dir)
|
|
724
|
+
if not os.path.exists(output_dir):
|
|
725
|
+
error_exit(f"Path for dag directory \"{output_dir}\" doesn't exist")
|
|
726
|
+
|
|
727
|
+
# output_dir must be a string
|
|
728
|
+
output_dir = str(output_dir)
|
|
729
|
+
# Check if the workflow is archived
|
|
730
|
+
wf_status = get_wf_status(wf_id)
|
|
731
|
+
if wf_status == 'Archived':
|
|
732
|
+
copy_dag_in_archive = False
|
|
733
|
+
bee_workdir = wf_utils.get_bee_workdir()
|
|
734
|
+
mount_dir = os.path.join(bee_workdir, 'gdb_mount')
|
|
735
|
+
graphmls_dir = mount_dir + '/graphmls'
|
|
736
|
+
typer.secho("Workflow has been archived. All new DAGs will look the same as the one "
|
|
737
|
+
"in the archive directory.",
|
|
738
|
+
fg=typer.colors.MAGENTA)
|
|
739
|
+
else:
|
|
740
|
+
copy_dag_in_archive = True
|
|
741
|
+
wf_dir = wf_utils.get_workflow_dir(wf_id)
|
|
742
|
+
graphmls_dir = wf_dir + '/graphmls'
|
|
743
|
+
os.makedirs(graphmls_dir, exist_ok=True)
|
|
744
|
+
wf_utils.export_dag(wf_id, output_dir, graphmls_dir, no_dag_dir, copy_dag_in_archive)
|
|
745
|
+
typer.secho(f"DAG for workflow {_short_id(wf_id)} has been exported successfully.",
|
|
746
|
+
fg=typer.colors.GREEN)
|
|
747
|
+
|
|
748
|
+
|
|
596
749
|
@app.callback(invoke_without_command=True)
|
|
597
750
|
def version_callback(version: bool = False):
|
|
598
751
|
"""Beeflow."""
|
|
@@ -17,21 +17,28 @@ import shutil
|
|
|
17
17
|
import datetime
|
|
18
18
|
import time
|
|
19
19
|
import importlib.metadata
|
|
20
|
+
from pathlib import Path
|
|
20
21
|
|
|
21
22
|
import daemon
|
|
22
23
|
import typer
|
|
23
24
|
|
|
25
|
+
|
|
24
26
|
from beeflow.client import bee_client
|
|
25
27
|
from beeflow.common.config_driver import BeeConfig as bc
|
|
28
|
+
from beeflow.common.config_driver import AlterConfig
|
|
26
29
|
from beeflow.common import cli_connection
|
|
27
30
|
from beeflow.common import paths
|
|
28
31
|
from beeflow.wf_manager.resources import wf_utils
|
|
32
|
+
import beeflow.common.worker.utils as worker_utils
|
|
29
33
|
|
|
30
34
|
from beeflow.common.deps import container_manager
|
|
31
35
|
from beeflow.common.deps import neo4j_manager
|
|
32
36
|
from beeflow.common.deps import redis_manager
|
|
33
37
|
|
|
34
38
|
|
|
39
|
+
REPO_PATH = Path(*Path(__file__).parts[:-3])
|
|
40
|
+
|
|
41
|
+
|
|
35
42
|
class ComponentManager:
|
|
36
43
|
"""Component manager class."""
|
|
37
44
|
|
|
@@ -44,7 +51,11 @@ class ComponentManager:
|
|
|
44
51
|
"""Return a decorator function to be called."""
|
|
45
52
|
|
|
46
53
|
def wrap(fn):
|
|
47
|
-
"""
|
|
54
|
+
"""Check to see if any components are disabled."""
|
|
55
|
+
if bc.get('DEFAULT', 'remote_api') is False and 'remote_api' in name:
|
|
56
|
+
return
|
|
57
|
+
|
|
58
|
+
# Add the component to the list.
|
|
48
59
|
self.components[name] = {
|
|
49
60
|
'fn': fn,
|
|
50
61
|
'deps': deps,
|
|
@@ -189,6 +200,13 @@ def init_components():
|
|
|
189
200
|
return launch_with_gunicorn('beeflow.scheduler.scheduler:create_app()',
|
|
190
201
|
paths.sched_socket(), stdout=fp, stderr=fp)
|
|
191
202
|
|
|
203
|
+
@mgr.component('remote_api', ('wf_manager', 'task_manager'))
|
|
204
|
+
def start_remote_api():
|
|
205
|
+
"""Start the remote API."""
|
|
206
|
+
fp = open_log('remote_api')
|
|
207
|
+
return launch_with_gunicorn('beeflow.remote.remote:create_app()',
|
|
208
|
+
paths.remote_socket(), stdout=fp, stderr=fp)
|
|
209
|
+
|
|
192
210
|
@mgr.component('celery', ('redis',))
|
|
193
211
|
def celery():
|
|
194
212
|
"""Start the celery task queue."""
|
|
@@ -230,7 +248,8 @@ def init_components():
|
|
|
230
248
|
"""Start BEESlurmRestD. Returns a Popen process object."""
|
|
231
249
|
bee_workdir = bc.get('DEFAULT', 'bee_workdir')
|
|
232
250
|
slurmrestd_log = '/'.join([bee_workdir, 'logs', 'restd.log'])
|
|
233
|
-
openapi_version =
|
|
251
|
+
openapi_version = worker_utils.get_slurmrestd_version()
|
|
252
|
+
print(f"Inferred slurmrestd version: {openapi_version}")
|
|
234
253
|
slurm_args = f'-s openapi/{openapi_version}'
|
|
235
254
|
# The following adds the db plugin we opted not to use for now
|
|
236
255
|
# slurm_args = f'-s openapi/{openapi_version},openapi/db{openapi_version}'
|
|
@@ -285,8 +304,24 @@ def load_check_charliecloud():
|
|
|
285
304
|
sys.exit(1)
|
|
286
305
|
|
|
287
306
|
|
|
288
|
-
def check_dependencies():
|
|
307
|
+
def check_dependencies(backend=False):
|
|
289
308
|
"""Check for various dependencies in the environment."""
|
|
309
|
+
# Note: Code block of lines 309-320 is for SLURM scheduler!
|
|
310
|
+
# Check if running on compute node under Slurm scheduler and --backend not specified
|
|
311
|
+
if not backend and os.environ.get('SLURM_JOB_NODELIST') is not None:
|
|
312
|
+
warn('Slurm job node detected! Beeflow should not be run on a compute node. ')
|
|
313
|
+
warn(f'SLURM_JOB_NODELIST = {os.environ.get("SLURM_JOB_NODELIST")}')
|
|
314
|
+
bee_client.reset_client_db()
|
|
315
|
+
sys.exit(1)
|
|
316
|
+
# Check if running on front end with --backend flag specified
|
|
317
|
+
if backend and os.environ.get('SLURM_JOB_NODELIST') is None:
|
|
318
|
+
warn('Slurm node was not detected! Are you sure you are on a compute node? ')
|
|
319
|
+
warn("Please run 'beeflow core start' again without the --backend flag.")
|
|
320
|
+
bee_client.reset_client_db()
|
|
321
|
+
sys.exit(1)
|
|
322
|
+
|
|
323
|
+
# TO DO: Add checks when using Flux scheduler
|
|
324
|
+
|
|
290
325
|
print('Checking dependencies...')
|
|
291
326
|
# Check for Charliecloud and its version
|
|
292
327
|
load_check_charliecloud()
|
|
@@ -369,9 +404,21 @@ app = typer.Typer(no_args_is_help=True)
|
|
|
369
404
|
|
|
370
405
|
@app.command()
|
|
371
406
|
def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
372
|
-
help='run in the foreground')
|
|
407
|
+
help='run in the foreground'), backend: bool = typer.Option(False, '--backend',
|
|
408
|
+
'-B', help='allow to run on a backend node')):
|
|
373
409
|
"""Start all BEE components."""
|
|
374
|
-
|
|
410
|
+
start_hn = socket.gethostname() # hostname when beeflow starts
|
|
411
|
+
if bee_client.get_hostname() == "" and bee_client.check_backend_status() == "":
|
|
412
|
+
bee_client.setup_hostname(start_hn) # add to client db
|
|
413
|
+
else:
|
|
414
|
+
time.sleep(10) # giving Slurm time to relinquish compute node, if necessary
|
|
415
|
+
bee_client.check_db_flags(start_hn)
|
|
416
|
+
|
|
417
|
+
if backend: # allow beeflow to run on backend node
|
|
418
|
+
check_dependencies(backend=True)
|
|
419
|
+
bee_client.set_backend_status("true") # add flag to db
|
|
420
|
+
else:
|
|
421
|
+
check_dependencies()
|
|
375
422
|
mgr = init_components()
|
|
376
423
|
beeflow_log = paths.log_fname('beeflow')
|
|
377
424
|
sock_path = paths.beeflow_socket()
|
|
@@ -397,6 +444,7 @@ def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
|
397
444
|
|
|
398
445
|
version = importlib.metadata.version("hpc-beeflow")
|
|
399
446
|
print(f'Starting beeflow {version}...')
|
|
447
|
+
print(f'Running beeflow on {start_hn}')
|
|
400
448
|
if not foreground:
|
|
401
449
|
print('Run `beeflow core status` for more information.')
|
|
402
450
|
# Create the log path if it doesn't exist yet
|
|
@@ -415,20 +463,31 @@ def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
|
415
463
|
@app.command()
|
|
416
464
|
def status():
|
|
417
465
|
"""Check the status of beeflow and the components."""
|
|
466
|
+
status_hn = socket.gethostname() # hostname when beeflow core status returned
|
|
467
|
+
bee_client.check_hostname(status_hn)
|
|
418
468
|
resp = cli_connection.send(paths.beeflow_socket(), {'type': 'status'})
|
|
419
469
|
if resp is None:
|
|
420
|
-
|
|
421
|
-
warn('Cannot connect to the beeflow daemon, is it running? Check the '
|
|
422
|
-
f'log at "{beeflow_log}".')
|
|
470
|
+
# bee_client.check_hostname(status_hn) # need to remove since checked in line 465?
|
|
423
471
|
sys.exit(1)
|
|
424
472
|
print('beeflow components:')
|
|
425
473
|
for comp, stat in resp['components'].items():
|
|
426
474
|
print(f'{comp} ... {stat}')
|
|
427
475
|
|
|
428
476
|
|
|
477
|
+
@app.command()
|
|
478
|
+
def info():
|
|
479
|
+
"""Get information about beeflow's installation."""
|
|
480
|
+
version = importlib.metadata.version("hpc-beeflow")
|
|
481
|
+
print(f"Beeflow version: {version}")
|
|
482
|
+
print(f"bee_workflow directory: {paths.workdir()}")
|
|
483
|
+
print(f"Log path: {paths.log_path()}")
|
|
484
|
+
|
|
485
|
+
|
|
429
486
|
@app.command()
|
|
430
487
|
def stop(query='yes'):
|
|
431
488
|
"""Stop the current running beeflow daemon."""
|
|
489
|
+
stop_hn = socket.gethostname() # hostname when beeflow core stop returned
|
|
490
|
+
bee_client.check_hostname(stop_hn)
|
|
432
491
|
# Check workflow states; warn if there are active states, pause running workflows
|
|
433
492
|
workflow_list = bee_client.get_wf_list()
|
|
434
493
|
concern_states = {'Running', 'Initializing', 'Waiting'}
|
|
@@ -451,15 +510,13 @@ def stop(query='yes'):
|
|
|
451
510
|
bee_client.pause(wf_id)
|
|
452
511
|
resp = cli_connection.send(paths.beeflow_socket(), {'type': 'quit'})
|
|
453
512
|
if resp is None:
|
|
454
|
-
|
|
455
|
-
warn('Error: beeflow is not running on this system. It could be '
|
|
456
|
-
'running on a different front end.\n'
|
|
457
|
-
f' Check the beeflow log: "{beeflow_log}".')
|
|
513
|
+
# bee_client.check_hostname(stop_hn) # need to remove since checked in line 487?
|
|
458
514
|
sys.exit(1)
|
|
459
515
|
# As long as it returned something, we should be good
|
|
460
516
|
beeflow_log = paths.log_fname('beeflow')
|
|
461
517
|
if query == "yes":
|
|
462
518
|
print(f'Beeflow has stopped. Check the log at "{beeflow_log}".')
|
|
519
|
+
bee_client.reset_client_db()
|
|
463
520
|
|
|
464
521
|
|
|
465
522
|
def archive_dir(dir_to_archive):
|
|
@@ -496,6 +553,8 @@ def reset(archive: bool = typer.Option(False, '--archive', '-a',
|
|
|
496
553
|
help='Archive bee_workdir before removal')):
|
|
497
554
|
"""Stop all components and delete the bee_workdir directory."""
|
|
498
555
|
# Check workflow states; warn if there are active states.
|
|
556
|
+
reset_hn = socket.gethostname()
|
|
557
|
+
bee_client.check_hostname(reset_hn)
|
|
499
558
|
workflow_list = bee_client.get_wf_list()
|
|
500
559
|
active_states = {'Running', 'Paused', 'Initializing', 'Waiting'}
|
|
501
560
|
caution = ""
|
|
@@ -516,6 +575,7 @@ def reset(archive: bool = typer.Option(False, '--archive', '-a',
|
|
|
516
575
|
Shutdown beeflow and all BEE components.
|
|
517
576
|
Delete the bee_workdir directory which results in:
|
|
518
577
|
Removing the archive of all workflows.
|
|
578
|
+
(unless archives is configured elsewhere).
|
|
519
579
|
Removing the archive of workflow containers
|
|
520
580
|
(unless container_archive is configured elsewhere).
|
|
521
581
|
Reset all databases associated with the beeflow app.
|
|
@@ -563,19 +623,26 @@ def pull_to_tar(ref, tarball):
|
|
|
563
623
|
subprocess.check_call(['ch-convert', '-i', 'ch-image', '-o', 'tar', ref, tarball])
|
|
564
624
|
|
|
565
625
|
|
|
626
|
+
def build_to_tar(tag, dockerfile, tarball):
|
|
627
|
+
"""Build a container from a Dockerfile and convert to tarball."""
|
|
628
|
+
subprocess.check_call(['ch-image', 'build', '-t', tag, '-f', dockerfile, '.'])
|
|
629
|
+
subprocess.check_call(['ch-convert', '-i', 'ch-image', '-o', 'tar', tag, tarball])
|
|
630
|
+
|
|
631
|
+
|
|
566
632
|
@app.command()
|
|
567
633
|
def pull_deps(outdir: str = typer.Option('.', '--outdir', '-o',
|
|
568
634
|
help='directory to store containers in')):
|
|
569
635
|
"""Pull required BEE containers and store in outdir."""
|
|
570
636
|
load_check_charliecloud()
|
|
571
637
|
neo4j_path = os.path.join(os.path.realpath(outdir), 'neo4j.tar.gz')
|
|
572
|
-
|
|
638
|
+
neo4j_dockerfile = str(Path(REPO_PATH, "beeflow/data/dockerfiles/Dockerfile.neo4j"))
|
|
639
|
+
build_to_tar('neo4j_image', neo4j_dockerfile, neo4j_path)
|
|
573
640
|
redis_path = os.path.join(os.path.realpath(outdir), 'redis.tar.gz')
|
|
574
641
|
pull_to_tar('redis', redis_path)
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
642
|
+
|
|
643
|
+
AlterConfig(changes={'DEFAULT': {'neo4j_image': neo4j_path,
|
|
644
|
+
'redis_image': redis_path}}).save()
|
|
645
|
+
|
|
646
|
+
dep_dir = container_manager.get_dep_dir()
|
|
647
|
+
if os.path.isdir(dep_dir):
|
|
648
|
+
shutil.rmtree(dep_dir)
|