diff options
Diffstat (limited to 'sphinx/ext/autodoc.py')
-rw-r--r-- | sphinx/ext/autodoc.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/sphinx/ext/autodoc.py b/sphinx/ext/autodoc.py index 7dc89d39a..6ae0966fb 100644 --- a/sphinx/ext/autodoc.py +++ b/sphinx/ext/autodoc.py @@ -35,7 +35,10 @@ from sphinx.util.inspect import getargspec, isdescriptor, safe_getmembers, \ from sphinx.util.docstrings import prepare_docstring try: - import typing + if sys.version_info >= (3,): + import typing + else: + typing = None except ImportError: typing = None @@ -269,9 +272,17 @@ def format_annotation(annotation): if isinstance(annotation, typing.TypeVar): return annotation.__name__ elif hasattr(typing, 'GenericMeta') and \ - isinstance(annotation, typing.GenericMeta) and \ - hasattr(annotation, '__parameters__'): - params = annotation.__parameters__ + isinstance(annotation, typing.GenericMeta): + # In Python 3.5.2+, all arguments are stored in __args__, + # whereas __parameters__ only contains generic parameters. + # + # Prior to Python 3.5.2, __args__ is not available, and all + # arguments are in __parameters__. + params = None + if hasattr(annotation, '__args__'): + params = annotation.__args__ + elif hasattr(annotation, '__parameters__'): + params = annotation.__parameters__ if params is not None: param_str = ', '.join(format_annotation(p) for p in params) return '%s[%s]' % (qualified_name, param_str) |