Skip to content

Commit

Permalink
Merge pull request #16 from verkada/jackkeane/fix-query-parsing
Browse files Browse the repository at this point in the history
Fix bug where query parameter string could get parsed as number
  • Loading branch information
jakeane authored Oct 16, 2024
2 parents 3822689 + 5443a6f commit 48384d0
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 3 deletions.
4 changes: 3 additions & 1 deletion flask_pydantic_spec/flask_backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,9 @@ def request_validation(
{} if request.get_data() == b"" else request.get_json(force=True)
)
elif request.content_type and "multipart/form-data" in request.content_type:
parsed_body = parse_multi_dict(request.form) if request.form else {}
parsed_body = (
parse_multi_dict(request.form, parse_json=True) if request.form else {}
)
else:
parsed_body = request.get_data() or {}
req_headers: Optional[Headers] = request.headers or None
Expand Down
6 changes: 4 additions & 2 deletions flask_pydantic_spec/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,14 +197,16 @@ def default_after_handler(
)


def parse_multi_dict(input: MultiDict) -> Dict[str, Any]:
def parse_multi_dict(input: MultiDict, parse_json: bool = False) -> Dict[str, Any]:
result = {}
for key, value in input.to_dict(flat=False).items():
if len(value) == 1:
if len(value) == 1 and parse_json:
try:
value_to_use = json.loads(value[0])
except (TypeError, JSONDecodeError):
value_to_use = value[0]
elif len(value) == 1:
value_to_use = value[0]
else:
value_to_use = value
result[key] = value_to_use
Expand Down

0 comments on commit 48384d0

Please sign in to comment.