portforward 0.6.1__cp38-cp38-macosx_11_0_arm64.whl → 0.6.2__cp38-cp38-macosx_11_0_arm64.whl
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.
Potentially problematic release.
This version of portforward might be problematic. Click here for more details.
- portforward/__init__.py +26 -10
- portforward/_portforward.cpython-38-darwin.so +0 -0
- portforward/_portforward.pyi +1 -1
- {portforward-0.6.1.dist-info → portforward-0.6.2.dist-info}/METADATA +6 -11
- portforward-0.6.2.dist-info/RECORD +9 -0
- portforward-0.6.1.dist-info/RECORD +0 -9
- {portforward-0.6.1.dist-info → portforward-0.6.2.dist-info}/WHEEL +0 -0
- {portforward-0.6.1.dist-info → portforward-0.6.2.dist-info}/license_files/AUTHORS.rst +0 -0
- {portforward-0.6.1.dist-info → portforward-0.6.2.dist-info}/license_files/LICENSE +0 -0
portforward/__init__.py
CHANGED
|
@@ -2,14 +2,15 @@
|
|
|
2
2
|
Easy Kubernetes Port-Forward For Python
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
__version__ = "0.6.
|
|
5
|
+
__version__ = "0.6.2"
|
|
6
6
|
|
|
7
7
|
import asyncio
|
|
8
8
|
import contextlib
|
|
9
|
+
import ipaddress
|
|
9
10
|
import os
|
|
10
11
|
from enum import Enum
|
|
11
12
|
from pathlib import Path
|
|
12
|
-
from typing import Generator, Optional
|
|
13
|
+
from typing import Generator, Optional, Union
|
|
13
14
|
|
|
14
15
|
from portforward import _portforward
|
|
15
16
|
|
|
@@ -36,6 +37,7 @@ def forward(
|
|
|
36
37
|
waiting: float = 0.1,
|
|
37
38
|
log_level: LogLevel = LogLevel.INFO,
|
|
38
39
|
kube_context: str = "",
|
|
40
|
+
bind_ip: Union[ipaddress.IPv4Address, ipaddress.IPv6Address, str, None] = None,
|
|
39
41
|
) -> Generator["PortForwarder", None, None]:
|
|
40
42
|
"""
|
|
41
43
|
Connects to a **pod or service** and tunnels traffic from a local port to
|
|
@@ -52,12 +54,6 @@ def forward(
|
|
|
52
54
|
>>> import portforward
|
|
53
55
|
>>> with portforward.forward("test", "web-svc", 9000, 80):
|
|
54
56
|
>>> # Do work
|
|
55
|
-
>>>
|
|
56
|
-
>>> # Or without context manager
|
|
57
|
-
>>>
|
|
58
|
-
>>> forwarder = portforward.forward("test", "some-pod", 9000, 80)
|
|
59
|
-
>>> # Do work
|
|
60
|
-
>>> forwarder.stop()
|
|
61
57
|
|
|
62
58
|
:param namespace: Target namespace
|
|
63
59
|
:param pod_or_service: Name of target Pod or service
|
|
@@ -67,6 +63,7 @@ def forward(
|
|
|
67
63
|
:param waiting: Delay in seconds
|
|
68
64
|
:param log_level: Level of logging
|
|
69
65
|
:param kube_context: Target kubernetes context (fallback is current context)
|
|
66
|
+
:param bind_ip: To which IP shall the portforward be bind
|
|
70
67
|
:return: forwarder to manual stop the forwarding
|
|
71
68
|
"""
|
|
72
69
|
|
|
@@ -79,6 +76,7 @@ def forward(
|
|
|
79
76
|
waiting,
|
|
80
77
|
log_level,
|
|
81
78
|
kube_context,
|
|
79
|
+
bind_ip,
|
|
82
80
|
)
|
|
83
81
|
|
|
84
82
|
try:
|
|
@@ -107,6 +105,7 @@ class PortForwarder:
|
|
|
107
105
|
waiting: float = 0.1,
|
|
108
106
|
log_level: LogLevel = LogLevel.INFO,
|
|
109
107
|
kube_context: str = "",
|
|
108
|
+
bind_ip: Union[ipaddress.IPv4Address, ipaddress.IPv6Address, str, None] = None,
|
|
110
109
|
) -> None:
|
|
111
110
|
self._async_forwarder = AsyncPortForwarder(
|
|
112
111
|
namespace,
|
|
@@ -117,6 +116,7 @@ class PortForwarder:
|
|
|
117
116
|
waiting,
|
|
118
117
|
log_level,
|
|
119
118
|
kube_context,
|
|
119
|
+
bind_ip,
|
|
120
120
|
)
|
|
121
121
|
|
|
122
122
|
def forward(self):
|
|
@@ -143,10 +143,10 @@ class AsyncPortForwarder:
|
|
|
143
143
|
waiting: float = 0.1,
|
|
144
144
|
log_level: LogLevel = LogLevel.INFO,
|
|
145
145
|
kube_context: str = "",
|
|
146
|
+
bind_ip: Union[ipaddress.IPv4Address, ipaddress.IPv6Address, str, None] = None,
|
|
146
147
|
) -> None:
|
|
147
148
|
self.namespace: str = _validate_str("namespace", namespace)
|
|
148
149
|
self.pod_or_service: str = _validate_str("pod_or_service", pod_or_service)
|
|
149
|
-
self.from_port: int = _validate_port("from_port", from_port)
|
|
150
150
|
self.to_port: int = _validate_port("to_port", to_port)
|
|
151
151
|
self.log_level: LogLevel = _validate_log(log_level)
|
|
152
152
|
self.waiting: float = waiting
|
|
@@ -154,14 +154,18 @@ class AsyncPortForwarder:
|
|
|
154
154
|
self.config_path: str = _config_path(config_path)
|
|
155
155
|
self.kube_context: str = _kube_context(kube_context)
|
|
156
156
|
|
|
157
|
+
_validate_port("from_port", from_port)
|
|
158
|
+
bind_ip = _validate_ip_address(bind_ip)
|
|
159
|
+
|
|
157
160
|
self.actual_pod_name: str = ""
|
|
158
161
|
self._is_stopped: bool = False
|
|
162
|
+
self.bind_address: str = f"{bind_ip}:{from_port}"
|
|
159
163
|
|
|
160
164
|
async def forward(self):
|
|
161
165
|
self.actual_pod_name = await _portforward.forward(
|
|
162
166
|
self.namespace,
|
|
163
167
|
self.pod_or_service,
|
|
164
|
-
self.
|
|
168
|
+
self.bind_address,
|
|
165
169
|
self.to_port,
|
|
166
170
|
self.config_path,
|
|
167
171
|
self.log_level.value,
|
|
@@ -210,6 +214,18 @@ def _validate_log(log_level):
|
|
|
210
214
|
return log_level
|
|
211
215
|
|
|
212
216
|
|
|
217
|
+
def _validate_ip_address(ip_address):
|
|
218
|
+
if not ip_address:
|
|
219
|
+
return "127.0.0.1"
|
|
220
|
+
|
|
221
|
+
if isinstance(ip_address, ipaddress.IPv4Address) or isinstance(
|
|
222
|
+
ip_address, ipaddress.IPv4Address
|
|
223
|
+
):
|
|
224
|
+
return str(ip_address)
|
|
225
|
+
|
|
226
|
+
return str(ipaddress.ip_address(ip_address))
|
|
227
|
+
|
|
228
|
+
|
|
213
229
|
def _config_path(config_path_arg) -> str:
|
|
214
230
|
if config_path_arg and not isinstance(config_path_arg, str):
|
|
215
231
|
raise ValueError(f"config_path={config_path_arg} is not a valid str")
|
|
Binary file
|
portforward/_portforward.pyi
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: portforward
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
6
6
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
@@ -18,9 +18,9 @@ Author-email: Sebastian Ziemann <corka149@mailbox.org>
|
|
|
18
18
|
License: MIT License
|
|
19
19
|
Requires-Python: >=3.7
|
|
20
20
|
Description-Content-Type: text/x-rst; charset=UTF-8
|
|
21
|
-
Project-URL: Repository, https://github.com/pytogo/portforward.git
|
|
22
21
|
Project-URL: Changelog, https://github.com/pytogo/portforward/blob/main/HISTORY.rst
|
|
23
22
|
Project-URL: Documentation, https://portforward.readthedocs.io
|
|
23
|
+
Project-URL: Repository, https://github.com/pytogo/portforward.git
|
|
24
24
|
|
|
25
25
|
===========
|
|
26
26
|
portforward
|
|
@@ -58,22 +58,17 @@ Installation
|
|
|
58
58
|
|
|
59
59
|
Wheels are available for:
|
|
60
60
|
|
|
61
|
-
* Windows
|
|
62
|
-
* MacOS X
|
|
63
|
-
* Linux
|
|
61
|
+
* Windows (architectures: x64, x86)
|
|
62
|
+
* MacOS X (architectures: x86_64, aarch64)
|
|
63
|
+
* Linux (architectures: x86_64, x86, aarch64)
|
|
64
64
|
|
|
65
65
|
with Python versions:
|
|
66
66
|
|
|
67
|
-
* 3.7
|
|
68
67
|
* 3.8
|
|
69
68
|
* 3.9
|
|
70
69
|
* 3.10
|
|
71
70
|
* 3.11
|
|
72
|
-
|
|
73
|
-
and architectures:
|
|
74
|
-
|
|
75
|
-
* x84_64
|
|
76
|
-
* arm64 (known as M1/Apple Chip - MacOS only)
|
|
71
|
+
* 3.12
|
|
77
72
|
|
|
78
73
|
**Requirements for installation from source**
|
|
79
74
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
portforward-0.6.2.dist-info/METADATA,sha256=0AZ3nsSc26Xsqm1TK9fBJUoaUZ8XJDEfPt4Wtcbn1tM,3733
|
|
2
|
+
portforward-0.6.2.dist-info/WHEEL,sha256=_fN3K09tBE0kykDQ-ahokETNBaz15UJSR2-Tj9MChRY,104
|
|
3
|
+
portforward-0.6.2.dist-info/license_files/LICENSE,sha256=n2aq0UH0YZkyF_5hougjNi5gzXIUapEEqEUn6FwAcFE,1075
|
|
4
|
+
portforward-0.6.2.dist-info/license_files/AUTHORS.rst,sha256=YQwE3_FUEuGVHbxYUa4NQMlG28QBGwcCYEoa2MP9Xgk,163
|
|
5
|
+
portforward/__init__.py,sha256=dIOPdTMLHUgZ2VeG-UQoGUIp515tikAGmSIFKQZkxXU,6809
|
|
6
|
+
portforward/_portforward.pyi,sha256=KZSR_2INAUDtpwbVFA9e6cLs3KBwgMw-hgtirmMRZgY,336
|
|
7
|
+
portforward/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
portforward/_portforward.cpython-38-darwin.so,sha256=geTTPKQASufnzzOrmTWkQfSkactGi2HRRsw0Q4pwIXc,9664760
|
|
9
|
+
portforward-0.6.2.dist-info/RECORD,,
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
portforward-0.6.1.dist-info/METADATA,sha256=pMR-TbsFZaCTkCQvWoI6gSI9unrXeYRQnCpL2G6zf9o,3711
|
|
2
|
-
portforward-0.6.1.dist-info/WHEEL,sha256=_fN3K09tBE0kykDQ-ahokETNBaz15UJSR2-Tj9MChRY,104
|
|
3
|
-
portforward-0.6.1.dist-info/license_files/LICENSE,sha256=n2aq0UH0YZkyF_5hougjNi5gzXIUapEEqEUn6FwAcFE,1075
|
|
4
|
-
portforward-0.6.1.dist-info/license_files/AUTHORS.rst,sha256=YQwE3_FUEuGVHbxYUa4NQMlG28QBGwcCYEoa2MP9Xgk,163
|
|
5
|
-
portforward/__init__.py,sha256=G7f0GD9RIyUNzRzqieH760lEUsSNCr45H-d1ryEOsTc,6238
|
|
6
|
-
portforward/_portforward.pyi,sha256=cAkWB_L4LhZAfqkeflWBoC_kHfcoT7hTfZnoWzFQxp4,333
|
|
7
|
-
portforward/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
-
portforward/_portforward.cpython-38-darwin.so,sha256=ZXJAkkDHZ_L_aVnWxgC-eCcuik-TvO68THTFI9OH1vw,20973736
|
|
9
|
-
portforward-0.6.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|