Browse Source

change parsing of return values to account for multiple copies of same param

pull/9255/head
JONEMI19 3 years ago
parent
commit
2b0e941acb
  1. 15
      fastapi/dependencies/utils.py

15
fastapi/dependencies/utils.py

@ -18,6 +18,8 @@ from typing import (
cast, cast,
) )
from collections import defaultdict
import anyio import anyio
from fastapi import params from fastapi import params
from fastapi.concurrency import ( from fastapi.concurrency import (
@ -253,10 +255,11 @@ def is_scalar_mapping_field(field: ModelField) -> bool:
if (field.shape in mapping_shapes) and not lenient_issubclass( if (field.shape in mapping_shapes) and not lenient_issubclass(
field.type_, BaseModel field.type_, BaseModel
): ):
if field.sub_fields is not None: if field.sub_fields is None:
for sub_field in field.sub_fields: return True
if not is_scalar_field(sub_field): for sub_field in field.sub_fields:
return False if (not is_scalar_field(sub_field)) and (not is_scalar_sequence_field(sub_field)):
return False
return True return True
if lenient_issubclass(field.type_, mapping_types): if lenient_issubclass(field.type_, mapping_types):
return True return True
@ -625,7 +628,9 @@ def request_params_to_args(
elif is_scalar_mapping_field(field) and isinstance( elif is_scalar_mapping_field(field) and isinstance(
received_params, (QueryParams,) received_params, (QueryParams,)
): ):
value = received_params._dict value = defaultdict(list)
for key, field_value in received_params.multi_items():
value[key].append(field_value)
else: else:
value = received_params.get(field.alias) value = received_params.get(field.alias)
field_info = field.field_info field_info = field.field_info

Loading…
Cancel
Save