hpc-beeflow 0.1.9.dev4__tar.gz → 0.1.10.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.
Files changed (300) hide show
  1. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/PKG-INFO +7 -3
  2. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/client/bee_client.py +127 -18
  3. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/client/core.py +89 -19
  4. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/config_driver.py +120 -47
  5. hpc_beeflow-0.1.10.dev0/beeflow/common/config_utils.py +42 -0
  6. hpc_beeflow-0.1.10.dev0/beeflow/common/db/client_db.py +57 -0
  7. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/deps/neo4j_manager.py +71 -31
  8. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/gdb/gdb_driver.py +5 -1
  9. hpc_beeflow-0.1.10.dev0/beeflow/common/gdb/generate_graph.py +114 -0
  10. hpc_beeflow-0.1.10.dev0/beeflow/common/gdb/graphml_key_updater.py +71 -0
  11. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/gdb/neo4j_cypher.py +20 -4
  12. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/gdb/neo4j_driver.py +10 -3
  13. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/integration_test.py +2 -0
  14. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/paths.py +11 -0
  15. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/wf_interface.py +6 -2
  16. hpc_beeflow-0.1.10.dev0/beeflow/data/dockerfiles/Dockerfile.neo4j +2 -0
  17. hpc_beeflow-0.1.10.dev0/beeflow/remote/remote.py +161 -0
  18. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/mocks.py +8 -3
  19. hpc_beeflow-0.1.10.dev0/beeflow/tests/test_config_driver.py +105 -0
  20. hpc_beeflow-0.1.10.dev0/beeflow/tests/test_config_utils.py +114 -0
  21. hpc_beeflow-0.1.10.dev0/beeflow/tests/test_db_client.py +37 -0
  22. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_wf_interface.py +31 -14
  23. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_wf_manager.py +1 -0
  24. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_actions.py +3 -0
  25. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_list.py +9 -13
  26. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_update.py +6 -0
  27. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_utils.py +26 -14
  28. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/pyproject.toml +7 -3
  29. hpc_beeflow-0.1.9.dev4/beeflow/data/dockerfiles/Dockerfile.neo4j-ppc64le +0 -42
  30. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/LICENSE +0 -0
  31. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/README.rst +0 -0
  32. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/client/README.md +0 -0
  33. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/cloud_launcher.py +0 -0
  34. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/README.md +0 -0
  35. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/api.py +0 -0
  36. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build/README.md +0 -0
  37. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build/build_driver.py +0 -0
  38. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build/container_drivers.py +0 -0
  39. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build/utils.py +0 -0
  40. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build_interfaces.py +0 -0
  41. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cli.py +0 -0
  42. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cli_connection.py +0 -0
  43. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/README.md +0 -0
  44. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/__init__.py +0 -0
  45. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/chameleoncloud.py +0 -0
  46. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/cloud.py +0 -0
  47. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/constants.py +0 -0
  48. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/google.py +0 -0
  49. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/openstack.py +0 -0
  50. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/provider.py +0 -0
  51. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/config_validator.py +0 -0
  52. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/connection.py +0 -0
  53. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/container_path.py +0 -0
  54. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/crt/charliecloud_driver.py +0 -0
  55. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/crt/crt_driver.py +0 -0
  56. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/crt/singularity_driver.py +0 -0
  57. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/crt_interface.py +0 -0
  58. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cwl/cwl.py +0 -0
  59. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cwl/examples/cat_grep_tar_driver.py +0 -0
  60. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cwl/examples/comd_driver.py +0 -0
  61. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/db/bdb.py +0 -0
  62. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/db/sched_db.py +0 -0
  63. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/db/tm_db.py +0 -0
  64. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/db/wfm_db.py +0 -0
  65. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/deps/celery_manager.py +0 -0
  66. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/deps/container_manager.py +0 -0
  67. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/deps/redis_manager.py +0 -0
  68. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/expr.py +0 -0
  69. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/gdb/DESIGN.md +0 -0
  70. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/integration/generated_workflows.py +0 -0
  71. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/integration/utils.py +0 -0
  72. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/log.py +0 -0
  73. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/parser/.gitignore +0 -0
  74. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/parser/README.md +0 -0
  75. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/parser/__init__.py +0 -0
  76. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/parser/parser.py +0 -0
  77. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/states.py +0 -0
  78. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/tab_completion.py +0 -0
  79. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/validation.py +0 -0
  80. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/wf_data.py +0 -0
  81. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/wf_profiler.py +0 -0
  82. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/README.md +0 -0
  83. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/__init__.py +0 -0
  84. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/flux_worker.py +0 -0
  85. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/lsf_worker.py +0 -0
  86. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/simple_worker.py +0 -0
  87. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/slurm_worker.py +0 -0
  88. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/utils.py +0 -0
  89. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/worker.py +0 -0
  90. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker_interface.py +0 -0
  91. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cloud_templates/dora.jinja +0 -0
  92. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cloud_templates/dora.yaml +0 -0
  93. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/README.md +0 -0
  94. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/README.md +0 -0
  95. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/README.md +0 -0
  96. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast.yml +0 -0
  97. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_output.cwl +0 -0
  98. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_output_err.cwl +0 -0
  99. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_split.cwl +0 -0
  100. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_wf.cwl +0 -0
  101. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_worker001.cwl +0 -0
  102. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_worker002.cwl +0 -0
  103. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/input/small.fasta +0 -0
  104. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/README.md +0 -0
  105. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/cat.cwl +0 -0
  106. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep0.cwl +0 -0
  107. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep1.cwl +0 -0
  108. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/input.yml +0 -0
  109. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/lorem.txt +0 -0
  110. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/tar.cwl +0 -0
  111. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/workflow.cwl +0 -0
  112. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/README.md +0 -0
  113. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr.cwl +0 -0
  114. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.json +0 -0
  115. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.yml +0 -0
  116. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_wf.cwl +0 -0
  117. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/ffmpeg.cwl +0 -0
  118. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/Dockerfile.clamr-ffmpeg +0 -0
  119. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/README.md +0 -0
  120. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr.cwl +0 -0
  121. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.json +0 -0
  122. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.yml +0 -0
  123. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_wf.cwl +0 -0
  124. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/ffmpeg.cwl +0 -0
  125. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/post_run.sh +0 -0
  126. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/pre_run.sh +0 -0
  127. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/Dockerfile.clamr-ffmpeg +0 -0
  128. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/README.md +0 -0
  129. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr.cwl +0 -0
  130. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.json +0 -0
  131. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.yml +0 -0
  132. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_wf.cwl +0 -0
  133. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/ffmpeg.cwl +0 -0
  134. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/post_run.sh +0 -0
  135. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/pre_run.sh +0 -0
  136. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/README.md +0 -0
  137. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr.cwl +0 -0
  138. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.json +0 -0
  139. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.yml +0 -0
  140. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_wf.cwl +0 -0
  141. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/ffmpeg.cwl +0 -0
  142. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/README.md +0 -0
  143. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr.cwl +0 -0
  144. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.json +0 -0
  145. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.yml +0 -0
  146. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_wf.cwl +0 -0
  147. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/ffmpeg.cwl +0 -0
  148. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/README.md +0 -0
  149. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/README.md +0 -0
  150. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/cf-summit.cwl +0 -0
  151. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/Dockerfile.clamr-lanl-x86_64 +0 -0
  152. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/README.md +0 -0
  153. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-darwin.cwl +0 -0
  154. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-no-owrite.cwl +0 -0
  155. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf.cwl +0 -0
  156. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/copyContainer_containerName.cwl +0 -0
  157. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerFile_containerName.cwl +0 -0
  158. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerPull.cwl +0 -0
  159. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/README.md +0 -0
  160. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/cf-singularity.cwl +0 -0
  161. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/README.md +0 -0
  162. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr.cwl +0 -0
  163. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.json +0 -0
  164. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.yml +0 -0
  165. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_wf.cwl +0 -0
  166. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/ffmpeg.cwl +0 -0
  167. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/README.md +0 -0
  168. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr.cwl +0 -0
  169. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.json +0 -0
  170. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.yml +0 -0
  171. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_wf.cwl +0 -0
  172. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/ffmpeg.cwl +0 -0
  173. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/README.md +0 -0
  174. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr.cwl +0 -0
  175. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.json +0 -0
  176. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.yml +0 -0
  177. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_wf.cwl +0 -0
  178. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/ffmpeg.cwl +0 -0
  179. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.cwl +0 -0
  180. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.yml +0 -0
  181. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh.cwl +0 -0
  182. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_job.yml +0 -0
  183. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_wf.cwl +0 -0
  184. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/README.md +0 -0
  185. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.cwl +0 -0
  186. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.yml +0 -0
  187. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem_bin.cwl +0 -0
  188. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/graph.cwl +0 -0
  189. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant.yml +0 -0
  190. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_1_node.cwl +0 -0
  191. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_2_node.cwl +0 -0
  192. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_4_node.cwl +0 -0
  193. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_wf.cwl +0 -0
  194. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-flux-x86_64 +0 -0
  195. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-graph-x86_64 +0 -0
  196. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph.cwl +0 -0
  197. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.py +0 -0
  198. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.sh +0 -0
  199. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant.yml +0 -0
  200. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_1_node.cwl +0 -0
  201. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_2_node.cwl +0 -0
  202. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_4_node.cwl +0 -0
  203. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_8_node.cwl +0 -0
  204. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_wf.cwl +0 -0
  205. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pytest.ini +0 -0
  206. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/README.md +0 -0
  207. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/cancel.cwl +0 -0
  208. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/README.md +0 -0
  209. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc-nc.cwl +0 -0
  210. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc.cwl +0 -0
  211. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/lorem.txt +0 -0
  212. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/README.md +0 -0
  213. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/builder/dockerFile.cwl +0 -0
  214. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/builder/dockerPull.cwl +0 -0
  215. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/grep-wordcount/gc.cwl +0 -0
  216. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/grep-wordcount/lorem.txt +0 -0
  217. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/helloworld.cwl +0 -0
  218. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/helloworld_input.yaml +0 -0
  219. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/DAG_example-1.png +0 -0
  220. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/README.md +0 -0
  221. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add.cwl +0 -0
  222. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_multiply_example_workflow.cwl +0 -0
  223. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_step1.py +0 -0
  224. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/isolated test.cwl +0 -0
  225. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/job.yaml +0 -0
  226. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply.cwl +0 -0
  227. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply_step2.py +0 -0
  228. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/workflow_generater_python.py +0 -0
  229. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/README.md +0 -0
  230. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree.py +0 -0
  231. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_output.txt +0 -0
  232. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_tool.cwl +0 -0
  233. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/expectedValue.txt +0 -0
  234. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/hiring1.txt +0 -0
  235. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regress_output.txt +0 -0
  236. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regression.py +0 -0
  237. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/machinelearning_pipeline.cwl +0 -0
  238. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/out.PNG +0 -0
  239. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_code.py +0 -0
  240. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_tool.cwl +0 -0
  241. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset.py +0 -0
  242. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset_tool.cwl +0 -0
  243. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/regress_tool.cwl +0 -0
  244. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.builder_demo +0 -0
  245. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-ffmpeg +0 -0
  246. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-lanl-x86_64 +0 -0
  247. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-ppc64le +0 -0
  248. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.comd-flux-x86_64 +0 -0
  249. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.deb9ompi-x86_64 +0 -0
  250. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.lulesh-x86_64 +0 -0
  251. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.nwchem-x86_64 +0 -0
  252. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.pennant-flux-x86_64 +0 -0
  253. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.vaspompi-x86_64 +0 -0
  254. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/README.md +0 -0
  255. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.comd-x86_64-wpmix +0 -0
  256. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.debian +0 -0
  257. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.openmpi-3.1.5 +0 -0
  258. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/README.md +0 -0
  259. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/dont-init-ucx-on-intel-cray.patch +0 -0
  260. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/pennant-graph/Dockerfile.pennant-graph-x86_64 +0 -0
  261. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.py +0 -0
  262. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.sh +0 -0
  263. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/README.md +0 -0
  264. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/algorithms.py +0 -0
  265. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/resource_allocation.py +0 -0
  266. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/scheduler.py +0 -0
  267. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/scheduler.yaml +0 -0
  268. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/serializable.py +0 -0
  269. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/task.py +0 -0
  270. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/background.py +0 -0
  271. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/task_actions.py +0 -0
  272. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/task_manager.py +0 -0
  273. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/task_submit.py +0 -0
  274. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/utils.py +0 -0
  275. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/42.tgz +0 -0
  276. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/README.md +0 -0
  277. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/cf.cwl +0 -0
  278. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/clamr.cwl +0 -0
  279. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/clamr_job.json +0 -0
  280. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/clamr_job.yml +0 -0
  281. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/clamr_wf.cwl +0 -0
  282. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/ffmpeg.cwl +0 -0
  283. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/mv_script.cwl +0 -0
  284. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/mv_script.sh +0 -0
  285. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf.tgz +0 -0
  286. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/gdb.py +0 -0
  287. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_cloud.py +0 -0
  288. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_config_validator.py +0 -0
  289. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_container_path.py +0 -0
  290. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_db_sched.py +0 -0
  291. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_db_tm.py +0 -0
  292. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_parser.py +0 -0
  293. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_scheduler.py +0 -0
  294. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_scheduler_resource_allocation.py +0 -0
  295. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_scheduler_rest.py +0 -0
  296. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_slurm_worker.py +0 -0
  297. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_tm.py +0 -0
  298. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/common/wf_db.py +0 -0
  299. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_metadata.py +0 -0
  300. {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/wf_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hpc-beeflow
3
- Version: 0.1.9.dev4
3
+ Version: 0.1.10.dev0
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
@@ -34,17 +34,21 @@ 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.109.2)
37
38
  Requires-Dist: flask_restful (==0.3.9)
38
39
  Requires-Dist: google-api-python-client (>=2.66.0,<3.0.0) ; extra == "cloud-extras"
40
+ Requires-Dist: graphviz (>=0.20.3,<0.21.0)
39
41
  Requires-Dist: gunicorn (>=20.1,<23.0)
40
42
  Requires-Dist: jsonpickle (>=2.2.0,<3.0.0)
41
43
  Requires-Dist: neo4j (>=5,<6)
44
+ Requires-Dist: networkx (==3.1)
42
45
  Requires-Dist: python-daemon (>=2.3.1,<3.0.0)
43
46
  Requires-Dist: python-heatclient (>=3.1.0,<4.0.0) ; extra == "cloud-extras"
44
47
  Requires-Dist: python-openstackclient (>=6.0.0,<7.0.0) ; extra == "cloud-extras"
45
- Requires-Dist: requests (<2.29.0)
46
- Requires-Dist: requests-unixsocket (>=0.3.0,<0.4.0)
48
+ Requires-Dist: requests (>=2.32.3,<3.0.0)
49
+ Requires-Dist: requests-unixsocket2 (>=0.4.2,<0.5.0)
47
50
  Requires-Dist: typer (>=0.5.0,<0.6.0)
51
+ Requires-Dist: uvicorn (==0.27.1)
48
52
  Project-URL: Repository, https://github.com/lanl/BEE
49
53
  Description-Content-Type: text/x-rst
50
54
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """bee-client.
3
3
 
4
- This script provides an client interface to the user to manage workflows.
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,7 @@ import inspect
11
11
  import pathlib
12
12
  import shutil
13
13
  import subprocess
14
+ import tarfile
14
15
  import tempfile
15
16
  import textwrap
16
17
  import time
@@ -18,6 +19,7 @@ import importlib.metadata
18
19
  import jsonpickle
19
20
  import requests
20
21
  import typer
22
+ import yaml
21
23
 
22
24
  from beeflow.common import config_driver
23
25
  from beeflow.common.cli import NaturalOrderGroup
@@ -27,6 +29,8 @@ from beeflow.common.parser import CwlParser
27
29
  from beeflow.common.wf_data import generate_workflow_id
28
30
  from beeflow.client import core
29
31
  from beeflow.wf_manager.resources import wf_utils
32
+ from beeflow.common.db import client_db
33
+ from beeflow.common.db import bdb
30
34
 
31
35
  # Length of a shortened workflow ID
32
36
  short_id_len = 6 #noqa: Not a constant
@@ -39,6 +43,7 @@ _INTERACTIVE = False
39
43
 
40
44
 
41
45
  logging.basicConfig(level=logging.WARNING)
46
+ logging.getLogger("neo4j").setLevel(logging.WARNING)
42
47
  WORKFLOW_MANAGER = 'bee_wfm/v1/jobs/'
43
48
 
44
49
 
@@ -50,6 +55,41 @@ class ClientError(Exception):
50
55
  self.args = args
51
56
 
52
57
 
58
+ def warn(*pargs):
59
+ """Print a red warning message."""
60
+ typer.secho(' '.join(pargs), fg=typer.colors.RED, file=sys.stderr)
61
+
62
+
63
+ def db_path():
64
+ """Return the client database path."""
65
+ bee_workdir = config_driver.BeeConfig.get('DEFAULT', 'bee_workdir')
66
+ return os.path.join(bee_workdir, 'client.db')
67
+
68
+
69
+ def setup_hostname(start_hn):
70
+ """Set up front end name when beeflow core start is returned."""
71
+ db = bdb.connect_db(client_db, db_path())
72
+ db.info.set_hostname(start_hn)
73
+
74
+
75
+ def get_hostname():
76
+ """Check if beeflow is running somewhere else."""
77
+ db = bdb.connect_db(client_db, db_path())
78
+ curr_hn = db.info.get_hostname()
79
+ return curr_hn
80
+
81
+
82
+ def check_hostname(curr_hn):
83
+ """Check current front end name matches the one beeflow was started on."""
84
+ db = bdb.connect_db(client_db, db_path())
85
+ start_hn = db.info.get_hostname()
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 '
88
+ f'run a command on "{curr_hn}".')
89
+ if start_hn == "":
90
+ warn('beeflow has not been started!')
91
+
92
+
53
93
  def error_exit(msg, include_caller=True):
54
94
  """Print a message and exit or raise an error with that message."""
55
95
  if include_caller:
@@ -112,7 +152,11 @@ def get_wf_list():
112
152
  conn = _wfm_conn()
113
153
  resp = conn.get(_url(), timeout=60)
114
154
  except requests.exceptions.ConnectionError:
115
- error_exit('Could not reach WF Manager.')
155
+ if get_hostname() == "":
156
+ warn('beeflow has not been started!')
157
+ sys.exit(1)
158
+ else:
159
+ error_exit('Could not reach WF Manager.')
116
160
 
117
161
  if resp.status_code != requests.codes.okay: # pylint: disable=no-member
118
162
  error_exit('WF Manager did not return workflow list')
@@ -192,7 +236,7 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
192
236
  main_cwl: str = typer.Argument(...,
193
237
  help='filename of main CWL (if using CWL tarball), '
194
238
  + 'path of main CWL (if using CWL directory)'),
195
- yaml: str = typer.Argument(...,
239
+ yaml_file: str = typer.Argument(...,
196
240
  help='filename of yaml file (if using CWL tarball), '
197
241
  + 'path of yaml file (if using CWL directory)'),
198
242
  workdir: pathlib.Path = typer.Argument(...,
@@ -215,16 +259,17 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
215
259
  if os.path.isdir(wf_path):
216
260
  print("Detected directory instead of packaged workflow. Packaging Directory...")
217
261
  main_cwl_path = pathlib.Path(main_cwl).resolve()
218
- yaml_path = pathlib.Path(yaml).resolve()
262
+ yaml_path = pathlib.Path(yaml_file).resolve()
219
263
 
220
264
  if not main_cwl_path.exists():
221
265
  error_exit(f'Main CWL file {main_cwl} does not exist')
222
266
  if not yaml_path.exists():
223
- error_exit(f'YAML file {yaml} does not exist')
267
+ error_exit(f'YAML file {yaml_file} does not exist')
224
268
 
225
269
  # Packaging in temp dir, after copying alternate cwl_main or yaml file
226
270
  cwl_indir = is_parent(wf_path, main_cwl_path)
227
271
  yaml_indir = is_parent(wf_path, yaml_path)
272
+
228
273
  # Always create temp dir for the workflow
229
274
  tempdir_path = pathlib.Path(tempfile.mkdtemp())
230
275
  tempdir_wf_path = pathlib.Path(tempdir_path / wf_name)
@@ -232,15 +277,16 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
232
277
  if not cwl_indir:
233
278
  shutil.copy2(main_cwl, tempdir_wf_path)
234
279
  if not yaml_indir:
235
- shutil.copy2(yaml, tempdir_wf_path)
280
+ shutil.copy2(yaml_file, tempdir_wf_path)
236
281
  package_path = package(tempdir_wf_path, tempdir_path)
237
282
  else:
238
283
  package_path = wf_path
284
+
239
285
  # Untar and parse workflow
240
286
  untar_path = pathlib.Path(tempfile.mkdtemp())
241
287
  untar_wf_path = unpackage(package_path, untar_path)
242
288
  main_cwl_path = untar_wf_path / pathlib.Path(main_cwl).name
243
- yaml_path = untar_wf_path / pathlib.Path(yaml).name
289
+ yaml_path = untar_wf_path / pathlib.Path(yaml_file).name
244
290
  parser = CwlParser()
245
291
  workflow_id = generate_workflow_id()
246
292
  workflow, tasks = parser.parse_workflow(workflow_id, str(main_cwl_path),
@@ -304,16 +350,19 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
304
350
 
305
351
  # Store provided arguments in text file for future reference
306
352
  wf_dir = wf_utils.get_workflow_dir(wf_id)
307
- sub_wf_dir = wf_dir + "/submit_command_args.txt"
353
+ sub_wf_dir = wf_dir + "/submit_command_args.yaml"
354
+
355
+ cmd = {
356
+ 'wf_name': wf_name,
357
+ 'wf_path': str(wf_path),
358
+ 'main_cwl': main_cwl,
359
+ 'yaml': yaml_file,
360
+ 'workdir': workdir,
361
+ 'wf_id': wf_id
362
+ }
308
363
 
309
- f_name = open(sub_wf_dir, "w", encoding="utf-8")
310
- f_name.write(f"wf_name: {wf_name}\n")
311
- f_name.write(f"wf_path: {wf_path}\n")
312
- f_name.write(f"main_cwl: {main_cwl}\n")
313
- f_name.write(f"yaml: {yaml}\n")
314
- f_name.write(f"workdir: {workdir}\n")
315
- f_name.write(f"wf_id: {wf_id}")
316
- f_name.close()
364
+ with open(sub_wf_dir, "w", encoding='utf-8') as command_file:
365
+ yaml.dump(cmd, command_file)
317
366
 
318
367
  return wf_id
319
368
 
@@ -457,7 +506,10 @@ def query(wf_id: str = typer.Argument(..., callback=match_short_id)):
457
506
  wf_status = resp.json()['wf_status']
458
507
  typer.echo(wf_status)
459
508
  for _task_id, task_name, task_state in tasks_status:
460
- typer.echo(f'{task_name}--{task_state}')
509
+ if wf_status == 'No Start':
510
+ typer.echo(f'{task_name}')
511
+ else:
512
+ typer.echo(f'{task_name}--{task_state}')
461
513
 
462
514
  logging.info('Query workflow: {resp.text}')
463
515
  return wf_status, tasks_status
@@ -518,7 +570,7 @@ def cancel(wf_id: str = typer.Argument(..., callback=match_short_id)):
518
570
  """Cancel a paused or running workflow."""
519
571
  long_wf_id = wf_id
520
572
  wf_status = get_wf_status(wf_id)
521
- if wf_status in ('Running', 'Paused'):
573
+ if wf_status in ('Running', 'Paused', 'No Start'):
522
574
  try:
523
575
  conn = _wfm_conn()
524
576
  resp = conn.delete(_resource(long_wf_id), json={'option': 'cancel'}, timeout=60)
@@ -570,6 +622,26 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
570
622
  workdir = os.path.abspath(workdir)
571
623
  if not os.path.exists(workdir):
572
624
  error_exit(f"Workflow working directory \"{workdir}\" doesn't exist")
625
+ cwl_path = pathlib.Path(tempfile.mkdtemp())
626
+ archive_id = str(wf_path.stem)
627
+ with tarfile.open(wf_path) as archive:
628
+ archive_cmd = yaml.load(archive.extractfile(
629
+ str(pathlib.Path(archive_id) / 'submit_command_args.yaml')).read(),
630
+ Loader=yaml.Loader)
631
+
632
+ cwl_files = [
633
+ tarinfo for tarinfo in archive.getmembers()
634
+ if tarinfo.name.startswith(archive_id + '/cwl_files/')
635
+ and tarinfo.isreg()
636
+ ]
637
+ for path in cwl_files:
638
+ path.name = os.path.basename(path.name)
639
+ archive.extractall(path=cwl_path, members=cwl_files)
640
+
641
+ main_cwl = cwl_path / pathlib.Path(archive_cmd['main_cwl']).name
642
+ yaml_file = cwl_path / pathlib.Path(archive_cmd['yaml']).name
643
+
644
+ return submit(wf_name, pathlib.Path(cwl_path), main_cwl, yaml_file, pathlib.Path(workdir))
573
645
 
574
646
  data = {
575
647
  'wf_filename': os.path.basename(wf_path).encode(),
@@ -593,6 +665,42 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
593
665
  return wf_id
594
666
 
595
667
 
668
+ @app.command()
669
+ def dag(wf_id: str = typer.Argument(..., callback=match_short_id),
670
+ output_dir: pathlib.Path = typer.Argument(...,
671
+ help='Path to the where the dag output will be'),
672
+ no_dag_dir: bool = typer.Option(False, '--no-dag-dir',
673
+ help='do not make a subdirectory within ouput_dir for the dags')):
674
+ """Export a DAG of the workflow to a GraphML file."""
675
+ output_dir = output_dir.resolve()
676
+ # Make sure output_dir is an absolute path and exists
677
+ output_dir = os.path.expanduser(output_dir)
678
+ output_dir = os.path.abspath(output_dir)
679
+ if not os.path.exists(output_dir):
680
+ error_exit(f"Path for dag directory \"{output_dir}\" doesn't exist")
681
+
682
+ # output_dir must be a string
683
+ output_dir = str(output_dir)
684
+ # Check if the workflow is archived
685
+ wf_status = get_wf_status(wf_id)
686
+ if wf_status == 'Archived':
687
+ copy_dag_in_archive = False
688
+ bee_workdir = wf_utils.get_bee_workdir()
689
+ mount_dir = os.path.join(bee_workdir, 'gdb_mount')
690
+ graphmls_dir = mount_dir + '/graphmls'
691
+ typer.secho("Workflow has been archived. All new DAGs will look the same as the one "
692
+ "in the archive directory.",
693
+ fg=typer.colors.MAGENTA)
694
+ else:
695
+ copy_dag_in_archive = True
696
+ wf_dir = wf_utils.get_workflow_dir(wf_id)
697
+ graphmls_dir = wf_dir + '/graphmls'
698
+ os.makedirs(graphmls_dir, exist_ok=True)
699
+ wf_utils.export_dag(wf_id, output_dir, graphmls_dir, no_dag_dir, copy_dag_in_archive)
700
+ typer.secho(f"DAG for workflow {_short_id(wf_id)} has been exported successfully.",
701
+ fg=typer.colors.GREEN)
702
+
703
+
596
704
  @app.callback(invoke_without_command=True)
597
705
  def version_callback(version: bool = False):
598
706
  """Beeflow."""
@@ -615,4 +723,5 @@ if __name__ == "__main__":
615
723
 
616
724
  # Ignore W0511: This allows us to have TODOs in the code
617
725
  # Ignore R1732: Significant code restructuring required to fix
726
+ # Ignore R1714: Not using a set instead
618
727
  # pylama:ignore=W0511,R1732
@@ -9,6 +9,7 @@ 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
12
13
  import signal
13
14
  import subprocess
14
15
  import socket
@@ -17,12 +18,16 @@ import shutil
17
18
  import datetime
18
19
  import time
19
20
  import importlib.metadata
21
+ from pathlib import Path
22
+ import packaging
20
23
 
21
24
  import daemon
22
25
  import typer
23
26
 
27
+
24
28
  from beeflow.client import bee_client
25
29
  from beeflow.common.config_driver import BeeConfig as bc
30
+ from beeflow.common.config_driver import AlterConfig
26
31
  from beeflow.common import cli_connection
27
32
  from beeflow.common import paths
28
33
  from beeflow.wf_manager.resources import wf_utils
@@ -32,6 +37,9 @@ from beeflow.common.deps import neo4j_manager
32
37
  from beeflow.common.deps import redis_manager
33
38
 
34
39
 
40
+ REPO_PATH = Path(*Path(__file__).parts[:-3])
41
+
42
+
35
43
  class ComponentManager:
36
44
  """Component manager class."""
37
45
 
@@ -44,7 +52,11 @@ class ComponentManager:
44
52
  """Return a decorator function to be called."""
45
53
 
46
54
  def wrap(fn):
47
- """Add the component to the list."""
55
+ """Check to see if any components are disabled."""
56
+ if bc.get('DEFAULT', 'remote_api') is False and 'remote_api' in name:
57
+ return
58
+
59
+ # Add the component to the list.
48
60
  self.components[name] = {
49
61
  'fn': fn,
50
62
  'deps': deps,
@@ -156,6 +168,22 @@ def need_slurmrestd():
156
168
  and not bc.get('slurm', 'use_commands'))
157
169
 
158
170
 
171
+ def get_slurmrestd_version():
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
+
159
187
  def init_components():
160
188
  """Initialize the components and component manager."""
161
189
  mgr = ComponentManager()
@@ -189,6 +217,13 @@ def init_components():
189
217
  return launch_with_gunicorn('beeflow.scheduler.scheduler:create_app()',
190
218
  paths.sched_socket(), stdout=fp, stderr=fp)
191
219
 
220
+ @mgr.component('remote_api', ('wf_manager', 'task_manager'))
221
+ def start_remote_api():
222
+ """Start the remote API."""
223
+ fp = open_log('remote_api')
224
+ return launch_with_gunicorn('beeflow.remote.remote:create_app()',
225
+ paths.remote_socket(), stdout=fp, stderr=fp)
226
+
192
227
  @mgr.component('celery', ('redis',))
193
228
  def celery():
194
229
  """Start the celery task queue."""
@@ -231,6 +266,9 @@ def init_components():
231
266
  bee_workdir = bc.get('DEFAULT', 'bee_workdir')
232
267
  slurmrestd_log = '/'.join([bee_workdir, 'logs', 'restd.log'])
233
268
  openapi_version = bc.get('slurm', 'openapi_version')
269
+ if not openapi_version:
270
+ # Detect the newest version of the slurmrestd API
271
+ openapi_version = get_slurmrestd_version()
234
272
  slurm_args = f'-s openapi/{openapi_version}'
235
273
  # The following adds the db plugin we opted not to use for now
236
274
  # slurm_args = f'-s openapi/{openapi_version},openapi/db{openapi_version}'
@@ -285,8 +323,13 @@ def load_check_charliecloud():
285
323
  sys.exit(1)
286
324
 
287
325
 
288
- def check_dependencies():
326
+ def check_dependencies(backend=False):
289
327
  """Check for various dependencies in the environment."""
328
+ # Check if running on compute node under Slurm scheduler
329
+ 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.')
331
+ warn(f'SLURM_JOB_NODELIST = {os.environ.get("SLURM_JOB_NODELIST")}')
332
+ sys.exit(1)
290
333
  print('Checking dependencies...')
291
334
  # Check for Charliecloud and its version
292
335
  load_check_charliecloud()
@@ -369,9 +412,19 @@ app = typer.Typer(no_args_is_help=True)
369
412
 
370
413
  @app.command()
371
414
  def start(foreground: bool = typer.Option(False, '--foreground', '-F',
372
- help='run in the foreground')):
415
+ help='run in the foreground'), backend: bool = typer.Option(False, '--backend',
416
+ '-B', help='allow to run on a backend node')):
373
417
  """Start all BEE components."""
374
- check_dependencies()
418
+ start_hn = socket.gethostname() # hostname when beeflow starts
419
+ if bee_client.get_hostname() == "":
420
+ bee_client.setup_hostname(start_hn) # add to client db
421
+ elif bee_client.get_hostname() != start_hn:
422
+ warn(f'Error: beeflow is already running on "{bee_client.get_hostname()}."')
423
+ sys.exit(1)
424
+ if backend: # allow beeflow to run on backend node
425
+ check_dependencies(backend=True)
426
+ else:
427
+ check_dependencies()
375
428
  mgr = init_components()
376
429
  beeflow_log = paths.log_fname('beeflow')
377
430
  sock_path = paths.beeflow_socket()
@@ -397,6 +450,7 @@ def start(foreground: bool = typer.Option(False, '--foreground', '-F',
397
450
 
398
451
  version = importlib.metadata.version("hpc-beeflow")
399
452
  print(f'Starting beeflow {version}...')
453
+ print(f'Running beeflow on {start_hn}')
400
454
  if not foreground:
401
455
  print('Run `beeflow core status` for more information.')
402
456
  # Create the log path if it doesn't exist yet
@@ -415,20 +469,29 @@ def start(foreground: bool = typer.Option(False, '--foreground', '-F',
415
469
  @app.command()
416
470
  def status():
417
471
  """Check the status of beeflow and the components."""
472
+ status_hn = socket.gethostname() # hostname when beeflow core status returned
418
473
  resp = cli_connection.send(paths.beeflow_socket(), {'type': 'status'})
419
474
  if resp is None:
420
- beeflow_log = paths.log_fname('beeflow')
421
- warn('Cannot connect to the beeflow daemon, is it running? Check the '
422
- f'log at "{beeflow_log}".')
475
+ bee_client.check_hostname(status_hn)
423
476
  sys.exit(1)
424
477
  print('beeflow components:')
425
478
  for comp, stat in resp['components'].items():
426
479
  print(f'{comp} ... {stat}')
427
480
 
428
481
 
482
+ @app.command()
483
+ def info():
484
+ """Get information about beeflow's installation."""
485
+ version = importlib.metadata.version("hpc-beeflow")
486
+ print(f"Beeflow version: {version}")
487
+ print(f"bee_workflow directory: {paths.workdir()}")
488
+ print(f"Log path: {paths.log_path()}")
489
+
490
+
429
491
  @app.command()
430
492
  def stop(query='yes'):
431
493
  """Stop the current running beeflow daemon."""
494
+ stop_hn = socket.gethostname() # hostname when beeflow core stop returned
432
495
  # Check workflow states; warn if there are active states, pause running workflows
433
496
  workflow_list = bee_client.get_wf_list()
434
497
  concern_states = {'Running', 'Initializing', 'Waiting'}
@@ -451,15 +514,13 @@ def stop(query='yes'):
451
514
  bee_client.pause(wf_id)
452
515
  resp = cli_connection.send(paths.beeflow_socket(), {'type': 'quit'})
453
516
  if resp is None:
454
- beeflow_log = paths.log_fname('beeflow')
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}".')
517
+ bee_client.check_hostname(stop_hn)
458
518
  sys.exit(1)
459
519
  # As long as it returned something, we should be good
460
520
  beeflow_log = paths.log_fname('beeflow')
461
521
  if query == "yes":
462
522
  print(f'Beeflow has stopped. Check the log at "{beeflow_log}".')
523
+ bee_client.setup_hostname("")
463
524
 
464
525
 
465
526
  def archive_dir(dir_to_archive):
@@ -496,6 +557,8 @@ def reset(archive: bool = typer.Option(False, '--archive', '-a',
496
557
  help='Archive bee_workdir before removal')):
497
558
  """Stop all components and delete the bee_workdir directory."""
498
559
  # Check workflow states; warn if there are active states.
560
+ reset_hn = socket.gethostname()
561
+ bee_client.check_hostname(reset_hn)
499
562
  workflow_list = bee_client.get_wf_list()
500
563
  active_states = {'Running', 'Paused', 'Initializing', 'Waiting'}
501
564
  caution = ""
@@ -563,19 +626,26 @@ def pull_to_tar(ref, tarball):
563
626
  subprocess.check_call(['ch-convert', '-i', 'ch-image', '-o', 'tar', ref, tarball])
564
627
 
565
628
 
629
+ def build_to_tar(tag, dockerfile, tarball):
630
+ """Build a container from a Dockerfile and convert to tarball."""
631
+ subprocess.check_call(['ch-image', 'build', '-t', tag, '-f', dockerfile, '.'])
632
+ subprocess.check_call(['ch-convert', '-i', 'ch-image', '-o', 'tar', tag, tarball])
633
+
634
+
566
635
  @app.command()
567
636
  def pull_deps(outdir: str = typer.Option('.', '--outdir', '-o',
568
637
  help='directory to store containers in')):
569
638
  """Pull required BEE containers and store in outdir."""
570
639
  load_check_charliecloud()
571
640
  neo4j_path = os.path.join(os.path.realpath(outdir), 'neo4j.tar.gz')
572
- pull_to_tar('neo4j:5.17', neo4j_path)
641
+ neo4j_dockerfile = str(Path(REPO_PATH, "beeflow/data/dockerfiles/Dockerfile.neo4j"))
642
+ build_to_tar('neo4j_image', neo4j_dockerfile, neo4j_path)
573
643
  redis_path = os.path.join(os.path.realpath(outdir), 'redis.tar.gz')
574
644
  pull_to_tar('redis', redis_path)
575
- print()
576
- print('The BEE dependency containers have been successfully downloaded. '
577
- 'Please make sure to set the following options in your config:')
578
- print()
579
- print('[DEFAULT]')
580
- print('neo4j_image =', neo4j_path)
581
- print('redis_image =', redis_path)
645
+
646
+ AlterConfig(changes={'DEFAULT': {'neo4j_image': neo4j_path,
647
+ 'redis_image': redis_path}}).save()
648
+
649
+ dep_dir = container_manager.get_dep_dir()
650
+ if os.path.isdir(dep_dir):
651
+ shutil.rmtree(dep_dir)