-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
bugSomething isn't workingSomething isn't working
Description
from __future__ import annotations
from dataclasses import dataclass
from typing import Annotated
from databind.json import JsonConverter, load
@dataclass(frozen=True)
class Inner:
one: str
two: str
def __str__(self) -> str:
f"{self.one}.{self.two}"
@classmethod
def from_string(cls, val: str) -> Inner:
vals = val.split(".")
return Inner(one=vals[0], two=vals[1])
@dataclass(frozen=True)
class Outer:
number: int
inner: Annotated[
Inner,
JsonConverter.using_classmethods(
Inner, serialize="__str__", deserialize="from_string"
),
]
dict = {"number": 3, "inner": "hello.world"}
loaded = load(dict, Outer)
print(loaded)
Expected Behaviour
Inner struct is parsed using from_string class method and print out:
MyClass(number=3, inner=Inner(one='hello', two='world'))
Actual Behaviour
databind.core.converter.ConversionError: expected typing.Mapping, got str instead
Trace:
$: TypeHint(__main__.Outer)
.inner: TypeHint(typing.Annotated[__main__.Inner, <databind.json.settings.JsonConverter object at 0x1034aec50>])
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working