Fixes #359: Use standard serializers for related objects

This commit is contained in:
Jeremy Stretch 2016-07-21 14:48:02 -04:00
parent f44b20bbda
commit 275223ec53

View File

@ -419,53 +419,36 @@ class RelatedConnectionsView(APIView):
return Response() return Response()
else: else:
raise MissingFilterException(detail='Must specify search parameters (peer-device and peer-interface).') raise MissingFilterException(detail='Must specify search parameters "peer-device" and "peer-interface".')
# Initialize response skeleton # Initialize response skeleton
response = dict() response = {
response['device'] = serializers.DeviceSerializer(device).data 'device': serializers.DeviceSerializer(device).data,
response['console-ports'] = [] 'console-ports': [],
response['power-ports'] = [] 'power-ports': [],
response['interfaces'] = [] 'interfaces': [],
}
# Build console connections # Console connections
console_ports = ConsolePort.objects.filter(device=device).select_related('cs_port__device') console_ports = ConsolePort.objects.filter(device=device).select_related('cs_port__device')
for cp in console_ports: for cp in console_ports:
cp_info = dict() data = serializers.ConsolePortSerializer(instance=cp).data
cp_info['name'] = cp.name del(data['device'])
if cp.cs_port: response['console-ports'].append(data)
cp_info['console-server'] = cp.cs_port.device.name
cp_info['port'] = cp.cs_port.name
else:
cp_info['console-server'] = None
cp_info['port'] = None
response['console-ports'].append(cp_info)
# Build power connections # Power connections
power_ports = PowerPort.objects.filter(device=device).select_related('power_outlet__device') power_ports = PowerPort.objects.filter(device=device).select_related('power_outlet__device')
for pp in power_ports: for pp in power_ports:
pp_info = dict() data = serializers.PowerPortSerializer(instance=pp).data
pp_info['name'] = pp.name del(data['device'])
if pp.power_outlet: response['power-ports'].append(data)
pp_info['pdu'] = pp.power_outlet.device.name
pp_info['outlet'] = pp.power_outlet.name
else:
pp_info['pdu'] = None
pp_info['outlet'] = None
response['power-ports'].append(pp_info)
# Built interface connections # Interface connections
interfaces = Interface.objects.filter(device=device) interfaces = Interface.objects.filter(device=device).select_related('connected_as_a', 'connected_as_b',
'circuit')
for iface in interfaces: for iface in interfaces:
iface_info = dict() data = serializers.InterfaceDetailSerializer(instance=iface).data
iface_info['name'] = iface.name del(data['device'])
peer_interface = iface.get_connected_interface() response['interfaces'].append(data)
if peer_interface:
iface_info['device'] = peer_interface.device.name
iface_info['interface'] = peer_interface.name
else:
iface_info['device'] = None
iface_info['interface'] = None
response['interfaces'].append(iface_info)
return Response(response) return Response(response)