hypershell 2.6.0__tar.gz → 2.6.1__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 (31) hide show
  1. {hypershell-2.6.0 → hypershell-2.6.1}/PKG-INFO +10 -8
  2. {hypershell-2.6.0 → hypershell-2.6.1}/README.rst +2 -2
  3. {hypershell-2.6.0 → hypershell-2.6.1}/pyproject.toml +9 -7
  4. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/__init__.py +0 -2
  5. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/config.py +3 -15
  6. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/data/core.py +8 -1
  7. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/server.py +0 -3
  8. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/task.py +1 -3
  9. {hypershell-2.6.0 → hypershell-2.6.1}/LICENSE +0 -0
  10. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/client.py +0 -0
  11. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/cluster/__init__.py +0 -0
  12. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/cluster/local.py +0 -0
  13. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/cluster/remote.py +0 -0
  14. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/cluster/ssh.py +0 -0
  15. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/__init__.py +0 -0
  16. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/config.py +0 -0
  17. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/exceptions.py +0 -0
  18. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/fsm.py +0 -0
  19. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/heartbeat.py +0 -0
  20. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/logging.py +0 -0
  21. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/platform.py +0 -0
  22. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/queue.py +0 -0
  23. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/remote.py +0 -0
  24. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/signal.py +0 -0
  25. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/tag.py +0 -0
  26. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/template.py +0 -0
  27. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/thread.py +0 -0
  28. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/core/types.py +0 -0
  29. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/data/__init__.py +0 -0
  30. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/data/model.py +0 -0
  31. {hypershell-2.6.0 → hypershell-2.6.1}/src/hypershell/submit.py +0 -0
@@ -1,33 +1,35 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hypershell
3
- Version: 2.6.0
3
+ Version: 2.6.1
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,<4.0
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
- Requires-Dist: cmdkit (>=2.7.5,<3.0.0)
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/glentner/hypershell
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/glentner/hypershell?sort=semver
41
- :target: https://github.com/glentner/hypershell/releases
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/glentner/hypershell?sort=semver
9
- :target: https://github.com/glentner/hypershell/releases
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.0"
3
+ version = "2.6.1"
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/glentner/hypershell"
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.10,<4.0"
40
- cmdkit = "^2.7.5"
41
- toml = "^0.10.2"
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 toml
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
- value = toml.dumps(value)
242
+ return tomlkit.dumps(value)
243
243
  else:
244
- value = toml.dumps({self.varpath: value})
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