Skip to content

Commit dde5857

Browse files
authored
feat: Added requests support (#48)
1 parent 4906d5b commit dde5857

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

sentry_sdk/integrations/requests.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from __future__ import absolute_import
2+
3+
from sentry_sdk import add_breadcrumb
4+
from . import Integration
5+
6+
from .logging import ignore_logger
7+
8+
9+
class RequestsIntegration(Integration):
10+
identifier = "requests"
11+
12+
def __init__(self):
13+
from requests.sessions import Session
14+
15+
self.session_cls = Session
16+
17+
def install(self):
18+
real_send = self.session_cls.send
19+
20+
def send(self, request, *args, **kwargs):
21+
def _record_request(response):
22+
add_breadcrumb(
23+
type="http",
24+
category="requests",
25+
data={
26+
"url": request.url,
27+
"method": request.method,
28+
"status_code": response is not None
29+
and response.status_code
30+
or None,
31+
"reason": response is not None and response.reason or None,
32+
},
33+
)
34+
35+
try:
36+
resp = real_send(self, request, *args, **kwargs)
37+
except Exception:
38+
_record_request(None)
39+
raise
40+
else:
41+
print("here", resp)
42+
_record_request(resp)
43+
return resp
44+
45+
self.session_cls.send = send
46+
ignore_logger("requests.packages.urllib3.connectionpool")
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import pytest
2+
3+
requests = pytest.importorskip("requests")
4+
5+
from sentry_sdk import capture_message
6+
from sentry_sdk.integrations.requests import RequestsIntegration
7+
8+
9+
def test_crumb_capture(sentry_init, capture_events):
10+
sentry_init(integrations=[RequestsIntegration()])
11+
events = capture_events()
12+
13+
response = requests.get("https://httpbin.org/status/418")
14+
assert response.status_code == 418
15+
capture_message("Testing!")
16+
17+
event, = events
18+
crumb, = event["breadcrumbs"]
19+
assert crumb["type"] == "http"
20+
assert crumb["category"] == "requests"
21+
assert crumb["data"] == {
22+
"url": "https://httpbin.org/status/418",
23+
"method": "GET",
24+
"status_code": 418,
25+
"reason": "I'M A TEAPOT",
26+
}

tox.ini

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ envlist =
1919

2020
{pypy,py2.7,py3.5,py3.6,py3.7,py3.8}-flask-{1.0,0.11,0.12,dev}
2121

22+
{py2.7,py3.7}-requests
2223
{pypy,py2.7,py3.5,py3.6,py3.7,py3.8}-celery-4
2324
{pypy,py2.7}-celery-3
2425

@@ -43,6 +44,7 @@ deps =
4344
flask-dev: git+https://github.com/pallets/flask.git#egg=flask
4445
celery-3: Celery>=3.1,<4.0
4546
celery-4: Celery>=4.0,<5.0
47+
requests: requests>=2.0<3.0
4648
flask: flask-login
4749
linters: black
4850
linters: flake8
@@ -52,6 +54,7 @@ setenv =
5254
django: TESTPATH=tests/integrations/django
5355
flask: TESTPATH=tests/integrations/flask
5456
celery: TESTPATH=tests/integrations/celery
57+
requests: TESTPATH=tests/integrations/requests
5558
usedevelop = True
5659
extras =
5760
flask: flask

0 commit comments

Comments
 (0)