refactor: Simplify Json field detection

This commit is contained in:
masaaya 2026-01-08 16:47:43 +09:00
parent 01e7a617a1
commit 29c5e02945
1 changed files with 7 additions and 5 deletions

View File

@ -51,7 +51,7 @@ from fastapi.logger import logger
from fastapi.security.oauth2 import SecurityScopes
from fastapi.types import DependencyCacheKey
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 starlette.background import BackgroundTasks as StarletteBackgroundTasks
from starlette.concurrency import run_in_threadpool
@ -717,16 +717,18 @@ def _validate_value_with_model_field(
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(
field: ModelField, values: Mapping[str, Any], alias: Union[str, None] = None
) -> Any:
alias = alias or get_validation_alias(field)
if _is_json_field(field):
value = values.get(alias, None)
elif is_sequence_field(field) and isinstance(values, (ImmutableMultiDict, Headers)):
if (
(not _is_json_field(field))
and is_sequence_field(field)
and isinstance(values, (ImmutableMultiDict, Headers))
):
value = values.getlist(alias)
else:
value = values.get(alias, None)