diff --git a/sentry_sdk/integrations/_wsgi.py b/sentry_sdk/integrations/_wsgi.py index a975d24b71..075e659602 100644 --- a/sentry_sdk/integrations/_wsgi.py +++ b/sentry_sdk/integrations/_wsgi.py @@ -41,89 +41,88 @@ def __init__(self, request): self.request = request def extract_into_event(self, event, client_options): + content_length = self.content_length() request_info = event.setdefault("request", {}) - request_info["url"] = self.url + request_info["url"] = self.url() if _should_send_default_pii(): - request_info["cookies"] = dict(self.cookies) + request_info["cookies"] = dict(self.cookies()) bodies = client_options.get("request_bodies") if ( bodies == "never" - or (bodies == "small" and self.content_length > 10 ** 3) - or (bodies == "medium" and self.content_length > 10 ** 4) + or (bodies == "small" and content_length > 10 ** 3) + or (bodies == "medium" and content_length > 10 ** 4) ): data = AnnotatedValue( "", - { - "rem": [["!config", "x", 0, self.content_length]], - "len": self.content_length, - }, - ) - elif self.form or self.files: - data = dict(self.form.items()) - for k, v in self.files.items(): - size = self.size_of_file(v) - data[k] = AnnotatedValue( - "", {"len": size, "rem": [["!filecontent", "x", 0, size]]} - ) - - elif self.json is not None: - data = self.json - elif self.raw_data: - data = AnnotatedValue( - "", - { - "rem": [["!rawbody", "x", 0, self.content_length]], - "len": self.content_length, - }, + {"rem": [["!config", "x", 0, content_length]], "len": content_length}, ) else: - return + parsed_body = self.parsed_body() + if parsed_body: + data = parsed_body + elif self.raw_data(): + data = AnnotatedValue( + "", + { + "rem": [["!rawbody", "x", 0, content_length]], + "len": content_length, + }, + ) + else: + return request_info["data"] = data - @property def content_length(self): try: - return int(self.env.get("CONTENT_LENGTH", 0)) + return int(self.env().get("CONTENT_LENGTH", 0)) except ValueError: return 0 - @property def url(self): raise NotImplementedError() - @property def cookies(self): raise NotImplementedError() - @property def raw_data(self): raise NotImplementedError() - @property def form(self): raise NotImplementedError() - @property + def parsed_body(self): + form = self.form() + files = self.files() + if form or files: + data = dict(form.items()) + for k, v in files.items(): + size = self.size_of_file(v) + data[k] = AnnotatedValue( + "", {"len": size, "rem": [["!filecontent", "x", 0, size]]} + ) + + return data + + return self.json() + def is_json(self): - mt = (self.env.get("CONTENT_TYPE") or "").split(";", 1)[0] + mt = (self.env().get("CONTENT_TYPE") or "").split(";", 1)[0] return ( mt == "application/json" or (mt.startswith("application/")) and mt.endswith("+json") ) - @property def json(self): try: - if self.is_json: - return json.loads(self.raw_data.decode("utf-8")) + if self.is_json(): + return json.loads(self.raw_data().decode("utf-8")) except ValueError: pass - @property def files(self): raise NotImplementedError() diff --git a/sentry_sdk/integrations/django.py b/sentry_sdk/integrations/django.py index 22511fa48c..52857c0c77 100644 --- a/sentry_sdk/integrations/django.py +++ b/sentry_sdk/integrations/django.py @@ -105,27 +105,21 @@ def _got_request_exception(request=None, **kwargs): class DjangoRequestExtractor(RequestExtractor): - @property def url(self): return self.request.build_absolute_uri(self.request.path) - @property def env(self): return self.request.META - @property def cookies(self): return self.request.COOKIES - @property def raw_data(self): return self.request.body - @property def form(self): return self.request.POST - @property def files(self): return self.request.FILES diff --git a/sentry_sdk/integrations/flask.py b/sentry_sdk/integrations/flask.py index b3e58187f8..55f6c97e30 100644 --- a/sentry_sdk/integrations/flask.py +++ b/sentry_sdk/integrations/flask.py @@ -97,27 +97,21 @@ def _process_frames(app, event): class FlaskRequestExtractor(RequestExtractor): - @property def url(self): return "%s://%s%s" % (self.request.scheme, self.request.host, self.request.path) - @property def env(self): return self.request.environ - @property def cookies(self): return self.request.cookies - @property def raw_data(self): return self.request.data - @property def form(self): return self.request.form - @property def files(self): return self.request.files