ssh-handler 1.1.0__tar.gz → 1.2.0__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 (29) hide show
  1. {ssh_handler-1.1.0/ssh_handler.egg-info → ssh_handler-1.2.0}/PKG-INFO +23 -23
  2. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/README.md +18 -10
  3. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/pyproject.toml +10 -8
  4. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/__init__.py +1 -1
  5. {ssh_handler-1.1.0 → ssh_handler-1.2.0/ssh_handler.egg-info}/PKG-INFO +23 -23
  6. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler.egg-info/requires.txt +4 -16
  7. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/LICENSE +0 -0
  8. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/setup.cfg +0 -0
  9. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/__main__.py +0 -0
  10. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/cli.py +0 -0
  11. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/config.py +0 -0
  12. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/core.py +0 -0
  13. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/credentials.py +0 -0
  14. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/exceptions.py +0 -0
  15. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/ftp.py +0 -0
  16. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/openssh/OpenSSH-ARM64.zip +0 -0
  17. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/openssh/OpenSSH-Win32.zip +0 -0
  18. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/openssh/OpenSSH-Win64.zip +0 -0
  19. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/pool.py +0 -0
  20. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/pyqt_worker.py +0 -0
  21. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/results.py +0 -0
  22. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/serial_handler.py +0 -0
  23. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/setup_openssh_server.ps1 +0 -0
  24. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler/winrm_bootstrap.py +0 -0
  25. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler.egg-info/SOURCES.txt +0 -0
  26. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler.egg-info/dependency_links.txt +0 -0
  27. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler.egg-info/entry_points.txt +0 -0
  28. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/ssh_handler.egg-info/top_level.txt +0 -0
  29. {ssh_handler-1.1.0 → ssh_handler-1.2.0}/tests/test_offline.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ssh-handler
3
- Version: 1.1.0
3
+ Version: 1.2.0
4
4
  Summary: Extensive SSH/SFTP/SCP/FTP handler built on Paramiko, for test automation, CLIs and PyQt5 tools.
5
5
  Author: ssh-handler contributors
6
6
  License-Expression: MIT
@@ -14,22 +14,14 @@ Requires-Python: >=3.8
14
14
  Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
16
  Requires-Dist: paramiko>=3.0
17
- Provides-Extra: secure
18
- Requires-Dist: keyring>=23.0; extra == "secure"
19
- Provides-Extra: scp
20
- Requires-Dist: scp>=0.14; extra == "scp"
17
+ Requires-Dist: scp>=0.14
18
+ Requires-Dist: pyserial>=3.5
19
+ Requires-Dist: keyring>=23.0
20
+ Requires-Dist: pywinrm>=0.4.3
21
21
  Provides-Extra: gui
22
22
  Requires-Dist: PyQt5>=5.15; extra == "gui"
23
- Provides-Extra: winrm
24
- Requires-Dist: pywinrm>=0.4.3; extra == "winrm"
25
- Provides-Extra: serial
26
- Requires-Dist: pyserial>=3.5; extra == "serial"
27
23
  Provides-Extra: all
28
- Requires-Dist: keyring>=23.0; extra == "all"
29
- Requires-Dist: scp>=0.14; extra == "all"
30
24
  Requires-Dist: PyQt5>=5.15; extra == "all"
31
- Requires-Dist: pywinrm>=0.4.3; extra == "all"
32
- Requires-Dist: pyserial>=3.5; extra == "all"
33
25
  Dynamic: license-file
34
26
 
35
27
  # ssh-handler
@@ -89,15 +81,17 @@ behind one object that:
89
81
  ## Install
90
82
 
91
83
  ```bash
92
- pip install ssh-handler # core (paramiko only)
93
- pip install "ssh-handler[secure]" # + keyring (OS credential vault)
94
- pip install "ssh-handler[scp]" # + scp (SCP-protocol transfers)
95
- pip install "ssh-handler[gui]" # + PyQt5 (the GUI worker)
96
- pip install "ssh-handler[all]" # everything
84
+ pip install ssh-handler # everything: SSH, SFTP, SCP, FTP, serial,
85
+ # credential vault, WinRM bootstrap
86
+ pip install "ssh-handler[gui]" # also installs PyQt5 for the GUI worker
97
87
  ```
98
88
 
99
- `scp`, `keyring`, and `PyQt5` are optional the core works without them, and
100
- those features raise a clear, actionable message if you use them without the extra.
89
+ **Batteries included.** A plain `pip install ssh-handler` pulls in `paramiko`,
90
+ `scp`, `pyserial`, `keyring`, and `pywinrm`, so SSH, SFTP/SCP/FTP transfers,
91
+ serial/COM ports, confidential credential storage, and the WinRM bootstrap all
92
+ work out of the box. Only **PyQt5** is optional (`[gui]`), because it's a large
93
+ GUI toolkit you only need when building a GUI — forcing it would bloat headless
94
+ and CI installs.
101
95
 
102
96
  ## Quick start
103
97
 
@@ -137,7 +131,7 @@ with SSHHandler(SSHConfig(host="10.0.0.5", username="root", password="pw")) as s
137
131
  with **live regex matching**, a per-line/per-match callback, and **tee to a
138
132
  local file**, all built in.
139
133
 
140
- **Serial / COM ports** (`SerialHandler`, needs the `serial` extra)
134
+ **Serial / COM ports** (`SerialHandler`, included by default)
141
135
  - `list_serial_ports()`, `open`/`close`, `write` / `write_line`.
142
136
  - `iter_lines()` and `stream(...)` — same live streaming + match + save-to-file
143
137
  model as SSH, for device consoles.
@@ -298,8 +292,14 @@ To stop a stream from another thread (e.g. a GUI Stop button), pass a
298
292
 
299
293
  ## Serial / COM ports
300
294
 
301
- Same streaming + match + save model for device serial consoles (needs
302
- `pip install "ssh-handler[serial]"`).
295
+ Same streaming + match + save model for device serial consoles (included by
296
+ default — no extra install).
297
+
298
+ > **Important — where the COM port physically is.** `pyserial` opens a *local*
299
+ > port, so this runs on the machine the device is **plugged into**. If the device
300
+ > is on your laptop, run it on your laptop. If it's on the remote/RDP machine,
301
+ > either run the script there, or — on Linux targets — stream the device file
302
+ > over SSH instead: `ssh.stream("cat /dev/ttyUSB0", match=..., save_to=...)`.
303
303
 
304
304
  ```python
305
305
  from ssh_handler import SerialHandler, list_serial_ports
@@ -55,15 +55,17 @@ behind one object that:
55
55
  ## Install
56
56
 
57
57
  ```bash
58
- pip install ssh-handler # core (paramiko only)
59
- pip install "ssh-handler[secure]" # + keyring (OS credential vault)
60
- pip install "ssh-handler[scp]" # + scp (SCP-protocol transfers)
61
- pip install "ssh-handler[gui]" # + PyQt5 (the GUI worker)
62
- pip install "ssh-handler[all]" # everything
58
+ pip install ssh-handler # everything: SSH, SFTP, SCP, FTP, serial,
59
+ # credential vault, WinRM bootstrap
60
+ pip install "ssh-handler[gui]" # also installs PyQt5 for the GUI worker
63
61
  ```
64
62
 
65
- `scp`, `keyring`, and `PyQt5` are optional the core works without them, and
66
- those features raise a clear, actionable message if you use them without the extra.
63
+ **Batteries included.** A plain `pip install ssh-handler` pulls in `paramiko`,
64
+ `scp`, `pyserial`, `keyring`, and `pywinrm`, so SSH, SFTP/SCP/FTP transfers,
65
+ serial/COM ports, confidential credential storage, and the WinRM bootstrap all
66
+ work out of the box. Only **PyQt5** is optional (`[gui]`), because it's a large
67
+ GUI toolkit you only need when building a GUI — forcing it would bloat headless
68
+ and CI installs.
67
69
 
68
70
  ## Quick start
69
71
 
@@ -103,7 +105,7 @@ with SSHHandler(SSHConfig(host="10.0.0.5", username="root", password="pw")) as s
103
105
  with **live regex matching**, a per-line/per-match callback, and **tee to a
104
106
  local file**, all built in.
105
107
 
106
- **Serial / COM ports** (`SerialHandler`, needs the `serial` extra)
108
+ **Serial / COM ports** (`SerialHandler`, included by default)
107
109
  - `list_serial_ports()`, `open`/`close`, `write` / `write_line`.
108
110
  - `iter_lines()` and `stream(...)` — same live streaming + match + save-to-file
109
111
  model as SSH, for device consoles.
@@ -264,8 +266,14 @@ To stop a stream from another thread (e.g. a GUI Stop button), pass a
264
266
 
265
267
  ## Serial / COM ports
266
268
 
267
- Same streaming + match + save model for device serial consoles (needs
268
- `pip install "ssh-handler[serial]"`).
269
+ Same streaming + match + save model for device serial consoles (included by
270
+ default — no extra install).
271
+
272
+ > **Important — where the COM port physically is.** `pyserial` opens a *local*
273
+ > port, so this runs on the machine the device is **plugged into**. If the device
274
+ > is on your laptop, run it on your laptop. If it's on the remote/RDP machine,
275
+ > either run the script there, or — on Linux targets — stream the device file
276
+ > over SSH instead: `ssh.stream("cat /dev/ttyUSB0", match=..., save_to=...)`.
269
277
 
270
278
  ```python
271
279
  from ssh_handler import SerialHandler, list_serial_ports
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ssh-handler"
7
- version = "1.1.0"
7
+ version = "1.2.0"
8
8
  description = "Extensive SSH/SFTP/SCP/FTP handler built on Paramiko, for test automation, CLIs and PyQt5 tools."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -20,16 +20,18 @@ classifiers = [
20
20
  "Intended Audience :: Developers",
21
21
  ]
22
22
  dependencies = [
23
- "paramiko>=3.0",
23
+ "paramiko>=3.0", # SSH / SFTP
24
+ "scp>=0.14", # SCP-protocol transfers
25
+ "pyserial>=3.5", # serial / COM-port handler
26
+ "keyring>=23.0", # confidential password storage (OS vault)
27
+ "pywinrm>=0.4.3", # WinRM bootstrap (enable sshd on Windows w/o SSH)
24
28
  ]
25
29
 
26
30
  [project.optional-dependencies]
27
- secure = ["keyring>=23.0"] # OS credential vault for confidential passwords
28
- scp = ["scp>=0.14"] # SCP-protocol transfers (SFTP works without it)
29
- gui = ["PyQt5>=5.15"] # PyQt5 worker integration
30
- winrm = ["pywinrm>=0.4.3"] # auto-enable sshd on Windows hosts that lack SSH
31
- serial = ["pyserial>=3.5"] # serial / COM-port handler
32
- all = ["keyring>=23.0", "scp>=0.14", "PyQt5>=5.15", "pywinrm>=0.4.3", "pyserial>=3.5"]
31
+ # Only PyQt5 stays optional: it's a large GUI toolkit you only need when
32
+ # building a GUI, and forcing it would bloat headless/CI installs.
33
+ gui = ["PyQt5>=5.15"]
34
+ all = ["PyQt5>=5.15"]
33
35
 
34
36
  [project.scripts]
35
37
  ssh-handler = "ssh_handler.cli:main"
@@ -22,7 +22,7 @@ dependencies (PyQt5 / scp) don't break the core package.
22
22
 
23
23
  from __future__ import annotations
24
24
 
25
- __version__ = "1.1.0"
25
+ __version__ = "1.2.0"
26
26
 
27
27
  from .config import SSHConfig, FTPConfig
28
28
  from .core import SSHHandler, ShellSession
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ssh-handler
3
- Version: 1.1.0
3
+ Version: 1.2.0
4
4
  Summary: Extensive SSH/SFTP/SCP/FTP handler built on Paramiko, for test automation, CLIs and PyQt5 tools.
5
5
  Author: ssh-handler contributors
6
6
  License-Expression: MIT
@@ -14,22 +14,14 @@ Requires-Python: >=3.8
14
14
  Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
16
  Requires-Dist: paramiko>=3.0
17
- Provides-Extra: secure
18
- Requires-Dist: keyring>=23.0; extra == "secure"
19
- Provides-Extra: scp
20
- Requires-Dist: scp>=0.14; extra == "scp"
17
+ Requires-Dist: scp>=0.14
18
+ Requires-Dist: pyserial>=3.5
19
+ Requires-Dist: keyring>=23.0
20
+ Requires-Dist: pywinrm>=0.4.3
21
21
  Provides-Extra: gui
22
22
  Requires-Dist: PyQt5>=5.15; extra == "gui"
23
- Provides-Extra: winrm
24
- Requires-Dist: pywinrm>=0.4.3; extra == "winrm"
25
- Provides-Extra: serial
26
- Requires-Dist: pyserial>=3.5; extra == "serial"
27
23
  Provides-Extra: all
28
- Requires-Dist: keyring>=23.0; extra == "all"
29
- Requires-Dist: scp>=0.14; extra == "all"
30
24
  Requires-Dist: PyQt5>=5.15; extra == "all"
31
- Requires-Dist: pywinrm>=0.4.3; extra == "all"
32
- Requires-Dist: pyserial>=3.5; extra == "all"
33
25
  Dynamic: license-file
34
26
 
35
27
  # ssh-handler
@@ -89,15 +81,17 @@ behind one object that:
89
81
  ## Install
90
82
 
91
83
  ```bash
92
- pip install ssh-handler # core (paramiko only)
93
- pip install "ssh-handler[secure]" # + keyring (OS credential vault)
94
- pip install "ssh-handler[scp]" # + scp (SCP-protocol transfers)
95
- pip install "ssh-handler[gui]" # + PyQt5 (the GUI worker)
96
- pip install "ssh-handler[all]" # everything
84
+ pip install ssh-handler # everything: SSH, SFTP, SCP, FTP, serial,
85
+ # credential vault, WinRM bootstrap
86
+ pip install "ssh-handler[gui]" # also installs PyQt5 for the GUI worker
97
87
  ```
98
88
 
99
- `scp`, `keyring`, and `PyQt5` are optional the core works without them, and
100
- those features raise a clear, actionable message if you use them without the extra.
89
+ **Batteries included.** A plain `pip install ssh-handler` pulls in `paramiko`,
90
+ `scp`, `pyserial`, `keyring`, and `pywinrm`, so SSH, SFTP/SCP/FTP transfers,
91
+ serial/COM ports, confidential credential storage, and the WinRM bootstrap all
92
+ work out of the box. Only **PyQt5** is optional (`[gui]`), because it's a large
93
+ GUI toolkit you only need when building a GUI — forcing it would bloat headless
94
+ and CI installs.
101
95
 
102
96
  ## Quick start
103
97
 
@@ -137,7 +131,7 @@ with SSHHandler(SSHConfig(host="10.0.0.5", username="root", password="pw")) as s
137
131
  with **live regex matching**, a per-line/per-match callback, and **tee to a
138
132
  local file**, all built in.
139
133
 
140
- **Serial / COM ports** (`SerialHandler`, needs the `serial` extra)
134
+ **Serial / COM ports** (`SerialHandler`, included by default)
141
135
  - `list_serial_ports()`, `open`/`close`, `write` / `write_line`.
142
136
  - `iter_lines()` and `stream(...)` — same live streaming + match + save-to-file
143
137
  model as SSH, for device consoles.
@@ -298,8 +292,14 @@ To stop a stream from another thread (e.g. a GUI Stop button), pass a
298
292
 
299
293
  ## Serial / COM ports
300
294
 
301
- Same streaming + match + save model for device serial consoles (needs
302
- `pip install "ssh-handler[serial]"`).
295
+ Same streaming + match + save model for device serial consoles (included by
296
+ default — no extra install).
297
+
298
+ > **Important — where the COM port physically is.** `pyserial` opens a *local*
299
+ > port, so this runs on the machine the device is **plugged into**. If the device
300
+ > is on your laptop, run it on your laptop. If it's on the remote/RDP machine,
301
+ > either run the script there, or — on Linux targets — stream the device file
302
+ > over SSH instead: `ssh.stream("cat /dev/ttyUSB0", match=..., save_to=...)`.
303
303
 
304
304
  ```python
305
305
  from ssh_handler import SerialHandler, list_serial_ports
@@ -1,23 +1,11 @@
1
1
  paramiko>=3.0
2
+ scp>=0.14
3
+ pyserial>=3.5
4
+ keyring>=23.0
5
+ pywinrm>=0.4.3
2
6
 
3
7
  [all]
4
- keyring>=23.0
5
- scp>=0.14
6
8
  PyQt5>=5.15
7
- pywinrm>=0.4.3
8
- pyserial>=3.5
9
9
 
10
10
  [gui]
11
11
  PyQt5>=5.15
12
-
13
- [scp]
14
- scp>=0.14
15
-
16
- [secure]
17
- keyring>=23.0
18
-
19
- [serial]
20
- pyserial>=3.5
21
-
22
- [winrm]
23
- pywinrm>=0.4.3
File without changes
File without changes