Browse Source

♻️ Refactor ModelField.required, use FieldInfo internals

pull/14862/head
Sebastián Ramírez 5 months ago
parent
commit
04703fd643
  1. 4
      fastapi/_compat/v2.py
  2. 8
      fastapi/dependencies/utils.py
  3. 4
      fastapi/openapi/utils.py

4
fastapi/_compat/v2.py

@ -102,10 +102,6 @@ class ModelField:
sa = self.field_info.serialization_alias
return sa or None
@property
def required(self) -> bool:
return self.field_info.is_required()
@property
def default(self) -> Any:
return self.get_default()

8
fastapi/dependencies/utils.py

@ -710,7 +710,7 @@ def _validate_value_with_model_field(
*, field: ModelField, value: Any, values: dict[str, Any], loc: tuple[str, ...]
) -> tuple[Any, list[Any]]:
if value is None:
if field.required:
if field.field_info.is_required():
return None, [get_missing_field_error(loc=loc)]
else:
return deepcopy(field.default), []
@ -742,7 +742,7 @@ def _get_multidict_value(
)
or (is_sequence_field(field) and len(value) == 0)
):
if field.required:
if field.field_info.is_required():
return
else:
return deepcopy(field.default)
@ -996,7 +996,9 @@ def get_body_field(
BodyModel = create_body_model(
fields=flat_dependant.body_params, model_name=model_name
)
required = any(True for f in flat_dependant.body_params if f.required)
required = any(
True for f in flat_dependant.body_params if f.field_info.is_required()
)
BodyFieldInfo_kwargs: dict[str, Any] = {
"annotation": BodyModel,
"alias": "body",

4
fastapi/openapi/utils.py

@ -161,7 +161,7 @@ def _get_openapi_operation_parameters(
parameter = {
"name": name,
"in": param_type.value,
"required": param.required,
"required": param.field_info.is_required(),
"schema": param_schema,
}
if field_info.description:
@ -198,7 +198,7 @@ def get_openapi_operation_request_body(
)
field_info = cast(Body, body_field.field_info)
request_media_type = field_info.media_type
required = body_field.required
required = body_field.field_info.is_required()
request_body_oai: dict[str, Any] = {}
if required:
request_body_oai["required"] = required

Loading…
Cancel
Save