Skip to content

Commit c6a9a7f

Browse files
committed
feat: implement http_proxy options
1 parent e708afc commit c6a9a7f

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

sentry_sdk/client.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ def __init__(self, dsn=None, *args, **kwargs):
3030
self.options = options
3131
self._transport = self.options.pop("transport")
3232
if self._transport is None and dsn is not None:
33-
self._transport = Transport(dsn)
33+
self._transport = Transport(
34+
dsn=dsn,
35+
http_proxy=self.options.pop("http_proxy"),
36+
https_proxy=self.options.pop("https_proxy"),
37+
)
3438
self._transport.start()
3539
elif passed_dsn is not None and self._transport is not None:
3640
raise ValueError("Cannot pass DSN and a custom transport.")

sentry_sdk/consts.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
import socket
23

34
VERSION = "0.1"
@@ -16,6 +17,8 @@
1617
"transport": None,
1718
"sample_rate": 1.0,
1819
"send_default_pii": False,
20+
"http_proxy": os.environ.get("http_proxy"),
21+
"https_proxy": os.environ.get("https_proxy"),
1922
}
2023

2124
SDK_INFO = {"name": "sentry-python", "version": VERSION}

sentry_sdk/transport.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import os
21
import json
32
import time
43
import zlib
@@ -15,23 +14,29 @@
1514
logger = logging.getLogger(__name__)
1615

1716

18-
def _make_pool():
19-
proxy = os.environ.get("HTTP_PROXY")
17+
def _make_pool(http_proxy, https_proxy):
18+
if https_proxy and http_proxy:
19+
raise ValueError("Either http_proxy or https_proxy can be set, not " "both.")
20+
elif https_proxy and not https_proxy.startswith("https://"):
21+
raise ValueError("https_proxy URL must have https scheme.")
22+
elif http_proxy and not http_proxy.startswith("http://"):
23+
raise ValueError("http_proxy URL must have http scheme.")
24+
2025
opts = {"num_pools": 2, "cert_reqs": "CERT_REQUIRED", "ca_certs": certifi.where()}
21-
if proxy is not None:
22-
return urllib3.ProxyManager(proxy, **opts)
26+
27+
if https_proxy or http_proxy:
28+
return urllib3.ProxyManager(https_proxy or http_proxy, **opts)
2329
else:
2430
return urllib3.PoolManager(**opts)
2531

2632

2733
_SHUTDOWN = object()
28-
_pool = _make_pool()
2934
_retry = urllib3.util.Retry()
3035

3136

32-
def send_event(event, auth):
37+
def send_event(pool, event, auth):
3338
body = zlib.compress(json.dumps(event).encode("utf-8"))
34-
response = _pool.request(
39+
response = pool.request(
3540
"POST",
3641
auth.store_api_url,
3742
body=body,
@@ -73,7 +78,7 @@ def thread():
7378
break
7479

7580
try:
76-
disabled_until = send_event(item, auth)
81+
disabled_until = send_event(transport._pool, item, auth)
7782
except Exception:
7883
logger.exception("Could not send sentry event")
7984
continue
@@ -84,10 +89,11 @@ def thread():
8489

8590

8691
class Transport(object):
87-
def __init__(self, dsn):
92+
def __init__(self, dsn, http_proxy, https_proxy):
8893
self.dsn = dsn
8994
self._queue = None
9095
self._done = False
96+
self._pool = _make_pool(http_proxy=http_proxy, https_proxy=https_proxy)
9197

9298
def start(self):
9399
if self._queue is None:

0 commit comments

Comments
 (0)