Refactor FieldChoicesViewSet; add Interface.type to virtualization _choices endpoint

This commit is contained in:
Jeremy Stretch 2020-01-15 09:59:44 -05:00
parent deec10efe7
commit 49f027fae7
6 changed files with 39 additions and 40 deletions

View File

@ -18,8 +18,8 @@ from . import serializers
class CircuitsFieldChoicesViewSet(FieldChoicesViewSet): class CircuitsFieldChoicesViewSet(FieldChoicesViewSet):
fields = ( fields = (
(Circuit, ['status']), (serializers.CircuitSerializer, ['status']),
(CircuitTermination, ['term_side']), (serializers.CircuitTerminationSerializer, ['term_side']),
) )

View File

@ -2,8 +2,8 @@ from collections import OrderedDict
from django.conf import settings from django.conf import settings
from django.db.models import Count, F from django.db.models import Count, F
from django.http import HttpResponseForbidden, HttpResponseBadRequest, HttpResponse from django.http import HttpResponseForbidden, HttpResponse
from django.shortcuts import get_object_or_404, reverse from django.shortcuts import get_object_or_404
from drf_yasg import openapi from drf_yasg import openapi
from drf_yasg.openapi import Parameter from drf_yasg.openapi import Parameter
from drf_yasg.utils import swagger_auto_schema 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 rest_framework.viewsets import GenericViewSet, ViewSet
from circuits.models import Circuit from circuits.models import Circuit
from dcim import constants, filters from dcim import filters
from dcim.models import ( from dcim.models import (
Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay, Cable, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device, DeviceBay,
DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate, DeviceBayTemplate, DeviceRole, DeviceType, FrontPort, FrontPortTemplate, Interface, InterfaceTemplate,
@ -28,7 +28,6 @@ from ipam.models import Prefix, VLAN
from utilities.api import ( from utilities.api import (
get_serializer_for_model, IsAuthenticatedOrLoginNotRequired, FieldChoicesViewSet, ModelViewSet, ServiceUnavailable, get_serializer_for_model, IsAuthenticatedOrLoginNotRequired, FieldChoicesViewSet, ModelViewSet, ServiceUnavailable,
) )
from utilities.custom_inspectors import NullablePaginatorInspector
from utilities.utils import get_subquery from utilities.utils import get_subquery
from virtualization.models import VirtualMachine from virtualization.models import VirtualMachine
from . import serializers from . import serializers
@ -41,26 +40,26 @@ from .exceptions import MissingFilterException
class DCIMFieldChoicesViewSet(FieldChoicesViewSet): class DCIMFieldChoicesViewSet(FieldChoicesViewSet):
fields = ( fields = (
(Cable, ['length_unit', 'status', 'termination_a_type', 'termination_b_type', 'type']), (serializers.CableSerializer, ['length_unit', 'status', 'termination_a_type', 'termination_b_type', 'type']),
(ConsolePort, ['type', 'connection_status']), (serializers.ConsolePortSerializer, ['type', 'connection_status']),
(ConsolePortTemplate, ['type']), (serializers.ConsolePortTemplateSerializer, ['type']),
(ConsoleServerPort, ['type']), (serializers.ConsoleServerPortSerializer, ['type']),
(ConsoleServerPortTemplate, ['type']), (serializers.ConsoleServerPortTemplateSerializer, ['type']),
(Device, ['face', 'status']), (serializers.DeviceSerializer, ['face', 'status']),
(DeviceType, ['subdevice_role']), (serializers.DeviceTypeSerializer, ['subdevice_role']),
(FrontPort, ['type']), (serializers.FrontPortSerializer, ['type']),
(FrontPortTemplate, ['type']), (serializers.FrontPortTemplateSerializer, ['type']),
(Interface, ['type', 'mode']), (serializers.InterfaceSerializer, ['type', 'mode']),
(InterfaceTemplate, ['type']), (serializers.InterfaceTemplateSerializer, ['type']),
(PowerFeed, ['phase', 'status', 'supply', 'type']), (serializers.PowerFeedSerializer, ['phase', 'status', 'supply', 'type']),
(PowerOutlet, ['type', 'feed_leg']), (serializers.PowerOutletSerializer, ['type', 'feed_leg']),
(PowerOutletTemplate, ['type', 'feed_leg']), (serializers.PowerOutletTemplateSerializer, ['type', 'feed_leg']),
(PowerPort, ['type', 'connection_status']), (serializers.PowerPortSerializer, ['type', 'connection_status']),
(PowerPortTemplate, ['type']), (serializers.PowerPortTemplateSerializer, ['type']),
(Rack, ['outer_unit', 'status', 'type', 'width']), (serializers.RackSerializer, ['outer_unit', 'status', 'type', 'width']),
(RearPort, ['type']), (serializers.RearPortSerializer, ['type']),
(RearPortTemplate, ['type']), (serializers.RearPortTemplateSerializer, ['type']),
(Site, ['status']), (serializers.SiteSerializer, ['status']),
) )

View File

@ -25,9 +25,9 @@ from . import serializers
class ExtrasFieldChoicesViewSet(FieldChoicesViewSet): class ExtrasFieldChoicesViewSet(FieldChoicesViewSet):
fields = ( fields = (
(ExportTemplate, ['template_language']), (serializers.ExportTemplateSerializer, ['template_language']),
(Graph, ['type', 'template_language']), (serializers.GraphSerializer, ['type', 'template_language']),
(ObjectChange, ['action']), (serializers.ObjectChangeSerializer, ['action']),
) )

View File

@ -20,11 +20,11 @@ from . import serializers
class IPAMFieldChoicesViewSet(FieldChoicesViewSet): class IPAMFieldChoicesViewSet(FieldChoicesViewSet):
fields = ( fields = (
(Aggregate, ['family']), (serializers.AggregateSerializer, ['family']),
(Prefix, ['family', 'status']), (serializers.PrefixSerializer, ['family', 'status']),
(IPAddress, ['family', 'status', 'role']), (serializers.IPAddressSerializer, ['family', 'status', 'role']),
(VLAN, ['status']), (serializers.VLANSerializer, ['status']),
(Service, ['protocol']), (serializers.ServiceSerializer, ['protocol']),
) )

View File

@ -329,13 +329,12 @@ class FieldChoicesViewSet(ViewSet):
# Compile a dict of all fields in this view # Compile a dict of all fields in this view
self._fields = OrderedDict() self._fields = OrderedDict()
for cls, field_list in self.fields: for serializer_class, field_list in self.fields:
for field_name in field_list: for field_name in field_list:
model_name = cls._meta.verbose_name.lower().replace(' ', '-') model_name = serializer_class.Meta.model._meta.verbose_name
key = ':'.join([model_name, field_name]) key = ':'.join([model_name.lower().replace(' ', '-'), field_name])
serializer = serializer_class()
serializer = get_serializer_for_model(cls)()
choices = [] choices = []
for k, v in serializer.get_fields()[field_name].choices.items(): for k, v in serializer.get_fields()[field_name].choices.items():

View File

@ -15,7 +15,8 @@ from . import serializers
class VirtualizationFieldChoicesViewSet(FieldChoicesViewSet): class VirtualizationFieldChoicesViewSet(FieldChoicesViewSet):
fields = ( fields = (
(VirtualMachine, ['status']), (serializers.VirtualMachineSerializer, ['status']),
(serializers.InterfaceSerializer, ['type']),
) )