Skip to content

Commit

Permalink
Refactor to use schema extension
Browse files Browse the repository at this point in the history
  • Loading branch information
mraerino committed Feb 2, 2025
1 parent 215206b commit 4d794da
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 23 deletions.
20 changes: 19 additions & 1 deletion netbox/core/api/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@
import typing
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.plumbing import (
build_basic_type, build_choice_field, build_media_type_object, build_object_type, get_doc,
)
from drf_spectacular.types import OpenApiTypes
from drf_spectacular.utils import Direction

from netbox.api.fields import ChoiceField
from netbox.api.serializers import WritableNestedSerializer
Expand Down Expand Up @@ -271,3 +272,20 @@ def map_serializer_field(self, auto_schema, direction):
return component.ref if component else None
else:
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,
},
}
22 changes: 0 additions & 22 deletions netbox/netbox/api/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,29 +158,7 @@ def __init__(self, relation, **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 Meta:
list_serializer_class = IntegerRangeListSerializer

"""
Represents a range of integers.
"""
Expand Down

0 comments on commit 4d794da

Please sign in to comment.