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 sa = self.field_info.serialization_alias
return sa or None return sa or None
@property
def required(self) -> bool:
return self.field_info.is_required()
@property @property
def default(self) -> Any: def default(self) -> Any:
return self.get_default() 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, ...] *, field: ModelField, value: Any, values: dict[str, Any], loc: tuple[str, ...]
) -> tuple[Any, list[Any]]: ) -> tuple[Any, list[Any]]:
if value is None: if value is None:
if field.required: if field.field_info.is_required():
return None, [get_missing_field_error(loc=loc)] return None, [get_missing_field_error(loc=loc)]
else: else:
return deepcopy(field.default), [] return deepcopy(field.default), []
@ -742,7 +742,7 @@ def _get_multidict_value(
) )
or (is_sequence_field(field) and len(value) == 0) or (is_sequence_field(field) and len(value) == 0)
): ):
if field.required: if field.field_info.is_required():
return return
else: else:
return deepcopy(field.default) return deepcopy(field.default)
@ -996,7 +996,9 @@ def get_body_field(
BodyModel = create_body_model( BodyModel = create_body_model(
fields=flat_dependant.body_params, model_name=model_name 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] = { BodyFieldInfo_kwargs: dict[str, Any] = {
"annotation": BodyModel, "annotation": BodyModel,
"alias": "body", "alias": "body",

4
fastapi/openapi/utils.py

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

Loading…
Cancel
Save