Skip to content

Commit cc180d3

Browse files
author
Michael Brewer
committed
feat(trigger): API gateway helper methods
1 parent 379b11f commit cc180d3

File tree

2 files changed

+142
-0
lines changed

2 files changed

+142
-0
lines changed

aws_lambda_powertools/utilities/trigger/api_gateway_proxy_event.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,39 @@ def body(self) -> Optional[str]:
257257
def is_base64_encoded(self) -> bool:
258258
return self["isBase64Encoded"]
259259

260+
def get_query_string_value(self, name: str, default_value: Optional[str] = None) -> Optional[str]:
261+
"""Get query string value by name
262+
263+
Parameters
264+
----------
265+
name: str
266+
Query string parameter name
267+
default_value: str, optional
268+
Default value if no value was found by name
269+
Returns
270+
-------
271+
str, optional
272+
Query string parameter value
273+
"""
274+
params = self.query_string_parameters
275+
return default_value if params is None else params.get(name, default_value)
276+
277+
def get_header_value(self, name: str, default_value: Optional[str] = None) -> Optional[str]:
278+
"""Get header value by name
279+
280+
Parameters
281+
----------
282+
name: str
283+
Header name
284+
default_value: str, optional
285+
Default value if no value was found by name
286+
Returns
287+
-------
288+
str, optional
289+
Header value
290+
"""
291+
return self.headers.get(name, default_value)
292+
260293

261294
class RequestContextV2Http(DictWrapper):
262295
@property
@@ -412,3 +445,36 @@ def is_base64_encoded(self) -> bool:
412445
@property
413446
def stage_variables(self) -> Optional[Dict[str, str]]:
414447
return self.get("stageVariables")
448+
449+
def get_query_string_value(self, name: str, default_value: Optional[str] = None) -> Optional[str]:
450+
"""Get query string value by name
451+
452+
Parameters
453+
----------
454+
name: str
455+
Query string parameter name
456+
default_value: str, optional
457+
Default value if no value was found by name
458+
Returns
459+
-------
460+
str, optional
461+
Query string parameter value
462+
"""
463+
params = self.query_string_parameters
464+
return default_value if params is None else params.get(name, default_value)
465+
466+
def get_header_value(self, name: str, default_value: Optional[str] = None) -> Optional[str]:
467+
"""Get header value by name
468+
469+
Parameters
470+
----------
471+
name: str
472+
Header name
473+
default_value: str, optional
474+
Default value if no value was found by name
475+
Returns
476+
-------
477+
str, optional
478+
Header value
479+
"""
480+
return self.headers.get(name, default_value)

tests/functional/test_lambda_trigger_events.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,3 +527,79 @@ def test_api_gateway_proxy_v2_event():
527527
assert event.path_parameters == event["pathParameters"]
528528
assert event.is_base64_encoded == event["isBase64Encoded"]
529529
assert event.stage_variables == event["stageVariables"]
530+
531+
532+
def test_api_gateway_proxy_get_query_string_value():
533+
default_value = "default"
534+
set_value = "value"
535+
536+
event = APIGatewayProxyEvent({})
537+
value = event.get_query_string_value("test", default_value)
538+
assert value == default_value
539+
540+
event["queryStringParameters"] = {"test": set_value}
541+
value = event.get_query_string_value("test", default_value)
542+
assert value == set_value
543+
544+
value = event.get_query_string_value("unknown", default_value)
545+
assert value == default_value
546+
547+
value = event.get_query_string_value("unknown")
548+
assert value is None
549+
550+
551+
def test_api_gateway_proxy_v2_get_query_string_value():
552+
default_value = "default"
553+
set_value = "value"
554+
555+
event = APIGatewayProxyEventV2({})
556+
value = event.get_query_string_value("test", default_value)
557+
assert value == default_value
558+
559+
event["queryStringParameters"] = {"test": set_value}
560+
value = event.get_query_string_value("test", default_value)
561+
assert value == set_value
562+
563+
value = event.get_query_string_value("unknown", default_value)
564+
assert value == default_value
565+
566+
value = event.get_query_string_value("unknown")
567+
assert value is None
568+
569+
570+
def test_api_gateway_proxy_get_header_value():
571+
default_value = "default"
572+
set_value = "value"
573+
574+
event = APIGatewayProxyEvent({"headers": {}})
575+
value = event.get_header_value("test", default_value)
576+
assert value == default_value
577+
578+
event["headers"] = {"test": set_value}
579+
value = event.get_header_value("test", default_value)
580+
assert value == set_value
581+
582+
value = event.get_header_value("unknown", default_value)
583+
assert value == default_value
584+
585+
value = event.get_header_value("unknown")
586+
assert value is None
587+
588+
589+
def test_api_gateway_proxy_v2_get_header_value():
590+
default_value = "default"
591+
set_value = "value"
592+
593+
event = APIGatewayProxyEventV2({"headers": {}})
594+
value = event.get_header_value("test", default_value)
595+
assert value == default_value
596+
597+
event["headers"] = {"test": set_value}
598+
value = event.get_header_value("test", default_value)
599+
assert value == set_value
600+
601+
value = event.get_header_value("unknown", default_value)
602+
assert value == default_value
603+
604+
value = event.get_header_value("unknown")
605+
assert value is None

0 commit comments

Comments
 (0)