hypershell 2.7.2__tar.gz → 2.8.0__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 (203) hide show
  1. {hypershell-2.7.2 → hypershell-2.8.0}/.gitignore +10 -0
  2. {hypershell-2.7.2 → hypershell-2.8.0}/PKG-INFO +65 -21
  3. {hypershell-2.7.2 → hypershell-2.8.0}/README.rst +46 -14
  4. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/client_help.rst +41 -8
  5. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/client_usage.rst +3 -1
  6. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/cluster_help.rst +79 -15
  7. hypershell-2.8.0/docs/_include/cluster_usage.rst +8 -0
  8. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_param_ref.rst +182 -10
  9. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/database.rst +44 -2
  10. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/initdb_help.rst +3 -3
  11. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/license.rst +1 -1
  12. hypershell-2.8.0/docs/_include/security_alt.rst +36 -0
  13. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/server_help.rst +41 -3
  14. hypershell-2.8.0/docs/_include/server_usage.rst +4 -0
  15. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/signals.rst +6 -1
  16. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/submit_desc.rst +4 -3
  17. hypershell-2.8.0/docs/_include/submit_help.rst +111 -0
  18. hypershell-2.8.0/docs/_include/submit_usage.rst +5 -0
  19. hypershell-2.8.0/docs/_include/task_groups_alt.rst +20 -0
  20. hypershell-2.8.0/docs/_include/task_info_help.rst +39 -0
  21. hypershell-2.8.0/docs/_include/task_info_usage.rst +2 -0
  22. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_search_help.rst +12 -0
  23. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_search_usage.rst +3 -3
  24. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_update_help.rst +6 -0
  25. hypershell-2.8.0/docs/_include/task_update_usage.rst +9 -0
  26. hypershell-2.8.0/docs/_include/tls_cli_options.rst +30 -0
  27. {hypershell-2.7.2 → hypershell-2.8.0}/docs/api/client.rst +13 -1
  28. {hypershell-2.7.2 → hypershell-2.8.0}/docs/api/cluster.rst +14 -0
  29. {hypershell-2.7.2 → hypershell-2.8.0}/docs/api/index.rst +2 -2
  30. {hypershell-2.7.2 → hypershell-2.8.0}/docs/api/server.rst +13 -1
  31. {hypershell-2.7.2 → hypershell-2.8.0}/docs/api/submit.rst +1 -0
  32. hypershell-2.8.0/docs/blog/20260705_2_8_0_release.rst +855 -0
  33. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/index.rst +22 -0
  34. {hypershell-2.7.2 → hypershell-2.8.0}/docs/conf.py +4 -0
  35. {hypershell-2.7.2 → hypershell-2.8.0}/docs/index.rst +76 -16
  36. {hypershell-2.7.2 → hypershell-2.8.0}/docs/install.rst +184 -24
  37. {hypershell-2.7.2 → hypershell-2.8.0}/docs/logging.rst +164 -2
  38. {hypershell-2.7.2 → hypershell-2.8.0}/docs/manual.rst +27 -2
  39. {hypershell-2.7.2 → hypershell-2.8.0}/docs/roadmap.rst +1 -1
  40. hypershell-2.8.0/docs/security.rst +894 -0
  41. hypershell-2.8.0/pyproject.toml +146 -0
  42. hypershell-2.8.0/share/bash_completion.d/hs +735 -0
  43. hypershell-2.8.0/share/bash_completion.d/hsx +1 -0
  44. {hypershell-2.7.2 → hypershell-2.8.0}/share/man/man1/hs.1 +731 -99
  45. {hypershell-2.7.2 → hypershell-2.8.0}/share/man/man1/hsx.1 +731 -99
  46. {hypershell-2.7.2 → hypershell-2.8.0}/share/man/man1/hyper-shell.1 +731 -99
  47. hypershell-2.8.0/share/zsh/site-functions/_hs +602 -0
  48. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/__init__.py +15 -10
  49. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/client.py +472 -109
  50. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/cluster/__init__.py +136 -67
  51. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/cluster/local.py +73 -22
  52. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/cluster/remote.py +194 -51
  53. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/cluster/ssh.py +75 -22
  54. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/config.py +5 -15
  55. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/__init__.py +1 -1
  56. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/config.py +100 -38
  57. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/exceptions.py +1 -1
  58. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/fsm.py +1 -1
  59. hypershell-2.8.0/src/hypershell/core/heartbeat.py +81 -0
  60. hypershell-2.8.0/src/hypershell/core/logging.py +838 -0
  61. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/platform.py +1 -1
  62. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/pretty_print.py +6 -6
  63. hypershell-2.8.0/src/hypershell/core/queue.py +443 -0
  64. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/remote.py +1 -1
  65. hypershell-2.8.0/src/hypershell/core/resource.py +125 -0
  66. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/signal.py +16 -11
  67. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/sys.py +1 -1
  68. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/tag.py +5 -5
  69. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/template.py +4 -3
  70. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/thread.py +1 -1
  71. hypershell-2.8.0/src/hypershell/core/tls.py +466 -0
  72. hypershell-2.8.0/src/hypershell/core/types.py +118 -0
  73. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/core/uuid.py +1 -1
  74. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/data/__init__.py +24 -21
  75. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/data/core.py +47 -21
  76. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/data/model.py +194 -58
  77. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/server.py +322 -92
  78. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/submit.py +258 -53
  79. {hypershell-2.7.2 → hypershell-2.8.0}/src/hypershell/task.py +133 -68
  80. {hypershell-2.7.2 → hypershell-2.8.0}/tests/__init__.py +3 -3
  81. hypershell-2.8.0/tests/conftest.py +56 -0
  82. hypershell-2.8.0/tests/test_autoscale.py +156 -0
  83. {hypershell-2.7.2 → hypershell-2.8.0}/tests/test_cluster.py +66 -2
  84. {hypershell-2.7.2 → hypershell-2.8.0}/tests/test_data/__init__.py +1 -1
  85. {hypershell-2.7.2 → hypershell-2.8.0}/tests/test_data/test_core.py +1 -1
  86. {hypershell-2.7.2 → hypershell-2.8.0}/tests/test_data/test_model.py +1 -1
  87. hypershell-2.8.0/tests/test_groups.py +297 -0
  88. {hypershell-2.7.2 → hypershell-2.8.0}/tests/test_initdb.py +1 -1
  89. hypershell-2.8.0/tests/test_logging.py +119 -0
  90. {hypershell-2.7.2 → hypershell-2.8.0}/tests/test_main.py +1 -1
  91. hypershell-2.8.0/tests/test_queue_tls.py +572 -0
  92. {hypershell-2.7.2 → hypershell-2.8.0}/tests/test_server.py +2 -1
  93. {hypershell-2.7.2 → hypershell-2.8.0}/tests/test_submit.py +4 -3
  94. hypershell-2.8.0/uv.lock +2017 -0
  95. hypershell-2.7.2/.dockerignore +0 -1
  96. hypershell-2.7.2/.github/FUNDING.yml +0 -12
  97. hypershell-2.7.2/.github/workflows/publish.yml +0 -19
  98. hypershell-2.7.2/.github/workflows/tests.yml +0 -24
  99. hypershell-2.7.2/.readthedocs.yaml +0 -16
  100. hypershell-2.7.2/Apptainer +0 -38
  101. hypershell-2.7.2/Dockerfile +0 -34
  102. hypershell-2.7.2/docs/_include/cluster_usage.rst +0 -6
  103. hypershell-2.7.2/docs/_include/server_usage.rst +0 -4
  104. hypershell-2.7.2/docs/_include/submit_help.rst +0 -56
  105. hypershell-2.7.2/docs/_include/submit_usage.rst +0 -2
  106. hypershell-2.7.2/docs/_include/task_info_help.rst +0 -26
  107. hypershell-2.7.2/docs/_include/task_info_usage.rst +0 -2
  108. hypershell-2.7.2/docs/_include/task_update_usage.rst +0 -9
  109. hypershell-2.7.2/pyproject.toml +0 -93
  110. hypershell-2.7.2/share/bash_completion.d/hs +0 -826
  111. hypershell-2.7.2/src/hypershell/core/heartbeat.py +0 -70
  112. hypershell-2.7.2/src/hypershell/core/logging.py +0 -201
  113. hypershell-2.7.2/src/hypershell/core/queue.py +0 -155
  114. hypershell-2.7.2/src/hypershell/core/types.py +0 -57
  115. hypershell-2.7.2/tests/conftest.py +0 -27
  116. hypershell-2.7.2/uv.lock +0 -1878
  117. {hypershell-2.7.2 → hypershell-2.8.0}/CODE_OF_CONDUCT.md +0 -0
  118. {hypershell-2.7.2 → hypershell-2.8.0}/LICENSE +0 -0
  119. {hypershell-2.7.2 → hypershell-2.8.0}/docs/Makefile +0 -0
  120. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/citation.rst +0 -0
  121. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/client_desc.rst +0 -0
  122. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/cluster_desc.rst +0 -0
  123. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_desc.rst +0 -0
  124. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_edit_desc.rst +0 -0
  125. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_edit_help.rst +0 -0
  126. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_edit_usage.rst +0 -0
  127. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_get_desc.rst +0 -0
  128. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_get_help.rst +0 -0
  129. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_get_usage.rst +0 -0
  130. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_help.rst +0 -0
  131. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_intro.rst +0 -0
  132. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_intro_alt.rst +0 -0
  133. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_pythonpath.rst +0 -0
  134. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_set_desc.rst +0 -0
  135. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_set_help.rst +0 -0
  136. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_set_usage.rst +0 -0
  137. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_site_vars.rst +0 -0
  138. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_task_env.rst +0 -0
  139. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_task_env_alt.rst +0 -0
  140. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_usage.rst +0 -0
  141. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_which_desc.rst +0 -0
  142. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_which_help.rst +0 -0
  143. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/config_which_usage.rst +0 -0
  144. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/database_alt.rst +0 -0
  145. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/desc.rst +0 -0
  146. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/exit_status.rst +0 -0
  147. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/initdb_desc.rst +0 -0
  148. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/initdb_usage.rst +0 -0
  149. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/server_desc.rst +0 -0
  150. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_info_desc.rst +0 -0
  151. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_run_desc.rst +0 -0
  152. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_run_help.rst +0 -0
  153. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_run_usage.rst +0 -0
  154. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_search_desc.rst +0 -0
  155. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_submit_desc.rst +0 -0
  156. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_submit_help.rst +0 -0
  157. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_submit_usage.rst +0 -0
  158. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_update_desc.rst +0 -0
  159. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_wait_desc.rst +0 -0
  160. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_wait_help.rst +0 -0
  161. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/task_wait_usage.rst +0 -0
  162. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/templates.rst +0 -0
  163. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_include/templates_alt.rst +0 -0
  164. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_static/custom.css +0 -0
  165. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_static/logo-dark-mode.png +0 -0
  166. {hypershell-2.7.2 → hypershell-2.8.0}/docs/_static/logo-light-mode.png +0 -0
  167. {hypershell-2.7.2 → hypershell-2.8.0}/docs/api/data.rst +0 -0
  168. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20230329_2_2_0_release.rst +0 -0
  169. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20230413_2_3_0_release.rst +0 -0
  170. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20230602_2_4_0_release.rst +0 -0
  171. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20240518_2_5_0_release.rst +0 -0
  172. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20240706_2_5_2_release.rst +0 -0
  173. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20241115_2_6_0_release.rst +0 -0
  174. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20241115_announce_logo.rst +0 -0
  175. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20241231_2_6_1_release.rst +0 -0
  176. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20250215_2_6_5_release.rst +0 -0
  177. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20250405_2_6_6_release.rst +0 -0
  178. {hypershell-2.7.2 → hypershell-2.8.0}/docs/blog/20250504_2_7_0_release.rst +0 -0
  179. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/client.rst +0 -0
  180. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/cluster.rst +0 -0
  181. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/config.rst +0 -0
  182. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/config_edit.rst +0 -0
  183. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/config_get.rst +0 -0
  184. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/config_set.rst +0 -0
  185. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/config_which.rst +0 -0
  186. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/index.rst +0 -0
  187. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/initdb.rst +0 -0
  188. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/server.rst +0 -0
  189. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/submit.rst +0 -0
  190. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/task_info.rst +0 -0
  191. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/task_run.rst +0 -0
  192. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/task_search.rst +0 -0
  193. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/task_submit.rst +0 -0
  194. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/task_update.rst +0 -0
  195. {hypershell-2.7.2 → hypershell-2.8.0}/docs/cli/task_wait.rst +0 -0
  196. {hypershell-2.7.2 → hypershell-2.8.0}/docs/config.rst +0 -0
  197. {hypershell-2.7.2 → hypershell-2.8.0}/docs/database.rst +0 -0
  198. {hypershell-2.7.2 → hypershell-2.8.0}/docs/getting_started.rst +0 -0
  199. {hypershell-2.7.2 → hypershell-2.8.0}/docs/templates.rst +0 -0
  200. {hypershell-2.7.2 → hypershell-2.8.0}/docs/tutorial/advanced.rst +0 -0
  201. {hypershell-2.7.2 → hypershell-2.8.0}/docs/tutorial/basic.rst +0 -0
  202. {hypershell-2.7.2 → hypershell-2.8.0}/docs/tutorial/distributed.rst +0 -0
  203. {hypershell-2.7.2 → hypershell-2.8.0}/docs/tutorial/hybrid.rst +0 -0
@@ -133,3 +133,13 @@ dmypy.json
133
133
 
134
134
  # PyCharm
135
135
  .idea
136
+
137
+ # MacOS
138
+ .DS_Store
139
+
140
+ # Local-only security review notes (not for publication)
141
+ .security/
142
+
143
+ # Agent memory not committed to project
144
+ AGENTS.md
145
+ CLAUDE.md
@@ -1,7 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hypershell
3
- Version: 2.7.2
3
+ Version: 2.8.0
4
4
  Summary: A cross-platform, high-throughput computing utility for processing shell commands over a distributed, asynchronous queue.
5
+ Project-URL: Homepage, https://hypershell.org
6
+ Project-URL: Documentation, https://hypershell.readthedocs.io
7
+ Project-URL: Repository, https://github.com/hypershell/hypershell
8
+ Project-URL: Issues, https://github.com/hypershell/hypershell/issues
5
9
  Author-email: Geoffrey Lentner <glentner@purdue.edu>
6
10
  License-Expression: Apache-2.0
7
11
  License-File: LICENSE
@@ -11,24 +15,32 @@ Classifier: License :: OSI Approved :: Apache Software License
11
15
  Classifier: Operating System :: MacOS
12
16
  Classifier: Operating System :: Microsoft :: Windows
13
17
  Classifier: Operating System :: POSIX :: Linux
14
- Classifier: Programming Language :: Python :: 3.9
15
- Classifier: Programming Language :: Python :: 3.10
16
18
  Classifier: Programming Language :: Python :: 3.11
17
19
  Classifier: Programming Language :: Python :: 3.12
18
20
  Classifier: Programming Language :: Python :: 3.13
19
21
  Classifier: Programming Language :: Python :: 3.14
20
22
  Classifier: Topic :: Utilities
21
- Requires-Python: >=3.9
23
+ Requires-Python: >=3.11
22
24
  Requires-Dist: cmdkit[toml]>=2.7.7
25
+ Requires-Dist: cryptography>=3.4
23
26
  Requires-Dist: paramiko>=3.4.0
27
+ Requires-Dist: psutil>=7.0.0
24
28
  Requires-Dist: pyyaml>=6.0.1
25
29
  Requires-Dist: rich>=13.7.1
26
- Requires-Dist: sqlalchemy>=2.0.29
30
+ Requires-Dist: sqlalchemy>=2.0.50
27
31
  Requires-Dist: tomlkit>=0.13.2
32
+ Provides-Extra: cron
33
+ Requires-Dist: croniter>=6.2.2; extra == 'cron'
28
34
  Provides-Extra: postgres
29
- Requires-Dist: psycopg2>=2.9.9; extra == 'postgres'
35
+ Requires-Dist: psycopg[binary]>=3.1; extra == 'postgres'
36
+ Provides-Extra: postgres-c
37
+ Requires-Dist: psycopg[c]>=3.1; extra == 'postgres-c'
38
+ Provides-Extra: postgres-system
39
+ Requires-Dist: psycopg>=3.1; extra == 'postgres-system'
30
40
  Provides-Extra: uuid7
31
- Requires-Dist: uuid-utils>=0.10.0; extra == 'uuid7'
41
+ Requires-Dist: uuid-utils>=0.16.0; extra == 'uuid7'
42
+ Provides-Extra: zstd
43
+ Requires-Dist: zstandard>=0.25.0; extra == 'zstd'
32
44
  Description-Content-Type: text/x-rst
33
45
 
34
46
  HyperShell v2: Distributed Task Execution for HPC
@@ -70,18 +82,36 @@ scalable workflow automation tool for *many-task* scenarios.
70
82
 
71
83
  Built on Python and tested on Linux, macOS, and Windows.
72
84
 
73
- Several tools offer similar functionality but not all together in a single tool with
74
- the user ergonomics we provide. Novel design elements include but are not limited to
85
+ Other tools may offer similar functionality in some places but not within a single tool and
86
+ not with the flexibility, ergonomics, and scalability provided by HyperShell.
75
87
 
76
- * **Cross-platform:** run on any platform where Python runs. In fact, the server and
77
- client can run on different platforms in the same cluster.
78
- * **Client-server:** workloads do not need to be monolithic. Run the server as a
79
- stand-alone service with SQLite or Postgres as a persistent database and dynamically
80
- scale clients as needed.
81
- * **Staggered launch:** At the largest scales (1000s of nodes, 100k+ of workers),
82
- the launch process can be challenging. Come up gradually to balance the workload.
83
- * **Database in-the-loop:** run in-memory for quick, ad-hoc workloads. Otherwise,
84
- include a database for persistence, recovery when restarting, and search.
88
+ Design elements include but are not limited to:
89
+
90
+ * | **Client-server:** Run the server in stand-alone mode with SQLite or PostgreSQL.
91
+ | Scale clients elastically as needed (even down to zero).
92
+ * | **Cross-platform:** trivial to install, run on any platform where Python runs.
93
+ | Mix platforms within a running cluster (Server on Linux, Clients on Windows).
94
+ * | **Staggered launch:** Come up gradually to balance the workload.
95
+ | Scale to 1000+ nodes, 250k+ workers without crashing the server.
96
+ * | **Database in-the-loop:** persist task metadata across runs.
97
+ | Fault-tolerant by default. Automated retries. Task history.
98
+ * | **User-defined tags:** annotate tasks with ``key``:``value`` tags.
99
+ | Manage catalogs of large collections of tasks with ease.
100
+
101
+
102
+ Usage
103
+ -----
104
+
105
+ *HyperShell* is primarily a command-line program.
106
+ Most users will operate the ``hs cluster`` command (``hsx`` for short) in a start-to-finish workflow scenario much
107
+ like people tend to do with alternatives like ``xargs``, `GNU Parallel <https://gnu.org/software/parallel>`_,
108
+ or HPC-specific tools like `ParaFly <https://parafly.sourceforge.net>`_ or
109
+ `TaskFarmer <https://docs.nersc.gov/jobs/workflow/taskfarmer/>`_ (NERSC-only) or
110
+ `Launcher <https://tacc.utexas.edu/research/tacc-research/launcher/>`_ (TACC).
111
+
112
+ .. code-block:: shell
113
+
114
+ seq 1000000 | hsx -t 'echo {}' -N64 --ssh 'a[00-32].cluster' > task.out
85
115
 
86
116
 
87
117
  Documentation
@@ -93,14 +123,28 @@ comprehensive usage guide on the command line you can view the manual page with
93
123
  ``man hs``.
94
124
 
95
125
 
96
- Contributions
97
- -------------
126
+ Support and Contributions
127
+ -------------------------
128
+
129
+ Join the `Discord <https://discord.gg/wmv5gyUfkN>`_ server to post questions, discuss your project,
130
+ share with the community, keep in touch with announcements and upcoming events!
131
+
132
+ *HyperShell* is an open-source project developed on `GitHub <https://github.com/hypershell/hypershell>`_.
133
+ If you find bugs or issues with the software please create an `Issue <https://github.com/hypershell/hypershell/issues>`_.
134
+ Contributions are welcome in the form of `Pull requests <https://github.com/hypershell/hypershell/pulls>`_
135
+ for bug fixes, documentation, and minor feature improvements.
98
136
 
99
- Contributions are welcome. If you find bugs or have questions, open an *Issue* here.
100
137
  We've added a Code of Conduct recently, adapted from the
101
138
  `Contributor Covenant <https://www.contributor-covenant.org/>`_, version 2.0.
102
139
 
103
140
 
141
+ License
142
+ -------
143
+
144
+ *HyperShell* is released under the
145
+ `Apache Software License (v2) <https://www.apache.org/licenses/LICENSE-2.0>`_.
146
+
147
+
104
148
  Citation
105
149
  --------
106
150
 
@@ -37,18 +37,36 @@ scalable workflow automation tool for *many-task* scenarios.
37
37
 
38
38
  Built on Python and tested on Linux, macOS, and Windows.
39
39
 
40
- Several tools offer similar functionality but not all together in a single tool with
41
- the user ergonomics we provide. Novel design elements include but are not limited to
40
+ Other tools may offer similar functionality in some places but not within a single tool and
41
+ not with the flexibility, ergonomics, and scalability provided by HyperShell.
42
42
 
43
- * **Cross-platform:** run on any platform where Python runs. In fact, the server and
44
- client can run on different platforms in the same cluster.
45
- * **Client-server:** workloads do not need to be monolithic. Run the server as a
46
- stand-alone service with SQLite or Postgres as a persistent database and dynamically
47
- scale clients as needed.
48
- * **Staggered launch:** At the largest scales (1000s of nodes, 100k+ of workers),
49
- the launch process can be challenging. Come up gradually to balance the workload.
50
- * **Database in-the-loop:** run in-memory for quick, ad-hoc workloads. Otherwise,
51
- include a database for persistence, recovery when restarting, and search.
43
+ Design elements include but are not limited to:
44
+
45
+ * | **Client-server:** Run the server in stand-alone mode with SQLite or PostgreSQL.
46
+ | Scale clients elastically as needed (even down to zero).
47
+ * | **Cross-platform:** trivial to install, run on any platform where Python runs.
48
+ | Mix platforms within a running cluster (Server on Linux, Clients on Windows).
49
+ * | **Staggered launch:** Come up gradually to balance the workload.
50
+ | Scale to 1000+ nodes, 250k+ workers without crashing the server.
51
+ * | **Database in-the-loop:** persist task metadata across runs.
52
+ | Fault-tolerant by default. Automated retries. Task history.
53
+ * | **User-defined tags:** annotate tasks with ``key``:``value`` tags.
54
+ | Manage catalogs of large collections of tasks with ease.
55
+
56
+
57
+ Usage
58
+ -----
59
+
60
+ *HyperShell* is primarily a command-line program.
61
+ Most users will operate the ``hs cluster`` command (``hsx`` for short) in a start-to-finish workflow scenario much
62
+ like people tend to do with alternatives like ``xargs``, `GNU Parallel <https://gnu.org/software/parallel>`_,
63
+ or HPC-specific tools like `ParaFly <https://parafly.sourceforge.net>`_ or
64
+ `TaskFarmer <https://docs.nersc.gov/jobs/workflow/taskfarmer/>`_ (NERSC-only) or
65
+ `Launcher <https://tacc.utexas.edu/research/tacc-research/launcher/>`_ (TACC).
66
+
67
+ .. code-block:: shell
68
+
69
+ seq 1000000 | hsx -t 'echo {}' -N64 --ssh 'a[00-32].cluster' > task.out
52
70
 
53
71
 
54
72
  Documentation
@@ -60,14 +78,28 @@ comprehensive usage guide on the command line you can view the manual page with
60
78
  ``man hs``.
61
79
 
62
80
 
63
- Contributions
64
- -------------
81
+ Support and Contributions
82
+ -------------------------
83
+
84
+ Join the `Discord <https://discord.gg/wmv5gyUfkN>`_ server to post questions, discuss your project,
85
+ share with the community, keep in touch with announcements and upcoming events!
86
+
87
+ *HyperShell* is an open-source project developed on `GitHub <https://github.com/hypershell/hypershell>`_.
88
+ If you find bugs or issues with the software please create an `Issue <https://github.com/hypershell/hypershell/issues>`_.
89
+ Contributions are welcome in the form of `Pull requests <https://github.com/hypershell/hypershell/pulls>`_
90
+ for bug fixes, documentation, and minor feature improvements.
65
91
 
66
- Contributions are welcome. If you find bugs or have questions, open an *Issue* here.
67
92
  We've added a Code of Conduct recently, adapted from the
68
93
  `Contributor Covenant <https://www.contributor-covenant.org/>`_, version 2.0.
69
94
 
70
95
 
96
+ License
97
+ -------
98
+
99
+ *HyperShell* is released under the
100
+ `Apache Software License (v2) <https://www.apache.org/licenses/LICENSE-2.0>`_.
101
+
102
+
71
103
  Citation
72
104
  --------
73
105
 
@@ -1,8 +1,10 @@
1
1
  Options
2
2
  ^^^^^^^
3
3
 
4
- ``-N``, ``--num-tasks`` *NUM*
5
- Number of task executors (default: 1).
4
+ ``-N``, ``--num-threads`` *NUM*
5
+ Number of task executor threads (default: 1).
6
+
7
+ Set to 0 to auto-detect based on available CPU cores.
6
8
 
7
9
  ``-t``, ``--template`` *CMD*
8
10
  Command-line template pattern (default: "{}").
@@ -20,7 +22,7 @@ Options
20
22
  Using larger bundles is a good idea for large distributed workflows; specifically, it is best
21
23
  to coordinate bundle size with the number of executors in use by each client.
22
24
 
23
- See also ``--num-tasks`` and ``--bundlewait``.
25
+ See also ``--num-threads`` and ``--bundlewait``.
24
26
 
25
27
  ``-w``, ``--bundlewait`` *SEC*
26
28
  Seconds to wait before flushing tasks (default: 5).
@@ -69,7 +71,7 @@ Options
69
71
  ``-e``, ``--errors`` *PATH*
70
72
  File path for task errors (default: <stderr>).
71
73
 
72
- ``-c``, ``--capture``
74
+ ``--capture``
73
75
  Capture individual task <stdout> and <stderr>.
74
76
 
75
77
  By default, the `stdout` and `stderr` streams of all tasks are fused with that of the `client`
@@ -77,23 +79,52 @@ Options
77
79
  tasks need to manage their own output, you can specify a redirect as part of a ``--template``,
78
80
  or use ``--capture`` to capture these as ``.out`` and ``.err`` files.
79
81
 
80
- These are stored local to the `client` under `<prefix>/lib/task/<uuid>.[out,err]`.
81
- Task outputs can be automatically retrieved via SFTP, see *task* usage.
82
+ These are stored local to the `client` under `<site>/lib/task/<uuid>.[out,err]`.
83
+ Task outputs can be automatically retrieved via SFTP, see `hs info`.
82
84
 
83
85
  Mutually exclusive with both ``--output`` and ``--errors``.
84
86
 
85
- ``--timeout`` *SEC*
87
+ ``-T``, ``--timeout`` *SEC*
86
88
  Timeout in seconds for client. Automatically shutdown if no tasks received (default: never).
87
89
 
88
90
  This feature allows for gracefully scaling down a cluster when task throughput subsides.
89
91
 
90
92
 
91
- ``--task-timeout`` *SEC*
93
+ ``-W``, ``--task-timeout`` *SEC*
92
94
  Task-level walltime limit (default: none).
93
95
 
94
96
  Executors will send a progression of SIGINT, SIGTERM, and SIGKILL.
95
97
  If the process still persists the executor itself will shutdown.
96
98
 
99
+ ``-C``, ``--client-cores`` *NUM*
100
+ Limit available cores for client (default: all cores).
101
+
102
+ Sets an upper bound on the number of CPU cores that the client can use.
103
+ This allows running multiple clients on the same node by partitioning resources.
104
+ The client will not execute tasks if doing so would exceed this limit.
105
+
106
+ See also ``--num-threads=0``.
107
+
108
+ ``-M``, ``--client-memory`` *SIZE*
109
+ Limit available memory for client (default: all memory).
110
+
111
+ Sets an upper bound on the amount of memory that the client can use.
112
+ Specify memory size with units (e.g., '16GB', '4096MB'). This allows running
113
+ multiple clients on the same node by partitioning resources.
114
+
115
+ ``--monitor``
116
+ Enable resource monitoring for tasks.
117
+
118
+ When enabled, the client will monitor CPU and memory usage of running tasks
119
+ and their child processes, reporting peak usage back to the server.
120
+ Time-series data is stored in CSV format alongside task outputs.
121
+
122
+ See also ``--capture``.
123
+
124
+ ``-R``, ``--ratelimit`` *NUM*
125
+ Maximum allowed tasks per second per client. (default: none).
126
+ Individual tasks are throttled if exceeding this average limit.
127
+
97
128
  ``-S``, ``--signalwait`` *SEC*
98
129
  Task-level signal escalation wait period in seconds (default: 10).
99
130
 
@@ -101,3 +132,5 @@ Options
101
132
  this interval in seconds before escalating to the next level of interrupt.
102
133
 
103
134
  See also ``--task-timeout``.
135
+
136
+ .. include:: /_include/tls_cli_options.rst
@@ -1,4 +1,6 @@
1
1
  ``hs`` ``client`` ``[-h]``
2
2
  ``[-N NUM]`` ``[-t TEMPLATE]`` ``[-b SIZE]`` ``[-w SEC]`` ``[-H ADDR]`` ``[-p PORT]``
3
3
  ``[-k KEY]`` ``[--capture | [-o PATH] [-e PATH]]`` ``[--no-confirm]``
4
- ``[-d SEC]`` ``[-T SEC]`` ``[-W SEC]`` ``[-S SEC]``
4
+ ``[-d SEC]`` ``[-T SEC]`` ``[-W SEC]`` ``[-S SEC]`` ``[-R NUM]``
5
+ ``[-C NUM]`` ``[-M MEM]`` ``[--monitor]``
6
+ ``[--no-tls | [--tls-ca PATH] [--tls-cert PATH] [--tls-key PATH]]``
@@ -25,8 +25,10 @@ Modes
25
25
  Options
26
26
  ^^^^^^^
27
27
 
28
- ``-N``, ``--num-tasks`` *NUM*
29
- Number of task executors per client (default: 1).
28
+ ``-N``, ``--num-threads`` *NUM*
29
+ Number of executor threads per client (default: 1).
30
+
31
+ Set to 0 to auto-detect based on available CPU cores on each client.
30
32
 
31
33
  For example, ``-N4`` would create four workers, but ``-N4 --ssh 'cluster-a[00-01].xyz'``
32
34
  creates two clients and a total of eight workers.
@@ -41,7 +43,13 @@ Options
41
43
 
42
44
  See section on `templates`.
43
45
 
44
- ``-p``, ``--port`` *NUM*
46
+ ``-H``, ``--bind`` *ADDR*
47
+ Bind address (default: localhost, or 0.0.0.0 for remote clients).
48
+
49
+ Sets the address the server binds to. When launching clients on remote hosts
50
+ (``--ssh``, ``--mpi``, or ``--launcher``), bind to *0.0.0.0* so they can connect.
51
+
52
+ ``-p``, ``--port`` *PORT*
45
53
  Port number (default: 50001).
46
54
 
47
55
  This is an arbitrary choice and simply must be an available port. The default option chosen
@@ -58,7 +66,7 @@ Options
58
66
  Using larger bundles is a good idea for large distributed workflows; specifically, it is best
59
67
  to coordinate bundle size with the number of executors in use by each client.
60
68
 
61
- See also ``--num-tasks`` and ``--bundlewait``.
69
+ See also ``--num-threads`` and ``--bundlewait``.
62
70
 
63
71
  ``-w``, ``--bundlewait`` *SEC*
64
72
  Seconds to wait before flushing tasks (default: 5).
@@ -69,6 +77,14 @@ Options
69
77
 
70
78
  See also ``--bundlesize``.
71
79
 
80
+ ``-Q``, ``--poll`` *NUM*
81
+ Polling interval in seconds between database queries if no tasks are available (default: 5).
82
+
83
+ This controls how frequently the scheduler checks the database for new tasks when idle.
84
+ Lower values (e.g., 1-2 seconds) provide faster responsiveness but may increase database
85
+ query load. Higher values (e.g., 10-30 seconds) reduce query frequency, useful for
86
+ workflows with infrequent task submission.
87
+
72
88
  ``-r``, ``--max-retries`` *NUM*
73
89
  Auto-retry failed tasks (default: 0).
74
90
 
@@ -94,7 +110,7 @@ Options
94
110
  ``--initdb``
95
111
  Auto-initialize database.
96
112
 
97
- If a database is configured for use with the workflow (e.g., Postgres), auto-initialize
113
+ If a database is configured for use with the workflow (e.g., PostgreSQL), auto-initialize
98
114
  tables if they don't already exist. This is a short-hand for pre-creating tables with the
99
115
  ``hs initdb`` command. This happens by default with SQLite databases.
100
116
 
@@ -162,7 +178,7 @@ Options
162
178
  This also has the effect of staggering the workload. If your tasks take on the order of 30
163
179
  minutes and you have 1000 nodes, choose ``--delay-start=-1800``.
164
180
 
165
- ``-c``, ``--capture``
181
+ ``--capture``
166
182
  Capture individual task <stdout> and <stderr>.
167
183
 
168
184
  By default, the `stdout` and `stderr` streams of all tasks are fused with that of the `client`
@@ -170,8 +186,8 @@ Options
170
186
  tasks need to manage their own output, you can specify a redirect as part of a ``--template``,
171
187
  or use ``--capture`` to capture these as ``.out`` and ``.err`` files.
172
188
 
173
- These are stored local to the `client`. Task outputs can be automatically retrieved via SFTP,
174
- see *task* usage.
189
+ These are stored local to the `client` under `<prefix>/lib/task/<uuid>.[out,err]`.
190
+ Task outputs can be automatically retrieved via SFTP, see `info`.
175
191
 
176
192
  ``-o``, ``--output`` *PATH*
177
193
  File path for task outputs (default: <stdout>).
@@ -195,8 +211,7 @@ Options
195
211
  ``-T``, ``--timeout`` *SEC*
196
212
  Timeout in seconds for clients. Automatically shutdown if no tasks received (default: never).
197
213
 
198
- This option is only valid for an ``--autoscaling`` cluster. This feature allows for gracefully
199
- scaling down a cluster when task throughput subsides.
214
+ This feature allows for gracefully scaling down a cluster when task throughput subsides.
200
215
 
201
216
  ``-W``, ``--task-timeout`` *SEC*
202
217
  Task-level walltime limit (default: none).
@@ -204,6 +219,48 @@ Options
204
219
  Executors will send a progression of SIGINT, SIGTERM, and SIGKILL.
205
220
  If the process still persists the executor itself will shutdown.
206
221
 
222
+ ``-c``, ``--cores`` *NUM*
223
+ Number of CPU cores required per task (default: none).
224
+
225
+ When specified, tasks will only be executed when the required number of cores
226
+ is available. Used with resource-aware scheduling and backfill.
227
+
228
+ ``-m``, ``--memory`` *MEM*
229
+ Amount of memory required per task (default: none).
230
+
231
+ Specify memory size with units (e.g., '4GB', '512MB'). Tasks will only be
232
+ executed when the required memory is available. Used with resource-aware
233
+ scheduling and backfill.
234
+
235
+ ``-C``, ``--client-cores`` *NUM*
236
+ Limit available cores per client (default: all cores).
237
+
238
+ Sets an upper bound on the number of CPU cores that each client can use.
239
+ This allows running multiple clients on the same node by partitioning resources.
240
+ Clients will not execute tasks if doing so would exceed this limit.
241
+
242
+ See also ``--num-threads=0``.
243
+
244
+ ``-M``, ``--client-memory`` *MEM*
245
+ Limit available memory per client (default: all memory).
246
+
247
+ Sets an upper bound on the amount of memory that each client can use.
248
+ Specify memory size with units (e.g., '16GB', '4096MB'). This allows running
249
+ multiple clients on the same node by partitioning resources.
250
+
251
+ ``--monitor``
252
+ Enable resource monitoring for tasks.
253
+
254
+ When enabled, clients will monitor CPU and memory usage of running tasks
255
+ and their child processes, reporting peak usage back to the server.
256
+ Time-series data is stored in CSV format alongside task outputs.
257
+
258
+ See also ``--capture``.
259
+
260
+ ``-R``, ``--ratelimit`` *NUM*
261
+ Maximum allowed tasks per second per client. (default: none).
262
+ Individual tasks are throttled if exceeding this average limit.
263
+
207
264
  ``-S``, ``--signalwait`` *SEC*
208
265
  Task-level signal escalation wait period in seconds (default: 10).
209
266
 
@@ -240,10 +297,15 @@ Options
240
297
  This value expresses some multiple of the average task duration in seconds.
241
298
 
242
299
  The autoscaler periodically checks ``toc / (factor x avg_duration)``, where
243
- ``toc`` is the estimated time of completion for all remaining tasks given current
244
- throughput of active clients. This ratio is referred to as *task pressure*, and if
245
- it exceeds 1, the pressure is considered *high* and we will add another client if
246
- we are not already at the given ``--max-size`` of the cluster.
300
+ ``toc`` is the estimated time of completion for remaining tasks in the active
301
+ *task group* given current throughput of active clients. This ratio is referred to
302
+ as *task pressure*, and if it exceeds 1, the pressure is considered *high* and we
303
+ will add another client if we are not already at the given ``--max-size`` of the
304
+ cluster.
305
+
306
+ Task pressure is relative to the active task group; tasks waiting in later groups
307
+ do not contribute. The scheduler only distributes tasks within the active group,
308
+ so scaling out for a future backlog would only create idle clients.
247
309
 
248
310
  For example, if the average task length is 30 minutes, and we set ``--factor=2``, then if
249
311
  the estimated time of completion of remaining tasks given currently connected executors
@@ -279,9 +341,11 @@ Options
279
341
  Only valid with ``--autoscaling``.
280
342
 
281
343
  ``-Y``, ``--max-size`` *SIZE*
282
- Maximum size of cluster (default: 2).
344
+ Maximum size of cluster (default: 1).
283
345
 
284
346
  For a *dynamic* autoscaling policy, this sets an upper limit on the number of launched
285
347
  clients. When this number is reached, scaling stops regardless of task pressure.
286
348
 
287
349
  Only valid with ``--autoscaling``.
350
+
351
+ .. include:: /_include/tls_cli_options.rst
@@ -0,0 +1,8 @@
1
+ ``hs cluster [-h]`` ``[FILE | --restart | --forever]``
2
+ ``[-N NUM]`` ``[-t CMD]`` ``[-b SIZE]`` ``[-w SEC]`` ``[-Q NUM]``
3
+ ``[-H ADDR]`` ``[-p PORT]`` ``[-r NUM [--eager]]`` ``[-f PATH]`` ``[--capture | [-o PATH] [-e PATH]]``
4
+ ``[--ssh [HOST... | --ssh-group NAME] [--env] | --mpi | --launcher=ARGS...]``
5
+ ``[--no-db [--no-confirm] | --initdb]`` ``[-d SEC]`` ``[-T SEC]`` ``[-W SEC]`` ``[-S SEC]`` ``[-R NUM]``
6
+ ``[-c NUM]`` ``[-m MEM]`` ``[-C NUM]`` ``[-M MEM]`` ``[--monitor]``
7
+ ``[--autoscaling [MODE] [-P SEC] [-F VALUE] [-I NUM] [-X NUM] [-Y NUM]]``
8
+ ``[--no-tls | [--tls-ca PATH] [--tls-cert PATH] [--tls-key PATH]]``