1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Re-implemented interface/connection serializers

This commit is contained in:
Jeremy Stretch
2017-01-30 15:35:01 -05:00
parent 78cd4481e4
commit f0fef94a4f
4 changed files with 70 additions and 42 deletions

View File

@ -1,7 +1,7 @@
from rest_framework import serializers
from circuits.models import Provider, Circuit, CircuitTermination, CircuitType
from dcim.api.serializers import NestedSiteSerializer, ChildInterfaceSerializer
from dcim.api.serializers import NestedSiteSerializer, DeviceInterfaceSerializer
from extras.api.serializers import CustomFieldSerializer
from tenancy.api.serializers import NestedTenantSerializer
@ -51,7 +51,7 @@ class NestedCircuitTypeSerializer(serializers.HyperlinkedModelSerializer):
class CircuitTerminationSerializer(serializers.ModelSerializer):
site = NestedSiteSerializer()
interface = ChildInterfaceSerializer()
interface = DeviceInterfaceSerializer()
class Meta:
model = CircuitTermination

View File

@ -313,7 +313,7 @@ class ConsoleServerPortSerializer(serializers.ModelSerializer):
fields = ['id', 'device', 'name', 'connected_console']
class ChildConsoleServerPortSerializer(serializers.HyperlinkedModelSerializer):
class DeviceConsoleServerPortSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ConsoleServerPort
@ -333,7 +333,7 @@ class ConsolePortSerializer(serializers.ModelSerializer):
fields = ['id', 'device', 'name', 'cs_port', 'connection_status']
class ChildConsolePortSerializer(serializers.HyperlinkedModelSerializer):
class DeviceConsolePortSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ConsolePort
@ -352,7 +352,7 @@ class PowerOutletSerializer(serializers.ModelSerializer):
fields = ['id', 'device', 'name', 'connected_port']
class ChildPowerOutletSerializer(serializers.HyperlinkedModelSerializer):
class DevicePowerOutletSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = PowerOutlet
@ -372,7 +372,7 @@ class PowerPortSerializer(serializers.ModelSerializer):
fields = ['id', 'device', 'name', 'power_outlet', 'connection_status']
class ChildPowerPortSerializer(serializers.HyperlinkedModelSerializer):
class DevicePowerPortSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = PowerPort
@ -383,31 +383,70 @@ class ChildPowerPortSerializer(serializers.HyperlinkedModelSerializer):
# Interfaces
#
class InterfaceSerializer(serializers.ModelSerializer):
device = NestedDeviceSerializer()
form_factor = serializers.ReadOnlyField(source='get_form_factor_display')
connection = serializers.SerializerMethodField(read_only=True)
connected_interface = serializers.SerializerMethodField(read_only=True)
class Meta:
model = Interface
fields = ['id', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description', 'is_connected']
class ChildInterfaceSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Interface
fields = ['id', 'url', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description', 'is_connected']
# TODO: Remove this
class InterfaceDetailSerializer(InterfaceSerializer):
class Meta(InterfaceSerializer.Meta):
fields = [
'id', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description', 'is_connected',
'id', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description', 'connection',
'connected_interface',
]
def get_connection(self, obj):
if obj.connection:
return NestedInterfaceConnectionSerializer(obj.connection, context=self.context).data
return None
def get_connected_interface(self, obj):
if obj.connected_interface:
return PeerInterfaceSerializer(obj.connected_interface, context=self.context).data
return None
class PeerInterfaceSerializer(serializers.HyperlinkedModelSerializer):
device = NestedDeviceSerializer()
class Meta:
model = Interface
fields = ['id', 'url', 'device', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description']
class DeviceInterfaceSerializer(serializers.HyperlinkedModelSerializer):
connection = serializers.SerializerMethodField()
class Meta:
model = Interface
fields = ['id', 'url', 'name', 'form_factor', 'mac_address', 'mgmt_only', 'description', 'connection']
def get_connection(self, obj):
if obj.connection:
return NestedInterfaceConnectionSerializer(obj.connection, context=self.context).data
return None
#
# Interface connections
#
class InterfaceConnectionSerializer(serializers.ModelSerializer):
interface_a = PeerInterfaceSerializer()
interface_b = PeerInterfaceSerializer()
class Meta:
model = InterfaceConnection
fields = ['id', 'interface_a', 'interface_b', 'connection_status']
class NestedInterfaceConnectionSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = InterfaceConnection
fields = ['id', 'url', 'connection_status']
#
# Device bays
@ -447,14 +486,3 @@ class ChildModuleSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Module
fields = ['id', 'url', 'parent', 'name', 'manufacturer', 'part_id', 'serial', 'discovered']
#
# Interface connections
#
class InterfaceConnectionSerializer(serializers.ModelSerializer):
class Meta:
model = InterfaceConnection
fields = ['id', 'interface_a', 'interface_b', 'connection_status']

View File

@ -151,7 +151,7 @@ class ConsolePortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
class ChildConsolePortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
serializer_class = serializers.ChildConsolePortSerializer
serializer_class = serializers.DeviceConsolePortSerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
@ -169,7 +169,7 @@ class ConsoleServerPortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyMode
class ChildConsoleServerPortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
serializer_class = serializers.ChildConsoleServerPortSerializer
serializer_class = serializers.DeviceConsoleServerPortSerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
@ -187,7 +187,7 @@ class PowerPortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin,
class ChildPowerPortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
serializer_class = serializers.ChildPowerPortSerializer
serializer_class = serializers.DevicePowerPortSerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
@ -205,7 +205,7 @@ class PowerOutletViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
class ChildPowerOutletViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
serializer_class = serializers.ChildPowerOutletSerializer
serializer_class = serializers.DevicePowerOutletSerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
@ -219,11 +219,11 @@ class ChildPowerOutletViewSet(CreateModelMixin, ListModelMixin, WritableSerializ
class InterfaceViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, WritableSerializerMixin,
GenericViewSet):
queryset = Interface.objects.select_related('device')
serializer_class = serializers.InterfaceDetailSerializer
serializer_class = serializers.InterfaceSerializer
class ChildInterfaceViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
serializer_class = serializers.ChildInterfaceSerializer
serializer_class = serializers.DeviceInterfaceSerializer
filter_class = filters.InterfaceFilter
def get_queryset(self):
@ -380,7 +380,7 @@ class RelatedConnectionsView(APIView):
interfaces = Interface.objects.order_naturally(device.device_type.interface_ordering).filter(device=device)\
.select_related('connected_as_a', 'connected_as_b', 'circuit_termination')
for iface in interfaces:
data = serializers.InterfaceDetailSerializer(instance=iface).data
data = serializers.InterfaceSerializer(instance=iface).data
del(data['device'])
response['interfaces'].append(data)

View File

@ -1,6 +1,6 @@
from rest_framework import serializers
from dcim.api.serializers import NestedDeviceSerializer, ChildInterfaceSerializer, NestedSiteSerializer
from dcim.api.serializers import NestedDeviceSerializer, DeviceInterfaceSerializer, NestedSiteSerializer
from extras.api.serializers import CustomFieldSerializer
from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
from tenancy.api.serializers import NestedTenantSerializer
@ -158,7 +158,7 @@ class NestedPrefixSerializer(serializers.HyperlinkedModelSerializer):
class IPAddressSerializer(CustomFieldSerializer, serializers.ModelSerializer):
vrf = NestedVRFSerializer()
tenant = NestedTenantSerializer()
interface = ChildInterfaceSerializer()
interface = DeviceInterfaceSerializer()
class Meta:
model = IPAddress