exosphere-cli 3.0.1__tar.gz → 3.0.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 (63) hide show
  1. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/PKG-INFO +8 -7
  2. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/README.md +4 -4
  3. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/pyproject.toml +4 -3
  4. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/pyproject.toml.orig +4 -3
  5. exosphere_cli-3.0.2/src/exosphere/__init__.py +29 -0
  6. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/version.py +2 -4
  7. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/errors.py +3 -1
  8. exosphere_cli-3.0.1/src/exosphere/__init__.py +0 -14
  9. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/COPYRIGHT +0 -0
  10. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/LICENSE +0 -0
  11. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/LICENSES/Apache-2.0.txt +0 -0
  12. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/LICENSES/CC-BY-4.0.txt +0 -0
  13. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/LICENSES/MIT.txt +0 -0
  14. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/LICENSES/OFL-1.1.txt +0 -0
  15. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/cli.py +0 -0
  16. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/__init__.py +0 -0
  17. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/config.py +0 -0
  18. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/connections.py +0 -0
  19. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/host.py +0 -0
  20. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/inventory.py +0 -0
  21. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/report.py +0 -0
  22. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/sudo.py +0 -0
  23. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/ui.py +0 -0
  24. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/commands/utils.py +0 -0
  25. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/config.py +0 -0
  26. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/context.py +0 -0
  27. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/data.py +0 -0
  28. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/database.py +0 -0
  29. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/editing.py +0 -0
  30. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/fspaths.py +0 -0
  31. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/inventory.py +0 -0
  32. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/main.py +0 -0
  33. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/migrations.py +0 -0
  34. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/objects.py +0 -0
  35. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/pipelining.py +0 -0
  36. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/providers/__init__.py +0 -0
  37. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/providers/api.py +0 -0
  38. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/providers/debian.py +0 -0
  39. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/providers/factory.py +0 -0
  40. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/providers/freebsd.py +0 -0
  41. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/providers/openbsd.py +0 -0
  42. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/providers/redhat.py +0 -0
  43. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/repl.py +0 -0
  44. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/reporting.py +0 -0
  45. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/runners.py +0 -0
  46. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/schema/__init__.py +0 -0
  47. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/schema/host-report.schema.json +0 -0
  48. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/security.py +0 -0
  49. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/setup/__init__.py +0 -0
  50. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/setup/detect.py +0 -0
  51. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/templates/report.html.j2 +0 -0
  52. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/templates/report.md.j2 +0 -0
  53. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/templates/report.txt.j2 +0 -0
  54. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/__init__.py +0 -0
  55. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/app.py +0 -0
  56. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/context.py +0 -0
  57. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/dashboard.py +0 -0
  58. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/elements.py +0 -0
  59. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/inventory.py +0 -0
  60. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/logs.py +0 -0
  61. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/messages.py +0 -0
  62. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/palette.py +0 -0
  63. {exosphere_cli-3.0.1 → exosphere_cli-3.0.2}/src/exosphere/ui/style.tcss +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: exosphere-cli
3
- Version: 3.0.1
3
+ Version: 3.0.2
4
4
  Summary: CLI/TUI driven patch reporting for remote Unix-like systems.
5
5
  Author: Alexandre Gauthier
6
6
  Author-email: Alexandre Gauthier <alex@underwares.org>
@@ -30,11 +30,12 @@ Requires-Dist: prompt-toolkit>=3.0.51
30
30
  Requires-Dist: jinja2>=3.1.6
31
31
  Requires-Dist: packaging>=24.0
32
32
  Requires-Dist: rich>=14.1.0
33
- Requires-Dist: cyclopts>=4.16.1
33
+ Requires-Dist: cyclopts>=4.16.1,<5.0.0
34
34
  Requires-Dist: filelock>=3.29.4
35
35
  Requires-Dist: pydantic>=2.12
36
36
  Requires-Python: >=3.13
37
- Project-URL: homepage, https://exosphere.readthedocs.io
37
+ Project-URL: homepage, https://exosphere.tools
38
+ Project-URL: documentation, https://docs.exosphere.tools
38
39
  Project-URL: repository, https://github.com/mrdaemon/exosphere
39
40
  Project-URL: issues, https://github.com/mrdaemon/exosphere/issues
40
41
  Description-Content-Type: text/markdown
@@ -63,8 +64,8 @@ on remote hosts.
63
64
  If you have SSH access to the hosts and your keypairs are loaded in an SSH Agent,
64
65
  you are good to go!
65
66
 
66
- Simply follow the [Quickstart Guide](https://exosphere.readthedocs.io/en/stable/quickstart.html),
67
- or see [the documentation](https://exosphere.readthedocs.io/en/stable/) to get started.
67
+ Simply follow the [Quickstart Guide](https://docs.exosphere.tools/en/stable/quickstart.html),
68
+ or see [the documentation](https://docs.exosphere.tools/en/stable/) to get started.
68
69
 
69
70
  ## Key Features
70
71
 
@@ -103,7 +104,7 @@ This includes network equipment with proprietary operating systems, etc.
103
104
  ## Documentation
104
105
 
105
106
  For installation instructions, configuration and usage examples,
106
- [full documentation](https://exosphere.readthedocs.io/) is available.
107
+ [full documentation](https://docs.exosphere.tools/) is available.
107
108
 
108
109
  ## Development
109
110
 
@@ -261,7 +262,7 @@ The TCSS for all of it is in a single file under `ui/style.tcss`.
261
262
 
262
263
  This use case is not currently well supported, but it is possible to use Exosphere as a library.
263
264
  The documentation for this (alongside actual examples) is still a WIP, but you can
264
- refer to the [Online API Documentation](https://exosphere.readthedocs.io/en/stable/api/index.html)
265
+ refer to the [Online API Documentation](https://docs.exosphere.tools/en/stable/api/index.html)
265
266
  for the core functionality and objects that are considered public.
266
267
 
267
268
  ## LLM/"AI" Contributions Policy
@@ -22,8 +22,8 @@ on remote hosts.
22
22
  If you have SSH access to the hosts and your keypairs are loaded in an SSH Agent,
23
23
  you are good to go!
24
24
 
25
- Simply follow the [Quickstart Guide](https://exosphere.readthedocs.io/en/stable/quickstart.html),
26
- or see [the documentation](https://exosphere.readthedocs.io/en/stable/) to get started.
25
+ Simply follow the [Quickstart Guide](https://docs.exosphere.tools/en/stable/quickstart.html),
26
+ or see [the documentation](https://docs.exosphere.tools/en/stable/) to get started.
27
27
 
28
28
  ## Key Features
29
29
 
@@ -62,7 +62,7 @@ This includes network equipment with proprietary operating systems, etc.
62
62
  ## Documentation
63
63
 
64
64
  For installation instructions, configuration and usage examples,
65
- [full documentation](https://exosphere.readthedocs.io/) is available.
65
+ [full documentation](https://docs.exosphere.tools/) is available.
66
66
 
67
67
  ## Development
68
68
 
@@ -220,7 +220,7 @@ The TCSS for all of it is in a single file under `ui/style.tcss`.
220
220
 
221
221
  This use case is not currently well supported, but it is possible to use Exosphere as a library.
222
222
  The documentation for this (alongside actual examples) is still a WIP, but you can
223
- refer to the [Online API Documentation](https://exosphere.readthedocs.io/en/stable/api/index.html)
223
+ refer to the [Online API Documentation](https://docs.exosphere.tools/en/stable/api/index.html)
224
224
  for the core functionality and objects that are considered public.
225
225
 
226
226
  ## LLM/"AI" Contributions Policy
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "exosphere-cli"
3
- version = "3.0.1"
3
+ version = "3.0.2"
4
4
  description = "CLI/TUI driven patch reporting for remote Unix-like systems."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -32,7 +32,7 @@ dependencies = [
32
32
  "jinja2>=3.1.6",
33
33
  "packaging>=24.0",
34
34
  "rich>=14.1.0",
35
- "cyclopts>=4.16.1",
35
+ "cyclopts>=4.16.1,<5.0.0",
36
36
  "filelock>=3.29.4",
37
37
  "pydantic>=2.12",
38
38
  ]
@@ -42,7 +42,8 @@ name = "Alexandre Gauthier"
42
42
  email = "alex@underwares.org"
43
43
 
44
44
  [project.urls]
45
- homepage = "https://exosphere.readthedocs.io"
45
+ homepage = "https://exosphere.tools"
46
+ documentation = "https://docs.exosphere.tools"
46
47
  repository = "https://github.com/mrdaemon/exosphere"
47
48
  issues = "https://github.com/mrdaemon/exosphere/issues"
48
49
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "exosphere-cli"
3
- version = "3.0.1"
3
+ version = "3.0.2"
4
4
  description = "CLI/TUI driven patch reporting for remote Unix-like systems."
5
5
  readme = "README.md"
6
6
  authors = [
@@ -36,7 +36,7 @@ dependencies = [
36
36
  "jinja2>=3.1.6",
37
37
  "packaging>=24.0",
38
38
  "rich>=14.1.0",
39
- "cyclopts>=4.16.1",
39
+ "cyclopts>=4.16.1,<5.0.0",
40
40
  "filelock>=3.29.4",
41
41
  "pydantic>=2.12",
42
42
  ]
@@ -65,7 +65,8 @@ dev = [
65
65
  ]
66
66
 
67
67
  [project.urls]
68
- homepage = "https://exosphere.readthedocs.io"
68
+ homepage = "https://exosphere.tools"
69
+ documentation = "https://docs.exosphere.tools"
69
70
  repository = "https://github.com/mrdaemon/exosphere"
70
71
  issues = "https://github.com/mrdaemon/exosphere/issues"
71
72
 
@@ -0,0 +1,29 @@
1
+ import importlib.metadata
2
+
3
+ from .config import Configuration
4
+
5
+ # Global Instances: configuration and GlobalState
6
+ # These are set at runtime and should be used as singletons
7
+ # to hold the global state and configuration.
8
+
9
+ app_config = Configuration() # Has default values out of the box
10
+
11
+ # Current software version, imported from pyproject metadata
12
+ __version__ = importlib.metadata.version("exosphere_cli")
13
+
14
+ # Current documentation url, from pyproject metadata
15
+ # Falls back to known good readthedocs URL to avoid disasters
16
+ _project_urls: list[str] = (
17
+ importlib.metadata.metadata("exosphere_cli").get_all("Project-URL") or []
18
+ )
19
+
20
+ docs_url = next(
21
+ (
22
+ entry.split(",", 1)[1].strip()
23
+ for entry in _project_urls
24
+ if entry.lower().startswith("documentation,")
25
+ ),
26
+ "https://exosphere.readthedocs.io",
27
+ )
28
+
29
+ __all__ = ["__version__", "app_config", "docs_url"]
@@ -12,7 +12,7 @@ from urllib.error import URLError
12
12
  from cyclopts import App, Parameter
13
13
  from packaging.version import parse
14
14
 
15
- from exosphere import __version__, app_config
15
+ from exosphere import __version__, app_config, docs_url
16
16
 
17
17
  from .utils import console, err_console, print_environment, print_version
18
18
 
@@ -27,9 +27,7 @@ app = App(name="version", help=ROOT_HELP, help_flags=["--help"])
27
27
  PACKAGE_NAME = "exosphere-cli"
28
28
  PYPI_URL = f"https://pypi.org/pypi/{PACKAGE_NAME}/json"
29
29
  RELEASE_URL = "https://github.com/mrdaemon/exosphere/releases/tag/"
30
- DOCS_URL = (
31
- "https://exosphere.readthedocs.io/en/stable/installation.html#updating-exosphere"
32
- )
30
+ DOCS_URL = f"{docs_url}/en/stable/installation.html#updating-exosphere"
33
31
 
34
32
 
35
33
  @app.default
@@ -11,6 +11,8 @@ from rich.box import ROUNDED
11
11
  from rich.console import RenderableType
12
12
  from rich.panel import Panel
13
13
 
14
+ from exosphere import docs_url
15
+
14
16
  # Standard authentication error message for better UX
15
17
  # This is intended to be displayed whenever Paramiko raises
16
18
  # PasswordRequiredException, which is nearly always, and has the
@@ -31,7 +33,7 @@ SUDO_AUTH_FAILURE_MESSAGE = (
31
33
  "Sudo failed: "
32
34
  "Ensure the user is configured with passwordless sudo. "
33
35
  "You can use 'exosphere sudo generate' to produce a sudoers snippet for this host. "
34
- "See: https://exosphere.readthedocs.io/en/stable/connections.html#id1"
36
+ f"See: {docs_url}/en/stable/sudo.html#generating-a-sudoers-configuration"
35
37
  )
36
38
 
37
39
 
@@ -1,14 +0,0 @@
1
- import importlib.metadata
2
-
3
- from .config import Configuration
4
-
5
- # Global Instances: configuration and GlobalState
6
- # These are set at runtime and should be used as singletons
7
- # to hold the global state and configuration.
8
-
9
- app_config = Configuration() # Has default values out of the box
10
-
11
- # Current software version, imported from pyproject metadata
12
- __version__ = importlib.metadata.version("exosphere_cli")
13
-
14
- __all__ = ["__version__", "app_config"]
File without changes
File without changes