hpc-beeflow 0.1.11.dev1__tar.gz → 0.1.11.dev2__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 (347) hide show
  1. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/PKG-INFO +7 -5
  2. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/README.rst +2 -0
  3. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/client/bee_client.py +14 -20
  4. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/cwl.py +24 -0
  5. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/workflow.py +11 -1
  6. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/parser/parser.py +43 -11
  7. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/wf_data.py +42 -20
  8. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/wf_interface.py +3 -3
  9. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/worker/worker.py +16 -6
  10. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/cwl_files/clamr.cwl +1 -0
  11. hpc_beeflow-0.1.11.dev2/beeflow/tests/cwl_files/task-req.cwl +57 -0
  12. hpc_beeflow-0.1.11.dev2/beeflow/tests/cwl_files/task-req.yml +3 -0
  13. hpc_beeflow-0.1.11.dev2/beeflow/tests/test_bee_client.py +971 -0
  14. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_cwl.py +14 -1
  15. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_cwl_workflow.py +46 -0
  16. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_parser.py +95 -11
  17. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_wf_interface.py +2 -2
  18. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/wf_manager/resources/wf_utils.py +12 -10
  19. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/pyproject.toml +3 -3
  20. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/LICENSE +0 -0
  21. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/__init__.py +0 -0
  22. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/client/README.md +0 -0
  23. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/client/__init__.py +0 -0
  24. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/client/core.py +0 -0
  25. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/client/remote_client.py +0 -0
  26. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/cloud_launcher.py +0 -0
  27. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/README.md +0 -0
  28. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/__init__.py +0 -0
  29. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/api.py +0 -0
  30. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/build/README.md +0 -0
  31. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/build/__init__.py +0 -0
  32. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/build/build_driver.py +0 -0
  33. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/build/container_drivers.py +0 -0
  34. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/build/utils.py +0 -0
  35. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/build_interfaces.py +0 -0
  36. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cli.py +0 -0
  37. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cli_connection.py +0 -0
  38. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cloud/README.md +0 -0
  39. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cloud/__init__.py +0 -0
  40. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cloud/chameleoncloud.py +0 -0
  41. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cloud/cloud.py +0 -0
  42. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cloud/constants.py +0 -0
  43. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cloud/google.py +0 -0
  44. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cloud/openstack.py +0 -0
  45. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cloud/provider.py +0 -0
  46. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/config_driver.py +0 -0
  47. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/config_utils.py +0 -0
  48. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/config_validator.py +0 -0
  49. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/connection.py +0 -0
  50. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/container_path.py +0 -0
  51. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/crt/__init__.py +0 -0
  52. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/crt/charliecloud_driver.py +0 -0
  53. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/crt/crt_driver.py +0 -0
  54. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/crt/singularity_driver.py +0 -0
  55. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/crt_interface.py +0 -0
  56. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/__init__.py +0 -0
  57. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/examples/Dockerfile.comd-x86_64 +0 -0
  58. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/examples/README.txt +0 -0
  59. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/examples/cat_grep_tar.py +0 -0
  60. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/examples/comd.py +0 -0
  61. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/examples/comd_driver.py +0 -0
  62. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/examples/comd_pre.sh +0 -0
  63. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/cwl/examples/lorem.txt +0 -0
  64. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/db/__init__.py +0 -0
  65. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/db/bdb.py +0 -0
  66. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/db/client_db.py +0 -0
  67. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/db/sched_db.py +0 -0
  68. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/db/tm_db.py +0 -0
  69. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/db/wfm_db.py +0 -0
  70. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/deps/__init__.py +0 -0
  71. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/deps/celery_manager.py +0 -0
  72. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/deps/container_manager.py +0 -0
  73. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/deps/neo4j_manager.py +0 -0
  74. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/deps/redis_manager.py +0 -0
  75. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/expr.py +0 -0
  76. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/gdb/DESIGN.md +0 -0
  77. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/gdb/__init__.py +0 -0
  78. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/gdb/gdb_driver.py +0 -0
  79. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/gdb/generate_graph.py +0 -0
  80. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/gdb/graphml_key_updater.py +0 -0
  81. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/gdb/neo4j_cypher.py +0 -0
  82. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/gdb/neo4j_driver.py +0 -0
  83. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/integration/__init__.py +0 -0
  84. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/integration/generated_workflows.py +0 -0
  85. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/integration/utils.py +0 -0
  86. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/integration_test.py +0 -0
  87. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/log.py +0 -0
  88. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/parser/.gitignore +0 -0
  89. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/parser/README.md +0 -0
  90. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/parser/__init__.py +0 -0
  91. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/paths.py +0 -0
  92. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/states.py +0 -0
  93. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/tab_completion.py +0 -0
  94. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/validation.py +0 -0
  95. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/wf_profiler.py +0 -0
  96. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/worker/README.md +0 -0
  97. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/worker/__init__.py +0 -0
  98. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/worker/flux_worker.py +0 -0
  99. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/worker/lsf_worker.py +0 -0
  100. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/worker/simple_worker.py +0 -0
  101. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/worker/slurm_worker.py +0 -0
  102. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/worker/utils.py +0 -0
  103. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/common/worker_interface.py +0 -0
  104. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cloud_templates/dora.jinja +0 -0
  105. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cloud_templates/dora.yaml +0 -0
  106. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/README.md +0 -0
  107. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/README.md +0 -0
  108. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/blast/README.md +0 -0
  109. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/blast/blast.yml +0 -0
  110. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/blast/blast_output.cwl +0 -0
  111. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/blast/blast_output_err.cwl +0 -0
  112. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/blast/blast_split.cwl +0 -0
  113. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/blast/blast_wf.cwl +0 -0
  114. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/blast/blast_worker001.cwl +0 -0
  115. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/blast/blast_worker002.cwl +0 -0
  116. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/blast/input/small.fasta +0 -0
  117. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cat-grep-fail/README.md +0 -0
  118. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cat-grep-fail/cat.cwl +0 -0
  119. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep0.cwl +0 -0
  120. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep1.cwl +0 -0
  121. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cat-grep-fail/input.yml +0 -0
  122. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cat-grep-fail/lorem.txt +0 -0
  123. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cat-grep-fail/tar.cwl +0 -0
  124. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cat-grep-fail/workflow.cwl +0 -0
  125. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/README.txt +0 -0
  126. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/cat.cwl +0 -0
  127. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/cat2.cwl +0 -0
  128. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/grep0.cwl +0 -0
  129. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/grep1.cwl +0 -0
  130. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/grep2.cwl +0 -0
  131. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/grep3.cwl +0 -0
  132. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/input.yml +0 -0
  133. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/lorem.txt +0 -0
  134. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/tar.cwl +0 -0
  135. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/tar2.cwl +0 -0
  136. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/cgt-2branches/workflow.cwl +0 -0
  137. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ci/README.md +0 -0
  138. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr.cwl +0 -0
  139. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.json +0 -0
  140. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.yml +0 -0
  141. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_wf.cwl +0 -0
  142. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ci/ffmpeg.cwl +0 -0
  143. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/Dockerfile.clamr-ffmpeg +0 -0
  144. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/README.md +0 -0
  145. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr.cwl +0 -0
  146. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.json +0 -0
  147. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.yml +0 -0
  148. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_wf.cwl +0 -0
  149. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/ffmpeg.cwl +0 -0
  150. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/post_run.sh +0 -0
  151. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/pre_run.sh +0 -0
  152. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/Dockerfile.clamr-ffmpeg +0 -0
  153. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/README.md +0 -0
  154. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr.cwl +0 -0
  155. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.json +0 -0
  156. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.yml +0 -0
  157. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_wf.cwl +0 -0
  158. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/ffmpeg.cwl +0 -0
  159. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/post_run.sh +0 -0
  160. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/pre_run.sh +0 -0
  161. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf/README.md +0 -0
  162. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr.cwl +0 -0
  163. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.json +0 -0
  164. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.yml +0 -0
  165. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_wf.cwl +0 -0
  166. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf/ffmpeg.cwl +0 -0
  167. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/README.md +0 -0
  168. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr.cwl +0 -0
  169. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.json +0 -0
  170. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.yml +0 -0
  171. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_wf.cwl +0 -0
  172. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/ffmpeg.cwl +0 -0
  173. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/README.md +0 -0
  174. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/README.md +0 -0
  175. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/cf-summit.cwl +0 -0
  176. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/Dockerfile.clamr-lanl-x86_64 +0 -0
  177. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/README.md +0 -0
  178. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-darwin.cwl +0 -0
  179. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-no-owrite.cwl +0 -0
  180. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf.cwl +0 -0
  181. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/copyContainer_containerName.cwl +0 -0
  182. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerFile_containerName.cwl +0 -0
  183. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerPull.cwl +0 -0
  184. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/README.md +0 -0
  185. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/cf-singularity.cwl +0 -0
  186. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/README.md +0 -0
  187. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr.cwl +0 -0
  188. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.json +0 -0
  189. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.yml +0 -0
  190. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_wf.cwl +0 -0
  191. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/ffmpeg.cwl +0 -0
  192. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/README.md +0 -0
  193. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr.cwl +0 -0
  194. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.json +0 -0
  195. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.yml +0 -0
  196. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_wf.cwl +0 -0
  197. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/ffmpeg.cwl +0 -0
  198. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/README.md +0 -0
  199. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr.cwl +0 -0
  200. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.json +0 -0
  201. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.yml +0 -0
  202. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_wf.cwl +0 -0
  203. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/ffmpeg.cwl +0 -0
  204. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.cwl +0 -0
  205. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.yml +0 -0
  206. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh.cwl +0 -0
  207. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_job.yml +0 -0
  208. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_wf.cwl +0 -0
  209. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/nwchem-mpi/README.md +0 -0
  210. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.cwl +0 -0
  211. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.yml +0 -0
  212. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem_bin.cwl +0 -0
  213. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant/graph.cwl +0 -0
  214. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant/pennant.yml +0 -0
  215. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant/pennant_1_node.cwl +0 -0
  216. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant/pennant_2_node.cwl +0 -0
  217. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant/pennant_4_node.cwl +0 -0
  218. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant/pennant_wf.cwl +0 -0
  219. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-flux-x86_64 +0 -0
  220. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-graph-x86_64 +0 -0
  221. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/graph.cwl +0 -0
  222. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.py +0 -0
  223. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.sh +0 -0
  224. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/pennant.yml +0 -0
  225. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_1_node.cwl +0 -0
  226. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_2_node.cwl +0 -0
  227. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_4_node.cwl +0 -0
  228. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_8_node.cwl +0 -0
  229. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_wf.cwl +0 -0
  230. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/pytest.ini +0 -0
  231. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/simple-workflows/README.md +0 -0
  232. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/simple-workflows/cancel.cwl +0 -0
  233. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/README.md +0 -0
  234. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc-nc.cwl +0 -0
  235. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc.cwl +0 -0
  236. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/lorem.txt +0 -0
  237. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/README.md +0 -0
  238. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/builder/dockerFile.cwl +0 -0
  239. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/builder/dockerPull.cwl +0 -0
  240. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/grep-wordcount/gc.cwl +0 -0
  241. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/grep-wordcount/lorem.txt +0 -0
  242. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/helloworld.cwl +0 -0
  243. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/helloworld_input.yaml +0 -0
  244. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/DAG_example-1.png +0 -0
  245. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/README.md +0 -0
  246. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add.cwl +0 -0
  247. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_multiply_example_workflow.cwl +0 -0
  248. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_step1.py +0 -0
  249. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/isolated test.cwl +0 -0
  250. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/job.yaml +0 -0
  251. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply.cwl +0 -0
  252. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply_step2.py +0 -0
  253. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/workflow_generater_python.py +0 -0
  254. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/README.md +0 -0
  255. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree.py +0 -0
  256. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_output.txt +0 -0
  257. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_tool.cwl +0 -0
  258. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/expectedValue.txt +0 -0
  259. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/hiring1.txt +0 -0
  260. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regress_output.txt +0 -0
  261. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regression.py +0 -0
  262. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/machinelearning_pipeline.cwl +0 -0
  263. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/out.PNG +0 -0
  264. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_code.py +0 -0
  265. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_tool.cwl +0 -0
  266. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset.py +0 -0
  267. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset_tool.cwl +0 -0
  268. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/regress_tool.cwl +0 -0
  269. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.builder_demo +0 -0
  270. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.clamr-ffmpeg +0 -0
  271. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.clamr-lanl-x86_64 +0 -0
  272. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.clamr-ppc64le +0 -0
  273. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.comd-flux-x86_64 +0 -0
  274. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.deb9ompi-x86_64 +0 -0
  275. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.lulesh-x86_64 +0 -0
  276. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.neo4j +0 -0
  277. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.nwchem-x86_64 +0 -0
  278. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.pennant-flux-x86_64 +0 -0
  279. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/Dockerfile.vaspompi-x86_64 +0 -0
  280. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/README.md +0 -0
  281. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.comd-x86_64-wpmix +0 -0
  282. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.debian +0 -0
  283. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.openmpi-3.1.5 +0 -0
  284. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/comd-pmix-support/README.md +0 -0
  285. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/comd-pmix-support/dont-init-ucx-on-intel-cray.patch +0 -0
  286. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/pennant-graph/Dockerfile.pennant-graph-x86_64 +0 -0
  287. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.py +0 -0
  288. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.sh +0 -0
  289. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/remote/__init__.py +0 -0
  290. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/remote/remote.py +0 -0
  291. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/scheduler/README.md +0 -0
  292. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/scheduler/__init__.py +0 -0
  293. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/scheduler/algorithms.py +0 -0
  294. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/scheduler/resource_allocation.py +0 -0
  295. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/scheduler/scheduler.py +0 -0
  296. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/scheduler/scheduler.yaml +0 -0
  297. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/scheduler/serializable.py +0 -0
  298. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/scheduler/task.py +0 -0
  299. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/task_manager/__init__.py +0 -0
  300. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/task_manager/background.py +0 -0
  301. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/task_manager/task_actions.py +0 -0
  302. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/task_manager/task_manager.py +0 -0
  303. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/task_manager/task_submit.py +0 -0
  304. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/task_manager/utils.py +0 -0
  305. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/42.tgz +0 -0
  306. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/README.md +0 -0
  307. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/cf.cwl +0 -0
  308. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/clamr-wf/clamr.cwl +0 -0
  309. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/clamr-wf/clamr_job.json +0 -0
  310. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/clamr-wf/clamr_job.yml +0 -0
  311. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/clamr-wf/clamr_wf.cwl +0 -0
  312. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/clamr-wf/ffmpeg.cwl +0 -0
  313. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/clamr-wf/mv_script.cwl +0 -0
  314. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/clamr-wf/mv_script.sh +0 -0
  315. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/clamr-wf.tgz +0 -0
  316. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/cwl_files/cat-grep-tar.cwl +0 -0
  317. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/cwl_files/cat-grep-tar.yml +0 -0
  318. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/cwl_files/clamr.yml +0 -0
  319. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/cwl_files/comd.cwl +0 -0
  320. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/cwl_files/comd.yml +0 -0
  321. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/gdb.py +0 -0
  322. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/mocks.py +0 -0
  323. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_charliecloud_driver.py +0 -0
  324. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_cloud.py +0 -0
  325. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_config_driver.py +0 -0
  326. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_config_utils.py +0 -0
  327. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_config_validator.py +0 -0
  328. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_container_path.py +0 -0
  329. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_db_client.py +0 -0
  330. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_db_sched.py +0 -0
  331. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_db_tm.py +0 -0
  332. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_neo4j_cypher.py +0 -0
  333. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_remote.py +0 -0
  334. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_remote_client.py +0 -0
  335. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_scheduler.py +0 -0
  336. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_scheduler_resource_allocation.py +0 -0
  337. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_scheduler_rest.py +0 -0
  338. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_slurm_worker.py +0 -0
  339. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_tm.py +0 -0
  340. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_wf_manager.py +0 -0
  341. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/tests/test_wf_update.py +0 -0
  342. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/wf_manager/__init__.py +0 -0
  343. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/wf_manager/resources/__init__.py +0 -0
  344. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/wf_manager/resources/wf_actions.py +0 -0
  345. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/wf_manager/resources/wf_list.py +0 -0
  346. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/wf_manager/resources/wf_update.py +0 -0
  347. {hpc_beeflow-0.1.11.dev1 → hpc_beeflow-0.1.11.dev2}/beeflow/wf_manager/wf_manager.py +0 -0
@@ -1,8 +1,7 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: hpc-beeflow
3
- Version: 0.1.11.dev1
3
+ Version: 0.1.11.dev2
4
4
  Summary: A software package for containerizing HPC applications and managing job workflows
5
- Home-page: https://github.com/lanl/BEE
6
5
  Keywords: bee,hpc,workflow,cluster,computing
7
6
  Author: BEE-LANL Dev Team
8
7
  Author-email: bee-dev@lanl.gov
@@ -19,7 +18,8 @@ Classifier: Programming Language :: Python :: 3
19
18
  Classifier: Programming Language :: Python :: 3.9
20
19
  Classifier: Programming Language :: Python :: 3.10
21
20
  Classifier: Programming Language :: Python :: 3.11
22
- Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
23
  Classifier: Programming Language :: Python :: Implementation :: CPython
24
24
  Classifier: Topic :: Scientific/Engineering
25
25
  Classifier: Topic :: System :: Clustering
@@ -43,7 +43,7 @@ Requires-Dist: jsonpickle (>=2.2.0,<3.0.0)
43
43
  Requires-Dist: neo4j (>=5,<6)
44
44
  Requires-Dist: networkx (==3.1)
45
45
  Requires-Dist: pre-commit (==3.5.0)
46
- Requires-Dist: pylint (==3.2.7)
46
+ Requires-Dist: pylint (>=3.2.7,<4.0.0)
47
47
  Requires-Dist: python-daemon (>=2.3.1,<3.0.0)
48
48
  Requires-Dist: python-heatclient (>=3.1.0,<4.0.0) ; extra == "cloud-extras"
49
49
  Requires-Dist: python-openstackclient (>=6.0.0,<7.0.0) ; extra == "cloud-extras"
@@ -119,10 +119,12 @@ Contributors:
119
119
  * Tim Randles - `trandles-lanl <https://github.com/trandles-lanl>`_
120
120
  * Jacob Tronge - `jtronge <https://github.com/jtronge>`_
121
121
  * Kabir Vats - `kabir-vats <https://github.com/kabir-vats>`_
122
+ * Sare Beste Zeytun - `sbzeytun <https://github.com/sbzeytun>`_
122
123
 
123
124
  Concept and Design Contributors
124
125
 
125
126
  * James Ahrens
127
+ * Curt Canada
126
128
  * Allen McPherson
127
129
  * Li-Ta Lo
128
130
  * Louis Vernon
@@ -63,10 +63,12 @@ Contributors:
63
63
  * Tim Randles - `trandles-lanl <https://github.com/trandles-lanl>`_
64
64
  * Jacob Tronge - `jtronge <https://github.com/jtronge>`_
65
65
  * Kabir Vats - `kabir-vats <https://github.com/kabir-vats>`_
66
+ * Sare Beste Zeytun - `sbzeytun <https://github.com/sbzeytun>`_
66
67
 
67
68
  Concept and Design Contributors
68
69
 
69
70
  * James Ahrens
71
+ * Curt Canada
70
72
  * Allen McPherson
71
73
  * Li-Ta Lo
72
74
  * Louis Vernon
@@ -231,7 +231,6 @@ def get_wf_list():
231
231
  if resp.status_code != requests.codes.okay: # pylint: disable=no-member
232
232
  error_exit('WF Manager did not return workflow list')
233
233
 
234
- logging.info('List Jobs: {resp.text}')
235
234
  return jsonpickle.decode(resp.json()['workflow_list'])
236
235
 
237
236
 
@@ -275,10 +274,7 @@ def match_short_id(wf_id):
275
274
  "workflow ID {matched_ids[0]}")
276
275
  long_wf_id = matched_ids[0]
277
276
  return long_wf_id
278
- else:
279
- sys.exit("There are currently no workflows.")
280
-
281
- return None
277
+ sys.exit("There are currently no workflows.")
282
278
 
283
279
 
284
280
  def get_wf_status(wf_id):
@@ -324,6 +320,18 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
324
320
  wf_path = wf_path.resolve()
325
321
  workdir = workdir.resolve()
326
322
 
323
+ # Make sure the workdir is an absolute path and exists
324
+ workdir = os.path.expanduser(workdir)
325
+ workdir = os.path.abspath(workdir)
326
+ if not os.path.exists(workdir):
327
+ error_exit(f"Workflow working directory \"{workdir}\" doesn't exist")
328
+
329
+ # Make sure the workdir is not in /var or /var/tmp
330
+ if os.path.commonpath([os.path.realpath('/tmp'), workdir]) == os.path.realpath('/tmp'):
331
+ error_exit("Workflow working directory cannot be in \"/tmp\"")
332
+ if os.path.commonpath([os.path.realpath('/var/tmp'), workdir]) == os.path.realpath('/var/tmp'):
333
+ error_exit("Workflow working directory cannot be in \"/var/tmp\"")
334
+
327
335
  tarball_path = ""
328
336
  workflow = None
329
337
  wf_tarball = None
@@ -363,7 +371,7 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
363
371
  parser = CwlParser()
364
372
  workflow_id = generate_workflow_id()
365
373
  workflow, tasks = parser.parse_workflow(workflow_id, str(main_cwl_path),
366
- job=str(yaml_path))
374
+ job=str(yaml_path), workdir=workdir)
367
375
  tasks = [jsonpickle.encode(task) for task in tasks]
368
376
 
369
377
  wf_tarball = open(package_path, 'rb')
@@ -373,18 +381,6 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
373
381
  else:
374
382
  error_exit(f'Workflow tarball {wf_path} cannot be found')
375
383
 
376
- # Make sure the workdir is an absolute path and exists
377
- workdir = os.path.expanduser(workdir)
378
- workdir = os.path.abspath(workdir)
379
- if not os.path.exists(workdir):
380
- error_exit(f"Workflow working directory \"{workdir}\" doesn't exist")
381
-
382
- # Make sure the workdir is not in /var or /var/tmp
383
- if os.path.commonpath([os.path.realpath('/tmp'), workdir]) == os.path.realpath('/tmp'):
384
- error_exit("Workflow working directory cannot be in \"/tmp\"")
385
- if os.path.commonpath([os.path.realpath('/var/tmp'), workdir]) == os.path.realpath('/var/tmp'):
386
- error_exit("Workflow working directory cannot be in \"/var/tmp\"")
387
-
388
384
  # TODO: Can all of this information be sent as a file?
389
385
  data = {
390
386
  'wf_name': wf_name.encode(),
@@ -558,8 +554,6 @@ def list_workflows():
558
554
  else:
559
555
  typer.echo("There are currently no workflows.")
560
556
 
561
- logging.info('List workflows: {resp.text}')
562
-
563
557
 
564
558
  @app.command()
565
559
  def query(wf_id: str = typer.Argument(..., callback=match_short_id)):
@@ -1,6 +1,7 @@
1
1
  """Create and manage CWL files."""
2
2
  from dataclasses import dataclass
3
3
  from io import StringIO
4
+ from typing import Optional
4
5
  import ruamel.yaml
5
6
 
6
7
  # Create the global object for ruamel.ymal
@@ -399,6 +400,7 @@ class CheckpointRequirement:
399
400
  restart_parameters: str
400
401
  num_tries: int
401
402
  enabled: bool = True
403
+ add_parameters: Optional[str] = None
402
404
 
403
405
  def dump(self):
404
406
  """Dump beeflow requirement to a dictionary."""
@@ -409,6 +411,7 @@ class CheckpointRequirement:
409
411
  checkpoint_dump[req_name]['container_path'] = self.container_path
410
412
  checkpoint_dump[req_name]['file_regex'] = self.file_regex
411
413
  checkpoint_dump[req_name]['restart_parameters'] = self.restart_parameters
414
+ checkpoint_dump[req_name]['add_parameters'] = self.add_parameters
412
415
  checkpoint_dump[req_name]['num_tries'] = self.num_tries
413
416
  return checkpoint_dump
414
417
 
@@ -450,6 +453,27 @@ class ScriptRequirement:
450
453
  return stream.getvalue()
451
454
 
452
455
 
456
+ @dataclass
457
+ class TaskRequirement:
458
+ """Defines task requirement."""
459
+
460
+ workdir: str
461
+
462
+ def dump(self):
463
+ """Dump task requirement to a dictionary."""
464
+ key = 'beeflow:TaskRequirement'
465
+ this_dump = {key: {}}
466
+ if self.workdir:
467
+ this_dump[key]['workdir'] = self.workdir
468
+ return this_dump
469
+
470
+ def __repr__(self):
471
+ """Return TaskRequirement as a yaml string."""
472
+ stream = StringIO()
473
+ yaml.dump(self.dump(), stream)
474
+ return stream.getvalue()
475
+
476
+
453
477
  @dataclass
454
478
  class Hints:
455
479
  """Holds all the hints for a CWL workflow."""
@@ -6,7 +6,7 @@ from beeflow.common.cwl.cwl import (CWL, CWLInput, CWLInputs, RunInput, Inputs,
6
6
  Outputs, Run, RunOutput, Step, Steps, Hints,
7
7
  InputBinding, MPIRequirement, DockerRequirement,
8
8
  ScriptRequirement, SlurmRequirement,
9
- CheckpointRequirement)
9
+ CheckpointRequirement, TaskRequirement)
10
10
 
11
11
 
12
12
  @dataclass
@@ -133,10 +133,20 @@ class Checkpoint(CheckpointRequirement):
133
133
  container_path=self.container_path,
134
134
  file_regex=self.file_regex,
135
135
  restart_parameters=self.restart_parameters,
136
+ add_parameters=self.add_parameters,
136
137
  num_tries=self.num_tries,
137
138
  enabled=self.enabled)
138
139
 
139
140
 
141
+ @dataclass
142
+ class TaskReq(TaskRequirement):
143
+ """Get Task Requirements."""
144
+
145
+ def requirement(self):
146
+ """Return a task requirement object."""
147
+ return TaskRequirement(workdir=self.workdir)
148
+
149
+
140
150
  @dataclass
141
151
  class Task:
142
152
  """Represents a task."""
@@ -10,6 +10,7 @@ import argparse
10
10
  import json
11
11
  import os
12
12
  import traceback
13
+ from pathlib import Path
13
14
  import yaml
14
15
  import cwl_utils.parser.cwl_v1_2 as cwl_parser
15
16
  from schema_salad.exceptions import ValidationException
@@ -22,7 +23,8 @@ from beeflow.common.wf_data import (Workflow,
22
23
  StepOutput,
23
24
  Hint,
24
25
  Requirement,
25
- generate_workflow_id)
26
+ generate_workflow_id,
27
+ get_requirement)
26
28
 
27
29
  # Map CWL types to Python types
28
30
  type_map = {
@@ -57,7 +59,7 @@ class CwlParser:
57
59
  self.steps = []
58
60
  self.params = None
59
61
 
60
- def parse_workflow(self, workflow_id, cwl_path, job=None):
62
+ def parse_workflow(self, workflow_id, cwl_path, job=None, workdir='.'):
61
63
  """Parse a CWL Workflow file and load it into the graph database.
62
64
 
63
65
  Returns an instance of the WorkflowInterface.
@@ -117,11 +119,11 @@ class CwlParser:
117
119
 
118
120
  workflow = Workflow(workflow_name, workflow_hints, workflow_requirements, workflow_inputs,
119
121
  workflow_outputs, workflow_id)
120
- tasks = [self.parse_step(step, workflow_id) for step in self.cwl.steps]
122
+ tasks = [self.parse_step(step, workflow_id, workdir) for step in self.cwl.steps]
121
123
 
122
124
  return workflow, tasks
123
125
 
124
- def parse_step(self, step, workflow_id):
126
+ def parse_step(self, step, workflow_id, workdir):
125
127
  """Parse a CWL step object.
126
128
 
127
129
  Calling this to parse a CommandLineTool file without a corresponding
@@ -153,17 +155,34 @@ class CwlParser:
153
155
  step_name = os.path.basename(step_id).split(".")[0]
154
156
  step_command = step_cwl.baseCommand
155
157
  step_inputs = self.parse_step_inputs(step.in_, step_cwl.inputs)
156
- step_outputs = self.parse_step_outputs(step.out, step_cwl.outputs, step_cwl.stdout,
157
- step_cwl.stderr)
158
158
  step_requirements = self.parse_requirements(step.requirements)
159
159
  step_requirements.extend(self.parse_requirements(step_cwl.requirements))
160
160
  step_hints = self.parse_requirements(step.hints, as_hints=True)
161
161
  step_hints.extend(self.parse_requirements(step_cwl.hints, as_hints=True))
162
+ step_workdir = resolve_step_workdir(
163
+ get_requirement(
164
+ step_requirements,
165
+ step_hints,
166
+ "beeflow:TaskRequirement",
167
+ "workdir",
168
+ default=''
169
+ ),
170
+ workdir,
171
+ )
172
+
173
+ # When using container do not add the path to the output
174
+ # This can be changed when we fix binding for containers
175
+ if any(hint.class_ == 'DockerRequirement' for hint in step_hints):
176
+ step_outputs = self.parse_step_outputs(step.out, step_cwl.outputs, step_cwl.stdout,
177
+ step_cwl.stderr)
178
+ else:
179
+ step_outputs = self.parse_step_outputs(step.out, step_cwl.outputs, step_cwl.stdout,
180
+ step_cwl.stderr, workdir=step_workdir)
162
181
  step_stdout = step_cwl.stdout
163
182
  step_stderr = step_cwl.stderr
164
183
 
165
184
  return Task(step_name, step_command, step_hints, step_requirements, step_inputs,
166
- step_outputs, step_stdout, step_stderr, workflow_id)
185
+ step_outputs, step_stdout, step_stderr, workflow_id, workdir=step_workdir)
167
186
 
168
187
  def parse_job(self, job):
169
188
  """Parse a CWL input job file.
@@ -229,11 +248,10 @@ class CwlParser:
229
248
  inputs.append(StepInput(_shortname(step_input.id), input_type, None,
230
249
  step_input.default, source_map[_shortname(step_input.id)],
231
250
  None, None))
232
-
233
251
  return inputs
234
252
 
235
253
  @staticmethod
236
- def parse_step_outputs(cwl_out, step_outputs, stdout, stderr):
254
+ def parse_step_outputs(cwl_out, step_outputs, stdout, stderr, workdir=None):
237
255
  """Parse step outputs from CWL step output objects.
238
256
 
239
257
  :param cwl_out: the step outputs from the Workflow file
@@ -280,8 +298,10 @@ class CwlParser:
280
298
  if out_map[out].outputBinding:
281
299
  glob = out_map[out].outputBinding.glob
282
300
 
283
- outputs.append(StepOutput(out, output_type, None, glob))
301
+ if workdir is not None:
302
+ glob = os.path.abspath(os.path.join(workdir, glob))
284
303
 
304
+ outputs.append(StepOutput(out, output_type, None, glob))
285
305
  return outputs
286
306
 
287
307
  def _read_requirement_file(self, key, items):
@@ -339,7 +359,7 @@ class CwlParser:
339
359
  for req in requirements:
340
360
  items = {}
341
361
  for k, v in req.items():
342
- if k != 'class':
362
+ if k != 'class' and v is not None:
343
363
  if isinstance(v, (int, float)):
344
364
  items[k] = v
345
365
  else:
@@ -403,6 +423,18 @@ def parse_args(args=None):
403
423
  return parser.parse_args(args)
404
424
 
405
425
 
426
+ def resolve_step_workdir(step_workdir, workdir):
427
+ """Resolve step workdir relative to workflow workdir."""
428
+ if not step_workdir or step_workdir.strip() == '':
429
+ return workdir
430
+ # should be redundant
431
+ workdir = Path(workdir).expanduser().resolve()
432
+ desired = Path(step_workdir).expanduser()
433
+ if desired.is_absolute():
434
+ return str(desired.resolve())
435
+ return str((workdir / desired).resolve())
436
+
437
+
406
438
  def main():
407
439
  """Run the parser on a CWL Workflow and job file directly."""
408
440
  wf_id = generate_workflow_id()
@@ -96,6 +96,45 @@ class Workflow:
96
96
  f"requirements = {self.requirements} inputs={self.inputs} outputs={self.outputs}>")
97
97
 
98
98
 
99
+ def get_requirement(requirements, hints, req_type, req_param, default=None):
100
+ """Get requirement from hints or requirements, prioritizing requirements over hints.
101
+
102
+ :param requirements: list of requirements
103
+ :type requirements: list
104
+ :param hints: list of hints
105
+ :type hints: list
106
+ :param req_type: the type of requirement (e.g. 'DockerRequirement')
107
+ :type req_type: str
108
+ :param req_param: the requirement parameter (e.g. 'dockerFile')
109
+ :type req_param: str
110
+ :param default: default value if the requirement is not found
111
+ :type default: any
112
+
113
+ When requirements are specified hints will be ignored.
114
+ By default, tasks need not specify hints or requirements
115
+ """
116
+ requirements = dict(requirements)
117
+ requirement = default
118
+ # Get value if specified in requirements
119
+ try:
120
+ # Try to get Requirement
121
+ requirement = requirements[req_type][req_param]
122
+ except (KeyError, TypeError):
123
+ # Task Requirements are not mandatory. No docker_req_param specified in task reqs.
124
+ requirement = None
125
+ # Ignore hints if requirements available
126
+ if not requirement:
127
+ hints = dict(hints)
128
+ # Get value if specified in hints
129
+ try:
130
+ # Try to get Hints
131
+ requirement = hints[req_type][req_param]
132
+ except (KeyError, TypeError):
133
+ # Task Hints are not mandatory. No docker_req_param specified in task hints.
134
+ requirement = default
135
+ return requirement
136
+
137
+
99
138
  class Task:
100
139
  """Data structure for holding data about a single task."""
101
140
 
@@ -180,26 +219,7 @@ class Task:
180
219
  When requirements are specified hints will be ignored.
181
220
  By default, tasks need not specify hints or requirements
182
221
  """
183
- requirements = dict(self.requirements)
184
- requirement = default
185
- # Get value if specified in requirements
186
- try:
187
- # Try to get Requirement
188
- requirement = requirements[req_type][req_param]
189
- except (KeyError, TypeError):
190
- # Task Requirements are not mandatory. No docker_req_param specified in task reqs.
191
- requirement = None
192
- # Ignore hints if requirements available
193
- if not requirement:
194
- hints = dict(self.hints)
195
- # Get value if specified in hints
196
- try:
197
- # Try to get Hints
198
- requirement = hints[req_type][req_param]
199
- except (KeyError, TypeError):
200
- # Task Hints are not mandatory. No docker_req_param specified in task hints.
201
- requirement = default
202
- return requirement
222
+ return get_requirement(self.requirements, self.hints, req_type, req_param, default)
203
223
 
204
224
  def get_full_requirement(self, req_type):
205
225
  """Get the full requirement (or hint) for this task, if it has one.
@@ -330,6 +350,8 @@ class Task:
330
350
  os.getenv('HOME'): os.path.join('/home', os.getenv('USER')),
331
351
  }
332
352
  command.append(convert_path(checkpoint_file, bind_mounts))
353
+ if "add_parameters" in hint.params:
354
+ command.append(hint.params["add_parameters"])
333
355
  break
334
356
 
335
357
  return command
@@ -121,12 +121,12 @@ class WorkflowInterface:
121
121
  # Pattern match on task name
122
122
  # Append (1) if not in name already
123
123
  # Increment number on each restart
124
- match = re.match(r".+\(([0-9]+)\)$", new_task.name)
124
+ match = re.search(r"-(\d+)$", new_task.name)
125
125
  if not match:
126
- new_task.name += "(1)"
126
+ new_task.name += "-1"
127
127
  else:
128
128
  i = int(match.group(1))
129
- new_task.name = re.sub(r"\([0-9]+\)", f"({i + 1})", new_task.name)
129
+ new_task.name = re.sub(r"-(\d+)$", f"-{i + 1}", new_task.name)
130
130
  metadata = self.get_task_metadata(task)
131
131
  self._gdb_driver.restart_task(task, new_task)
132
132
  self.set_task_metadata(new_task, metadata)
@@ -54,28 +54,37 @@ class Worker(ABC):
54
54
  self.workdir = bee_workdir
55
55
 
56
56
  def resolve_stdout_stderr(self, task):
57
- """Reolves the path to the stderr and stdout in the task workdir."""
57
+ """Resolves the path to the stderr and stdout in the task workdir."""
58
+ task_dir = f"{task.workdir}/{task.name}-{task.id[:4]}"
59
+ os.makedirs(task_dir,exist_ok=True)
58
60
  if task.stdout:
59
61
  stdout_path = f"{task.workdir}/{task.stdout}"
60
62
  else:
61
63
  # If user provide no stdout or stderr name use this as a fallback
62
- stdout_path = f"{task.workdir}/{task.name}-{task.id[:4]}.out"
64
+ stdout_path = f"{task.workdir}/{task.name}-{task.id[:4]}/{task.name}-{task.id[:4]}.out"
63
65
  if task.stderr:
64
66
  stderr_path = f"{task.workdir}/{task.stderr}"
65
67
  else:
66
- stderr_path = f"{task.workdir}/{task.name}-{task.id[:4]}.err"
68
+ stderr_path = f"{task.workdir}/{task.name}-{task.id[:4]}/{task.name}-{task.id[:4]}.err"
67
69
  return stdout_path, stderr_path
68
70
 
69
71
 
70
72
  def task_save_path(self, task):
71
73
  """Return the task save path used for storing submission scripts output logs."""
72
- return f'{self.workdir}/workflows/{task.workflow_id}/{task.name}-{task.id}'
74
+ return f'{self.workdir}/workflows/{task.workflow_id}/{task.name}-{task.id[:4]}'
73
75
 
74
76
  def write_script(self, task):
75
77
  """Build task script; returns filename of script."""
76
78
  task_text = self.build_text(task)
77
- task_script_archive = f"{self.task_save_path(task)}/{task.name}-{task.id}.sh"
78
- task_script_workdir = f"{task.workdir}/{task.name}-{task.id[:4]}.sh"
79
+ task_archive_dir = self.task_save_path(task)
80
+ os.makedirs(task_archive_dir,exist_ok=True)
81
+ task_script_archive = f"{self.task_save_path(task)}"\
82
+ f"/{task.name}-{task.id[:4]}.sh"
83
+ task_script_dir = f"{task.workdir}/{task.name}-{task.id[:4]}"
84
+ os.makedirs(task_script_dir,exist_ok=True)
85
+ task_script_workdir = f"{task.workdir}/{task.name}-{task.id[:4]}"\
86
+ f"/{task.name}-{task.id[:4]}.sh"
87
+
79
88
  with open(task_script_workdir, 'w', encoding="UTF-8") as workdir_script, \
80
89
  open(task_script_archive, 'w', encoding="UTF-8") as archive_script:
81
90
  workdir_script.write(task_text)
@@ -85,6 +94,7 @@ class Worker(ABC):
85
94
  def prepare(self, task):
86
95
  """Prepare for the task; create the task save directory, etc."""
87
96
  task_save_path = self.task_save_path(task)
97
+ os.makedirs(task.workdir, exist_ok=True)
88
98
  os.makedirs(task_save_path, exist_ok=True)
89
99
 
90
100
  @abstractmethod
@@ -85,6 +85,7 @@ steps:
85
85
  container_path: checkpoint_output
86
86
  file_regex: backup[0-9]*.crx
87
87
  restart_parameters: -R
88
+ add_parameters:
88
89
  num_tries: 3
89
90
  beeflow:SlurmRequirement:
90
91
  timeLimit: 00:00:10
@@ -0,0 +1,57 @@
1
+ cwlVersion: v1.0
2
+ class: Workflow
3
+
4
+ inputs:
5
+ input_file: File
6
+ word: string
7
+
8
+ outputs:
9
+ cat_stderr:
10
+ type: File
11
+ outputSource: cat/cat_stderr
12
+
13
+ steps:
14
+ cat:
15
+ run:
16
+ class: CommandLineTool
17
+ baseCommand: cat
18
+ stdout: cat.txt
19
+ stderr: cat.err
20
+ inputs:
21
+ input_file:
22
+ type: File
23
+ inputBinding:
24
+ position: 1
25
+ outputs:
26
+ contents:
27
+ type: stdout
28
+ cat_stderr:
29
+ type: stderr
30
+ in:
31
+ input_file: input_file
32
+ out: [contents, cat_stderr]
33
+ hints:
34
+ beeflow:TaskRequirement:
35
+ workdir: cat_workdir
36
+ grep:
37
+ run:
38
+ class: CommandLineTool
39
+ baseCommand: grep
40
+ stdout: occur.txt
41
+ inputs:
42
+ word:
43
+ type: string
44
+ inputBinding:
45
+ position: 1
46
+ text_file:
47
+ type: File
48
+ inputBinding:
49
+ position: 2
50
+ outputs:
51
+ occur:
52
+ type: stdout
53
+ in:
54
+ word: word
55
+ text_file: cat/contents
56
+ out: [occur]
57
+
@@ -0,0 +1,3 @@
1
+ input_file: lorem.txt
2
+ word: Vivamus
3
+