Skip to content

Strange behavior when registering str -> float conversion #622

@FeldrinH

Description

@FeldrinH

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions