mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Cleanup for #9102
This commit is contained in:
@@ -52,16 +52,13 @@ class CabledObjectSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
Return the appropriate serializer for the link termination model.
|
||||
"""
|
||||
if not obj.cable:
|
||||
if not obj.link_peers:
|
||||
return []
|
||||
|
||||
# Return serialized peer termination objects
|
||||
if obj.link_peers:
|
||||
serializer = get_serializer_for_model(obj.link_peers[0], prefix='Nested')
|
||||
context = {'request': self.context['request']}
|
||||
return serializer(obj.link_peers, context=context, many=True).data
|
||||
|
||||
return []
|
||||
serializer = get_serializer_for_model(obj.link_peers[0], prefix='Nested')
|
||||
context = {'request': self.context['request']}
|
||||
return serializer(obj.link_peers, context=context, many=True).data
|
||||
|
||||
@swagger_serializer_method(serializer_or_field=serializers.BooleanField)
|
||||
def get__occupied(self, obj):
|
||||
@@ -77,8 +74,7 @@ class ConnectedEndpointsSerializer(serializers.ModelSerializer):
|
||||
connected_endpoints_reachable = serializers.SerializerMethodField(read_only=True)
|
||||
|
||||
def get_connected_endpoints_type(self, obj):
|
||||
endpoints = obj.connected_endpoints
|
||||
if endpoints:
|
||||
if endpoints := obj.connected_endpoints:
|
||||
return f'{endpoints[0]._meta.app_label}.{endpoints[0]._meta.model_name}'
|
||||
|
||||
@swagger_serializer_method(serializer_or_field=serializers.ListField)
|
||||
@@ -86,8 +82,7 @@ class ConnectedEndpointsSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
Return the appropriate serializer for the type of connected object.
|
||||
"""
|
||||
endpoints = obj.connected_endpoints
|
||||
if endpoints:
|
||||
if endpoints := obj.connected_endpoints:
|
||||
serializer = get_serializer_for_model(endpoints[0], prefix='Nested')
|
||||
context = {'request': self.context['request']}
|
||||
return serializer(endpoints, many=True, context=context).data
|
||||
@@ -1016,15 +1011,15 @@ class CableSerializer(NetBoxModelSerializer):
|
||||
]
|
||||
|
||||
def _get_terminations_type(self, obj, side):
|
||||
assert side.lower() in ('a', 'b')
|
||||
terms = [t.termination for t in obj.terminations.all() if t.cable_end == side.upper()]
|
||||
assert side in CableEndChoices.values()
|
||||
terms = getattr(obj, f'get_{side.lower()}_terminations')()
|
||||
if terms:
|
||||
ct = ContentType.objects.get_for_model(terms[0])
|
||||
return f"{ct.app_label}.{ct.model}"
|
||||
|
||||
def _get_terminations(self, obj, side):
|
||||
assert side.lower() in ('a', 'b')
|
||||
terms = [t.termination for t in obj.terminations.all() if t.cable_end == side.upper()]
|
||||
assert side in CableEndChoices.values()
|
||||
terms = getattr(obj, f'get_{side.lower()}_terminations')()
|
||||
if not terms:
|
||||
return []
|
||||
|
||||
@@ -1037,19 +1032,19 @@ class CableSerializer(NetBoxModelSerializer):
|
||||
|
||||
@swagger_serializer_method(serializer_or_field=serializers.CharField)
|
||||
def get_a_terminations_type(self, obj):
|
||||
return self._get_terminations_type(obj, 'a')
|
||||
return self._get_terminations_type(obj, CableEndChoices.SIDE_A)
|
||||
|
||||
@swagger_serializer_method(serializer_or_field=serializers.CharField)
|
||||
def get_b_terminations_type(self, obj):
|
||||
return self._get_terminations_type(obj, 'b')
|
||||
return self._get_terminations_type(obj, CableEndChoices.SIDE_B)
|
||||
|
||||
@swagger_serializer_method(serializer_or_field=serializers.DictField)
|
||||
def get_a_terminations(self, obj):
|
||||
return self._get_terminations(obj, 'a')
|
||||
return self._get_terminations(obj, CableEndChoices.SIDE_A)
|
||||
|
||||
@swagger_serializer_method(serializer_or_field=serializers.DictField)
|
||||
def get_b_terminations(self, obj):
|
||||
return self._get_terminations(obj, 'b')
|
||||
return self._get_terminations(obj, CableEndChoices.SIDE_B)
|
||||
|
||||
|
||||
class TracedCableSerializer(serializers.ModelSerializer):
|
||||
@@ -1066,7 +1061,7 @@ class TracedCableSerializer(serializers.ModelSerializer):
|
||||
|
||||
|
||||
class CableTerminationSerializer(NetBoxModelSerializer):
|
||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:cable-detail')
|
||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:cabletermination-detail')
|
||||
termination_type = ContentTypeField(
|
||||
queryset=ContentType.objects.filter(CABLE_TERMINATION_MODELS)
|
||||
)
|
||||
|
||||
@@ -15,6 +15,7 @@ from circuits.models import Circuit
|
||||
from dcim import filtersets
|
||||
from dcim.constants import CABLE_TRACE_SVG_DEFAULT_WIDTH
|
||||
from dcim.models import *
|
||||
from dcim.svg import CableTraceSVG
|
||||
from extras.api.views import ConfigContextQuerySetMixin
|
||||
from ipam.models import Prefix, VLAN
|
||||
from netbox.api.authentication import IsAuthenticatedOrLoginNotRequired
|
||||
@@ -52,37 +53,30 @@ class PathEndpointMixin(object):
|
||||
# Initialize the path array
|
||||
path = []
|
||||
|
||||
# Render SVG image if requested
|
||||
if request.GET.get('render', None) == 'svg':
|
||||
# Render SVG
|
||||
try:
|
||||
width = int(request.GET.get('width', CABLE_TRACE_SVG_DEFAULT_WIDTH))
|
||||
except (ValueError, TypeError):
|
||||
width = CABLE_TRACE_SVG_DEFAULT_WIDTH
|
||||
drawing = obj.get_trace_svg(
|
||||
base_url=request.build_absolute_uri('/'),
|
||||
width=width
|
||||
)
|
||||
return HttpResponse(drawing.tostring(), content_type='image/svg+xml')
|
||||
drawing = CableTraceSVG(self, base_url=request.build_absolute_uri('/'), width=width)
|
||||
return HttpResponse(drawing.render().tostring(), content_type='image/svg+xml')
|
||||
|
||||
# Serialize path objects, iterating over each three-tuple in the path
|
||||
for near_end, cable, far_end in obj.trace():
|
||||
if near_end is None:
|
||||
# Split paths
|
||||
break
|
||||
|
||||
# Serialize each object
|
||||
serializer_a = get_serializer_for_model(near_end[0], prefix='Nested')
|
||||
x = serializer_a(near_end, many=True, context={'request': request}).data
|
||||
if cable is not None:
|
||||
y = serializers.TracedCableSerializer(cable[0], context={'request': request}).data
|
||||
if near_end is not None:
|
||||
serializer_a = get_serializer_for_model(near_end[0], prefix='Nested')
|
||||
near_end = serializer_a(near_end, many=True, context={'request': request}).data
|
||||
else:
|
||||
y = None
|
||||
# Path is split; stop here
|
||||
break
|
||||
if cable is not None:
|
||||
cable = serializers.TracedCableSerializer(cable[0], context={'request': request}).data
|
||||
if far_end is not None:
|
||||
serializer_b = get_serializer_for_model(far_end[0], prefix='Nested')
|
||||
z = serializer_b(far_end, many=True, context={'request': request}).data
|
||||
else:
|
||||
z = None
|
||||
far_end = serializer_b(far_end, many=True, context={'request': request}).data
|
||||
|
||||
path.append((x, y, z))
|
||||
path.append((near_end, cable, far_end))
|
||||
|
||||
return Response(path)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user