Skip to content

feat(event-source): add function to get multi-value query string params by name #3846

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions aws_lambda_powertools/utilities/data_classes/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from aws_lambda_powertools.shared.headers_serializer import BaseHeadersSerializer
from aws_lambda_powertools.utilities.data_classes.shared_functions import (
get_header_value,
get_multi_value_query_string_values,
get_query_string_value,
)

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

@property
def multi_value_query_string_parameters(self) -> Dict[str, List[str]]:
return self.get("multiValueQueryStringParameters") or {}

@property
def resolved_query_string_parameters(self) -> Dict[str, List[str]]:
"""
Expand Down Expand Up @@ -184,6 +189,31 @@ def get_query_string_value(self, name: str, default_value: Optional[str] = None)
default_value=default_value,
)

def get_multi_value_query_string_values(
self,
name: str,
default_values: Optional[List[str]] = None,
) ->List[str]:
"""Get multi-value query string parameter values by name

Parameters
----------
name: str
Multi-Value query string parameter name
default_values: List[str], optional
Default values is no values are found by name
Returns
-------
List[str], optional
List of query string values

"""
return get_multi_value_query_string_values(
multi_value_query_string_parameters=self.multi_value_query_string_parameters,
name=name,
default_values=default_values,
)

@overload
def get_header_value(
self,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from __future__ import annotations

import base64
from typing import Any
from typing import Any, Dict


def base64_decode(value: str) -> str:
Expand Down Expand Up @@ -63,7 +63,7 @@ def get_header_value(


def get_query_string_value(
query_string_parameters: dict[str, str] | None,
query_string_parameters: Dict[str, str] | None,
name: str,
default_value: str | None = None,
) -> str | None:
Expand All @@ -84,3 +84,30 @@ def get_query_string_value(
"""
params = query_string_parameters
return default_value if params is None else params.get(name, default_value)


def get_multi_value_query_string_values(
multi_value_query_string_parameters: Dict[str, list[str]] | None,
name: str,
default_values: list[str] | None = None,
) -> list[str]:
"""
Retrieves the values of a multi-value string parameters specified by the given name.

Parameters
----------
name: str
The name of the query string parameter to retrieve.
default_value: list[str], optional
The default value to return if the parameter is not found. Defaults to None.

Returns
-------
List[str]. optional
The values of the query string parameter if found, or the default values if not found.
"""

default = default_values or []
params = multi_value_query_string_parameters or {}

return params.get(name) or default
19 changes: 19 additions & 0 deletions tests/unit/test_data_classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,25 @@ def test_base_proxy_event_get_query_string_value():
assert value is None


def test_base_proxy_event_get_multi_value_query_string_values():
default_values = ["default_1", "default_2"]
set_values = ["value_1", "value_2"]

event = BaseProxyEvent({})
values = event.get_multi_value_query_string_values("test", default_values)
assert values == default_values

event._data["multiValueQueryStringParameters"] = {"test": set_values}
values = event.get_multi_value_query_string_values("test", default_values)
assert values == set_values

values = event.get_multi_value_query_string_values("unknown", default_values)
assert values == default_values

values = event.get_multi_value_query_string_values("unknown")
assert values == []


def test_base_proxy_event_get_header_value():
default_value = "default"
set_value = "value"
Expand Down