Skip to content

Commit 585f708

Browse files
authored
Merge pull request #186 from gyft/feat-case-insensitive-dict
feat(data_classes): case insensitive header lookup
2 parents 42c84fc + 3a3e716 commit 585f708

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

Diff for: 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)

Diff for: tests/functional/test_lambda_trigger_events.py

+27
Original file line numberDiff line numberDiff line change
@@ -670,13 +670,40 @@ def test_base_proxy_event_get_header_value():
670670
value = event.get_header_value("test", default_value)
671671
assert value == set_value
672672

673+
# Verify that the default look is case insensitive
674+
value = event.get_header_value("Test")
675+
assert value == set_value
676+
673677
value = event.get_header_value("unknown", default_value)
674678
assert value == default_value
675679

676680
value = event.get_header_value("unknown")
677681
assert value is None
678682

679683

684+
def test_base_proxy_event_get_header_value_case_insensitive():
685+
default_value = "default"
686+
set_value = "value"
687+
688+
event = BaseProxyEvent({"headers": {}})
689+
690+
event._data["headers"] = {"Test": set_value}
691+
value = event.get_header_value("test", case_sensitive=True)
692+
assert value is None
693+
694+
value = event.get_header_value("test", default_value=default_value, case_sensitive=True)
695+
assert value == default_value
696+
697+
value = event.get_header_value("Test", case_sensitive=True)
698+
assert value == set_value
699+
700+
value = event.get_header_value("unknown", default_value, case_sensitive=True)
701+
assert value == default_value
702+
703+
value = event.get_header_value("unknown", case_sensitive=True)
704+
assert value is None
705+
706+
680707
def test_kinesis_stream_event():
681708
event = KinesisStreamEvent(load_event("kinesisStreamEvent.json"))
682709

0 commit comments

Comments
 (0)