hostctl 0.2.1__tar.gz → 0.2.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.
- {hostctl-0.2.1 → hostctl-0.2.2}/CHANGELOG.md +23 -1
- {hostctl-0.2.1 → hostctl-0.2.2}/PKG-INFO +4 -4
- {hostctl-0.2.1 → hostctl-0.2.2}/pyproject.toml +8 -3
- {hostctl-0.2.1 → hostctl-0.2.2}/.gitignore +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/LICENSE +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/README.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/api/reference.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/changelog.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/cli.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/contracts.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/extending.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/path.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/providers.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/run.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/transfer.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/docs/index.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/examples/application_provider.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/examples/copy_between_hosts.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/examples/local_run.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/examples/remote_run.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/mkdocs.yml +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/AGENTS.md +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/__init__.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/__main__.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/_async.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/_cli.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/__init__.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/_common.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/_qga.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/container.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/local.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/psrp.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/qemu.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/serial.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/ssh.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/winrm.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/__init__.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_common.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_connection.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_local.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_ssh.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_winrm.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/composite_path.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/container.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/container_path.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/qemu.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/serial.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/system.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/__init__.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/_common.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/container.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/psrp.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/qemu_serial.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/serial.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/ssh.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/provider/__init__.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/provider/_common.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/provider/transports.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/py.typed +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/serial/__init__.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/__init__.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/_common.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/cmd.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/fish.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/posix.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/powershell.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/sync.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/__init__.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/path_fakes.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/providers.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_composite_path_routing.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_live.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_path_contract.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_process_contract.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_run_contract.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_sync_contract.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_application_provider.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_asyncssh_errors.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_cli.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_composite_path_propagation.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_connection_string.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_container_path.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_container_process.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_exec_command.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_api.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_container.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_local.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_module_layout.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_qemu.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_remote.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_winrm.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_observability.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_process.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_provider_fault_injection.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_psrp.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qemu_executor.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qemu_path.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qemu_serial.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qemu_serial_process.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qga_ssh_transport.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qga_transport.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_serial_executor.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_serial_host.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_serial_live.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_shell.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_ssh_process.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_sync_helpers.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_system_host_fidelity.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_system_hosts.py +0 -0
- {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_winrm_path.py +0 -0
|
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.2.2] - 2026-07-29
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Dependency ranges widened to admit `pathlib_next` 0.9 and `netimps` 0.2:
|
|
15
|
+
`pathlib_next>=0.8.6,<0.10` and `netimps>=0.1,<0.3`, with the `ssh` extra's
|
|
16
|
+
`pathlib_next[sftp-async]` bound moved to `<0.10` alongside it. The
|
|
17
|
+
previous `netimps<0.2` also conflicted with `pathlib_next` 0.9's own `uri`
|
|
18
|
+
extra, which requires `netimps>=0.2.0`.
|
|
19
|
+
|
|
20
|
+
The floors stay where they were rather than rising to the new minors:
|
|
21
|
+
hostctl uses no API added in either release — its three netimps functions
|
|
22
|
+
(`get_default_port`, `is_local_address`, `try_parse`) all exist in 0.1, and
|
|
23
|
+
`ProgressReader` is hostctl's own wrapper, unrelated to pathlib_next 0.9's
|
|
24
|
+
native `copy(progress=)`. A floor demanding versions the code does not need
|
|
25
|
+
would exclude working installs for nothing. The ceilings span two minors
|
|
26
|
+
because both projects are pre-1.0, where a minor may break.
|
|
27
|
+
|
|
28
|
+
Verified against both ends of the range: the suite passes with
|
|
29
|
+
`pathlib_next` 0.8.6 and 0.9.0, each alongside `netimps` 0.2.0.
|
|
30
|
+
|
|
10
31
|
## [0.2.1] - 2026-07-29
|
|
11
32
|
|
|
12
33
|
### Added
|
|
@@ -292,7 +313,8 @@ test suite on Python 3.9 through 3.14.
|
|
|
292
313
|
assigned to it; a config-less host now builds its own family configuration
|
|
293
314
|
instead.
|
|
294
315
|
|
|
295
|
-
[Unreleased]: https://github.com/jose-pr/hostctl/compare/v0.2.
|
|
316
|
+
[Unreleased]: https://github.com/jose-pr/hostctl/compare/v0.2.2...HEAD
|
|
317
|
+
[0.2.2]: https://github.com/jose-pr/hostctl/compare/v0.2.1...v0.2.2
|
|
296
318
|
[0.2.1]: https://github.com/jose-pr/hostctl/compare/v0.2.0...v0.2.1
|
|
297
319
|
[0.2.0]: https://github.com/jose-pr/hostctl/compare/v0.1.2...v0.2.0
|
|
298
320
|
[0.1.2]: https://github.com/jose-pr/hostctl/compare/v0.1.0...v0.1.2
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hostctl
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Run commands and access files on a host, local or remote, protocol-agnostic
|
|
5
5
|
Project-URL: Homepage, https://github.com/jose-pr/hostctl/
|
|
6
6
|
Project-URL: Documentation, https://jose-pr.github.io/hostctl/
|
|
@@ -24,8 +24,8 @@ Classifier: Topic :: System :: Filesystems
|
|
|
24
24
|
Classifier: Topic :: System :: Systems Administration
|
|
25
25
|
Classifier: Typing :: Typed
|
|
26
26
|
Requires-Python: >=3.9
|
|
27
|
-
Requires-Dist: netimps<0.
|
|
28
|
-
Requires-Dist: pathlib-next<0.
|
|
27
|
+
Requires-Dist: netimps<0.3,>=0.1
|
|
28
|
+
Requires-Dist: pathlib-next<0.10,>=0.8.6
|
|
29
29
|
Provides-Extra: container
|
|
30
30
|
Requires-Dist: docker<8,>=7.1; extra == 'container'
|
|
31
31
|
Provides-Extra: dev
|
|
@@ -44,7 +44,7 @@ Provides-Extra: serial
|
|
|
44
44
|
Requires-Dist: pyserial<4,>=3.5; extra == 'serial'
|
|
45
45
|
Provides-Extra: ssh
|
|
46
46
|
Requires-Dist: asyncssh; extra == 'ssh'
|
|
47
|
-
Requires-Dist: pathlib-next[sftp-async]<0.
|
|
47
|
+
Requires-Dist: pathlib-next[sftp-async]<0.10,>=0.8.4; extra == 'ssh'
|
|
48
48
|
Provides-Extra: winrm
|
|
49
49
|
Requires-Dist: pywinrm<0.6,>=0.5.0; extra == 'winrm'
|
|
50
50
|
Provides-Extra: winrm-credssp
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "hostctl"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.2"
|
|
8
8
|
authors = [{ name = "Jose A." }]
|
|
9
9
|
description = "Run commands and access files on a host, local or remote, protocol-agnostic"
|
|
10
10
|
readme = "README.md"
|
|
@@ -33,12 +33,17 @@ classifiers = [
|
|
|
33
33
|
# services database knows (ws/wss, socks5) -- so hostctl does not reimplement
|
|
34
34
|
# them. Transport implementations remain extras, so importing hostctl never
|
|
35
35
|
# requires them.
|
|
36
|
-
|
|
36
|
+
#
|
|
37
|
+
# Both ranges span two minors deliberately: hostctl uses no API added in
|
|
38
|
+
# pathlib_next 0.9 or netimps 0.2, so raising the floor would exclude working
|
|
39
|
+
# installs for nothing. The ceilings stay at the next major-ish boundary
|
|
40
|
+
# because both projects are pre-1.0, where a minor may break.
|
|
41
|
+
dependencies = ["pathlib_next>=0.8.6,<0.10", "netimps>=0.1,<0.3"]
|
|
37
42
|
|
|
38
43
|
[project.optional-dependencies]
|
|
39
44
|
# SSH-backed run()/path(): asyncssh for shell exec, pathlib_next's SftpPath
|
|
40
45
|
# (asyncssh-only since 0.8.2) for the remote path backend.
|
|
41
|
-
ssh = ["asyncssh", "pathlib_next[sftp-async]>=0.8.4,<0.
|
|
46
|
+
ssh = ["asyncssh", "pathlib_next[sftp-async]>=0.8.4,<0.10"]
|
|
42
47
|
# Windows Remote Management command execution.
|
|
43
48
|
winrm = ["pywinrm>=0.5.0,<0.6"]
|
|
44
49
|
# PowerShell Remoting Protocol runspaces (Python 3.10+ only). The marker
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|