Skip to content

Expected typing.Mapping, got str instead #53

@callumPearce

Description

@callumPearce
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

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions