Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closes #436 (and #122?): Add options to disable smooth cables and physics #488

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion netbox_topology_views/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,4 @@ class Meta:
class IndividualOptionsSerializer(NetBoxModelSerializer):
class Meta:
model = IndividualOptions
fields = ("ignore_cable_type", "save_coords", "show_unconnected", "show_cables", "show_logical_connections", "show_single_cable_logical_conns", "show_neighbors", "show_circuit", "show_power", "show_wireless", "group_sites", "group_locations", "group_racks", "draw_default_layout")
fields = ("ignore_cable_type", "save_coords", "show_unconnected", "show_cables", "show_logical_connections", "show_single_cable_logical_conns", "show_neighbors", "show_circuit", "show_power", "show_wireless", "group_sites", "group_locations", "group_racks", "draw_default_layout", "straight_cables")
4 changes: 3 additions & 1 deletion netbox_topology_views/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ def list(self, request):

if request.GET:

filter_id, save_coords, show_unconnected, show_power, show_circuit, show_logical_connections, show_single_cable_logical_conns, show_cables, show_wireless, group_sites, group_locations, group_racks,show_neighbors = get_query_settings(request)
filter_id, save_coords, show_unconnected, show_power, show_circuit, show_logical_connections, show_single_cable_logical_conns, show_cables, show_wireless, group_sites, group_locations, group_racks, show_neighbors, straight_cables = get_query_settings(request)

# Read options from saved filters as NetBox does not handle custom plugin filters
if "filter_id" in request.GET and request.GET["filter_id"] != '':
Expand All @@ -128,6 +128,7 @@ def list(self, request):
if group_locations == False and 'group_locations' in saved_filter_params: group_locations = saved_filter_params['group_locations']
if group_racks == False and 'group_racks' in saved_filter_params: group_racks = saved_filter_params['group_racks']
if show_neighbors == False and 'show_neighbors' in saved_filter_params: show_neighbors = saved_filter_params['show_neighbors']
if straight_cables == False and 'straight_cables' in saved_filter_params: show_neighbors = saved_filter_params['straight_cables']
except SavedFilter.DoesNotExist: # filter_id not found
pass
except Exception as inst:
Expand All @@ -153,6 +154,7 @@ def list(self, request):
group_locations=group_locations,
group_racks=group_racks,
group_id=group_id,
straight_cables=straight_cables,
)
xml_data = export_data_to_xml(topo_data).decode('utf-8')

Expand Down
21 changes: 18 additions & 3 deletions netbox_topology_views/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class DeviceFilterForm(
FieldSet(
'group', 'save_coords', 'show_unconnected', 'show_cables', 'show_logical_connections',
'show_single_cable_logical_conns', 'show_neighbors', 'show_circuit', 'show_power', 'show_wireless',
'group_sites', 'group_locations', 'group_racks', name=_("Options")
'group_sites', 'group_locations', 'group_racks', 'straight_cables', name=_("Options")
),
FieldSet('id', name=_("Device")),
FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', 'rack_id', name=_("Location")),
Expand Down Expand Up @@ -240,7 +240,7 @@ class DeviceFilterForm(
)
show_unconnected = forms.NullBooleanField(
label=_('Show Unconnected'),
required=False,
required=False,
initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
Expand Down Expand Up @@ -310,6 +310,12 @@ class DeviceFilterForm(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)
straight_cables = forms.BooleanField(
label=_('Straight Cables'), required=False, initial=False,
widget=forms.Select(
choices=BOOLEAN_WITH_BLANK_CHOICES
)
)

class CoordinateGroupsForm(NetBoxModelForm):
fieldsets = (
Expand Down Expand Up @@ -502,6 +508,7 @@ class IndividualOptionsForm(NetBoxModelForm):
'group_locations',
'group_racks',
'draw_default_layout',
'straight_cables',
dreng marked this conversation as resolved.
Show resolved Hide resolved
),
)

Expand Down Expand Up @@ -629,12 +636,20 @@ class IndividualOptionsForm(NetBoxModelForm):
help_text=_('Enable this option if you want to draw the topology on '
'the initial load (when you go to the topology plugin page).')
)
straight_cables = forms.BooleanField(
label=('Use Straight Cables'),
required=False,
initial=False,
help_text=_('Enable this option if you want to draw cables as straight lines '
'instead of curves.')
)

class Meta:
model = IndividualOptions
fields = [
'user_id', 'ignore_cable_type', 'preselected_device_roles', 'preselected_tags',
'save_coords', 'show_unconnected', 'show_cables', 'show_logical_connections',
'show_single_cable_logical_conns', 'show_neighbors', 'show_circuit', 'show_power',
'show_wireless', 'group_sites', 'group_locations', 'group_racks', 'draw_default_layout'
'show_wireless', 'group_sites', 'group_locations', 'group_racks', 'draw_default_layout',
'straight_cables'
]
18 changes: 18 additions & 0 deletions netbox_topology_views/migrations/0008_straight_cables.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.10 on 2024-04-29 14:37

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('netbox_topology_views', '0007_individualoptions_group_locations_and_more'),
]

operations = [
migrations.AddField(
model_name='individualoptions',
name='straight_cables',
field=models.BooleanField(default=False),
),
]
3 changes: 3 additions & 0 deletions netbox_topology_views/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,9 @@ class IndividualOptions(NetBoxModel):
draw_default_layout = models.BooleanField(
default=False
)
straight_cables = models.BooleanField(
default=False
)

_netbox_private = True

Expand Down
9 changes: 7 additions & 2 deletions netbox_topology_views/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,13 @@ def get_query_settings(request):
if "show_neighbors" in request.GET:
if request.GET["show_neighbors"] == "True" :
show_neighbors = True

return filter_id, save_coords, show_unconnected, show_power, show_circuit, show_logical_connections, show_single_cable_logical_conns, show_cables, show_wireless, group_sites, group_locations, group_racks, show_neighbors

straight_cables = False
if "straight_cables" in request.GET:
if request.GET["straight_cables"] == "True":
straight_cables = True

return filter_id, save_coords, show_unconnected, show_power, show_circuit, show_logical_connections, show_single_cable_logical_conns, show_cables, show_wireless, group_sites, group_locations, group_racks, show_neighbors, straight_cables

class LinePattern():
wireless = [2, 10, 2, 10]
Expand Down
17 changes: 15 additions & 2 deletions netbox_topology_views/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ def create_edge(
edge_id: int,
termination_a: Dict,
termination_b: Dict,
straight_cables: bool,
dreng marked this conversation as resolved.
Show resolved Hide resolved
circuit: Optional[Dict] = None,
cable: Optional[Cable] = None,
wireless: Optional[Dict] = None,
Expand Down Expand Up @@ -300,6 +301,9 @@ def create_edge(
if hasattr(cable, 'color') and cable.color != "":
edge["color"] = "#" + cable.color

# if straight_cables == True: edge["smooth"] = False
edge["smooth"] = not straight_cables

dreng marked this conversation as resolved.
Show resolved Hide resolved
return edge


Expand Down Expand Up @@ -339,6 +343,7 @@ def get_topology_data(
group_locations: bool,
group_racks: bool,
group_id,
straight_cables: bool,
):

supported_termination_types = []
Expand Down Expand Up @@ -436,6 +441,7 @@ def get_topology_data(
circuit=circuit_model,
termination_a=termination_a,
termination_b=termination_b,
straight_cables=straight_cables,
)
)

Expand Down Expand Up @@ -505,6 +511,7 @@ def get_topology_data(
termination_a=termination_a,
termination_b=termination_b,
power=True,
straight_cables=straight_cables,
)
)

Expand Down Expand Up @@ -543,7 +550,7 @@ def get_topology_data(
edge_ids += 1
termination_a = { "termination_name": interface.name, "termination_device_name": interface.device.name, "device_id": interface.device.id }
termination_b = { "termination_name": destination.name, "termination_device_name": destination.device.name, "device_id": destination.device.id }
edges.append(create_edge(edge_id=edge_ids, termination_a=termination_a, termination_b=termination_b, interface=interface))
edges.append(create_edge(edge_id=edge_ids, termination_a=termination_a, termination_b=termination_b, interface=interface, straight_cables=straight_cables))
nodes_devices[interface.device.id] = interface.device
nodes_devices[destination.device.id] = destination.device

Expand Down Expand Up @@ -623,6 +630,7 @@ def get_topology_data(
cable=link.cable,
termination_a=termination_a,
termination_b=termination_b,
straight_cables=straight_cables,
)
)

Expand Down Expand Up @@ -662,6 +670,7 @@ def get_topology_data(
termination_a=termination_a,
termination_b=termination_b,
wireless=wireless,
straight_cables=straight_cables,
)
)

Expand Down Expand Up @@ -710,7 +719,7 @@ def get(self, request):

if request.GET:

filter_id, save_coords, show_unconnected, show_power, show_circuit, show_logical_connections, show_single_cable_logical_conns, show_cables, show_wireless, group_sites, group_locations, group_racks, show_neighbors = get_query_settings(request)
filter_id, save_coords, show_unconnected, show_power, show_circuit, show_logical_connections, show_single_cable_logical_conns, show_cables, show_wireless, group_sites, group_locations, group_racks, show_neighbors, straight_cables = get_query_settings(request)

# Read options from saved filters as NetBox does not handle custom plugin filters
if "filter_id" in request.GET and request.GET["filter_id"] != '':
Expand All @@ -729,6 +738,7 @@ def get(self, request):
if group_locations == False and 'group_locations' in saved_filter_params: group_locations = saved_filter_params['group_locations']
if group_racks == False and 'group_racks' in saved_filter_params: group_racks = saved_filter_params['group_racks']
if show_neighbors == False and 'show_neighbors' in saved_filter_params: show_neighbors = saved_filter_params['show_neighbors']
if straight_cables == False and 'straight_cables' in saved_filter_params: straight_cables = saved_filter_params['straight_cables']
except SavedFilter.DoesNotExist: # filter_id not found
pass
except Exception as inst:
Expand Down Expand Up @@ -756,6 +766,7 @@ def get(self, request):
group_locations=group_locations,
group_racks=group_racks,
group_id=group_id,
straight_cables=straight_cables,
)

else:
Expand All @@ -779,6 +790,7 @@ def get(self, request):
if individualOptions.group_sites: q['group_sites'] = "True"
if individualOptions.group_locations: q['group_locations'] = "True"
if individualOptions.group_racks: q['group_racks'] = "True"
if individualOptions.straight_cables: q['straight_cables'] = "True"
if individualOptions.draw_default_layout:
q['draw_init'] = "True"
else:
Expand Down Expand Up @@ -1137,6 +1149,7 @@ def get(self, request):
'group_locations': queryset.group_locations,
'group_racks': queryset.group_racks,
'draw_default_layout': queryset.draw_default_layout,
'straight_cables': queryset.straight_cables,
dreng marked this conversation as resolved.
Show resolved Hide resolved
},
)

Expand Down