Skip to content

Union type failure when from __future__ import annotations #11

@virtuald

Description

@virtuald

This works:

import dataclasses
import typing as T
from validobj.validation import parse_input


@dataclasses.dataclass
class CmdlineConfig:
    """
    Contents of config settings passed in through a build tool
    """

    build_dir: T.Optional[str] = None
    editable_verbose: bool = False

    # dist_args: T.Union[None, str, T.List[str]] = None
    setup_args: T.Union[None, str, T.List[str]] = None
    compile_args: T.Union[None, str, T.List[str]] = None
    install_args: T.Union[None, str, T.List[str]] = None


nope = {"setup_args": "ohai"}

print(parse_input(nope, CmdlineConfig))

But adding from __future__ import annotations to the top of the file does not work:

$ python t.py
Traceback (most recent call last):
  File "t.py", line 25, in <module>
    print(parse_input(nope, CmdlineConfig))
          ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "python3.13/site-packages/validobj/validation.py", line 491, in parse_input
    return _parse_dataclass(value, spec)
  File "python3.13/site-packages/validobj/validation.py", line 220, in _parse_dataclass
    res[k] = parse_input(v, field_dict[k])
             ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "python3.13/site-packages/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

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