Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: Avro dataclass introspect typing
Browse files Browse the repository at this point in the history
jjaakola-aiven committed Oct 16, 2024
1 parent f9f5fe7 commit 45215d3
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions src/karapace/avro_dataclasses/introspect.py
Original file line number Diff line number Diff line change
@@ -5,12 +5,12 @@

from __future__ import annotations

from .schema import AvroType, EnumType, FieldSchema, MapType, RecordSchema
from .schema import ArrayType, AvroType, EnumType, FieldSchema, MapType, RecordSchema, TypeObject
from collections.abc import Mapping, Sequence
from dataclasses import Field, fields, is_dataclass, MISSING
from enum import Enum
from functools import lru_cache
from typing import Final, get_args, get_origin, TYPE_CHECKING, TypeVar, Union
from typing import Final, get_args, get_origin, Literal, TYPE_CHECKING, TypeVar, Union

import datetime
import uuid
@@ -42,10 +42,17 @@ def _field_type_array(field: Field, origin: type, type_: object) -> AvroType:
else:
(inner_type,) = get_args(type_)

items: AvroType
if is_dataclass(inner_type):
assert isinstance(inner_type, type)
items = record_schema(inner_type)
else:
items = _field_type(field, inner_type)

return {
"name": f"one_of_{field.name}",
"type": "array",
"items": (record_schema(inner_type) if is_dataclass(inner_type) else _field_type(field, inner_type)),
"items": items,
}


@@ -143,6 +150,7 @@ def field_schema(field: Field) -> FieldSchema:
"name": field.name,
"type": _field_type(field, field.type),
}
assert isinstance(field.type, type)
return (
{
**schema,

0 comments on commit 45215d3

Please sign in to comment.