Browse Source

refactor: Simplify Json field detection

pull/14616/head
masaaya 6 months ago
parent
commit
29c5e02945
  1. 12
      fastapi/dependencies/utils.py

12
fastapi/dependencies/utils.py

@ -51,7 +51,7 @@ from fastapi.logger import logger
from fastapi.security.oauth2 import SecurityScopes from fastapi.security.oauth2 import SecurityScopes
from fastapi.types import DependencyCacheKey from fastapi.types import DependencyCacheKey
from fastapi.utils import create_model_field, get_path_param_names from fastapi.utils import create_model_field, get_path_param_names
from pydantic import BaseModel from pydantic import BaseModel, Json
from pydantic.fields import FieldInfo from pydantic.fields import FieldInfo
from starlette.background import BackgroundTasks as StarletteBackgroundTasks from starlette.background import BackgroundTasks as StarletteBackgroundTasks
from starlette.concurrency import run_in_threadpool from starlette.concurrency import run_in_threadpool
@ -717,16 +717,18 @@ def _validate_value_with_model_field(
def _is_json_field(field: ModelField) -> bool: def _is_json_field(field: ModelField) -> bool:
return any(isinstance(item, Json) for item in field.field_info.metadata) return any(type(item) is Json for item in field.field_info.metadata)
def _get_multidict_value( def _get_multidict_value(
field: ModelField, values: Mapping[str, Any], alias: Union[str, None] = None field: ModelField, values: Mapping[str, Any], alias: Union[str, None] = None
) -> Any: ) -> Any:
alias = alias or get_validation_alias(field) alias = alias or get_validation_alias(field)
if _is_json_field(field): if (
value = values.get(alias, None) (not _is_json_field(field))
elif is_sequence_field(field) and isinstance(values, (ImmutableMultiDict, Headers)): and is_sequence_field(field)
and isinstance(values, (ImmutableMultiDict, Headers))
):
value = values.getlist(alias) value = values.getlist(alias)
else: else:
value = values.get(alias, None) value = values.get(alias, None)

Loading…
Cancel
Save