diff --git a/fastapi/openapi/constants.py b/fastapi/openapi/constants.py index 01f543869..d724ee3cf 100644 --- a/fastapi/openapi/constants.py +++ b/fastapi/openapi/constants.py @@ -1,13 +1,3 @@ -from typing import Literal - -from typing_extensions import Annotated - 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 d7eb4a04a..81d276aed 100644 --- a/fastapi/openapi/models.py +++ b/fastapi/openapi/models.py @@ -10,7 +10,6 @@ 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 @@ -122,6 +121,12 @@ class ExternalDocumentation(BaseModelWithConfig): url: AnyUrl +# Ref JSON Schema 2020-12: https://json-schema.org/draft/2020-12/json-schema-validation#name-type +SchemaType = Literal[ + "array", "boolean", "integer", "null", "number", "object", "string" +] + + class Schema(BaseModelWithConfig): # Ref: JSON Schema 2020-12: https://json-schema.org/draft/2020-12/json-schema-core.html#name-the-json-schema-core-vocabu # Core Vocabulary @@ -158,7 +163,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[Union[TypeValue, List[TypeValue]]] = None + type: Optional[Union[SchemaType, List[SchemaType]]] = None enum: Optional[List[Any]] = None const: Optional[Any] = None multipleOf: Optional[float] = Field(default=None, gt=0) diff --git a/tests/test_openapi_schema_type.py b/tests/test_openapi_schema_type.py index 9030eaa88..a45ea20c8 100644 --- a/tests/test_openapi_schema_type.py +++ b/tests/test_openapi_schema_type.py @@ -1,8 +1,7 @@ from typing import List, Optional, Union import pytest -from fastapi.openapi.constants import TypeValue -from fastapi.openapi.models import Schema +from fastapi.openapi.models import Schema, SchemaType @pytest.mark.parametrize( @@ -14,9 +13,9 @@ from fastapi.openapi.models import Schema ], ) def test_allowed_schema_type( - type_value: Optional[Union[TypeValue, List[TypeValue]]], + type_value: Optional[Union[SchemaType, List[SchemaType]]], ) -> None: - """Test that Schema accepts TypeValue, List[TypeValue] and None for type field.""" + """Test that Schema accepts SchemaType, List[SchemaType] and None for type field.""" schema = Schema(type=type_value) assert schema.type == type_value