From a5e28f80d618daff8ad428001c6c7e537cbda864 Mon Sep 17 00:00:00 2001 From: Lukas Rajala Date: Wed, 23 Apr 2025 11:47:30 +0200 Subject: [PATCH] Adding type values following the allowed values from json schema 2020-12 --- fastapi/openapi/constants.py | 8 ++++++++ fastapi/openapi/models.py | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/fastapi/openapi/constants.py b/fastapi/openapi/constants.py index d724ee3cf..78a7ba735 100644 --- a/fastapi/openapi/constants.py +++ b/fastapi/openapi/constants.py @@ -1,3 +1,11 @@ +from typing import Annotated, Literal + METHODS_WITH_BODY = {"GET", "HEAD", "POST", "PUT", "DELETE", "PATCH"} REF_PREFIX = "#/components/schemas/" REF_TEMPLATE = "#/components/schemas/{model}" + + +TypeValue = Annotated[ + Literal["array", "boolean", "integer", "null", "number", "object", "string"], + "Allowed type values of an object as specified in the JSON Schema https://json-schema.org/draft/2020-12/json-schema-validation#section-6.1.1", +] diff --git a/fastapi/openapi/models.py b/fastapi/openapi/models.py index ed07b40f5..8ed5206ce 100644 --- a/fastapi/openapi/models.py +++ b/fastapi/openapi/models.py @@ -10,6 +10,7 @@ from fastapi._compat import ( with_info_plain_validator_function, ) from fastapi.logger import logger +from fastapi.openapi.constants import TypeValue from pydantic import AnyUrl, BaseModel, Field from typing_extensions import Annotated, Literal, TypedDict from typing_extensions import deprecated as typing_deprecated @@ -145,7 +146,7 @@ class Schema(BaseModelWithConfig): dependentSchemas: Optional[Dict[str, "SchemaOrBool"]] = None prefixItems: Optional[List["SchemaOrBool"]] = None # TODO: uncomment and remove below when deprecating Pydantic v1 - # It generales a list of schemas for tuples, before prefixItems was available + # It generates a list of schemas for tuples, before prefixItems was available # items: Optional["SchemaOrBool"] = None items: Optional[Union["SchemaOrBool", List["SchemaOrBool"]]] = None contains: Optional["SchemaOrBool"] = None @@ -157,7 +158,7 @@ class Schema(BaseModelWithConfig): unevaluatedProperties: Optional["SchemaOrBool"] = None # Ref: JSON Schema Validation 2020-12: https://json-schema.org/draft/2020-12/json-schema-validation.html#name-a-vocabulary-for-structural # A Vocabulary for Structural Validation - type: Optional[str] = None + type: Optional[Union[TypeValue, list[TypeValue]]] = None enum: Optional[List[Any]] = None const: Optional[Any] = None multipleOf: Optional[float] = Field(default=None, gt=0)