Skip to content

Commit cf183c4

Browse files
committed
add function to get multi-value query string params by name
1 parent 75b1639 commit cf183c4

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed

aws_lambda_powertools/utilities/data_classes/common.py

+30
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from aws_lambda_powertools.shared.headers_serializer import BaseHeadersSerializer
88
from aws_lambda_powertools.utilities.data_classes.shared_functions import (
99
get_header_value,
10+
get_multi_value_query_string_values,
1011
get_query_string_value,
1112
)
1213

@@ -103,6 +104,10 @@ def headers(self) -> Dict[str, str]:
103104
def query_string_parameters(self) -> Optional[Dict[str, str]]:
104105
return self.get("queryStringParameters")
105106

107+
@property
108+
def multi_value_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
109+
return self.get("multiValueQueryStringParameters")
110+
106111
@property
107112
def resolved_query_string_parameters(self) -> Dict[str, List[str]]:
108113
"""
@@ -184,6 +189,31 @@ def get_query_string_value(self, name: str, default_value: Optional[str] = None)
184189
default_value=default_value,
185190
)
186191

192+
def get_multi_value_query_string_values(
193+
self,
194+
name: str,
195+
default_values: Optional[List[str]] = None,
196+
) -> Optional[List[str]]:
197+
"""Get multi-value query string parameter values by name
198+
199+
Parameters
200+
----------
201+
name: str
202+
Multi-Value query string parameter name
203+
default_values: List[str], optional
204+
Default values is no values are found by name
205+
Returns
206+
-------
207+
List[str], optional
208+
List of query string values
209+
210+
"""
211+
return get_multi_value_query_string_values(
212+
multi_value_query_string_parameters=self.multi_value_query_string_parameters,
213+
name=name,
214+
default_values=default_values,
215+
)
216+
187217
@overload
188218
def get_header_value(
189219
self,

aws_lambda_powertools/utilities/data_classes/shared_functions.py

+27-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
import base64
4-
from typing import Any
4+
from typing import Any, Dict
55

66

77
def base64_decode(value: str) -> str:
@@ -63,7 +63,7 @@ def get_header_value(
6363

6464

6565
def get_query_string_value(
66-
query_string_parameters: dict[str, str] | None,
66+
query_string_parameters: Dict[str, str] | None,
6767
name: str,
6868
default_value: str | None = None,
6969
) -> str | None:
@@ -84,3 +84,28 @@ def get_query_string_value(
8484
"""
8585
params = query_string_parameters
8686
return default_value if params is None else params.get(name, default_value)
87+
88+
89+
def get_multi_value_query_string_values(
90+
multi_value_query_string_parameters: Dict[str, list[str]] | None,
91+
name: str,
92+
default_values: list[str] | None = None,
93+
) -> list[str] | None:
94+
"""
95+
Retrieves the values of a multi-value string parameters specified by the given name.
96+
97+
Parameters
98+
----------
99+
name: str
100+
The name of the query string parameter to retrieve.
101+
default_value: list[str], optional
102+
The default value to return if the parameter is not found. Defaults to None.
103+
104+
Returns
105+
-------
106+
List[str]. optional
107+
The values of the query string parameter if found, or the default values if not found.
108+
"""
109+
110+
params = multi_value_query_string_parameters
111+
return default_values if not params else params.get(name, default_values)

tests/unit/test_data_classes.py

+19
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,25 @@ def test_base_proxy_event_get_query_string_value():
259259
assert value is None
260260

261261

262+
def test_base_proxy_event_get_multi_value_query_string_values():
263+
default_values = ["default_1", "default_2"]
264+
set_values = ["value_1", "value_2"]
265+
266+
event = BaseProxyEvent({})
267+
values = event.get_multi_value_query_string_values("test", default_values)
268+
assert values == default_values
269+
270+
event._data["multiValueQueryStringParameters"] = {"test": set_values}
271+
values = event.get_multi_value_query_string_values("test", default_values)
272+
assert values == set_values
273+
274+
values = event.get_multi_value_query_string_values("unknown", default_values)
275+
assert values == default_values
276+
277+
values = event.get_multi_value_query_string_values("unknown")
278+
assert values is None
279+
280+
262281
def test_base_proxy_event_get_header_value():
263282
default_value = "default"
264283
set_value = "value"

0 commit comments

Comments
 (0)