Skip to content
Open
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
23 changes: 16 additions & 7 deletions sentry_sdk/envelope.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,18 +235,25 @@ def __init__(
content_type=None, # type: Optional[str]
filename=None, # type: Optional[str]
):
# Avoid unnecessary copying, only copy if necessary
if headers is not None:
headers = dict(headers)
elif headers is None:
if not isinstance(headers, dict):
headers = dict(headers)
else:
# Reuse dict directly if it's already a dict to minimize overhead
# (modification is safe, as original code mutates headers below)
pass
else:
headers = {}
self.headers = headers

# Convert payload up front, more efficient str/bytes checks before possible fallback
if isinstance(payload, bytes):
payload = PayloadRef(bytes=payload)
elif isinstance(payload, str):
payload = PayloadRef(bytes=payload.encode("utf-8"))
else:
payload = payload
# else: keep payload as-is

# Use direct header updates for speed, avoids extra dictionary logic
if filename is not None:
headers["filename"] = filename
if type is not None:
Expand All @@ -256,6 +263,7 @@ def __init__(
elif "content_type" not in headers:
headers["content_type"] = payload.inferred_content_type

self.headers = headers
self.payload = payload

def __repr__(self):
Expand Down Expand Up @@ -303,11 +311,12 @@ def get_bytes(self):
return self.payload.get_bytes()

def get_event(self):
# type: (...) -> Optional[Event]
"""
Returns an error event if there is one.
"""
if self.type == "event" and self.payload.json is not None:
# Avoid attribute lookup for 'type', as original sets in headers only
type_ = self.headers.get("type")
if type_ == "event" and self.payload.json is not None:
return self.payload.json
return None

Expand Down