hostctl 0.2.6__tar.gz → 0.2.7__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.6 → hostctl-0.2.7}/CHANGELOG.md +21 -2
- {hostctl-0.2.6 → hostctl-0.2.7}/PKG-INFO +4 -4
- {hostctl-0.2.6 → hostctl-0.2.7}/pyproject.toml +13 -9
- {hostctl-0.2.6 → hostctl-0.2.7}/.gitignore +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/LICENSE +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/README.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/api/reference.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/changelog.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/guide/cli.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/guide/contracts.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/guide/extending.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/guide/path.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/guide/providers.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/guide/run.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/guide/transfer.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/docs/index.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/examples/application_provider.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/examples/copy_between_hosts.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/examples/local_run.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/examples/remote_run.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/mkdocs.yml +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/AGENTS.md +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/__init__.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/__main__.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/_async.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/_cli.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/__init__.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/_common.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/_qga.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/container.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/local.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/psrp.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/qemu.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/serial.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/ssh.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/executor/winrm.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/__init__.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/_common.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/_connection.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/_local.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/_ssh.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/_staged_io.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/_winrm.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/composite_path.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/container.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/container_path.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/qemu.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/serial.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/host/system.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/process/__init__.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/process/_common.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/process/container.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/process/psrp.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/process/qemu_serial.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/process/serial.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/process/ssh.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/provider/__init__.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/provider/_common.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/provider/transports.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/py.typed +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/serial/__init__.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/shell/__init__.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/shell/_common.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/shell/cmd.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/shell/fish.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/shell/posix.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/shell/powershell.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/src/hostctl/sync.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/conformance/__init__.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/conformance/path_fakes.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/conformance/providers.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/conformance/test_composite_path_routing.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/conformance/test_live.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/conformance/test_path_contract.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/conformance/test_process_contract.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/conformance/test_run_contract.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/conformance/test_sync_contract.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_application_provider.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_asyncssh_errors.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_cli.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_composite_path_backend_kwargs.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_composite_path_inherited_operations.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_composite_path_propagation.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_connection_string.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_container_path.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_container_process.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_exec_command.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_executor_exports.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_host_api.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_host_container.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_host_local.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_host_module_layout.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_host_qemu.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_host_remote.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_host_winrm.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_observability.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_process.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_provider_fault_injection.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_psrp.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_qemu_executor.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_qemu_path.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_qemu_serial.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_qemu_serial_process.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_qga_ssh_transport.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_qga_transport.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_serial_executor.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_serial_host.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_serial_live.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_shell.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_ssh_process.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_staged_io.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_sync_helpers.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_system_host_fidelity.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_system_hosts.py +0 -0
- {hostctl-0.2.6 → hostctl-0.2.7}/tests/test_winrm_path.py +0 -0
|
@@ -7,7 +7,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
## [0.2.
|
|
10
|
+
## [0.2.7] - 2026-08-16
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Dependency floors now name versions hostctl is actually tested against.
|
|
15
|
+
`pathlib_next` moves to `>=0.9.1,<0.10` and `netimps` to `>=0.2.0,<0.3`
|
|
16
|
+
(the `ssh` extra's `pathlib_next[sftp-async]` moves from `>=0.8.4` to the
|
|
17
|
+
same `>=0.9.1`). Both ceilings are unchanged, and no API hostctl calls has
|
|
18
|
+
moved — this only stops resolvers from choosing an install that does not
|
|
19
|
+
work.
|
|
20
|
+
|
|
21
|
+
The `pathlib_next` floor is above the start of its minor series for one
|
|
22
|
+
measured reason: `Path.symlink_to()` — and with it the `force=` keyword —
|
|
23
|
+
first exists in **0.9.1**. The composite path forwards `symlink_to` to
|
|
24
|
+
whichever backend path it was handed, so against a stock 0.9.0 `Path` the
|
|
25
|
+
whole chain raises `AttributeError` rather than linking anything. The
|
|
26
|
+
previous `>=0.8.6` floor therefore advertised support for installs where
|
|
27
|
+
composite `symlink_to` could never work. `netimps` needs nothing past
|
|
28
|
+
`0.2.0` and floors at the series start.
|
|
11
29
|
|
|
12
30
|
### Added
|
|
13
31
|
|
|
@@ -511,7 +529,8 @@ test suite on Python 3.9 through 3.14.
|
|
|
511
529
|
assigned to it; a config-less host now builds its own family configuration
|
|
512
530
|
instead.
|
|
513
531
|
|
|
514
|
-
[Unreleased]: https://github.com/jose-pr/hostctl/compare/v0.2.
|
|
532
|
+
[Unreleased]: https://github.com/jose-pr/hostctl/compare/v0.2.7...HEAD
|
|
533
|
+
[0.2.7]: https://github.com/jose-pr/hostctl/compare/v0.2.6...v0.2.7
|
|
515
534
|
[0.2.6]: https://github.com/jose-pr/hostctl/compare/v0.2.5...v0.2.6
|
|
516
535
|
[0.2.5]: https://github.com/jose-pr/hostctl/compare/v0.2.4...v0.2.5
|
|
517
536
|
[0.2.4]: https://github.com/jose-pr/hostctl/compare/v0.2.3...v0.2.4
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: hostctl
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.7
|
|
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.3,>=0.
|
|
28
|
-
Requires-Dist: pathlib-next<0.10,>=0.
|
|
27
|
+
Requires-Dist: netimps<0.3,>=0.2.0
|
|
28
|
+
Requires-Dist: pathlib-next<0.10,>=0.9.1
|
|
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.10,>=0.
|
|
47
|
+
Requires-Dist: pathlib-next[sftp-async]<0.10,>=0.9.1; 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.7"
|
|
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"
|
|
@@ -34,19 +34,23 @@ classifiers = [
|
|
|
34
34
|
# them. Transport implementations remain extras, so importing hostctl never
|
|
35
35
|
# requires them.
|
|
36
36
|
#
|
|
37
|
-
#
|
|
38
|
-
#
|
|
39
|
-
#
|
|
37
|
+
# Each floor is the `.0` of the dependency's current minor series, raised
|
|
38
|
+
# above it only where hostctl needs a later patch. pathlib_next is that
|
|
39
|
+
# exception: `Path.symlink_to()` -- and with it the `force=` keyword -- first
|
|
40
|
+
# exists in 0.9.1, and the composite path forwards `symlink_to` to whichever
|
|
41
|
+
# backend path it was handed, so against a stock 0.9.0 `Path` the call raises
|
|
42
|
+
# `AttributeError` (measured on 3.9 and 3.14). netimps has no such case and
|
|
43
|
+
# floors at the series start. The ceilings stay at the next major-ish boundary
|
|
40
44
|
# because both projects are pre-1.0, where a minor may break. Composite kwargs
|
|
41
|
-
# passthrough does not change this: forwarding is signature-aware, so
|
|
42
|
-
#
|
|
43
|
-
# boundary
|
|
44
|
-
dependencies = ["pathlib_next>=0.
|
|
45
|
+
# passthrough does not change this: forwarding is signature-aware, so a
|
|
46
|
+
# `force=` the installed pathlib_next does not declare is rejected at the
|
|
47
|
+
# composite boundary rather than inside a transport.
|
|
48
|
+
dependencies = ["pathlib_next>=0.9.1,<0.10", "netimps>=0.2.0,<0.3"]
|
|
45
49
|
|
|
46
50
|
[project.optional-dependencies]
|
|
47
51
|
# SSH-backed run()/path(): asyncssh for shell exec, pathlib_next's SftpPath
|
|
48
52
|
# (asyncssh-only since 0.8.2) for the remote path backend.
|
|
49
|
-
ssh = ["asyncssh", "pathlib_next[sftp-async]>=0.
|
|
53
|
+
ssh = ["asyncssh", "pathlib_next[sftp-async]>=0.9.1,<0.10"]
|
|
50
54
|
# Windows Remote Management command execution.
|
|
51
55
|
winrm = ["pywinrm>=0.5.0,<0.6"]
|
|
52
56
|
# 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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|