Skip to content

Commit d254261

Browse files
python-sdk: Add support for proxy environment variables like HTTPS_PROXY
This adds support for the following proxy environment variables: - https_proxy - HTTPS_PROXY - http_proxy - HTTP_PROXY - all_proxy - ALL_PROXY Lowercase version takes precedence as that seems to be standard across cURL, Python, and wget -- yes, I agree -- it is nuts! For a reference on the used environment variables and their precedence see: https://superuser.com/a/1690537
1 parent f667f33 commit d254261

5 files changed

Lines changed: 27 additions & 6 deletions

File tree

packages/python-sdk/e2b/api/client_async/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from typing import Dict
66

7-
from e2b.connection_config import ConnectionConfig
7+
from e2b.connection_config import ConnectionConfig, _resolve_proxy
88
from e2b.api import limits, AsyncApiClient
99

1010

@@ -45,7 +45,7 @@ def get_transport(config: ConnectionConfig) -> AsyncTransportWithLogger:
4545

4646
transport = AsyncTransportWithLogger(
4747
limits=limits,
48-
proxy=config.proxy,
48+
proxy=_resolve_proxy(config.proxy),
4949
)
5050
AsyncTransportWithLogger._instances[loop_id] = transport
5151
return transport

packages/python-sdk/e2b/api/client_sync/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import logging
55

66
from e2b.api import ApiClient, limits
7-
from e2b.connection_config import ConnectionConfig
7+
from e2b.connection_config import ConnectionConfig, _resolve_proxy
88

99
logger = logging.getLogger(__name__)
1010

@@ -44,7 +44,7 @@ def get_transport(config: ConnectionConfig) -> TransportWithLogger:
4444

4545
transport = TransportWithLogger(
4646
limits=limits,
47-
proxy=config.proxy,
47+
proxy=_resolve_proxy(config.proxy),
4848
)
4949
TransportWithLogger.singleton = transport
5050
return transport

packages/python-sdk/e2b/connection_config.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,25 @@ def sandbox_headers(self):
208208
}
209209

210210

211+
def _resolve_proxy(proxy: Optional[ProxyTypes]) -> Optional[ProxyTypes]:
212+
"""
213+
Resolve the proxy to use for a request.
214+
If an explicit proxy is provided, use it. Otherwise, fall back to
215+
standard environment variables (HTTPS_PROXY, HTTP_PROXY, ALL_PROXY).
216+
"""
217+
if proxy is not None:
218+
return proxy
219+
220+
return (
221+
os.environ.get("https_proxy")
222+
or os.environ.get("HTTPS_PROXY")
223+
or os.environ.get("http_proxy")
224+
or os.environ.get("HTTP_PROXY")
225+
or os.environ.get("all_proxy")
226+
or os.environ.get("ALL_PROXY")
227+
)
228+
229+
211230
Username = str
212231
"""
213232
User used for the operation in the sandbox.

packages/python-sdk/e2b/volume/client_async/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from e2b.api.metadata import default_headers
99
from e2b.exceptions import AuthenticationException
1010
from e2b.volume.client.client import AuthenticatedClient as AsyncVolumeApiClient
11+
from e2b.connection_config import _resolve_proxy
1112
from e2b.volume.connection_config import VolumeConnectionConfig
1213

1314
logger = logging.getLogger(__name__)
@@ -63,7 +64,7 @@ def get_transport(config: VolumeConnectionConfig) -> AsyncTransportWithLogger:
6364

6465
transport = AsyncTransportWithLogger(
6566
limits=limits,
66-
proxy=config.proxy,
67+
proxy=_resolve_proxy(config.proxy),
6768
)
6869
AsyncTransportWithLogger.singleton = transport
6970
return transport

packages/python-sdk/e2b/volume/client_sync/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from e2b.api.metadata import default_headers
99
from e2b.exceptions import AuthenticationException
1010
from e2b.volume.client.client import AuthenticatedClient as VolumeApiClient
11+
from e2b.connection_config import _resolve_proxy
1112
from e2b.volume.connection_config import VolumeConnectionConfig
1213

1314
logger = logging.getLogger(__name__)
@@ -63,7 +64,7 @@ def get_transport(config: VolumeConnectionConfig) -> TransportWithLogger:
6364

6465
transport = TransportWithLogger(
6566
limits=limits,
66-
proxy=config.proxy,
67+
proxy=_resolve_proxy(config.proxy),
6768
)
6869
TransportWithLogger.singleton = transport
6970
return transport

0 commit comments

Comments
 (0)