mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Closes #1269: Added circuit termination to interface serializer
This commit is contained in:
@ -5,6 +5,7 @@ from rest_framework import serializers
|
|||||||
from rest_framework.validators import UniqueTogetherValidator
|
from rest_framework.validators import UniqueTogetherValidator
|
||||||
|
|
||||||
from ipam.models import IPAddress
|
from ipam.models import IPAddress
|
||||||
|
from circuits.models import Circuit, CircuitTermination
|
||||||
from dcim.models import (
|
from dcim.models import (
|
||||||
CONNECTION_STATUS_CHOICES, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device,
|
CONNECTION_STATUS_CHOICES, ConsolePort, ConsolePortTemplate, ConsoleServerPort, ConsoleServerPortTemplate, Device,
|
||||||
DeviceBay, DeviceBayTemplate, DeviceType, DeviceRole, IFACE_FF_CHOICES, IFACE_ORDERING_CHOICES, Interface,
|
DeviceBay, DeviceBayTemplate, DeviceType, DeviceRole, IFACE_FF_CHOICES, IFACE_ORDERING_CHOICES, Interface,
|
||||||
@ -598,32 +599,59 @@ class NestedInterfaceSerializer(serializers.ModelSerializer):
|
|||||||
fields = ['id', 'url', 'name']
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceNestedCircuitSerializer(serializers.ModelSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Circuit
|
||||||
|
fields = ['id', 'url', 'cid']
|
||||||
|
|
||||||
|
|
||||||
|
class InterfaceCircuitTerminationSerializer(serializers.ModelSerializer):
|
||||||
|
circuit = InterfaceNestedCircuitSerializer()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = CircuitTermination
|
||||||
|
fields = [
|
||||||
|
'id', 'circuit', 'term_side', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class InterfaceSerializer(serializers.ModelSerializer):
|
class InterfaceSerializer(serializers.ModelSerializer):
|
||||||
device = NestedDeviceSerializer()
|
device = NestedDeviceSerializer()
|
||||||
form_factor = ChoiceFieldSerializer(choices=IFACE_FF_CHOICES)
|
form_factor = ChoiceFieldSerializer(choices=IFACE_FF_CHOICES)
|
||||||
lag = NestedInterfaceSerializer()
|
lag = NestedInterfaceSerializer()
|
||||||
is_connected = serializers.SerializerMethodField(read_only=True)
|
is_connected = serializers.SerializerMethodField(read_only=True)
|
||||||
connection = serializers.SerializerMethodField(read_only=True)
|
interface_connection = serializers.SerializerMethodField(read_only=True)
|
||||||
|
circuit_termination = InterfaceCircuitTerminationSerializer()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Interface
|
model = Interface
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'device', 'name', 'form_factor', 'enabled', 'lag', 'mtu', 'mac_address', 'mgmt_only', 'description',
|
'id', 'device', 'name', 'form_factor', 'enabled', 'lag', 'mtu', 'mac_address', 'mgmt_only', 'description',
|
||||||
'is_connected', 'connection',
|
'is_connected', 'interface_connection', 'circuit_termination',
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_is_connected(self, obj):
|
def get_is_connected(self, obj):
|
||||||
return bool(obj.connection)
|
"""
|
||||||
|
Return True if the interface has a connected interface or circuit termination.
|
||||||
def get_connection(self, obj):
|
"""
|
||||||
data = OrderedDict((
|
|
||||||
('interface', None),
|
|
||||||
('status', None),
|
|
||||||
))
|
|
||||||
if obj.connection:
|
if obj.connection:
|
||||||
data['interface'] = PeerInterfaceSerializer(obj.connected_interface, context=self.context).data
|
return True
|
||||||
data['status'] = obj.connection.connection_status
|
try:
|
||||||
return data
|
circuit_termination = obj.circuit_termination
|
||||||
|
return True
|
||||||
|
except CircuitTermination.DoesNotExist:
|
||||||
|
pass
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_interface_connection(self, obj):
|
||||||
|
if obj.connection:
|
||||||
|
return OrderedDict((
|
||||||
|
('interface', PeerInterfaceSerializer(obj.connected_interface, context=self.context).data),
|
||||||
|
('status', obj.connection.connection_status),
|
||||||
|
))
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class PeerInterfaceSerializer(serializers.ModelSerializer):
|
class PeerInterfaceSerializer(serializers.ModelSerializer):
|
||||||
|
Reference in New Issue
Block a user