From 62d97a80bc555ea6d2635c5e3de417887580f63a Mon Sep 17 00:00:00 2001 From: Cristi Vijdea Date: Sun, 3 Mar 2019 17:23:04 +0200 Subject: [PATCH] Fix _serializer pickle bugs --- src/drf_yasg/inspectors/field.py | 4 ++-- src/drf_yasg/openapi.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/drf_yasg/inspectors/field.py b/src/drf_yasg/inspectors/field.py index 7c5575a..4a58964 100644 --- a/src/drf_yasg/inspectors/field.py +++ b/src/drf_yasg/inspectors/field.py @@ -122,7 +122,7 @@ class InlineSerializerInspector(SerializerInspector): # it is better to just remove title from inline models del result.title - setattr(result, '_serializer', serializer) + setattr(result, '_NP_serializer', get_serializer_class(serializer)) return result if not ref_name or not use_references: @@ -132,7 +132,7 @@ class InlineSerializerInspector(SerializerInspector): actual_schema = definitions.setdefault(ref_name, make_schema_definition) actual_schema._remove_read_only() - actual_serializer = get_serializer_class(getattr(actual_schema, '_serializer', None)) + actual_serializer = getattr(actual_schema, '_NP_serializer', None) this_serializer = get_serializer_class(field) if actual_serializer and actual_serializer != this_serializer: # pragma: no cover explicit_refs = self._has_ref_name(actual_serializer) and self._has_ref_name(this_serializer) diff --git a/src/drf_yasg/openapi.py b/src/drf_yasg/openapi.py index 45b49f4..853587e 100644 --- a/src/drf_yasg/openapi.py +++ b/src/drf_yasg/openapi.py @@ -167,7 +167,8 @@ class SwaggerDict(OrderedDict): def __reduce__(self): # for pickle supprt; this skips calls to all SwaggerDict __init__ methods and relies # on the already set attributes instead - return _bare_SwaggerDict, (type(self),), vars(self), None, iter(self.items()) + attrs = {k: v for k ,v in vars(self).items() if not k.startswith('_NP_')} + return _bare_SwaggerDict, (type(self),), attrs, None, iter(self.items()) class Contact(SwaggerDict):