Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions sentry_sdk/integrations/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@ def get_default_integrations():
- `AtexitIntegration`
"""
from .logging import LoggingIntegration
from .stdlib import StdlibIntegration
from .excepthook import ExcepthookIntegration
from .dedupe import DedupeIntegration
from .atexit import AtexitIntegration

yield LoggingIntegration()
yield StdlibIntegration()
yield ExcepthookIntegration()
yield DedupeIntegration()
yield AtexitIntegration()
Expand Down
47 changes: 0 additions & 47 deletions sentry_sdk/integrations/requests.py

This file was deleted.

50 changes: 50 additions & 0 deletions sentry_sdk/integrations/stdlib.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from sentry_sdk import add_breadcrumb
from . import Integration


class StdlibIntegration(Integration):
identifier = "stdlib"

def __init__(self):
try:
from httplib import HTTPConnection
except ImportError:
from http.client import HTTPConnection
self.httplib_connection_cls = HTTPConnection

def install_httplib(self):
real_putrequest = self.httplib_connection_cls.putrequest
real_getresponse = self.httplib_connection_cls.getresponse

def putrequest(self, method, url, *args, **kwargs):
self._sentrysdk_data_dict = data = {}
host = self.host
port = self.port
default_port = self.default_port

real_url = url
if not real_url.startswith(("http://", "https://")):
real_url = "%s://%s%s%s" % (
default_port == 443 and "https" or "http",
host,
port != default_port and ":%s" % port or "",
url,
)
data["url"] = real_url
data["method"] = method
return real_putrequest(self, method, url, *args, **kwargs)

def getresponse(self, *args, **kwargs):
rv = real_getresponse(self, *args, **kwargs)
data = getattr(self, "_sentrysdk_data_dict", None) or {}
if "status_code" not in data:
data["status_code"] = rv.status
data["reason"] = rv.reason
add_breadcrumb(type="http", category="httplib", data=data)
return rv

self.httplib_connection_cls.putrequest = putrequest
self.httplib_connection_cls.getresponse = getresponse

def install(self):
self.install_httplib()
6 changes: 3 additions & 3 deletions tests/integrations/requests/test_requests.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
requests = pytest.importorskip("requests")

from sentry_sdk import capture_message
from sentry_sdk.integrations.requests import RequestsIntegration
from sentry_sdk.integrations.stdlib import StdlibIntegration


def test_crumb_capture(sentry_init, capture_events):
sentry_init(integrations=[RequestsIntegration()])
sentry_init(integrations=[StdlibIntegration()])
events = capture_events()

response = requests.get("https://httpbin.org/status/418")
Expand All @@ -17,7 +17,7 @@ def test_crumb_capture(sentry_init, capture_events):
event, = events
crumb, = event["breadcrumbs"]
assert crumb["type"] == "http"
assert crumb["category"] == "requests"
assert crumb["category"] == "httplib"
assert crumb["data"] == {
"url": "https://httpbin.org/status/418",
"method": "GET",
Expand Down
28 changes: 28 additions & 0 deletions tests/integrations/stdlib/test_httplib.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
try:
from urllib.request import urlopen
except ImportError:
from urllib import urlopen

from sentry_sdk import capture_message
from sentry_sdk.integrations.stdlib import StdlibIntegration


def test_crumb_capture(sentry_init, capture_events):
sentry_init(integrations=[StdlibIntegration()])
events = capture_events()

url = "https://httpbin.org/status/200"
response = urlopen(url)
assert response.getcode() == 200
capture_message("Testing!")

event, = events
crumb, = event["breadcrumbs"]
assert crumb["type"] == "http"
assert crumb["category"] == "httplib"
assert crumb["data"] == {
"url": url,
"method": "GET",
"status_code": 200,
"reason": "OK",
}