Skip to content

Commit e9aacfb

Browse files
fix(event_handlers): omit explicit None HTTP header values (#1793)
1 parent 04eabd4 commit e9aacfb

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

Diff for: aws_lambda_powertools/shared/headers_serializer.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ def serialize(self, headers: Dict[str, Union[str, List[str]]], cookies: List[Coo
4141
# Duplicate headers are combined with commas and included in the headers field.
4242
combined_headers: Dict[str, str] = {}
4343
for key, values in headers.items():
44+
# omit headers with explicit null values
45+
if values is None:
46+
continue
47+
4448
if isinstance(values, str):
4549
combined_headers[key] = values
4650
else:
@@ -60,13 +64,15 @@ def serialize(self, headers: Dict[str, Union[str, List[str]]], cookies: List[Coo
6064
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html#multi-value-headers-response
6165
"""
6266
payload: Dict[str, List[str]] = defaultdict(list)
63-
6467
for key, values in headers.items():
68+
# omit headers with explicit null values
69+
if values is None:
70+
continue
71+
6572
if isinstance(values, str):
6673
payload[key].append(values)
6774
else:
68-
for value in values:
69-
payload[key].append(value)
75+
payload[key].extend(values)
7076

7177
if cookies:
7278
payload.setdefault("Set-Cookie", [])
@@ -98,6 +104,10 @@ def serialize(self, headers: Dict[str, Union[str, List[str]]], cookies: List[Coo
98104
payload["headers"]["Set-Cookie"] = str(cookies[-1])
99105

100106
for key, values in headers.items():
107+
# omit headers with explicit null values
108+
if values is None:
109+
continue
110+
101111
if isinstance(values, str):
102112
payload["headers"][key] = values
103113
else:

Diff for: tests/functional/test_headers_serializer.py

+18
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,21 @@ def test_single_value_headers_with_multiple_header_values_warning():
145145
payload = serializer.serialize(cookies=[], headers=headers)
146146

147147
assert payload["headers"]["Foo"] == headers["Foo"][-1]
148+
149+
150+
def test_http_api_headers_serializer_with_null_values():
151+
serializer = HttpApiHeadersSerializer()
152+
payload = serializer.serialize(headers={"Foo": None}, cookies=[])
153+
assert payload == {"headers": {}, "cookies": []}
154+
155+
156+
def test_multi_value_headers_serializer_with_null_values():
157+
serializer = MultiValueHeadersSerializer()
158+
payload = serializer.serialize(headers={"Foo": None}, cookies=[])
159+
assert payload == {"multiValueHeaders": {}}
160+
161+
162+
def test_single_value_headers_serializer_with_null_values():
163+
serializer = SingleValueHeadersSerializer()
164+
payload = serializer.serialize(headers={"Foo": None}, cookies=[])
165+
assert payload["headers"] == {}

0 commit comments

Comments
 (0)