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.
Files changed (110) hide show
  1. {hostctl-0.2.1 → hostctl-0.2.2}/CHANGELOG.md +23 -1
  2. {hostctl-0.2.1 → hostctl-0.2.2}/PKG-INFO +4 -4
  3. {hostctl-0.2.1 → hostctl-0.2.2}/pyproject.toml +8 -3
  4. {hostctl-0.2.1 → hostctl-0.2.2}/.gitignore +0 -0
  5. {hostctl-0.2.1 → hostctl-0.2.2}/LICENSE +0 -0
  6. {hostctl-0.2.1 → hostctl-0.2.2}/README.md +0 -0
  7. {hostctl-0.2.1 → hostctl-0.2.2}/docs/api/reference.md +0 -0
  8. {hostctl-0.2.1 → hostctl-0.2.2}/docs/changelog.md +0 -0
  9. {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/cli.md +0 -0
  10. {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/contracts.md +0 -0
  11. {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/extending.md +0 -0
  12. {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/path.md +0 -0
  13. {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/providers.md +0 -0
  14. {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/run.md +0 -0
  15. {hostctl-0.2.1 → hostctl-0.2.2}/docs/guide/transfer.md +0 -0
  16. {hostctl-0.2.1 → hostctl-0.2.2}/docs/index.md +0 -0
  17. {hostctl-0.2.1 → hostctl-0.2.2}/examples/application_provider.py +0 -0
  18. {hostctl-0.2.1 → hostctl-0.2.2}/examples/copy_between_hosts.py +0 -0
  19. {hostctl-0.2.1 → hostctl-0.2.2}/examples/local_run.py +0 -0
  20. {hostctl-0.2.1 → hostctl-0.2.2}/examples/remote_run.py +0 -0
  21. {hostctl-0.2.1 → hostctl-0.2.2}/mkdocs.yml +0 -0
  22. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/AGENTS.md +0 -0
  23. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/__init__.py +0 -0
  24. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/__main__.py +0 -0
  25. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/_async.py +0 -0
  26. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/_cli.py +0 -0
  27. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/__init__.py +0 -0
  28. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/_common.py +0 -0
  29. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/_qga.py +0 -0
  30. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/container.py +0 -0
  31. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/local.py +0 -0
  32. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/psrp.py +0 -0
  33. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/qemu.py +0 -0
  34. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/serial.py +0 -0
  35. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/ssh.py +0 -0
  36. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/executor/winrm.py +0 -0
  37. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/__init__.py +0 -0
  38. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_common.py +0 -0
  39. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_connection.py +0 -0
  40. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_local.py +0 -0
  41. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_ssh.py +0 -0
  42. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/_winrm.py +0 -0
  43. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/composite_path.py +0 -0
  44. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/container.py +0 -0
  45. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/container_path.py +0 -0
  46. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/qemu.py +0 -0
  47. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/serial.py +0 -0
  48. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/host/system.py +0 -0
  49. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/__init__.py +0 -0
  50. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/_common.py +0 -0
  51. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/container.py +0 -0
  52. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/psrp.py +0 -0
  53. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/qemu_serial.py +0 -0
  54. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/serial.py +0 -0
  55. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/process/ssh.py +0 -0
  56. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/provider/__init__.py +0 -0
  57. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/provider/_common.py +0 -0
  58. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/provider/transports.py +0 -0
  59. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/py.typed +0 -0
  60. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/serial/__init__.py +0 -0
  61. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/__init__.py +0 -0
  62. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/_common.py +0 -0
  63. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/cmd.py +0 -0
  64. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/fish.py +0 -0
  65. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/posix.py +0 -0
  66. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/shell/powershell.py +0 -0
  67. {hostctl-0.2.1 → hostctl-0.2.2}/src/hostctl/sync.py +0 -0
  68. {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/__init__.py +0 -0
  69. {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/path_fakes.py +0 -0
  70. {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/providers.py +0 -0
  71. {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_composite_path_routing.py +0 -0
  72. {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_live.py +0 -0
  73. {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_path_contract.py +0 -0
  74. {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_process_contract.py +0 -0
  75. {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_run_contract.py +0 -0
  76. {hostctl-0.2.1 → hostctl-0.2.2}/tests/conformance/test_sync_contract.py +0 -0
  77. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_application_provider.py +0 -0
  78. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_asyncssh_errors.py +0 -0
  79. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_cli.py +0 -0
  80. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_composite_path_propagation.py +0 -0
  81. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_connection_string.py +0 -0
  82. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_container_path.py +0 -0
  83. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_container_process.py +0 -0
  84. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_exec_command.py +0 -0
  85. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_api.py +0 -0
  86. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_container.py +0 -0
  87. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_local.py +0 -0
  88. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_module_layout.py +0 -0
  89. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_qemu.py +0 -0
  90. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_remote.py +0 -0
  91. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_host_winrm.py +0 -0
  92. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_observability.py +0 -0
  93. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_process.py +0 -0
  94. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_provider_fault_injection.py +0 -0
  95. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_psrp.py +0 -0
  96. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qemu_executor.py +0 -0
  97. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qemu_path.py +0 -0
  98. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qemu_serial.py +0 -0
  99. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qemu_serial_process.py +0 -0
  100. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qga_ssh_transport.py +0 -0
  101. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_qga_transport.py +0 -0
  102. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_serial_executor.py +0 -0
  103. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_serial_host.py +0 -0
  104. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_serial_live.py +0 -0
  105. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_shell.py +0 -0
  106. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_ssh_process.py +0 -0
  107. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_sync_helpers.py +0 -0
  108. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_system_host_fidelity.py +0 -0
  109. {hostctl-0.2.1 → hostctl-0.2.2}/tests/test_system_hosts.py +0 -0
  110. {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.1...HEAD
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.1
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.2,>=0.1
28
- Requires-Dist: pathlib-next<0.9,>=0.8.6
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.9,>=0.8.4; extra == 'ssh'
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.1"
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
- dependencies = ["pathlib_next>=0.8.6,<0.9", "netimps>=0.1,<0.2"]
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.9"]
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