Skip to content

Commit

Permalink
fix: Avro dataclass introspect typing
Browse files Browse the repository at this point in the history
  • Loading branch information
jjaakola-aiven committed Oct 16, 2024
1 parent f9f5fe7 commit f736125
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions src/karapace/avro_dataclasses/introspect.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
}


Expand Down Expand Up @@ -128,7 +135,7 @@ def _field_type(field: Field, type_: object) -> AvroType: # pylint: disable=too
T = TypeVar("T", str, int, bool, Enum, None)


def transform_default(type_: type[T], default: T) -> str | int | bool | None:
def transform_default(type_: type[T] | str, default: T) -> str | int | bool | None:
if isinstance(default, Enum):
assert isinstance(type_, type)
assert issubclass(type_, Enum)
Expand Down

0 comments on commit f736125

Please sign in to comment.