Source code for dmr.openapi.objects.media_type
from collections.abc import Hashable
from dataclasses import asdict, dataclass
from typing import TYPE_CHECKING, Any, final
from typing_extensions import override
from dmr.internal.empty import EMPTY
if TYPE_CHECKING:
from dmr.openapi.objects.encoding import Encoding
from dmr.openapi.objects.example import Example
from dmr.openapi.objects.reference import Reference
from dmr.openapi.objects.schema import Schema
[docs]
@final
@dataclass(kw_only=True, slots=True, frozen=True)
class MediaTypeMetadata:
"""
Media type metadata to be set on a request body.
.. versionchanged:: 0.16.0
Added ``description`` from OpenAPI 3.2.
``prefix_encoding`` is now a list, as the spec requires.
``example`` now defaults to :data:`~dmr.types.EMPTY`
instead of ``None``, because ``None`` is a valid value for it.
Added ``x_extensions`` for specification extensions.
"""
# NOTE: defaults here must match defaults of `MediaType`:
example: Any = EMPTY
examples: dict[str, 'Example | Reference'] | None = None
encoding: dict[str, 'Encoding'] | None = None
# OpenAPI 3.2+ fields:
description: str | None = None
item_encoding: 'Encoding | None' = None
prefix_encoding: list['Encoding'] | None = None
#: Specification extensions, keys must start with ``x-``.
x_extensions: dict[str, Any] | None = None
[docs]
@override
def __hash__(self) -> int:
"""Hash the dataclass in a safe way."""
return sum(
hash(field) # type: ignore[misc]
for field in asdict(self)
if isinstance(field, Hashable) # type: ignore[redundant-expr]
)
[docs]
@dataclass(kw_only=True, slots=True)
class MediaType:
"""
Media Type Object.
Each Media Type Object provides schema and examples for the media
type identified by its key.
.. versionchanged:: 0.16.0
Added ``description`` from OpenAPI 3.2.
``prefix_encoding`` is now a list, as the spec requires.
``example`` now defaults to :data:`~dmr.types.EMPTY`
instead of ``None``, because ``None`` is a valid value for it.
Added ``x_extensions`` for specification extensions.
"""
# Can be `None` only when `item_schema` is set:
schema: 'Schema | None' = None
example: Any = EMPTY
examples: dict[str, 'Example | Reference'] | None = None
encoding: dict[str, 'Encoding'] | None = None
# OpenAPI 3.2+ fields:
# NOTE: `encoding` is mutually exclusive with the two `*_encoding` ones,
# we let `openapi-spec-validator` report that.
description: str | None = None
item_schema: 'Schema | None' = None
item_encoding: 'Encoding | None' = None
prefix_encoding: list['Encoding'] | None = None
#: Specification extensions, keys must start with ``x-``.
x_extensions: dict[str, Any] | None = None