portforward 0.6.1__cp39-cp39-macosx_11_0_arm64.whl → 0.6.2__cp39-cp39-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 CHANGED
@@ -2,14 +2,15 @@
2
2
  Easy Kubernetes Port-Forward For Python
3
3
  """
4
4
 
5
- __version__ = "0.6.1"
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.from_port,
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")
@@ -5,7 +5,7 @@ Rust native module / Python C Extension
5
5
  async def forward(
6
6
  namespace: str,
7
7
  pod_or_service: str,
8
- from_port: int,
8
+ bind_address: str,
9
9
  to_port: int,
10
10
  config_path: str,
11
11
  log_level: int,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: portforward
3
- Version: 0.6.1
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
@@ -19,8 +19,8 @@ License: MIT License
19
19
  Requires-Python: >=3.7
20
20
  Description-Content-Type: text/x-rst; charset=UTF-8
21
21
  Project-URL: Changelog, https://github.com/pytogo/portforward/blob/main/HISTORY.rst
22
- Project-URL: Repository, https://github.com/pytogo/portforward.git
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=SjFvs0za84r93yXv_seM90QIJLVMin7Qs7nbzy5Blh4,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-39-darwin.so,sha256=kcpySkRzTg74KdUr5w0GKqu1q22zsCOQJo4hvtW8KGc,9664328
9
+ portforward-0.6.2.dist-info/RECORD,,
@@ -1,9 +0,0 @@
1
- portforward-0.6.1.dist-info/METADATA,sha256=HMGXszM12NbLQ7TeGRnj6egNjD5wbPxL1Ez6l1LkniQ,3711
2
- portforward-0.6.1.dist-info/WHEEL,sha256=SjFvs0za84r93yXv_seM90QIJLVMin7Qs7nbzy5Blh4,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-39-darwin.so,sha256=kqt22xDFZIOSXqHty5weRiUuDwhniM2Q_11XkKmyN7U,20956968
9
- portforward-0.6.1.dist-info/RECORD,,