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:
@ -1,7 +1,7 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from circuits.models import Provider, Circuit, CircuitTermination, CircuitType
|
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 extras.api.serializers import CustomFieldSerializer
|
||||||
from tenancy.api.serializers import NestedTenantSerializer
|
from tenancy.api.serializers import NestedTenantSerializer
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ class NestedCircuitTypeSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
|
|
||||||
class CircuitTerminationSerializer(serializers.ModelSerializer):
|
class CircuitTerminationSerializer(serializers.ModelSerializer):
|
||||||
site = NestedSiteSerializer()
|
site = NestedSiteSerializer()
|
||||||
interface = ChildInterfaceSerializer()
|
interface = DeviceInterfaceSerializer()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = CircuitTermination
|
model = CircuitTermination
|
||||||
|
@ -313,7 +313,7 @@ class ConsoleServerPortSerializer(serializers.ModelSerializer):
|
|||||||
fields = ['id', 'device', 'name', 'connected_console']
|
fields = ['id', 'device', 'name', 'connected_console']
|
||||||
|
|
||||||
|
|
||||||
class ChildConsoleServerPortSerializer(serializers.HyperlinkedModelSerializer):
|
class DeviceConsoleServerPortSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ConsoleServerPort
|
model = ConsoleServerPort
|
||||||
@ -333,7 +333,7 @@ class ConsolePortSerializer(serializers.ModelSerializer):
|
|||||||
fields = ['id', 'device', 'name', 'cs_port', 'connection_status']
|
fields = ['id', 'device', 'name', 'cs_port', 'connection_status']
|
||||||
|
|
||||||
|
|
||||||
class ChildConsolePortSerializer(serializers.HyperlinkedModelSerializer):
|
class DeviceConsolePortSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ConsolePort
|
model = ConsolePort
|
||||||
@ -352,7 +352,7 @@ class PowerOutletSerializer(serializers.ModelSerializer):
|
|||||||
fields = ['id', 'device', 'name', 'connected_port']
|
fields = ['id', 'device', 'name', 'connected_port']
|
||||||
|
|
||||||
|
|
||||||
class ChildPowerOutletSerializer(serializers.HyperlinkedModelSerializer):
|
class DevicePowerOutletSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PowerOutlet
|
model = PowerOutlet
|
||||||
@ -372,7 +372,7 @@ class PowerPortSerializer(serializers.ModelSerializer):
|
|||||||
fields = ['id', 'device', 'name', 'power_outlet', 'connection_status']
|
fields = ['id', 'device', 'name', 'power_outlet', 'connection_status']
|
||||||
|
|
||||||
|
|
||||||
class ChildPowerPortSerializer(serializers.HyperlinkedModelSerializer):
|
class DevicePowerPortSerializer(serializers.HyperlinkedModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PowerPort
|
model = PowerPort
|
||||||
@ -383,31 +383,70 @@ class ChildPowerPortSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
# Interfaces
|
# Interfaces
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
class InterfaceSerializer(serializers.ModelSerializer):
|
class InterfaceSerializer(serializers.ModelSerializer):
|
||||||
device = NestedDeviceSerializer()
|
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:
|
class Meta:
|
||||||
model = Interface
|
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 = [
|
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',
|
'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
|
# Device bays
|
||||||
@ -447,14 +486,3 @@ class ChildModuleSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Module
|
model = Module
|
||||||
fields = ['id', 'url', 'parent', 'name', 'manufacturer', 'part_id', 'serial', 'discovered']
|
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']
|
|
||||||
|
@ -151,7 +151,7 @@ class ConsolePortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
|
|||||||
|
|
||||||
|
|
||||||
class ChildConsolePortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
|
class ChildConsolePortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
|
||||||
serializer_class = serializers.ChildConsolePortSerializer
|
serializer_class = serializers.DeviceConsolePortSerializer
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
device = get_object_or_404(Device, pk=self.kwargs['pk'])
|
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):
|
class ChildConsoleServerPortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
|
||||||
serializer_class = serializers.ChildConsoleServerPortSerializer
|
serializer_class = serializers.DeviceConsoleServerPortSerializer
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
device = get_object_or_404(Device, pk=self.kwargs['pk'])
|
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):
|
class ChildPowerPortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
|
||||||
serializer_class = serializers.ChildPowerPortSerializer
|
serializer_class = serializers.DevicePowerPortSerializer
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
device = get_object_or_404(Device, pk=self.kwargs['pk'])
|
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):
|
class ChildPowerOutletViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
|
||||||
serializer_class = serializers.ChildPowerOutletSerializer
|
serializer_class = serializers.DevicePowerOutletSerializer
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
device = get_object_or_404(Device, pk=self.kwargs['pk'])
|
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,
|
class InterfaceViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, WritableSerializerMixin,
|
||||||
GenericViewSet):
|
GenericViewSet):
|
||||||
queryset = Interface.objects.select_related('device')
|
queryset = Interface.objects.select_related('device')
|
||||||
serializer_class = serializers.InterfaceDetailSerializer
|
serializer_class = serializers.InterfaceSerializer
|
||||||
|
|
||||||
|
|
||||||
class ChildInterfaceViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
|
class ChildInterfaceViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
|
||||||
serializer_class = serializers.ChildInterfaceSerializer
|
serializer_class = serializers.DeviceInterfaceSerializer
|
||||||
filter_class = filters.InterfaceFilter
|
filter_class = filters.InterfaceFilter
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
@ -380,7 +380,7 @@ class RelatedConnectionsView(APIView):
|
|||||||
interfaces = Interface.objects.order_naturally(device.device_type.interface_ordering).filter(device=device)\
|
interfaces = Interface.objects.order_naturally(device.device_type.interface_ordering).filter(device=device)\
|
||||||
.select_related('connected_as_a', 'connected_as_b', 'circuit_termination')
|
.select_related('connected_as_a', 'connected_as_b', 'circuit_termination')
|
||||||
for iface in interfaces:
|
for iface in interfaces:
|
||||||
data = serializers.InterfaceDetailSerializer(instance=iface).data
|
data = serializers.InterfaceSerializer(instance=iface).data
|
||||||
del(data['device'])
|
del(data['device'])
|
||||||
response['interfaces'].append(data)
|
response['interfaces'].append(data)
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from rest_framework import serializers
|
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 extras.api.serializers import CustomFieldSerializer
|
||||||
from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
|
from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
|
||||||
from tenancy.api.serializers import NestedTenantSerializer
|
from tenancy.api.serializers import NestedTenantSerializer
|
||||||
@ -158,7 +158,7 @@ class NestedPrefixSerializer(serializers.HyperlinkedModelSerializer):
|
|||||||
class IPAddressSerializer(CustomFieldSerializer, serializers.ModelSerializer):
|
class IPAddressSerializer(CustomFieldSerializer, serializers.ModelSerializer):
|
||||||
vrf = NestedVRFSerializer()
|
vrf = NestedVRFSerializer()
|
||||||
tenant = NestedTenantSerializer()
|
tenant = NestedTenantSerializer()
|
||||||
interface = ChildInterfaceSerializer()
|
interface = DeviceInterfaceSerializer()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = IPAddress
|
model = IPAddress
|
||||||
|
Reference in New Issue
Block a user