Your latest release has a regression.
#!/usr/bin/env python3
import validobj.validation
import dataclasses
import typing as T
@dataclasses.dataclass(frozen=True)
class FooBase:
ignore: bool = True
@dataclasses.dataclass(frozen=True)
class Foo(FooBase):
pass
@dataclasses.dataclass(frozen=True)
class Spec:
foo: T.Dict[str, Foo] = dataclasses.field(default_factory=dict)
value = {"foo": {"bar": {}}}
v = validobj.validation.parse_input(value, Spec)
print(v)
$ python test.py
Spec(foo={'bar': Foo(ignore=True)})
$ python test.py
Traceback (most recent call last):
File "test.py", line 22, in <module>
validobj.validation.parse_input(value, Spec)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "site-packages/validobj/validation.py", line 500, in parse_input
return _parse_dataclass(value, spec)
File "site-packages/validobj/validation.py", line 223, in _parse_dataclass
res[k] = parse_input(v, field_dict[k])
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "site-packages/validobj/validation.py", line 512, in parse_input
return _handle_typing_spec(value, spec)
File "site-packages/validobj/validation.py", line 372, in _handle_typing_spec
return _parse_typing_mapping(value, spec)
File "site-packages/validobj/validation.py", line 154, in _parse_typing_mapping
parsed_v = parse_input(v, value_tp)
File "site-packages/validobj/validation.py", line 500, in parse_input
return _parse_dataclass(value, spec)
File "site-packages/validobj/validation.py", line 218, in _parse_dataclass
f.name: types[f.name] if not isinstance(f.type, dataclasses.InitVar) else f.type.type
~~~~~^^^^^^^^
KeyError: 'ignore'
Your latest release has a regression.
On 1.3 I get:
On 1.4 I get an exception:
Actual dataclasses at https://github.com/robotpy/semiwrap/blob/main/src/semiwrap/config/autowrap_yml.py if you're curious.