Skip to content

tapify does not work with from __future__ import annotations. #168

@UshioA

Description

@UshioA

When the file where the class is defined has from __future__ import annotations, and the class have type hints on its __init__ function, tapify will throw ValueError: 'str' is not callable.

My Python version is Python 3.12.4. Tap version is 1.11.0.

Examples:

This will work fine:

# main.py
class Driver:
  def __init__(self, a: str):
    self.a = a

  def run(self):
    pass


def main():
  from tap import tapify

  tapify(Driver).run()


if __name__ == "__main__":
  main()

Running python main.py will correctly show help messages.

This will throw an error:

# main.py
from __future__ import annotations


class Driver:
  def __init__(self, a: str):
    self.a = a

  def run(self):
    pass


def main():
  from tap import tapify

  tapify(Driver).run()


if __name__ == "__main__":
  main()

Running python main.py results in this:

Traceback (most recent call last):
  File "/***/main.py", line 19, in <module>
    main()
  File "/***/main.py", line 15, in main
    tapify(Driver).run()
    ^^^^^^^^^^^^^^
  File "/***/.venv/lib/python3.12/site-packages/tap/tapify.py", line 344, in tapify
    tap = tap_class(description=description, explicit_bool=explicit_bool, underscores_to_dashes=underscores_to_dashes)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/***/.venv/lib/python3.12/site-packages/tap/tap.py", line 112, in __init__
    self._configure()
  File "/***/.venv/lib/python3.12/site-packages/tap/tapify.py", line 292, in _configure
    super()._configure()
  File "/***/.venv/lib/python3.12/site-packages/tap/tap.py", line 352, in _configure
    self._add_arguments()
  File "/***/.venv/lib/python3.12/site-packages/tap/tap.py", line 312, in _add_arguments
    self._add_argument(*name_or_flags, **kwargs)
  File "/***/.venv/lib/python3.12/site-packages/tap/tap.py", line 292, in _add_argument
    super(Tap, self).add_argument(*name_or_flags, **kwargs)
  File "/***/lib/python3.12/argparse.py", line 1482, in add_argument
    raise ValueError('%r is not callable' % (type_func,))
ValueError: 'str' is not callable

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions