1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
from dataclasses import dataclass
from typing import Generic, TypeVar
from apischema.conversions import Conversion
from apischema.json_schema import serialization_schema
T = TypeVar("T")
class Query(Generic[T]):
...
def query_to_list(q: Query[T]) -> list[T]:
...
def query_to_scalar(q: Query[T]) -> T | None:
...
@dataclass
class FooModel:
bar: int
class Foo:
def serialize(self) -> FooModel:
...
assert serialization_schema(
Query[Foo], conversion=Conversion(query_to_list, sub_conversion=Foo.serialize)
) == {
# We get an array of Foo
"type": "array",
"items": {
"type": "object",
"properties": {"bar": {"type": "integer"}},
"required": ["bar"],
"additionalProperties": False,
},
"$schema": "http://json-schema.org/draft/2020-12/schema#",
}
|