|
@ -212,11 +212,15 @@ def get_flat_dependant( |
|
|
def _get_flat_fields_from_params(fields: List[ModelField]) -> List[ModelField]: |
|
|
def _get_flat_fields_from_params(fields: List[ModelField]) -> List[ModelField]: |
|
|
if not fields: |
|
|
if not fields: |
|
|
return fields |
|
|
return fields |
|
|
first_field = fields[0] |
|
|
|
|
|
if len(fields) == 1 and lenient_issubclass(first_field.type_, BaseModel): |
|
|
fields_to_extract = [] |
|
|
fields_to_extract = get_cached_model_fields(first_field.type_) |
|
|
for f in fields: |
|
|
|
|
|
if lenient_issubclass(f.type_, BaseModel): |
|
|
|
|
|
fields_to_extract.extend(get_cached_model_fields(f.type_)) |
|
|
|
|
|
else: |
|
|
|
|
|
fields_to_extract.append(f) |
|
|
return fields_to_extract |
|
|
return fields_to_extract |
|
|
return fields |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_flat_params(dependant: Dependant) -> List[ModelField]: |
|
|
def get_flat_params(dependant: Dependant) -> List[ModelField]: |
|
@ -747,15 +751,15 @@ def request_params_to_args( |
|
|
if not fields: |
|
|
if not fields: |
|
|
return values, errors |
|
|
return values, errors |
|
|
|
|
|
|
|
|
first_field = fields[0] |
|
|
|
|
|
fields_to_extract = fields |
|
|
fields_to_extract = fields |
|
|
single_not_embedded_field = False |
|
|
|
|
|
if len(fields) == 1 and lenient_issubclass(first_field.type_, BaseModel): |
|
|
|
|
|
fields_to_extract = get_cached_model_fields(first_field.type_) |
|
|
|
|
|
single_not_embedded_field = True |
|
|
|
|
|
|
|
|
|
|
|
params_to_process: Dict[str, Any] = {} |
|
|
params_to_process: Dict[str, Any] = {} |
|
|
|
|
|
|
|
|
|
|
|
model_fields = [field for field in fields if lenient_issubclass(field.type_, BaseModel)] |
|
|
|
|
|
if model_fields: |
|
|
|
|
|
fields_to_extract = [ |
|
|
|
|
|
cached_field for field in fields for cached_field in get_cached_model_fields(field.type_) |
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
processed_keys = set() |
|
|
processed_keys = set() |
|
|
|
|
|
|
|
|
for field in fields_to_extract: |
|
|
for field in fields_to_extract: |
|
@ -780,27 +784,24 @@ def request_params_to_args( |
|
|
if key not in processed_keys: |
|
|
if key not in processed_keys: |
|
|
params_to_process[key] = value |
|
|
params_to_process[key] = value |
|
|
|
|
|
|
|
|
if single_not_embedded_field: |
|
|
for field in fields: |
|
|
field_info = first_field.field_info |
|
|
field_info = field.field_info |
|
|
assert isinstance( |
|
|
assert isinstance( |
|
|
field_info, params.Param |
|
|
field_info, params.Param |
|
|
), "Params must be subclasses of Param" |
|
|
), "Params must be subclasses of Param" |
|
|
|
|
|
|
|
|
|
|
|
if lenient_issubclass(field.type_, BaseModel): |
|
|
loc: Tuple[str, ...] = (field_info.in_.value,) |
|
|
loc: Tuple[str, ...] = (field_info.in_.value,) |
|
|
v_, errors_ = _validate_value_with_model_field( |
|
|
v_, errors_ = _validate_value_with_model_field( |
|
|
field=first_field, value=params_to_process, values=values, loc=loc |
|
|
field=field, value=params_to_process, values=values, loc=loc |
|
|
) |
|
|
) |
|
|
return {first_field.name: v_}, errors_ |
|
|
else: |
|
|
|
|
|
|
|
|
for field in fields: |
|
|
|
|
|
value = _get_multidict_value(field, received_params) |
|
|
value = _get_multidict_value(field, received_params) |
|
|
field_info = field.field_info |
|
|
|
|
|
assert isinstance( |
|
|
|
|
|
field_info, params.Param |
|
|
|
|
|
), "Params must be subclasses of Param" |
|
|
|
|
|
loc = (field_info.in_.value, field.alias) |
|
|
loc = (field_info.in_.value, field.alias) |
|
|
v_, errors_ = _validate_value_with_model_field( |
|
|
v_, errors_ = _validate_value_with_model_field( |
|
|
field=field, value=value, values=values, loc=loc |
|
|
field=field, value=value, values=values, loc=loc |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
if errors_: |
|
|
if errors_: |
|
|
errors.extend(errors_) |
|
|
errors.extend(errors_) |
|
|
else: |
|
|
else: |
|
|