diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index fbca9f4e0..681d9d82d 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -52,8 +52,13 @@ class PathEndpointMixin(object): if request.GET.get('render', None) == 'svg': # Render SVG + try: + width = min(int(request.GET.get('width')), 1600) + except ValueError: + width = None drawing = obj.get_trace_svg( - base_url=request.build_absolute_uri('/') + base_url=request.build_absolute_uri('/'), + width=width ) return HttpResponse(drawing.tostring(), content_type='image/svg+xml') diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index 6e416e8f7..ff42a6e80 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -194,8 +194,11 @@ class PathEndpoint(models.Model): # Return the path as a list of three-tuples (A termination, cable, B termination) return list(zip(*[iter(path)] * 3)) - def get_trace_svg(self, base_url=None): - trace = CableTraceSVG(self, base_url=base_url) + def get_trace_svg(self, base_url=None, width=None): + if width is not None: + trace = CableTraceSVG(self, base_url=base_url, width=width) + else: + trace = CableTraceSVG(self, base_url=base_url) return trace.render() @property