Skip to content

Commit 4c77c78

Browse files
author
Michael Brewer
committed
feat(data_classes): case insensitive header lookup
Update BaseProxyEvent `get_header_value` method to be case insensitive by default and add a flag for case sensitive lookups Closes #185
1 parent d08de0b commit 4c77c78

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

aws_lambda_powertools/utilities/data_classes/common.py

+9-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ def get_query_string_value(self, name: str, default_value: Optional[str] = None)
4848
params = self.query_string_parameters
4949
return default_value if params is None else params.get(name, default_value)
5050

51-
def get_header_value(self, name: str, default_value: Optional[str] = None) -> Optional[str]:
51+
def get_header_value(
52+
self, name: str, default_value: Optional[str] = None, case_sensitive: Optional[bool] = False
53+
) -> Optional[str]:
5254
"""Get header value by name
5355
5456
Parameters
@@ -57,9 +59,14 @@ def get_header_value(self, name: str, default_value: Optional[str] = None) -> Op
5759
Header name
5860
default_value: str, optional
5961
Default value if no value was found by name
62+
case_sensitive: bool
63+
Whether to use a case sensitive look up
6064
Returns
6165
-------
6266
str, optional
6367
Header value
6468
"""
65-
return self.headers.get(name, default_value)
69+
if case_sensitive:
70+
return self.headers.get(name, default_value)
71+
72+
return next((value for key, value in self.headers.items() if name.lower() == key.lower()), default_value)

tests/functional/test_lambda_trigger_events.py

+27
Original file line numberDiff line numberDiff line change
@@ -579,13 +579,40 @@ def test_base_proxy_event_get_header_value():
579579
value = event.get_header_value("test", default_value)
580580
assert value == set_value
581581

582+
# Verify that the default look is case insensitive
583+
value = event.get_header_value("Test")
584+
assert value == set_value
585+
582586
value = event.get_header_value("unknown", default_value)
583587
assert value == default_value
584588

585589
value = event.get_header_value("unknown")
586590
assert value is None
587591

588592

593+
def test_base_proxy_event_get_header_value_case_insensitive():
594+
default_value = "default"
595+
set_value = "value"
596+
597+
event = BaseProxyEvent({"headers": {}})
598+
599+
event._data["headers"] = {"Test": set_value}
600+
value = event.get_header_value("test", case_sensitive=True)
601+
assert value is None
602+
603+
value = event.get_header_value("test", default_value=default_value, case_sensitive=True)
604+
assert value == default_value
605+
606+
value = event.get_header_value("Test", case_sensitive=True)
607+
assert value == set_value
608+
609+
value = event.get_header_value("unknown", default_value, case_sensitive=True)
610+
assert value == default_value
611+
612+
value = event.get_header_value("unknown", case_sensitive=True)
613+
assert value is None
614+
615+
589616
def test_kinesis_stream_event():
590617
event = KinesisStreamEvent(load_event("kinesisStreamEvent.json"))
591618

0 commit comments

Comments
 (0)