wyfo / apischema

JSON (de)serialization, GraphQL and JSON schema generation using Python typing.

Home Page:https://wyfo.github.io/apischema/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Strange behavior when registering `str` -> `float` conversion

FeldrinH opened this issue · comments

Perhaps I am abusing conversions for something that they are not intended to handle, but I encountered a behavior that I found suprising and which feels like a bug.

I was trying to support deserializing floats from both floats and strings. I registered a converter like this:

@apischema.deserializer
def to_float(value: str) -> float:
    return float(value)

And then tried this:

@dataclass
class Data:
    a: float
    b: float

result = apischema.deserialize(Data, {
    "a": 1.23,
    "b": "1.23",
})
print(result)

The result was, ValidationError: [{'loc': ['a'], 'err': 'expected type string, found number'}], which is a little suprising, because it seems that adding a converter from string to float has made deserializing a float to itself invalid.

PS: I also tried adding a converter from float to float. That caused RecursionError: maximum recursion depth exceeded.