hypershell 2.6.0__tar.gz → 2.6.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.6.0 → hypershell-2.6.2}/PKG-INFO +10 -8
- {hypershell-2.6.0 → hypershell-2.6.2}/README.rst +2 -2
- {hypershell-2.6.0 → hypershell-2.6.2}/pyproject.toml +9 -7
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/__init__.py +0 -2
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/config.py +3 -15
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/data/core.py +8 -1
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/server.py +0 -3
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/task.py +1 -3
- {hypershell-2.6.0 → hypershell-2.6.2}/LICENSE +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/client.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/cluster/__init__.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/cluster/local.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/cluster/remote.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/cluster/ssh.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/__init__.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/config.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/exceptions.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/fsm.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/heartbeat.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/logging.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/platform.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/queue.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/remote.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/signal.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/tag.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/template.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/thread.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/core/types.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/data/__init__.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/data/model.py +0 -0
- {hypershell-2.6.0 → hypershell-2.6.2}/src/hypershell/submit.py +0 -0
|
@@ -1,33 +1,35 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hypershell
|
|
3
|
-
Version: 2.6.
|
|
3
|
+
Version: 2.6.2
|
|
4
4
|
Summary: A cross-platform, high-throughput computing utility for processing shell commands over a distributed, asynchronous queue.
|
|
5
5
|
Home-page: https://hypershell.org
|
|
6
6
|
License: Apache-2.0
|
|
7
7
|
Keywords: distributed-computing,command-line-tool,shell-scripting,high-performance-computing,high-throughput-computing
|
|
8
8
|
Author: Geoffrey Lentner
|
|
9
9
|
Author-email: glentner@purdue.edu
|
|
10
|
-
Requires-Python: >=3.
|
|
10
|
+
Requires-Python: >=3.9,<4.0
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
12
12
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
13
|
Classifier: Operating System :: MacOS
|
|
14
14
|
Classifier: Operating System :: Microsoft :: Windows
|
|
15
15
|
Classifier: Operating System :: POSIX :: Linux
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
18
|
Classifier: Programming Language :: Python :: 3.10
|
|
18
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
22
|
Classifier: Topic :: Utilities
|
|
22
|
-
|
|
23
|
+
Provides-Extra: postgres
|
|
24
|
+
Requires-Dist: cmdkit[toml] (>=2.7.7,<3.0.0)
|
|
23
25
|
Requires-Dist: paramiko (>=3.4.0,<4.0.0)
|
|
24
|
-
Requires-Dist: psycopg2 (>=2.9.9,<3.0.0)
|
|
26
|
+
Requires-Dist: psycopg2 (>=2.9.9,<3.0.0) ; extra == "postgres"
|
|
27
|
+
Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
|
|
25
28
|
Requires-Dist: rich (>=13.7.1,<14.0.0)
|
|
26
29
|
Requires-Dist: sqlalchemy (>=2.0.29,<3.0.0)
|
|
27
|
-
Requires-Dist: toml (>=0.10.2,<0.11.0)
|
|
28
30
|
Requires-Dist: tomlkit (>=0.13.2,<0.14.0)
|
|
29
31
|
Project-URL: Documentation, https://hypershell.readthedocs.io
|
|
30
|
-
Project-URL: Repository, https://github.com/
|
|
32
|
+
Project-URL: Repository, https://github.com/hypershell/hypershell
|
|
31
33
|
Description-Content-Type: text/x-rst
|
|
32
34
|
|
|
33
35
|
HyperShell v2: Distributed Task Execution for HPC
|
|
@@ -37,8 +39,8 @@ HyperShell v2: Distributed Task Execution for HPC
|
|
|
37
39
|
:target: https://www.apache.org/licenses/LICENSE-2.0
|
|
38
40
|
:alt: License
|
|
39
41
|
|
|
40
|
-
.. image:: https://img.shields.io/github/v/release/
|
|
41
|
-
:target: https://github.com/
|
|
42
|
+
.. image:: https://img.shields.io/github/v/release/hypershell/hypershell?sort=semver
|
|
43
|
+
:target: https://github.com/hypershell/hypershell/releases
|
|
42
44
|
:alt: Github Release
|
|
43
45
|
|
|
44
46
|
.. image:: https://img.shields.io/badge/Python-3.10+-blue.svg
|
|
@@ -5,8 +5,8 @@ HyperShell v2: Distributed Task Execution for HPC
|
|
|
5
5
|
:target: https://www.apache.org/licenses/LICENSE-2.0
|
|
6
6
|
:alt: License
|
|
7
7
|
|
|
8
|
-
.. image:: https://img.shields.io/github/v/release/
|
|
9
|
-
:target: https://github.com/
|
|
8
|
+
.. image:: https://img.shields.io/github/v/release/hypershell/hypershell?sort=semver
|
|
9
|
+
:target: https://github.com/hypershell/hypershell/releases
|
|
10
10
|
:alt: Github Release
|
|
11
11
|
|
|
12
12
|
.. image:: https://img.shields.io/badge/Python-3.10+-blue.svg
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "hypershell"
|
|
3
|
-
version = "2.6.
|
|
3
|
+
version = "2.6.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"
|
|
7
7
|
homepage = "https://hypershell.org"
|
|
8
8
|
documentation = "https://hypershell.readthedocs.io"
|
|
9
|
-
repository = "https://github.com/
|
|
9
|
+
repository = "https://github.com/hypershell/hypershell"
|
|
10
10
|
authors = [
|
|
11
11
|
"Geoffrey Lentner <glentner@purdue.edu>"
|
|
12
12
|
]
|
|
@@ -20,6 +20,7 @@ keywords = [
|
|
|
20
20
|
classifiers = [
|
|
21
21
|
"Development Status :: 5 - Production/Stable",
|
|
22
22
|
"Topic :: Utilities",
|
|
23
|
+
"Programming Language :: Python :: 3.9",
|
|
23
24
|
"Programming Language :: Python :: 3.10",
|
|
24
25
|
"Programming Language :: Python :: 3.11",
|
|
25
26
|
"Programming Language :: Python :: 3.12",
|
|
@@ -36,15 +37,18 @@ hyper-shell = "hypershell:main" # NOTE: do not remove this
|
|
|
36
37
|
hs = "hypershell:main"
|
|
37
38
|
|
|
38
39
|
[tool.poetry.dependencies]
|
|
39
|
-
python = ">=3.
|
|
40
|
-
cmdkit = "^2.7.
|
|
41
|
-
|
|
40
|
+
python = ">=3.9,<4.0"
|
|
41
|
+
cmdkit = {version = "^2.7.7", extras = ["toml"]}
|
|
42
|
+
pyyaml = "^6.0.2"
|
|
42
43
|
tomlkit = "^0.13.2"
|
|
43
44
|
sqlalchemy = "^2.0.29"
|
|
44
45
|
rich = "^13.7.1"
|
|
45
46
|
paramiko = "^3.4.0"
|
|
46
47
|
psycopg2 = {version = "^2.9.9", optional = true}
|
|
47
48
|
|
|
49
|
+
[tool.poetry.extras]
|
|
50
|
+
postgres = ["psycopg2"]
|
|
51
|
+
|
|
48
52
|
[tool.poetry.group.docs.dependencies]
|
|
49
53
|
sphinx = "^7.2.6"
|
|
50
54
|
sphinx-sitemap = "^2.5.1"
|
|
@@ -60,9 +64,7 @@ furo = "^2024.1.29"
|
|
|
60
64
|
[tool.poetry.group.dev.dependencies]
|
|
61
65
|
psycopg2 = "^2.9.9"
|
|
62
66
|
pytest = "^8.1.1"
|
|
63
|
-
pytest-cov = "^5.0.0"
|
|
64
67
|
hypothesis = "^6.100.0"
|
|
65
|
-
ipython = "^8.23.0"
|
|
66
68
|
sphinx-autobuild = "^2024.2.4"
|
|
67
69
|
|
|
68
70
|
[build-system]
|
|
@@ -94,11 +94,9 @@ class HyperShellApp(ApplicationGroup):
|
|
|
94
94
|
interface = Interface(APP_NAME, APP_USAGE, APP_HELP)
|
|
95
95
|
interface.add_argument('-v', '--version', action='version',
|
|
96
96
|
version=f'HyperShell v{__version__} (Python {python_version()})')
|
|
97
|
-
|
|
98
97
|
interface.add_argument('--citation', action='version', version=__citation__)
|
|
99
98
|
interface.add_argument('command')
|
|
100
99
|
|
|
101
|
-
command = None
|
|
102
100
|
commands = {
|
|
103
101
|
'submit': SubmitApp,
|
|
104
102
|
'server': ServerApp,
|
|
@@ -17,7 +17,7 @@ import contextlib
|
|
|
17
17
|
import subprocess
|
|
18
18
|
|
|
19
19
|
# external libs
|
|
20
|
-
import
|
|
20
|
+
import tomlkit
|
|
21
21
|
from pygments.styles import STYLE_MAP as CONSOLE_THEMES
|
|
22
22
|
from cmdkit.app import Application, ApplicationGroup
|
|
23
23
|
from cmdkit.cli import Interface, ArgumentError
|
|
@@ -239,19 +239,9 @@ class ConfigGetApp(Application):
|
|
|
239
239
|
def format_section(self: ConfigGetApp, value: dict) -> str:
|
|
240
240
|
"""Format an entire section for output."""
|
|
241
241
|
if self.varpath == '.':
|
|
242
|
-
|
|
242
|
+
return tomlkit.dumps(value)
|
|
243
243
|
else:
|
|
244
|
-
|
|
245
|
-
# NOTE: Fix weird formatting of section headings.
|
|
246
|
-
# The `toml.dumps` output has unnecessary quoting.
|
|
247
|
-
lines = []
|
|
248
|
-
for line in value.strip().split('\n'):
|
|
249
|
-
if not line.startswith('['):
|
|
250
|
-
lines.append(line)
|
|
251
|
-
else:
|
|
252
|
-
lines.append(line.replace('"', ''))
|
|
253
|
-
value = '\n'.join(lines)
|
|
254
|
-
return value
|
|
244
|
+
return tomlkit.dumps({self.varpath: value})
|
|
255
245
|
|
|
256
246
|
|
|
257
247
|
SET_PROGRAM = 'hs config set'
|
|
@@ -442,10 +432,8 @@ class ConfigApp(ApplicationGroup):
|
|
|
442
432
|
"""Manage configuration."""
|
|
443
433
|
|
|
444
434
|
interface = Interface(PROGRAM, USAGE, HELP)
|
|
445
|
-
|
|
446
435
|
interface.add_argument('command')
|
|
447
436
|
|
|
448
|
-
command = None
|
|
449
437
|
commands = {'get': ConfigGetApp,
|
|
450
438
|
'set': ConfigSetApp,
|
|
451
439
|
'edit': ConfigEditApp,
|
|
@@ -24,7 +24,7 @@ from sqlalchemy.exc import ArgumentError
|
|
|
24
24
|
# internal libs
|
|
25
25
|
from hypershell.core.config import config
|
|
26
26
|
from hypershell.core.logging import handler
|
|
27
|
-
from hypershell.core.exceptions import write_traceback
|
|
27
|
+
from hypershell.core.exceptions import display_critical, write_traceback
|
|
28
28
|
|
|
29
29
|
# public interface
|
|
30
30
|
__all__ = ['DatabaseURL', 'engine', 'Session', 'config', 'in_memory', 'schema', ]
|
|
@@ -220,6 +220,13 @@ try:
|
|
|
220
220
|
engine = get_engine()
|
|
221
221
|
factory = sessionmaker(bind=engine)
|
|
222
222
|
Session = scoped_session(factory)
|
|
223
|
+
except ModuleNotFoundError as error:
|
|
224
|
+
if 'psycopg2' in error.args[0]:
|
|
225
|
+
display_critical(f'Missing optional dependency "psycopg2" needed for PostgreSQL', module=__name__)
|
|
226
|
+
sys.exit(exit_status.runtime_error)
|
|
227
|
+
else:
|
|
228
|
+
write_traceback(error, module=__name__)
|
|
229
|
+
sys.exit(exit_status.bad_config)
|
|
223
230
|
except Exception as error:
|
|
224
231
|
write_traceback(error, module=__name__)
|
|
225
232
|
sys.exit(exit_status.bad_config)
|
|
@@ -92,9 +92,6 @@ class SchedulerState(State, Enum):
|
|
|
92
92
|
HALT = 5
|
|
93
93
|
|
|
94
94
|
|
|
95
|
-
# Note:
|
|
96
|
-
# Unless specified otherwise for larger problems, a bundle of size one allows
|
|
97
|
-
# for greater concurrency on smaller workloads.
|
|
98
95
|
DEFAULT_BUNDLESIZE: Final[int] = default.server.bundlesize
|
|
99
96
|
"""Default size for task bundles."""
|
|
100
97
|
|
|
@@ -1047,11 +1047,9 @@ class TaskGroupApp(ApplicationGroup):
|
|
|
1047
1047
|
"""Search, submit, track, and manage individual tasks."""
|
|
1048
1048
|
|
|
1049
1049
|
interface = Interface(TASK_PROGRAM, TASK_USAGE, TASK_HELP)
|
|
1050
|
-
|
|
1051
|
-
interface.add_argument('command')
|
|
1052
1050
|
interface.add_argument('--list-columns', action='version', version=' '.join(Task.columns))
|
|
1051
|
+
interface.add_argument('command')
|
|
1053
1052
|
|
|
1054
|
-
command = None
|
|
1055
1053
|
commands = {
|
|
1056
1054
|
'submit': TaskSubmitApp,
|
|
1057
1055
|
'info': TaskInfoApp,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|