Skip to content

Commit

Permalink
bugfix isolation of derivatives for @extend_schema_serializer/@extend…
Browse files Browse the repository at this point in the history
…_schema_field #585
  • Loading branch information
tfranzel committed Oct 23, 2021
1 parent 146982c commit edc74f0
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drf_spectacular/drainage.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ def get_override(obj, prop, default=None):
def set_override(obj, prop, value):
if not hasattr(obj, '_spectacular_annotation'):
obj._spectacular_annotation = {}
elif '_spectacular_annotation' not in obj.__dict__:
obj._spectacular_annotation = obj._spectacular_annotation.copy()
obj._spectacular_annotation[prop] = value
return obj

Expand Down
26 changes: 26 additions & 0 deletions tests/test_regressions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2753,3 +2753,29 @@ def view_func(request, format=None):
'wo': {'type': 'string', 'writeOnly': True, 'minLength': 1},
'rw': {'type': 'string', 'minLength': 1}
}


def test_extend_schema_serializer_isolation(no_warnings):
@extend_schema_serializer(component_name='ABC')
class OneSerializer(serializers.Serializer):
pass

@extend_schema_serializer(component_name='XYZ')
class TwoSerializer(OneSerializer):
pass

assert OneSerializer._spectacular_annotation == {'component_name': 'ABC'}
assert TwoSerializer._spectacular_annotation == {'component_name': 'XYZ'}


def test_extend_schema_field_isolation(no_warnings):
@extend_schema_field(field=OpenApiTypes.FLOAT)
class OneField(serializers.IntegerField):
pass

@extend_schema_field(field=OpenApiTypes.DOUBLE)
class TwoField(OneField):
pass

assert OneField._spectacular_annotation['field'] == OpenApiTypes.FLOAT
assert TwoField._spectacular_annotation['field'] == OpenApiTypes.DOUBLE

0 comments on commit edc74f0

Please sign in to comment.