Explorar el Código

Fixes #3356: Correct Swagger schema specification for the available prefixes/IPs API endpoints

Jeremy Stretch hace 5 años
padre
commit
cc721efe97
Se han modificado 3 ficheros con 22 adiciones y 0 borrados
  1. 1 0
      docs/release-notes/version-2.8.md
  2. 8 0
      netbox/ipam/api/serializers.py
  3. 13 0
      netbox/ipam/api/views.py

+ 1 - 0
docs/release-notes/version-2.8.md

@@ -9,6 +9,7 @@
 ### Bug Fixes
 
 * [#2994](https://github.com/netbox-community/netbox/issues/2994) - Prevent modifying termination points of existing cable to ensure end-to-end path integrity
+* [#3356](https://github.com/netbox-community/netbox/issues/3356) - Correct Swagger schema specification for the available prefixes/IPs API endpoints
 * [#4361](https://github.com/netbox-community/netbox/issues/4361) - Fix Type of `connection_state` in Swagger schema
 * [#4388](https://github.com/netbox-community/netbox/issues/4388) - Fix detection of connected endpoints when connecting rear ports
 * [#4489](https://github.com/netbox-community/netbox/issues/4489) - Fix display of parent/child role on device type view

+ 8 - 0
netbox/ipam/api/serializers.py

@@ -183,6 +183,10 @@ class AvailablePrefixSerializer(serializers.Serializer):
     """
     Representation of a prefix which does not exist in the database.
     """
+    family = serializers.IntegerField(read_only=True)
+    prefix = serializers.CharField(read_only=True)
+    vrf = NestedVRFSerializer(read_only=True)
+
     def to_representation(self, instance):
         if self.context.get('vrf'):
             vrf = NestedVRFSerializer(self.context['vrf'], context={'request': self.context['request']}).data
@@ -246,6 +250,10 @@ class AvailableIPSerializer(serializers.Serializer):
     """
     Representation of an IP address which does not exist in the database.
     """
+    family = serializers.IntegerField(read_only=True)
+    address = serializers.CharField(read_only=True)
+    vrf = NestedVRFSerializer(read_only=True)
+
     def to_representation(self, instance):
         if self.context.get('vrf'):
             vrf = NestedVRFSerializer(self.context['vrf'], context={'request': self.context['request']}).data

+ 13 - 0
netbox/ipam/api/views.py

@@ -2,6 +2,7 @@ from django.conf import settings
 from django.db.models import Count
 from django.shortcuts import get_object_or_404
 from django_pglocks import advisory_lock
+from drf_yasg.utils import swagger_auto_schema
 from rest_framework import status
 from rest_framework.decorators import action
 from rest_framework.exceptions import PermissionDenied
@@ -73,6 +74,12 @@ class PrefixViewSet(CustomFieldModelViewSet):
     serializer_class = serializers.PrefixSerializer
     filterset_class = filters.PrefixFilterSet
 
+    @swagger_auto_schema(
+        methods=['get', 'post'],
+        responses={
+            200: serializers.AvailablePrefixSerializer(many=True),
+        }
+    )
     @action(detail=True, url_path='available-prefixes', methods=['get', 'post'])
     @advisory_lock(ADVISORY_LOCK_KEYS['available-prefixes'])
     def available_prefixes(self, request, pk=None):
@@ -151,6 +158,12 @@ class PrefixViewSet(CustomFieldModelViewSet):
 
             return Response(serializer.data)
 
+    @swagger_auto_schema(
+        methods=['get', 'post'],
+        responses={
+            200: serializers.AvailableIPSerializer(many=True),
+        }
+    )
     @action(detail=True, url_path='available-ips', methods=['get', 'post'])
     @advisory_lock(ADVISORY_LOCK_KEYS['available-ips'])
     def available_ips(self, request, pk=None):