Skip to content

parse_input fails with KeyError instead of validation error #16

Description

@virtuald

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)

On 1.3 I get:

$ python test.py
Spec(foo={'bar': Foo(ignore=True)})

On 1.4 I get an exception:

$ 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'

Actual dataclasses at https://github.com/robotpy/semiwrap/blob/main/src/semiwrap/config/autowrap_yml.py if you're curious.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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