Browse Source

♻️ Refactor location of types

pull/13639/head
Sebastián Ramírez 10 months ago
parent
commit
6a35756ab4
  1. 10
      fastapi/openapi/constants.py
  2. 9
      fastapi/openapi/models.py
  3. 7
      tests/test_openapi_schema_type.py

10
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",
]

9
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)

7
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

Loading…
Cancel
Save