Refactor to use schema extension

This commit is contained in:
Marcus Weiner 2025-02-02 15:59:30 +01:00 committed by Marcus Weiner
parent 6ba38dc26a
commit bd8be383e4
2 changed files with 19 additions and 23 deletions

View File

@ -2,12 +2,13 @@ import re
import typing import typing
from collections import OrderedDict from collections import OrderedDict
from drf_spectacular.extensions import OpenApiSerializerFieldExtension from drf_spectacular.extensions import OpenApiSerializerFieldExtension, OpenApiSerializerExtension, _SchemaType
from drf_spectacular.openapi import AutoSchema from drf_spectacular.openapi import AutoSchema
from drf_spectacular.plumbing import ( from drf_spectacular.plumbing import (
build_basic_type, build_choice_field, build_media_type_object, build_object_type, get_doc, build_basic_type, build_choice_field, build_media_type_object, build_object_type, get_doc,
) )
from drf_spectacular.types import OpenApiTypes from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import Direction
from netbox.api.fields import ChoiceField from netbox.api.fields import ChoiceField
from netbox.api.serializers import WritableNestedSerializer from netbox.api.serializers import WritableNestedSerializer
@ -277,3 +278,20 @@ class FixSerializedPKRelatedField(OpenApiSerializerFieldExtension):
return component.ref if component else None return component.ref if component else None
else: else:
return build_basic_type(OpenApiTypes.INT) return build_basic_type(OpenApiTypes.INT)
class FixIntegerRangeSerializerSchema(OpenApiSerializerExtension):
target_class = 'netbox.api.fields.IntegerRangeSerializer'
def map_serializer(self, auto_schema: 'AutoSchema', direction: Direction) -> _SchemaType:
return {
'type': 'array',
'items': {
'type': 'array',
'items': {
'type': 'integer',
},
'minItems': 2,
'maxItems': 2,
},
}

View File

@ -158,29 +158,7 @@ class RelatedObjectCountField(serializers.ReadOnlyField):
super().__init__(**kwargs) super().__init__(**kwargs)
_integer_range_schema = {
'type': 'array',
'items': {
'type': 'integer',
},
'minItems': 2,
'maxItems': 2,
}
@extend_schema_field({
'type': 'array',
'items': _integer_range_schema,
})
class IntegerRangeListSerializer(serializers.ListSerializer):
# this special class is only here to work around
# https://github.com/tfranzel/drf-spectacular/issues/1353
pass
@extend_schema_field(_integer_range_schema)
class IntegerRangeSerializer(serializers.Serializer): class IntegerRangeSerializer(serializers.Serializer):
class Meta:
list_serializer_class = IntegerRangeListSerializer
""" """
Represents a range of integers. Represents a range of integers.
""" """