hypershell 2.7.0__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.
- hypershell-2.7.2/.github/FUNDING.yml +12 -0
- hypershell-2.7.2/.github/workflows/publish.yml +19 -0
- hypershell-2.7.2/.github/workflows/tests.yml +24 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/Apptainer +1 -1
- {hypershell-2.7.0 → hypershell-2.7.2}/Dockerfile +1 -1
- {hypershell-2.7.0 → hypershell-2.7.2}/PKG-INFO +10 -5
- {hypershell-2.7.0 → hypershell-2.7.2}/README.rst +8 -4
- hypershell-2.7.2/docs/_include/config_desc.rst +1 -0
- hypershell-2.7.2/docs/_include/config_help.rst +26 -0
- hypershell-2.7.2/docs/_include/config_usage.rst +9 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/index.rst +1 -0
- hypershell-2.7.2/docs/cli/config.rst +18 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/index.rst +1 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/conf.py +1 -1
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/getting_started.rst +5 -5
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/index.rst +8 -0
- hypershell-2.7.2/docs/install.rst +322 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/pyproject.toml +12 -2
- {hypershell-2.7.0 → hypershell-2.7.2}/share/bash_completion.d/hs +1 -1
- {hypershell-2.7.0 → hypershell-2.7.2}/share/man/man1/hs.1 +1 -1
- {hypershell-2.7.0 → hypershell-2.7.2}/share/man/man1/hsx.1 +1 -1
- {hypershell-2.7.0 → hypershell-2.7.2}/share/man/man1/hyper-shell.1 +1 -1
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/__init__.py +7 -1
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/config.py +22 -21
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/data/__init__.py +1 -1
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/submit.py +5 -4
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/task.py +8 -8
- hypershell-2.7.2/tests/__init__.py +75 -0
- hypershell-2.7.2/tests/conftest.py +27 -0
- hypershell-2.7.2/tests/test_cluster.py +184 -0
- hypershell-2.7.2/tests/test_initdb.py +82 -0
- hypershell-2.7.2/tests/test_main.py +179 -0
- hypershell-2.7.2/tests/test_server.py +102 -0
- hypershell-2.7.2/tests/test_submit.py +214 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/uv.lock +25 -1
- hypershell-2.7.0/docs/_static/logo.svg +0 -19
- hypershell-2.7.0/docs/install.rst +0 -167
- hypershell-2.7.0/share/zsh/site-functions/_hs +0 -81
- hypershell-2.7.0/tests/__init__.py +0 -4
- hypershell-2.7.0/tests/unit/__init__.py +0 -4
- hypershell-2.7.0/tests/unit/core/__init__.py +0 -2
- {hypershell-2.7.0 → hypershell-2.7.2}/.dockerignore +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/.gitignore +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/.readthedocs.yaml +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/CODE_OF_CONDUCT.md +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/LICENSE +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/Makefile +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/citation.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/client_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/client_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/client_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/cluster_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/cluster_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/cluster_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_edit_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_edit_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_edit_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_get_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_get_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_get_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_intro.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_intro_alt.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_param_ref.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_pythonpath.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_set_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_set_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_set_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_site_vars.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_task_env.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_task_env_alt.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_which_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_which_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/config_which_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/database.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/database_alt.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/exit_status.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/initdb_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/initdb_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/initdb_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/license.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/server_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/server_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/server_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/signals.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/submit_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/submit_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/submit_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_info_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_info_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_info_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_run_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_run_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_run_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_search_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_search_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_search_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_submit_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_submit_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_submit_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_update_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_update_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_update_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_wait_desc.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_wait_help.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/task_wait_usage.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/templates.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_include/templates_alt.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_static/custom.css +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_static/logo-dark-mode.png +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/_static/logo-light-mode.png +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/api/client.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/api/cluster.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/api/data.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/api/index.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/api/server.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/api/submit.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20230329_2_2_0_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20230413_2_3_0_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20230602_2_4_0_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20240518_2_5_0_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20240706_2_5_2_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20241115_2_6_0_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20241115_announce_logo.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20241231_2_6_1_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20250215_2_6_5_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20250405_2_6_6_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/blog/20250504_2_7_0_release.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/client.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/cluster.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/config_edit.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/config_get.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/config_set.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/config_which.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/initdb.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/server.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/submit.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/task_info.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/task_run.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/task_search.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/task_submit.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/task_update.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/cli/task_wait.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/config.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/database.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/logging.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/manual.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/roadmap.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/templates.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/tutorial/advanced.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/tutorial/basic.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/tutorial/distributed.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/docs/tutorial/hybrid.rst +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/client.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/cluster/__init__.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/cluster/local.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/cluster/remote.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/cluster/ssh.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/__init__.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/config.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/exceptions.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/fsm.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/heartbeat.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/logging.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/platform.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/pretty_print.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/queue.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/remote.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/signal.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/sys.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/tag.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/template.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/thread.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/types.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/core/uuid.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/data/core.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/data/model.py +0 -0
- {hypershell-2.7.0 → hypershell-2.7.2}/src/hypershell/server.py +0 -0
- {hypershell-2.7.0/tests/unit → hypershell-2.7.2/tests}/test_data/__init__.py +0 -0
- {hypershell-2.7.0/tests/unit → hypershell-2.7.2/tests}/test_data/test_core.py +0 -0
- {hypershell-2.7.0/tests/unit → hypershell-2.7.2/tests}/test_data/test_model.py +0 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# These are supported funding model platforms
|
|
2
|
+
|
|
3
|
+
github: glentner
|
|
4
|
+
patreon: # Replace with a single Patreon username
|
|
5
|
+
open_collective: # Replace with a single Open Collective username
|
|
6
|
+
ko_fi: # Replace with a single Ko-fi username
|
|
7
|
+
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
|
8
|
+
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
|
9
|
+
liberapay: # Replace with a single Liberapay username
|
|
10
|
+
issuehunt: # Replace with a single IssueHunt username
|
|
11
|
+
otechie: # Replace with a single Otechie username
|
|
12
|
+
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
on:
|
|
3
|
+
release:
|
|
4
|
+
types: [created]
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
publish:
|
|
8
|
+
runs-on: ubuntu-latest
|
|
9
|
+
steps:
|
|
10
|
+
- uses: actions/checkout@v4
|
|
11
|
+
|
|
12
|
+
- name: Install uv
|
|
13
|
+
uses: astral-sh/setup-uv@v5
|
|
14
|
+
with:
|
|
15
|
+
enable-cache: true
|
|
16
|
+
cache-dependency-glob: "uv.lock"
|
|
17
|
+
|
|
18
|
+
- name: Publish to PyPI
|
|
19
|
+
run: uv build && uv publish --token ${{ secrets.PYPI_TOKEN }}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [ master, develop ]
|
|
5
|
+
pull_request:
|
|
6
|
+
branches: [ develop ]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
tests:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13' ]
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Install uv
|
|
18
|
+
uses: astral-sh/setup-uv@v5
|
|
19
|
+
with:
|
|
20
|
+
enable-cache: true
|
|
21
|
+
cache-dependency-glob: "uv.lock"
|
|
22
|
+
|
|
23
|
+
- name: Run tests
|
|
24
|
+
run: uv run --python ${{ matrix.python-version }} pytest -v
|
|
@@ -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.
|
|
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.
|
|
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
|
|
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.12
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
20
|
Classifier: Topic :: Utilities
|
|
20
21
|
Requires-Python: >=3.9
|
|
21
22
|
Requires-Dist: cmdkit[toml]>=2.7.7
|
|
@@ -41,14 +42,14 @@ HyperShell v2: Distributed Task Execution for HPC
|
|
|
41
42
|
:target: https://github.com/hypershell/hypershell/releases
|
|
42
43
|
:alt: Github Release
|
|
43
44
|
|
|
44
|
-
.. image:: https://static.pepy.tech/badge/hypershell/month
|
|
45
|
-
:target: https://pypi.org/project/hypershell/
|
|
46
|
-
:alt: PyPI Monthly Downloads
|
|
47
|
-
|
|
48
45
|
.. image:: https://img.shields.io/badge/Python-3.9+-blue.svg
|
|
49
46
|
:target: https://www.python.org/downloads
|
|
50
47
|
:alt: Python Versions
|
|
51
48
|
|
|
49
|
+
.. image:: https://static.pepy.tech/badge/hypershell/month
|
|
50
|
+
:target: https://pypi.org/project/hypershell/
|
|
51
|
+
:alt: PyPI Monthly Downloads
|
|
52
|
+
|
|
52
53
|
.. image:: https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg
|
|
53
54
|
:target: https://www.contributor-covenant.org/version/2/1/code_of_conduct/
|
|
54
55
|
:alt: Code of Conduct
|
|
@@ -57,6 +58,10 @@ HyperShell v2: Distributed Task Execution for HPC
|
|
|
57
58
|
:target: https://hypershell.readthedocs.io/en/latest/?badge=latest
|
|
58
59
|
:alt: Documentation Status
|
|
59
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
|
+
|
|
60
65
|
|
|
|
61
66
|
|
|
62
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]``
|
|
@@ -72,7 +72,7 @@ html_css_files = [
|
|
|
72
72
|
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/solid.min.css",
|
|
73
73
|
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/brands.min.css",
|
|
74
74
|
]
|
|
75
|
-
html_favicon = '_static/logo.
|
|
75
|
+
html_favicon = '_static/logo-dark-mode.png'
|
|
76
76
|
html_theme_options = {
|
|
77
77
|
# 'announcement': 'See Installation page for not on PyPI package name issue!',
|
|
78
78
|
'sidebar_hide_name': True,
|
|
@@ -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
|
|
@@ -56,7 +56,7 @@ will manage tasks entirely within memory.
|
|
|
56
56
|
|
|
57
57
|
.. code-block:: shell
|
|
58
58
|
|
|
59
|
-
seq 4 |
|
|
59
|
+
seq 4 | hsx -t 'echo {}'
|
|
60
60
|
|
|
61
61
|
.. details:: Output
|
|
62
62
|
|
|
@@ -81,7 +81,7 @@ see additional detail about what is running, where, and when.
|
|
|
81
81
|
|
|
82
82
|
.. code-block:: shell
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
hsx tasks.in -N16 --ssh-group=xyz --capture
|
|
85
85
|
|
|
86
86
|
.. details:: Logs
|
|
87
87
|
|
|
@@ -107,7 +107,7 @@ example we stagger the launch process over one minute.
|
|
|
107
107
|
|
|
108
108
|
.. code-block:: shell
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
hsx tasks.in -N128 -b128 --launcher=srun --max-retries=2 --delay-start=-60 >task.out
|
|
111
111
|
|
|
112
112
|
.. details:: Logs
|
|
113
113
|
|
|
@@ -175,7 +175,7 @@ expansion. Many meta-patterns are supported (see full overview of :ref:`template
|
|
|
175
175
|
|
|
176
176
|
.. code-block:: shell
|
|
177
177
|
|
|
178
|
-
|
|
178
|
+
hsx tasks.in -N12 -t './some_program.py {} >outputs/{/-}.out'
|
|
179
179
|
|
|
180
180
|
Capturing `stdout` and `stderr` is supported directly in fact with the ``--capture`` option.
|
|
181
181
|
See the full documentation for environment variables under :ref:`configuration <config>`.
|
|
@@ -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.
|
|
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"
|
|
@@ -25,6 +25,7 @@ classifiers = [
|
|
|
25
25
|
"Programming Language :: Python :: 3.11",
|
|
26
26
|
"Programming Language :: Python :: 3.12",
|
|
27
27
|
"Programming Language :: Python :: 3.13",
|
|
28
|
+
"Programming Language :: Python :: 3.14",
|
|
28
29
|
"Operating System :: POSIX :: Linux",
|
|
29
30
|
"Operating System :: MacOS",
|
|
30
31
|
"Operating System :: Microsoft :: Windows",
|
|
@@ -54,7 +55,8 @@ dev = [
|
|
|
54
55
|
"uuid-utils>=0.10.0",
|
|
55
56
|
"pytest>=8.1.1",
|
|
56
57
|
"hypothesis>=6.100.0",
|
|
57
|
-
"sphinx-autobuild>=2024.2.4"
|
|
58
|
+
"sphinx-autobuild>=2024.2.4",
|
|
59
|
+
"pytest-xdist>=3.7.0",
|
|
58
60
|
]
|
|
59
61
|
docs = [
|
|
60
62
|
"sphinx>=6.0,<8.0",
|
|
@@ -81,3 +83,11 @@ hsx = "hypershell:main_x"
|
|
|
81
83
|
[build-system]
|
|
82
84
|
requires = ["hatchling"]
|
|
83
85
|
build-backend = "hatchling.build"
|
|
86
|
+
|
|
87
|
+
[tool.pytest.ini_options]
|
|
88
|
+
addopts = ["--strict-markers", ]
|
|
89
|
+
markers = [
|
|
90
|
+
'unit', # Unit tests are short, interface driven tests on discrete components.",
|
|
91
|
+
'integration', # Integration tests are often longer and deal with the interaction between systems.",
|
|
92
|
+
'parameterize', # Placeholder for parameterized tests (not a real type).",
|
|
93
|
+
]
|