Error using type hinting in Python 3.5 with manager.command annotation
martyla opened this issue · 2 comments
martyla commented
I'm trying to use type hinting from PEP 484 valid since Python 3.5, but I'm getting an error: ValueError: Function has keyword-only arguments or annotations, use getfullargspec() API which can support them
Here's a sample:
from flask import Flask
from flask_script import Manager
app = Flask(__name__)
manager = Manager(app)
@manager.command
def test() -> None:
print('Testing')
if __name__ == "__main__":
manager.run()
It works fine if I define test()
without the -> None
annotation
Full stacktrace:
(env)$ python manage.py test
Traceback (most recent call last):
File "manage.py", line 9, in <module>
def test() -> None:
File "/home/martin/tmp/flask-script-error/env/lib/python3.5/site-packages/flask_script/__init__.py", line 285, in command
command = Command(func)
File "/home/martin/tmp/flask-script-error/env/lib/python3.5/site-packages/flask_script/commands.py", line 118, in __init__
args, varargs, keywords, defaults = inspect.getargspec(func)
File "/usr/lib/python3.5/inspect.py", line 1045, in getargspec
raise ValueError("Function has keyword-only arguments or annotations"
ValueError: Function has keyword-only arguments or annotations, use getfullargspec() API which can support them
Any ideas?
aquilax commented
Seems to be caused by inspect.getargspec
, which is deprecated since python 3.0
>>> def test() -> None:
... print("test")
>>> from inspect import getargspec
>>> getargspec(test)
ptpython3:1: DeprecationWarning: inspect.getargspec() is deprecated, use inspect.signature() instead
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/inspect.py", line 1045, in getargspec
raise ValueError("Function has keyword-only arguments or annotations"
ValueError: Function has keyword-only arguments or annotations, use getfullargspec() API which can support them
Function has keyword-only arguments or annotations, use getfullargspec() API which can support them
sybrenstuvel commented
Changing the offending line to this solves the problem:
args, varargs, keywords, defaults, _, _, _ = inspect.getfullargspec(func)