From 49f027fae709808027dfadb2eeba65dfb088c743 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 15 Jan 2020 09:59:44 -0500 Subject: [PATCH] Refactor FieldChoicesViewSet; add Interface.type to virtualization _choices endpoint --- netbox/circuits/api/views.py | 4 +-- netbox/dcim/api/views.py | 47 +++++++++++++++--------------- netbox/extras/api/views.py | 6 ++-- netbox/ipam/api/views.py | 10 +++---- netbox/utilities/api.py | 9 +++--- netbox/virtualization/api/views.py | 3 +- 6 files changed, 39 insertions(+), 40 deletions(-) diff --git a/netbox/circuits/api/views.py b/netbox/circuits/api/views.py index 771a8efcc..98b7c9184 100644 --- a/netbox/circuits/api/views.py +++ b/netbox/circuits/api/views.py @@ -18,8 +18,8 @@ from . import serializers class CircuitsFieldChoicesViewSet(FieldChoicesViewSet): fields = ( - (Circuit, ['status']), - (CircuitTermination, ['term_side']), + (serializers.CircuitSerializer, ['status']), + (serializers.CircuitTerminationSerializer, ['term_side']), ) diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index 0b1292e44..8bb127f67 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -2,8 +2,8 @@ from collections import OrderedDict from django.conf import settings from django.db.models import Count, F -from django.http import HttpResponseForbidden, HttpResponseBadRequest, HttpResponse -from django.shortcuts import get_object_or_404, reverse +from django.http import HttpResponseForbidden, HttpResponse +from django.shortcuts import get_object_or_404 from drf_yasg import openapi from drf_yasg.openapi import Parameter from drf_yasg.utils import swagger_auto_schema @@ -13,7 +13,7 @@ from rest_framework.response import Response from rest_framework.viewsets import GenericViewSet, ViewSet from circuits.models import Circuit -from dcim import constants, filters +from dcim import filters from dcim.models import ( Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate, @@ -28,7 +28,6 @@ from ipam.models import Prefix, VLAN from utilities.api import ( get_serializer_for_model, IsAuthenticatedOrLoginNotRequired, FieldChoicesViewSet, ModelViewSet, ServiceUnavailable, ) -from utilities.custom_inspectors import NullablePaginatorInspector from utilities.utils import get_subquery from virtualization.models import VirtualMachine from . import serializers @@ -41,26 +40,26 @@ from .exceptions import MissingFilterException class DCIMFieldChoicesViewSet(FieldChoicesViewSet): fields = ( - (Cable, ['length_unit', 'status', 'termination_a_type', 'termination_b_type', 'type']), - (ConsolePort, ['type', 'connection_status']), - (ConsolePortTemplate, ['type']), - (ConsoleServerPort, ['type']), - (ConsoleServerPortTemplate, ['type']), - (Device, ['face', 'status']), - (DeviceType, ['subdevice_role']), - (FrontPort, ['type']), - (FrontPortTemplate, ['type']), - (Interface, ['type', 'mode']), - (InterfaceTemplate, ['type']), - (PowerFeed, ['phase', 'status', 'supply', 'type']), - (PowerOutlet, ['type', 'feed_leg']), - (PowerOutletTemplate, ['type', 'feed_leg']), - (PowerPort, ['type', 'connection_status']), - (PowerPortTemplate, ['type']), - (Rack, ['outer_unit', 'status', 'type', 'width']), - (RearPort, ['type']), - (RearPortTemplate, ['type']), - (Site, ['status']), + (serializers.CableSerializer, ['length_unit', 'status', 'termination_a_type', 'termination_b_type', 'type']), + (serializers.ConsolePortSerializer, ['type', 'connection_status']), + (serializers.ConsolePortTemplateSerializer, ['type']), + (serializers.ConsoleServerPortSerializer, ['type']), + (serializers.ConsoleServerPortTemplateSerializer, ['type']), + (serializers.DeviceSerializer, ['face', 'status']), + (serializers.DeviceTypeSerializer, ['subdevice_role']), + (serializers.FrontPortSerializer, ['type']), + (serializers.FrontPortTemplateSerializer, ['type']), + (serializers.InterfaceSerializer, ['type', 'mode']), + (serializers.InterfaceTemplateSerializer, ['type']), + (serializers.PowerFeedSerializer, ['phase', 'status', 'supply', 'type']), + (serializers.PowerOutletSerializer, ['type', 'feed_leg']), + (serializers.PowerOutletTemplateSerializer, ['type', 'feed_leg']), + (serializers.PowerPortSerializer, ['type', 'connection_status']), + (serializers.PowerPortTemplateSerializer, ['type']), + (serializers.RackSerializer, ['outer_unit', 'status', 'type', 'width']), + (serializers.RearPortSerializer, ['type']), + (serializers.RearPortTemplateSerializer, ['type']), + (serializers.SiteSerializer, ['status']), ) diff --git a/netbox/extras/api/views.py b/netbox/extras/api/views.py index aa1917f39..167768861 100644 --- a/netbox/extras/api/views.py +++ b/netbox/extras/api/views.py @@ -25,9 +25,9 @@ from . import serializers class ExtrasFieldChoicesViewSet(FieldChoicesViewSet): fields = ( - (ExportTemplate, ['template_language']), - (Graph, ['type', 'template_language']), - (ObjectChange, ['action']), + (serializers.ExportTemplateSerializer, ['template_language']), + (serializers.GraphSerializer, ['type', 'template_language']), + (serializers.ObjectChangeSerializer, ['action']), ) diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index 666a599a5..08e21367c 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -20,11 +20,11 @@ from . import serializers class IPAMFieldChoicesViewSet(FieldChoicesViewSet): fields = ( - (Aggregate, ['family']), - (Prefix, ['family', 'status']), - (IPAddress, ['family', 'status', 'role']), - (VLAN, ['status']), - (Service, ['protocol']), + (serializers.AggregateSerializer, ['family']), + (serializers.PrefixSerializer, ['family', 'status']), + (serializers.IPAddressSerializer, ['family', 'status', 'role']), + (serializers.VLANSerializer, ['status']), + (serializers.ServiceSerializer, ['protocol']), ) diff --git a/netbox/utilities/api.py b/netbox/utilities/api.py index 0447d9cb0..7c37a5b20 100644 --- a/netbox/utilities/api.py +++ b/netbox/utilities/api.py @@ -329,13 +329,12 @@ class FieldChoicesViewSet(ViewSet): # Compile a dict of all fields in this view self._fields = OrderedDict() - for cls, field_list in self.fields: + for serializer_class, field_list in self.fields: for field_name in field_list: - model_name = cls._meta.verbose_name.lower().replace(' ', '-') - key = ':'.join([model_name, field_name]) - - serializer = get_serializer_for_model(cls)() + model_name = serializer_class.Meta.model._meta.verbose_name + key = ':'.join([model_name.lower().replace(' ', '-'), field_name]) + serializer = serializer_class() choices = [] for k, v in serializer.get_fields()[field_name].choices.items(): diff --git a/netbox/virtualization/api/views.py b/netbox/virtualization/api/views.py index a45dd6567..415fc6289 100644 --- a/netbox/virtualization/api/views.py +++ b/netbox/virtualization/api/views.py @@ -15,7 +15,8 @@ from . import serializers class VirtualizationFieldChoicesViewSet(FieldChoicesViewSet): fields = ( - (VirtualMachine, ['status']), + (serializers.VirtualMachineSerializer, ['status']), + (serializers.InterfaceSerializer, ['type']), )