Skip to content

Commit 9762c66

Browse files
committed
chore: refactored multi query code
1 parent 707a21f commit 9762c66

File tree

6 files changed

+27
-63
lines changed

6 files changed

+27
-63
lines changed

aws_lambda_powertools/event_handler/middlewares/openapi_validation.py

+10-13
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ def _get_embed_body(
369369

370370

371371
def _normalize_multi_query_string_with_param(
372-
query_string: Optional[Dict[str, List[str]]],
372+
query_string: Dict[str, List[str]],
373373
params: Sequence[ModelField],
374374
) -> Dict[str, Any]:
375375
"""
@@ -386,18 +386,15 @@ def _normalize_multi_query_string_with_param(
386386
-------
387387
A dictionary containing the processed multi_query_string_parameters.
388388
"""
389-
if not query_string:
390-
return {}
391-
else:
392-
resolved_query_string: Dict[str, Any] = query_string
393-
for param in filter(is_scalar_field, params):
394-
try:
395-
# if the target parameter is a scalar, we keep the first value of the query string
396-
# regardless if there are more in the payload
397-
resolved_query_string[param.alias] = query_string[param.alias][0]
398-
except KeyError:
399-
pass
400-
return resolved_query_string
389+
resolved_query_string: Dict[str, Any] = query_string
390+
for param in filter(is_scalar_field, params):
391+
try:
392+
# if the target parameter is a scalar, we keep the first value of the query string
393+
# regardless if there are more in the payload
394+
resolved_query_string[param.alias] = query_string[param.alias][0]
395+
except KeyError:
396+
pass
397+
return resolved_query_string
401398

402399

403400
def _normalize_multi_header_values_with_param(headers: Optional[Dict[str, str]], params: Sequence[ModelField]):

aws_lambda_powertools/utilities/data_classes/alb_event.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,11 @@ def multi_value_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
3636
return self.get("multiValueQueryStringParameters")
3737

3838
@property
39-
def resolved_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
39+
def resolved_query_string_parameters(self) -> Dict[str, List[str]]:
4040
if self.multi_value_query_string_parameters:
4141
return self.multi_value_query_string_parameters
4242

43-
if self.query_string_parameters:
44-
query_string = {key: value.split(",") for key, value in self.query_string_parameters.items()}
45-
return query_string
46-
47-
return None
43+
return super().resolved_query_string_parameters
4844

4945
@property
5046
def resolved_headers_field(self) -> Optional[Dict[str, Any]]:

aws_lambda_powertools/utilities/data_classes/api_gateway_proxy_event.py

+2-14
Original file line numberDiff line numberDiff line change
@@ -119,15 +119,11 @@ def multi_value_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
119119
return self.get("multiValueQueryStringParameters")
120120

121121
@property
122-
def resolved_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
122+
def resolved_query_string_parameters(self) -> Dict[str, List[str]]:
123123
if self.multi_value_query_string_parameters:
124124
return self.multi_value_query_string_parameters
125125

126-
if self.query_string_parameters:
127-
query_string = {key: value.split(",") for key, value in self.query_string_parameters.items()}
128-
return query_string
129-
130-
return None
126+
return super().resolved_query_string_parameters
131127

132128
@property
133129
def resolved_headers_field(self) -> Optional[Dict[str, Any]]:
@@ -322,14 +318,6 @@ def http_method(self) -> str:
322318
def header_serializer(self):
323319
return HttpApiHeadersSerializer()
324320

325-
@property
326-
def resolved_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
327-
if self.query_string_parameters is not None:
328-
query_string = {key: value.split(",") for key, value in self.query_string_parameters.items()}
329-
return query_string
330-
331-
return None
332-
333321
@property
334322
def resolved_headers_field(self) -> Optional[Dict[str, Any]]:
335323
if self.headers is not None:

aws_lambda_powertools/utilities/data_classes/bedrock_agent_event.py

-8
Original file line numberDiff line numberDiff line change
@@ -109,14 +109,6 @@ def query_string_parameters(self) -> Optional[Dict[str, str]]:
109109
# together with the other parameters. So we just return all parameters here.
110110
return {x["name"]: x["value"] for x in self["parameters"]} if self.get("parameters") else None
111111

112-
@property
113-
def resolved_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
114-
if self.query_string_parameters is not None:
115-
query_string = {key: value.split(",") for key, value in self.query_string_parameters.items()}
116-
return query_string
117-
118-
return None
119-
120112
@property
121113
def resolved_headers_field(self) -> Optional[Dict[str, Any]]:
122114
return {}

aws_lambda_powertools/utilities/data_classes/common.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def query_string_parameters(self) -> Optional[Dict[str, str]]:
104104
return self.get("queryStringParameters")
105105

106106
@property
107-
def resolved_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
107+
def resolved_query_string_parameters(self) -> Dict[str, List[str]]:
108108
"""
109109
This property determines the appropriate query string parameter to be used
110110
as a trusted source for validating OpenAPI.
@@ -116,7 +116,7 @@ def resolved_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
116116
query_string = {key: value.split(",") for key, value in self.query_string_parameters.items()}
117117
return query_string
118118

119-
return None
119+
return {}
120120

121121
@property
122122
def resolved_headers_field(self) -> Optional[Dict[str, Any]]:

aws_lambda_powertools/utilities/data_classes/vpc_lattice.py

+11-20
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from functools import cached_property
2-
from typing import Any, Dict, List, Optional, overload
2+
from typing import Any, Dict, Optional, overload
33

44
from aws_lambda_powertools.shared.headers_serializer import (
55
BaseHeadersSerializer,
@@ -138,13 +138,6 @@ def query_string_parameters(self) -> Dict[str, str]:
138138
"""The request query string parameters."""
139139
return self["query_string_parameters"]
140140

141-
@property
142-
def resolved_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
143-
if self.query_string_parameters is not None:
144-
query_string = {key: value.split(",") for key, value in self.query_string_parameters.items()}
145-
return query_string
146-
return None
147-
148141
@property
149142
def resolved_headers_field(self) -> Optional[Dict[str, Any]]:
150143
if self.headers is not None:
@@ -256,23 +249,21 @@ def path(self) -> str:
256249

257250
@property
258251
def request_context(self) -> vpcLatticeEventV2RequestContext:
259-
"""he VPC Lattice v2 Event request context."""
252+
"""The VPC Lattice v2 Event request context."""
260253
return vpcLatticeEventV2RequestContext(self["requestContext"])
261254

262255
@property
263256
def query_string_parameters(self) -> Optional[Dict[str, str]]:
264-
"""The request query string parameters."""
265-
return self.get("queryStringParameters")
257+
"""The request query string parameters.
266258
267-
@property
268-
def resolved_query_string_parameters(self) -> Optional[Dict[str, List[str]]]:
269-
if self.query_string_parameters is not None:
270-
query_string = {
271-
key: value.split(",") if not isinstance(value, list) else value
272-
for key, value in self.query_string_parameters.items()
273-
}
274-
return query_string
275-
return None
259+
For VPC Lattice V2, the queryStringParameters will contain a Dict[str, List[str]]
260+
so to keep compatibility with existing utilities, we merge all the values with a comma.
261+
"""
262+
params = self.get("queryStringParameters")
263+
if params:
264+
return {key: ",".join(value) for key, value in params.items()}
265+
else:
266+
return None
276267

277268
@property
278269
def resolved_headers_field(self) -> Optional[Dict[str, str]]:

0 commit comments

Comments
 (0)