Procházet zdrojové kódy

Fix definition of `vid_ranges` in `VLANGroup` so it shows up in the OpenAPI schema (#18237)

Marcus Weiner před 11 měsíci
rodič
revize
c81f4da780
1 změnil soubory, kde provedl 19 přidání a 1 odebrání
  1. 19 1
      netbox/core/api/schema.py

+ 19 - 1
netbox/core/api/schema.py

@@ -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,
+            },
+        }