From 69b628a7afdbc9de5f8872a34669a4b1a827155b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cristi=20V=C3=AEjdea?= Date: Thu, 13 Jun 2019 02:26:36 +0300 Subject: [PATCH] Fix python 3.7 typing Closes #371 --- src/drf_yasg/inspectors/field.py | 12 +++++++----- src/drf_yasg/inspectors/view.py | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/drf_yasg/inspectors/field.py b/src/drf_yasg/inspectors/field.py index b4aa73d..9f063b6 100644 --- a/src/drf_yasg/inspectors/field.py +++ b/src/drf_yasg/inspectors/field.py @@ -491,7 +491,8 @@ hinting_type_info = [ ] if sys.version_info < (3, 0): - hinting_type_info.append((unicode, (openapi.TYPE_STRING, None))) + # noinspection PyUnresolvedReferences + hinting_type_info.append((unicode, (openapi.TYPE_STRING, None))) # noqa: F821 if typing: def inspect_collection_hint_class(hint_class): @@ -531,11 +532,14 @@ def get_basic_type_info_from_hint(hint_class): :rtype: OrderedDict """ union_types = _get_union_types(hint_class) + if typing and union_types: # Optional is implemented as Union[T, None] if len(union_types) == 2 and isinstance(None, union_types[1]): result = get_basic_type_info_from_hint(union_types[0]) - result['x-nullable'] = True + if result: + result['x-nullable'] = True + return result return None @@ -606,9 +610,7 @@ class SerializerMethodFieldInspector(FieldInspector): # look for Python 3.5+ style type hinting of the return value hint_class = inspect_signature(method).return_annotation - if not inspect.isclass(hint_class) and hasattr(hint_class, '__args__'): - hint_class = hint_class.__args__[0] - if inspect.isclass(hint_class) and not issubclass(hint_class, inspect._empty): + if not issubclass(hint_class, inspect._empty): type_info = get_basic_type_info_from_hint(hint_class) if type_info is not None: diff --git a/src/drf_yasg/inspectors/view.py b/src/drf_yasg/inspectors/view.py index ecc65d4..cdf3d9b 100644 --- a/src/drf_yasg/inspectors/view.py +++ b/src/drf_yasg/inspectors/view.py @@ -9,7 +9,7 @@ from .. import openapi from ..errors import SwaggerGenerationError from ..utils import ( filter_none, force_real_str, force_serializer_instance, get_consumes, get_produces, guess_response_status, - is_list_view, merge_params, no_body, param_list_to_odict + merge_params, no_body, param_list_to_odict ) from .base import ViewInspector, call_view_method