Skip to content

Commit 26dc149

Browse files
committed
ref: Store headers as lists
1 parent 61a562c commit 26dc149

14 files changed

Lines changed: 73 additions & 76 deletions

File tree

‎sentry_sdk/integrations/_asgi_common.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ def _get_request_attributes(
177177

178178
filtered_headers = _filter_headers(headers)
179179
for header, value in filtered_headers.items():
180-
attributes[f"http.request.header.{header.lower()}"] = value
180+
attributes[f"http.request.header.{header.lower()}"] = [value]
181181

182182
if has_data_collection_enabled(client_options):
183183
filtered_query_string = None

‎sentry_sdk/integrations/aiohttp.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,9 @@ async def sentry_app_handle(
150150

151151
header_attributes: "dict[str, Any]" = {}
152152
for header, header_value in _filter_headers(headers).items():
153-
header_attributes[f"http.request.header.{header.lower()}"] = (
153+
header_attributes[f"http.request.header.{header.lower()}"] = [
154154
header_value
155-
)
155+
]
156156

157157
url_attributes = {}
158158
client_address_attributes = {}

‎sentry_sdk/integrations/aws_lambda.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,9 @@ def sentry_handler(
167167

168168
header_attributes: "dict[str, Any]" = {}
169169
for header, header_value in _filter_headers(headers).items():
170-
header_attributes[f"http.request.header.{header.lower()}"] = (
170+
header_attributes[f"http.request.header.{header.lower()}"] = [
171171
header_value
172-
)
172+
]
173173

174174
additional_attributes: "dict[str, Any]" = {}
175175
if "httpMethod" in request_data:

‎sentry_sdk/integrations/chalice.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def wrapped_view_function(**function_args: "Any") -> "Any":
9595

9696
header_attrs: "Dict[str, Any]" = {}
9797
for header, value in _filter_headers(headers).items():
98-
header_attrs[f"http.request.header.{header.lower()}"] = value
98+
header_attrs[f"http.request.header.{header.lower()}"] = [value]
9999

100100
additional_attrs: "Dict[str, Any]" = {}
101101
if "method" in request_dict:

‎sentry_sdk/integrations/gcp.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,9 @@ def sentry_func(
8787
if hasattr(gcp_event, "headers"):
8888
headers = gcp_event.headers
8989
for header, header_value in _filter_headers(headers).items():
90-
header_attributes[f"http.request.header.{header.lower()}"] = (
90+
header_attributes[f"http.request.header.{header.lower()}"] = [
9191
header_value
92-
)
92+
]
9393

9494
additional_attributes = {}
9595
if hasattr(gcp_event, "method"):

‎sentry_sdk/integrations/quart.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ async def _request_websocket_started(app: "Quart", **kwargs: "Any") -> None:
188188
for header, header_value in _filter_headers(
189189
dict(request_websocket.headers)
190190
).items():
191-
header_attributes[f"http.request.header.{header.lower()}"] = header_value
191+
header_attributes[f"http.request.header.{header.lower()}"] = [header_value]
192192

193193
segment.set_attributes(header_attributes)
194194

‎sentry_sdk/integrations/sanic.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ def _get_request_attributes(request: "Request") -> "Dict[str, Any]":
262262

263263
headers = _filter_headers(dict(request.headers))
264264
for header, value in headers.items():
265-
attributes[f"{SPANDATA.HTTP_REQUEST_HEADER}.{header.lower()}"] = value
265+
attributes[f"{SPANDATA.HTTP_REQUEST_HEADER}.{header.lower()}"] = [value]
266266

267267
urlparts = urlsplit(request.url)
268268
client_options = sentry_sdk.get_client().options

‎sentry_sdk/integrations/tornado.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def _get_request_attributes(request: "Any") -> "Dict[str, Any]":
166166

167167
headers = _filter_headers(dict(request.headers))
168168
for header, value in headers.items():
169-
attributes[f"{SPANDATA.HTTP_REQUEST_HEADER}.{header.lower()}"] = value
169+
attributes[f"{SPANDATA.HTTP_REQUEST_HEADER}.{header.lower()}"] = [value]
170170

171171
attributes["url.path"] = request.path
172172

‎sentry_sdk/integrations/wsgi.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ def _get_request_attributes(
417417

418418
headers = _filter_headers(dict(_get_headers(environ)))
419419
for header, value in headers.items():
420-
attributes[f"http.request.header.{header.lower()}"] = value
420+
attributes[f"http.request.header.{header.lower()}"] = [value]
421421

422422
url_scheme = environ.get("wsgi.url_scheme")
423423
if url_scheme:

‎tests/integrations/aiohttp/test_aiohttp.py‎

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,15 +1438,13 @@ async def hello(request):
14381438

14391439
# Data collection always substitutes sensitive headers with
14401440
# SENSITIVE_DATA_SUBSTITUTE ("[Filtered]"). The original token must not leak.
1441-
assert (
1442-
server_span["attributes"]["http.request.header.authorization"]
1443-
== SENSITIVE_DATA_SUBSTITUTE
1444-
)
1441+
assert server_span["attributes"]["http.request.header.authorization"] == [
1442+
SENSITIVE_DATA_SUBSTITUTE
1443+
]
14451444
# Non-sensitive headers pass through untouched.
1446-
assert (
1447-
server_span["attributes"]["http.request.header.x-custom-header"]
1448-
== "passthrough"
1449-
)
1445+
assert server_span["attributes"]["http.request.header.x-custom-header"] == [
1446+
"passthrough"
1447+
]
14501448

14511449

14521450
@pytest.mark.asyncio

0 commit comments

Comments
 (0)