hypershell 2.7.1__tar.gz → 2.7.2__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 (177) hide show
  1. {hypershell-2.7.1 → hypershell-2.7.2}/Apptainer +1 -1
  2. {hypershell-2.7.1 → hypershell-2.7.2}/Dockerfile +1 -1
  3. {hypershell-2.7.1 → hypershell-2.7.2}/PKG-INFO +9 -5
  4. {hypershell-2.7.1 → hypershell-2.7.2}/README.rst +8 -4
  5. hypershell-2.7.2/docs/_include/config_desc.rst +1 -0
  6. hypershell-2.7.2/docs/_include/config_help.rst +26 -0
  7. hypershell-2.7.2/docs/_include/config_usage.rst +9 -0
  8. hypershell-2.7.2/docs/cli/config.rst +18 -0
  9. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/index.rst +1 -0
  10. {hypershell-2.7.1 → hypershell-2.7.2}/docs/getting_started.rst +1 -1
  11. {hypershell-2.7.1 → hypershell-2.7.2}/docs/index.rst +8 -0
  12. hypershell-2.7.2/docs/install.rst +322 -0
  13. {hypershell-2.7.1 → hypershell-2.7.2}/pyproject.toml +1 -1
  14. {hypershell-2.7.1 → hypershell-2.7.2}/share/bash_completion.d/hs +1 -1
  15. {hypershell-2.7.1 → hypershell-2.7.2}/share/man/man1/hs.1 +1 -1
  16. {hypershell-2.7.1 → hypershell-2.7.2}/share/man/man1/hsx.1 +1 -1
  17. {hypershell-2.7.1 → hypershell-2.7.2}/share/man/man1/hyper-shell.1 +1 -1
  18. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/config.py +21 -20
  19. {hypershell-2.7.1 → hypershell-2.7.2}/uv.lock +1 -1
  20. hypershell-2.7.1/docs/install.rst +0 -167
  21. hypershell-2.7.1/share/zsh/site-functions/_hs +0 -81
  22. {hypershell-2.7.1 → hypershell-2.7.2}/.dockerignore +0 -0
  23. {hypershell-2.7.1 → hypershell-2.7.2}/.github/FUNDING.yml +0 -0
  24. {hypershell-2.7.1 → hypershell-2.7.2}/.github/workflows/publish.yml +0 -0
  25. {hypershell-2.7.1 → hypershell-2.7.2}/.github/workflows/tests.yml +0 -0
  26. {hypershell-2.7.1 → hypershell-2.7.2}/.gitignore +0 -0
  27. {hypershell-2.7.1 → hypershell-2.7.2}/.readthedocs.yaml +0 -0
  28. {hypershell-2.7.1 → hypershell-2.7.2}/CODE_OF_CONDUCT.md +0 -0
  29. {hypershell-2.7.1 → hypershell-2.7.2}/LICENSE +0 -0
  30. {hypershell-2.7.1 → hypershell-2.7.2}/docs/Makefile +0 -0
  31. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/citation.rst +0 -0
  32. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/client_desc.rst +0 -0
  33. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/client_help.rst +0 -0
  34. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/client_usage.rst +0 -0
  35. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/cluster_desc.rst +0 -0
  36. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/cluster_help.rst +0 -0
  37. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/cluster_usage.rst +0 -0
  38. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_edit_desc.rst +0 -0
  39. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_edit_help.rst +0 -0
  40. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_edit_usage.rst +0 -0
  41. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_get_desc.rst +0 -0
  42. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_get_help.rst +0 -0
  43. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_get_usage.rst +0 -0
  44. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_intro.rst +0 -0
  45. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_intro_alt.rst +0 -0
  46. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_param_ref.rst +0 -0
  47. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_pythonpath.rst +0 -0
  48. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_set_desc.rst +0 -0
  49. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_set_help.rst +0 -0
  50. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_set_usage.rst +0 -0
  51. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_site_vars.rst +0 -0
  52. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_task_env.rst +0 -0
  53. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_task_env_alt.rst +0 -0
  54. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_which_desc.rst +0 -0
  55. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_which_help.rst +0 -0
  56. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/config_which_usage.rst +0 -0
  57. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/database.rst +0 -0
  58. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/database_alt.rst +0 -0
  59. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/desc.rst +0 -0
  60. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/exit_status.rst +0 -0
  61. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/initdb_desc.rst +0 -0
  62. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/initdb_help.rst +0 -0
  63. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/initdb_usage.rst +0 -0
  64. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/license.rst +0 -0
  65. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/server_desc.rst +0 -0
  66. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/server_help.rst +0 -0
  67. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/server_usage.rst +0 -0
  68. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/signals.rst +0 -0
  69. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/submit_desc.rst +0 -0
  70. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/submit_help.rst +0 -0
  71. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/submit_usage.rst +0 -0
  72. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_info_desc.rst +0 -0
  73. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_info_help.rst +0 -0
  74. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_info_usage.rst +0 -0
  75. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_run_desc.rst +0 -0
  76. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_run_help.rst +0 -0
  77. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_run_usage.rst +0 -0
  78. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_search_desc.rst +0 -0
  79. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_search_help.rst +0 -0
  80. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_search_usage.rst +0 -0
  81. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_submit_desc.rst +0 -0
  82. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_submit_help.rst +0 -0
  83. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_submit_usage.rst +0 -0
  84. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_update_desc.rst +0 -0
  85. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_update_help.rst +0 -0
  86. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_update_usage.rst +0 -0
  87. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_wait_desc.rst +0 -0
  88. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_wait_help.rst +0 -0
  89. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/task_wait_usage.rst +0 -0
  90. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/templates.rst +0 -0
  91. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_include/templates_alt.rst +0 -0
  92. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_static/custom.css +0 -0
  93. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_static/logo-dark-mode.png +0 -0
  94. {hypershell-2.7.1 → hypershell-2.7.2}/docs/_static/logo-light-mode.png +0 -0
  95. {hypershell-2.7.1 → hypershell-2.7.2}/docs/api/client.rst +0 -0
  96. {hypershell-2.7.1 → hypershell-2.7.2}/docs/api/cluster.rst +0 -0
  97. {hypershell-2.7.1 → hypershell-2.7.2}/docs/api/data.rst +0 -0
  98. {hypershell-2.7.1 → hypershell-2.7.2}/docs/api/index.rst +0 -0
  99. {hypershell-2.7.1 → hypershell-2.7.2}/docs/api/server.rst +0 -0
  100. {hypershell-2.7.1 → hypershell-2.7.2}/docs/api/submit.rst +0 -0
  101. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20230329_2_2_0_release.rst +0 -0
  102. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20230413_2_3_0_release.rst +0 -0
  103. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20230602_2_4_0_release.rst +0 -0
  104. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20240518_2_5_0_release.rst +0 -0
  105. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20240706_2_5_2_release.rst +0 -0
  106. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20241115_2_6_0_release.rst +0 -0
  107. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20241115_announce_logo.rst +0 -0
  108. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20241231_2_6_1_release.rst +0 -0
  109. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20250215_2_6_5_release.rst +0 -0
  110. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20250405_2_6_6_release.rst +0 -0
  111. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/20250504_2_7_0_release.rst +0 -0
  112. {hypershell-2.7.1 → hypershell-2.7.2}/docs/blog/index.rst +0 -0
  113. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/client.rst +0 -0
  114. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/cluster.rst +0 -0
  115. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/config_edit.rst +0 -0
  116. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/config_get.rst +0 -0
  117. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/config_set.rst +0 -0
  118. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/config_which.rst +0 -0
  119. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/initdb.rst +0 -0
  120. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/server.rst +0 -0
  121. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/submit.rst +0 -0
  122. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/task_info.rst +0 -0
  123. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/task_run.rst +0 -0
  124. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/task_search.rst +0 -0
  125. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/task_submit.rst +0 -0
  126. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/task_update.rst +0 -0
  127. {hypershell-2.7.1 → hypershell-2.7.2}/docs/cli/task_wait.rst +0 -0
  128. {hypershell-2.7.1 → hypershell-2.7.2}/docs/conf.py +0 -0
  129. {hypershell-2.7.1 → hypershell-2.7.2}/docs/config.rst +0 -0
  130. {hypershell-2.7.1 → hypershell-2.7.2}/docs/database.rst +0 -0
  131. {hypershell-2.7.1 → hypershell-2.7.2}/docs/logging.rst +0 -0
  132. {hypershell-2.7.1 → hypershell-2.7.2}/docs/manual.rst +0 -0
  133. {hypershell-2.7.1 → hypershell-2.7.2}/docs/roadmap.rst +0 -0
  134. {hypershell-2.7.1 → hypershell-2.7.2}/docs/templates.rst +0 -0
  135. {hypershell-2.7.1 → hypershell-2.7.2}/docs/tutorial/advanced.rst +0 -0
  136. {hypershell-2.7.1 → hypershell-2.7.2}/docs/tutorial/basic.rst +0 -0
  137. {hypershell-2.7.1 → hypershell-2.7.2}/docs/tutorial/distributed.rst +0 -0
  138. {hypershell-2.7.1 → hypershell-2.7.2}/docs/tutorial/hybrid.rst +0 -0
  139. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/__init__.py +0 -0
  140. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/client.py +0 -0
  141. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/cluster/__init__.py +0 -0
  142. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/cluster/local.py +0 -0
  143. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/cluster/remote.py +0 -0
  144. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/cluster/ssh.py +0 -0
  145. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/__init__.py +0 -0
  146. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/config.py +0 -0
  147. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/exceptions.py +0 -0
  148. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/fsm.py +0 -0
  149. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/heartbeat.py +0 -0
  150. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/logging.py +0 -0
  151. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/platform.py +0 -0
  152. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/pretty_print.py +0 -0
  153. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/queue.py +0 -0
  154. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/remote.py +0 -0
  155. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/signal.py +0 -0
  156. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/sys.py +0 -0
  157. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/tag.py +0 -0
  158. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/template.py +0 -0
  159. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/thread.py +0 -0
  160. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/types.py +0 -0
  161. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/core/uuid.py +0 -0
  162. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/data/__init__.py +0 -0
  163. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/data/core.py +0 -0
  164. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/data/model.py +0 -0
  165. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/server.py +0 -0
  166. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/submit.py +0 -0
  167. {hypershell-2.7.1 → hypershell-2.7.2}/src/hypershell/task.py +0 -0
  168. {hypershell-2.7.1 → hypershell-2.7.2}/tests/__init__.py +0 -0
  169. {hypershell-2.7.1 → hypershell-2.7.2}/tests/conftest.py +0 -0
  170. {hypershell-2.7.1 → hypershell-2.7.2}/tests/test_cluster.py +0 -0
  171. {hypershell-2.7.1 → hypershell-2.7.2}/tests/test_data/__init__.py +0 -0
  172. {hypershell-2.7.1 → hypershell-2.7.2}/tests/test_data/test_core.py +0 -0
  173. {hypershell-2.7.1 → hypershell-2.7.2}/tests/test_data/test_model.py +0 -0
  174. {hypershell-2.7.1 → hypershell-2.7.2}/tests/test_initdb.py +0 -0
  175. {hypershell-2.7.1 → hypershell-2.7.2}/tests/test_main.py +0 -0
  176. {hypershell-2.7.1 → hypershell-2.7.2}/tests/test_server.py +0 -0
  177. {hypershell-2.7.1 → hypershell-2.7.2}/tests/test_submit.py +0 -0
@@ -3,7 +3,7 @@ From: python:3.13-slim
3
3
  Stage: final
4
4
 
5
5
  %labels
6
- Version="2.7.0"
6
+ Version="2.7.2"
7
7
  Author="glentner@purdue.edu"
8
8
 
9
9
  %files
@@ -1,7 +1,7 @@
1
1
  FROM python:3.13-slim
2
2
  COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
3
3
 
4
- LABEL version="2.7.0"
4
+ LABEL version="2.7.2"
5
5
  LABEL authors="glentner@purdue.edu"
6
6
  LABEL org.opencontainers.image.source="https://github.com/hypershell/hypershell"
7
7
  LABEL org.opencontainers.image.description="HyperShell Base Image"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hypershell
3
- Version: 2.7.1
3
+ Version: 2.7.2
4
4
  Summary: A cross-platform, high-throughput computing utility for processing shell commands over a distributed, asynchronous queue.
5
5
  Author-email: Geoffrey Lentner <glentner@purdue.edu>
6
6
  License-Expression: Apache-2.0
@@ -42,14 +42,14 @@ HyperShell v2: Distributed Task Execution for HPC
42
42
  :target: https://github.com/hypershell/hypershell/releases
43
43
  :alt: Github Release
44
44
 
45
- .. image:: https://static.pepy.tech/badge/hypershell/month
46
- :target: https://pypi.org/project/hypershell/
47
- :alt: PyPI Monthly Downloads
48
-
49
45
  .. image:: https://img.shields.io/badge/Python-3.9+-blue.svg
50
46
  :target: https://www.python.org/downloads
51
47
  :alt: Python Versions
52
48
 
49
+ .. image:: https://static.pepy.tech/badge/hypershell/month
50
+ :target: https://pypi.org/project/hypershell/
51
+ :alt: PyPI Monthly Downloads
52
+
53
53
  .. image:: https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg
54
54
  :target: https://www.contributor-covenant.org/version/2/1/code_of_conduct/
55
55
  :alt: Code of Conduct
@@ -58,6 +58,10 @@ HyperShell v2: Distributed Task Execution for HPC
58
58
  :target: https://hypershell.readthedocs.io/en/latest/?badge=latest
59
59
  :alt: Documentation Status
60
60
 
61
+ .. image:: https://github.com/hypershell/hypershell/actions/workflows/tests.yml/badge.svg
62
+ :target: https://github.com/hypershell/hypershell/actions/workflows/tests.yml
63
+ :alt: Tests
64
+
61
65
  |
62
66
 
63
67
  *HyperShell* is an elegant, cross-platform, high-throughput computing utility for
@@ -9,14 +9,14 @@ HyperShell v2: Distributed Task Execution for HPC
9
9
  :target: https://github.com/hypershell/hypershell/releases
10
10
  :alt: Github Release
11
11
 
12
- .. image:: https://static.pepy.tech/badge/hypershell/month
13
- :target: https://pypi.org/project/hypershell/
14
- :alt: PyPI Monthly Downloads
15
-
16
12
  .. image:: https://img.shields.io/badge/Python-3.9+-blue.svg
17
13
  :target: https://www.python.org/downloads
18
14
  :alt: Python Versions
19
15
 
16
+ .. image:: https://static.pepy.tech/badge/hypershell/month
17
+ :target: https://pypi.org/project/hypershell/
18
+ :alt: PyPI Monthly Downloads
19
+
20
20
  .. image:: https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg
21
21
  :target: https://www.contributor-covenant.org/version/2/1/code_of_conduct/
22
22
  :alt: Code of Conduct
@@ -25,6 +25,10 @@ HyperShell v2: Distributed Task Execution for HPC
25
25
  :target: https://hypershell.readthedocs.io/en/latest/?badge=latest
26
26
  :alt: Documentation Status
27
27
 
28
+ .. image:: https://github.com/hypershell/hypershell/actions/workflows/tests.yml/badge.svg
29
+ :target: https://github.com/hypershell/hypershell/actions/workflows/tests.yml
30
+ :alt: Tests
31
+
28
32
  |
29
33
 
30
34
  *HyperShell* is an elegant, cross-platform, high-throughput computing utility for
@@ -0,0 +1 @@
1
+ Manage configuration.
@@ -0,0 +1,26 @@
1
+ Commands
2
+ ^^^^^^^^
3
+
4
+ ``get``
5
+ Get configuration option.
6
+
7
+ ``set``
8
+ Set configuration option.
9
+
10
+ ``edit``
11
+ Edit configuration with default editor.
12
+
13
+ ``which``
14
+ Show origin of configuration option.
15
+
16
+ Options
17
+ ^^^^^^^
18
+
19
+ ``--system``
20
+ Show system-level config path.
21
+
22
+ ``--user``
23
+ Show user-level config path.
24
+
25
+ ``--local``
26
+ Show local-level config path.
@@ -0,0 +1,9 @@
1
+ ``hs`` ``config`` ``[-h]`` ``[--system | --local | --user]``
2
+
3
+ ``hs`` ``config`` ``get`` ``[-h]`` ``SECTION[...].VAR`` ``[-x]`` ``[-r]`` ``[--system | --user | --local | --default]``
4
+
5
+ ``hs`` ``config`` ``set`` ``[-h]`` ``SECTION[...].VAR`` ``VALUE`` ``[--system | --user | --local]``
6
+
7
+ ``hs`` ``config`` ``edit`` ``[-h]`` ``[--system | --user | --local]``
8
+
9
+ ``hs`` ``config`` ``which`` ``[-h]`` ``SECTION[...].VAR`` ``[--site]``
@@ -0,0 +1,18 @@
1
+ .. _cli_config:
2
+
3
+ Config
4
+ ======
5
+
6
+ Usage
7
+ -----
8
+
9
+ .. include:: ../_include/config_usage.rst
10
+
11
+ Description
12
+ -----------
13
+
14
+ .. include:: ../_include/config_desc.rst
15
+
16
+ |
17
+
18
+ .. include:: ../_include/config_help.rst
@@ -27,6 +27,7 @@ Subcommands
27
27
  run <task_run>
28
28
  list <task_search>
29
29
  update <task_update>
30
+ config <config>
30
31
  config get <config_get>
31
32
  config set <config_set>
32
33
  config edit <config_edit>
@@ -13,7 +13,7 @@ the top-level entry point *script* on your `PATH`. The well-known `uv <https://d
13
13
  utility handles all of this nicely for unprivileged users installing for themselves.
14
14
 
15
15
  See the :ref:`installation <install>` guide for more options and additional notes and
16
- recommendations.
16
+ recommendations, including package `extras` for PostgreSQL, UUIDv7, etc.
17
17
 
18
18
 
19
19
  .. tab:: uv
@@ -15,10 +15,18 @@ Release v\ |release| (:ref:`Getting Started <getting_started>`)
15
15
  :target: https://www.python.org/downloads
16
16
  :alt: Python Versions
17
17
 
18
+ .. image:: https://static.pepy.tech/badge/hypershell/month
19
+ :target: https://pypi.org/project/hypershell/
20
+ :alt: PyPI Monthly Downloads
21
+
18
22
  .. image:: https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg
19
23
  :target: https://www.contributor-covenant.org/version/2/1/code_of_conduct/
20
24
  :alt: Code of Conduct
21
25
 
26
+ .. image:: https://github.com/hypershell/hypershell/actions/workflows/tests.yml/badge.svg
27
+ :target: https://github.com/hypershell/hypershell/actions/workflows/tests.yml
28
+ :alt: Tests
29
+
22
30
  |
23
31
 
24
32
  .. include:: _include/desc.rst
@@ -0,0 +1,322 @@
1
+ .. _install:
2
+
3
+ Installation
4
+ ============
5
+
6
+ |
7
+
8
+ Installing *HyperShell* can take several forms. At the end of the day it is a Python package
9
+ and needs to live within some prefix and be tied to some Python runtime. As a system utility
10
+ we probably do not want to expose our dependencies to other user environments incidentally.
11
+ For these reasons, it is recommended to isolate *HyperShell* within its own virtual environment
12
+ and only exposed the top-level entry point *script* to the users `PATH`.
13
+
14
+ -------------------
15
+
16
+ Basic Installation
17
+ ------------------
18
+
19
+ |
20
+
21
+ The `uv <https://docs.astral.sh/uv/>`_ utility wraps all of this up nicely for user-level
22
+ installations. On any platform, if installing for yourself, especially if you lack root
23
+ or administrative privileges, we recommend the following.
24
+
25
+ .. admonition:: Install HyperShell using uv
26
+ :class: note
27
+
28
+ .. code-block:: shell
29
+
30
+ uv tool install hypershell
31
+
32
+
33
+ For `macOS` users we can accomplish the same thing with `Homebrew <https://brew.sh>`_.
34
+ This formula essentially does the same thing but managed by ``brew`` instead.
35
+
36
+
37
+ .. admonition:: Install HyperShell using Homebrew
38
+ :class: note
39
+
40
+ .. code-block:: shell
41
+
42
+ brew tap hypershell/tap
43
+ brew install hypershell
44
+
45
+
46
+ The `macOS` Homebrew installation method automatically includes the package extras needed
47
+ for using PostgreSQL as a backend but does not include the UUIDv7 extra. When installing
48
+ the package directly from the package index, the following extras are available
49
+
50
+ * ``postgres``: includes ``psycopg2`` for using PostgreSQL
51
+ * ``uuid7``: includes ``uuid-utils`` and to auto-enable use of UUIDv7 for task IDs.
52
+
53
+ For example, you could install HyperShell with the following:
54
+
55
+ .. admonition:: Install HyperShell with PostgreSQL support
56
+ :class: note
57
+
58
+ .. code-block:: shell
59
+
60
+ uv tool install 'hypershell[postgres]' --python 3.13
61
+
62
+
63
+ -------------------
64
+
65
+ Linux Packages
66
+ --------------
67
+
68
+ |
69
+
70
+ We want to support Linux package managers directly to make it easy to use HyperShell as a system-level
71
+ tool with minimal effort to add to your environment. The following Linux distributions are currently
72
+ being considered but may or may not be available currently.
73
+
74
+ |
75
+
76
+ Debian / Ubuntu (coming soon)
77
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
78
+
79
+ .. admonition:: Install as a Debian package
80
+ :class: note
81
+
82
+ .. code-block:: shell
83
+
84
+ sudo apt install hypershell
85
+
86
+ |
87
+
88
+ Ubuntu (coming soon)
89
+ ^^^^^^^^^^^^^^^^^^^^
90
+
91
+ Installing as a `snap` allows for a self-contained package and even control over the
92
+ level of `confinement`, unlike other container formats. This is particularly nice for
93
+ Ubuntu-like distributions on small devices (such as Raspberry Pi).
94
+
95
+ .. admonition:: Install as a Snap package
96
+ :class: note
97
+
98
+ .. code-block:: shell
99
+
100
+ sudo snap install hypershell
101
+
102
+ |
103
+
104
+ Fedora / Alma / Rocky / RHEL
105
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
106
+
107
+ We are now shipping in `Fedora <https://packages.fedoraproject.org/pkgs/hypershell/hypershell/>`_
108
+ (Fedora 42, Fedora Rawhide, EPEL 10.0, EPEL 10.1).
109
+
110
+ Note `issue 35 <https://github.com/hypershell/hypershell/issues/35>`_ where ``/usr/bin/hs`` is in
111
+ conflict with another `package <https://crates.io/crates/heatseeker>`_. For the time being,
112
+ the ``hs`` command is renamed to ``hsh`` (though this is not ideal and may change later).
113
+
114
+ .. admonition:: Install from EPEL
115
+ :class: note
116
+
117
+ .. code-block:: shell
118
+
119
+ sudo dnf install hypershell
120
+
121
+ .. admonition:: Install from EPEL
122
+ :class: note
123
+
124
+ .. code-block:: shell
125
+
126
+ sudo yum install hypershell
127
+
128
+
129
+ -------------------
130
+
131
+ Docker and Apptainer
132
+ --------------------
133
+
134
+ |
135
+
136
+ The project includes both a ``Dockerfile`` and ``Apptainer`` build definition.
137
+ Using the software within a container is of limited utility however as the entire point
138
+ of HyperShell is to run other programs (and in a distributed fashion).
139
+ Deploying the `server` as a Docker container (e.g., within a `Kubernetes` environment)
140
+ is indeed useful though as it allows you to run it in a persistent fashion alongside of an HPC
141
+ environment.
142
+
143
+ In a purely containerized environment HyperShell can be included in your own container image.
144
+ HyperShell has both improved ergonomics and performance over scheduling "jobs" directly
145
+ within a Kubernetes-like environment (e.g., ``kubectl``),
146
+ with much better throughput and responsiveness.
147
+
148
+ The fact that your configuration can be entirely defined in terms of environment variables
149
+ makes it easy to setup your deployment without needing to embed the configuration.
150
+
151
+
152
+ -------------------
153
+
154
+ HPC Module (LMOD)
155
+ -----------------
156
+
157
+ |
158
+
159
+ System administrators may want to install and expose `HyperShell` in a custom location.
160
+ On something like an HPC cluster this could be an entirely different file system.
161
+ Let us assume this is the case, and that we already have our own Python installation
162
+ managed by some `module` system.
163
+
164
+ Here we will create an isolated prefix for the installation with version number included
165
+ and only expose the entry-point scripts to users, along with shell completions and the
166
+ manual page. Some desired runtime, ``python3.13``, is already loaded.
167
+
168
+ If there is not already a preferred Python module it might be easier to use
169
+ `conda-forge <https://conda-forge.org>`_ (or `mamba <https://mamba.readthedocs.io>`_)
170
+ or ``uv`` directly to create a virtual environment.
171
+
172
+ .. admonition:: Create installation manually on a shared system
173
+ :class: note
174
+
175
+ .. code-block:: shell
176
+
177
+ mkdir -p /apps/x86_64-any/hypershell/$VERSION
178
+ cd /apps/x86_64-any/hypershell/$VERSION
179
+
180
+ git clone --depth=1 --branch=$VERSION https://github.com/hypershell/hypershell src
181
+
182
+ python3.13 -m venv libexec
183
+ libexec/bin/pip install ./src
184
+ libexec/bin/pip install psycopg2
185
+
186
+ mkdir -p bin
187
+ ln -sf ../libexec/bin/hs bin/hs
188
+ ln -sf ../libexec/bin/hsx bin/hsx
189
+ ln -sf src/share
190
+
191
+ |
192
+
193
+ Based on this installation, a simple `LMOD <https://lmod.readthedocs.io/en/latest/>`_
194
+ configuration file might then be:
195
+
196
+ .. admonition:: Module file definition (e.g., /etc/module/x86_64-any/hypershell/<VERSION>.lua)
197
+ :class: note
198
+
199
+ .. code-block:: lua
200
+
201
+ local appname = "hypershell"
202
+ local version = "<version>" -- replace with actual version
203
+ local appsdir = "/apps/x86_64-any"
204
+ local modroot = pathJoin(appsdir, appname, version)
205
+
206
+ whatis("Name: HyperShell")
207
+ whatis("Version: " .. version)
208
+ whatis("Description: A cross-platform, high-throughput computing utility for processing
209
+ shell commands over a distributed, asynchronous queue.")
210
+
211
+ prepend_path("PATH", pathJoin(modroot, "bin"))
212
+ prepend_path("MANPATH", pathJoin(modroot, "share", "man"))
213
+
214
+ -- Raw source b/c `complete -F _hs hs` does not persist with source_sh
215
+ execute { cmd="source " .. pathJoin(modroot, "share", "bash_completion.d", "hs"), modeA={"load"} }
216
+
217
+ Presumably, users would then be able to activate the software by loading the module as such.
218
+
219
+ .. admonition:: Load module
220
+ :class: note
221
+
222
+ .. code-block:: shell
223
+
224
+ module load hypershell
225
+
226
+ ------
227
+
228
+ Runtime Package Resolution
229
+ --------------------------
230
+
231
+ |
232
+
233
+ .. include:: _include/config_pythonpath.rst
234
+
235
+ For example, from the above installation we might add the following to our module:
236
+
237
+ .. admonition:: Extra setting for LMOD
238
+ :class: note
239
+
240
+ .. code-block:: lua
241
+
242
+ ...
243
+ prepend_path("HYPERSHELL_PYTHONPATH", pathJoin(modroot, "frozen-python.path"))
244
+ ...
245
+
246
+ And we can include the following paths in our frozen set.
247
+
248
+ .. admonition:: Contents of ``frozen-python.path``
249
+ :class: note
250
+
251
+ .. code-block:: shell
252
+
253
+ /apps/x86_64-any/hypershell/<version>/libexec/lib/python3.13
254
+ /apps/x86_64-any/hypershell/<version>/libexec/lib/python3.13/lib-dynload
255
+ /apps/x86_64-any/hypershell/<version>/libexec/lib/python3.13/site-packages
256
+
257
+
258
+ ------
259
+
260
+ Shell Completions
261
+ -----------------
262
+
263
+ |
264
+
265
+ On `Linux` and `macOS` platforms we provide shell completion definitions for Bash-like
266
+ environments (specialized ZShell completions coming-soon). As suggested by the LMOD
267
+ definition file included above, sourcing the ``/share/bash_completion.d/hs`` file enables
268
+ completions for the entire command-line interface.
269
+
270
+ Some completions are simple, like what options are available for the given subcommand.
271
+ Some completions are basic, such as ``--bind <tab>`` returning either ``localhost`` or ``0.0.0.0``.
272
+ Some are more sophisticated.
273
+
274
+ Some examples (but not everything):
275
+
276
+ * ``hs config get <tab>`` will autocomplete all options.
277
+ * ``hs config set OPT <tab>`` will autocomplete the current value for OPT.
278
+ * ``hs client ... --host <tab>`` will parse your host file and return possible known hosts.
279
+ * ``hs server ... --auth <tab>`` will auto-generate secure keys at random.
280
+ * ``hs server ... --port <tab>`` will select an available port on your machine.
281
+ * ``hs list <tab>`` will complete known fields.
282
+ * ``hs list ... -t <tab>`` will complete known tags in the database.
283
+ * ``hs list ... -t key:<tab>`` will complete known values for that key in the database.
284
+ * ``hsx ... --ssh-group <tab>`` will autocomplete known groups in your config.
285
+
286
+
287
+ -------------------
288
+
289
+ Development
290
+ -----------
291
+
292
+ |
293
+
294
+ As a library dependency, `HyperShell` can easily be added to your project using whatever package
295
+ tooling you like. For development of `HyperShell` itself, contributors should create their own fork
296
+ of the repository on `GitHub <https://github.com/hypershell/hypershell>`_ and clone the fork locally.
297
+ We use `uv <https://docs.astral.sh/uv/>`_ for managing the development environment. The
298
+ ``uv.lock`` file is included in the repository, simply run the following command to initialize
299
+ your virtual environment.
300
+
301
+ .. admonition:: Install development dependencies inside local forked repository
302
+ :class: note
303
+
304
+ .. code-block:: shell
305
+
306
+ uv sync --all-packages --python 3.13
307
+
308
+
309
+ Unit and integration tests can be run using `pytest <https://pytest.org>`_.
310
+ Tests should pass for Python 3.9 and beyond.
311
+ These are largely lightweight tests in isolated ``HYPERSHELL_SITE`` directories
312
+ but can be slow because of the time to launch processes.
313
+ Use ``-n`` to parallelize tests.
314
+
315
+ .. admonition:: Run tests
316
+ :class: note
317
+
318
+ .. code-block:: shell
319
+
320
+ uv run --python 3.13 pytest -v -n 8
321
+
322
+ |
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "hypershell"
3
- version = "2.7.1"
3
+ version = "2.7.2"
4
4
  description = "A cross-platform, high-throughput computing utility for processing shell commands over a distributed, asynchronous queue."
5
5
  readme = "README.rst"
6
6
  license = "Apache-2.0"
@@ -52,7 +52,7 @@ function _hs_initdb ()
52
52
 
53
53
  function _hs_config ()
54
54
  {
55
- local all_opts="get set edit which -h --help"
55
+ local all_opts="get set edit which -h --help --system --user --local"
56
56
 
57
57
  local i=1 opt= subcmd_i=
58
58
  while [[ ${i} -lt ${COMP_CWORD} ]]; do
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
27
  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
28
28
  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
29
29
  ..
30
- .TH "HS" "1" "Jun 07, 2025" "2.7.1" "hypershell"
30
+ .TH "HS" "1" "Jun 07, 2025" "2.7.2" "hypershell"
31
31
  .SH NAME
32
32
  hs \- Process shell commands over a distributed, asynchronous queue
33
33
  .SH SYNOPSIS
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
27
  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
28
28
  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
29
29
  ..
30
- .TH "HS" "1" "Jun 07, 2025" "2.7.1" "hypershell"
30
+ .TH "HS" "1" "Jun 07, 2025" "2.7.2" "hypershell"
31
31
  .SH NAME
32
32
  hs \- Process shell commands over a distributed, asynchronous queue
33
33
  .SH SYNOPSIS
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
27
27
  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
28
28
  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
29
29
  ..
30
- .TH "HYPER-SHELL" "1" "Jun 07, 2025" "2.7.1" "hypershell"
30
+ .TH "HYPER-SHELL" "1" "Jun 07, 2025" "2.7.2" "hypershell"
31
31
  .SH NAME
32
32
  hyper-shell \- Process shell commands over a distributed, asynchronous queue
33
33
  .SH SYNOPSIS
@@ -386,23 +386,19 @@ class ConfigWhichApp(Application):
386
386
 
387
387
 
388
388
  if os.name == 'nt':
389
- CONFIG_PATH_INFO: Final[str] = f"""\
390
- --system %ProgramData%\\HyperShell\\Config.toml
391
- --user %AppData%\\HyperShell\\Config.toml
392
- --local {path.local.config}\
393
- """
389
+ CONFIG_PATH_SYSTEM: Final[str] = '%ProgramData%\\HyperShell\\Config.toml'
390
+ CONFIG_PATH_USER: Final[str] = '%AppData%\\HyperShell\\Config.toml'
391
+ CONFIG_PATH_LOCAL: Final[str] = path.local.config
394
392
  else:
395
- CONFIG_PATH_INFO: Final[str] = f"""\
396
- --system /etc/hypershell.toml
397
- --user ~/.hypershell/config.toml
398
- --local {path.local.config}\
399
- """
393
+ CONFIG_PATH_SYSTEM: Final[str] = '/etc/hypershell.toml'
394
+ CONFIG_PATH_USER: Final[str] = '~/.hypershell/config.toml'
395
+ CONFIG_PATH_LOCAL: Final[str] = path.local.config
400
396
 
401
397
 
402
398
  PROGRAM = 'hs config'
403
399
  USAGE = f"""\
404
400
  Usage:
405
- {PROGRAM} [-h]
401
+ {PROGRAM} [-h] [--system | --user | --local]
406
402
  {GET_SYNOPSIS}
407
403
  {SET_SYNOPSIS}
408
404
  {EDIT_SYNOPSIS}
@@ -421,10 +417,10 @@ Commands:
421
417
  which {ConfigWhichApp.__doc__}
422
418
 
423
419
  Options:
424
- -h, --help Show this message and exit.
425
-
426
- Files:
427
- {CONFIG_PATH_INFO}\
420
+ --system Show system-level config path.
421
+ --user Show user-level config path.
422
+ --local Show local-level config path.
423
+ -h, --help Show this message and exit.\
428
424
  """
429
425
 
430
426
 
@@ -433,8 +429,13 @@ class ConfigApp(ApplicationGroup):
433
429
 
434
430
  interface = Interface(PROGRAM, USAGE, HELP)
435
431
  interface.add_argument('command')
436
-
437
- commands = {'get': ConfigGetApp,
438
- 'set': ConfigSetApp,
439
- 'edit': ConfigEditApp,
440
- 'which': ConfigWhichApp, }
432
+ interface.add_argument('--system', action='version', version=CONFIG_PATH_SYSTEM)
433
+ interface.add_argument('--user', action='version', version=CONFIG_PATH_USER)
434
+ interface.add_argument('--local', action='version', version=CONFIG_PATH_LOCAL)
435
+
436
+ commands = {
437
+ 'get': ConfigGetApp,
438
+ 'set': ConfigSetApp,
439
+ 'edit': ConfigEditApp,
440
+ 'which': ConfigWhichApp,
441
+ }
@@ -602,7 +602,7 @@ wheels = [
602
602
 
603
603
  [[package]]
604
604
  name = "hypershell"
605
- version = "2.7.1"
605
+ version = "2.7.2"
606
606
  source = { editable = "." }
607
607
  dependencies = [
608
608
  { name = "cmdkit", extra = ["toml"] },