-
Notifications
You must be signed in to change notification settings - Fork 2
Closed
Description
Same issue as #11 I expect, but the error message is a lot more cryptic.
import dataclasses
import typing
import validobj.validation
@dataclasses.dataclass
class Foo:
maybe_has_foo: typing.List["Foo"]
v = {"maybe_has_foo": [{"maybe_has_foo": []}]}
validobj.validation.parse_input(v, Foo)Results in this error:
Traceback (most recent call last):
File "test.py", line 13, in <module>
validobj.validation.parse_input(v, Foo)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "validobj/validation.py", line 491, in parse_input
return _parse_dataclass(value, spec)
File "validobj/validation.py", line 220, in _parse_dataclass
res[k] = parse_input(v, field_dict[k])
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "validobj/validation.py", line 503, in parse_input
return _handle_typing_spec(value, spec)
File "validobj/validation.py", line 361, in _handle_typing_spec
return _parse_homogeneous_typying_collection(value, spec.__origin__, inner)
File "validobj/validation.py", line 111, in _parse_homogeneous_typying_collection
res.append(parse_input(item, inner))
~~~~~~~~~~~^^^^^^^^^^^^^
File "validobj/validation.py", line 464, in parse_input
return parse_input(value, spec[0])
File "validobj/validation.py", line 510, in parse_input
if isinstance(value, spec):
~~~~~~~~~~^^^^^^^^^^^^^
TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union
Spec is a ForwardRef object, which isn't supported. You can work around this, but it's ugly:
import dataclasses
import typing
import validobj.validation
class Foo:
maybe_has_foo: typing.List["Foo"]
Foo.__annotations__["maybe_has_foo"] = typing.List[Foo]
Foo = dataclasses.dataclass(Foo)
v = {"maybe_has_foo": [{"maybe_has_foo": []}]}
validobj.validation.parse_input(v, Foo)Metadata
Metadata
Assignees
Labels
No labels