plural to singular

This commit is contained in:
dreng
2023-05-06 22:57:12 +02:00
parent 60c272acb7
commit 7e2ffc575f
18 changed files with 78 additions and 78 deletions
+5 -5
View File
@@ -2,7 +2,7 @@ from dcim.models import Device, DeviceRole
from rest_framework.serializers import ModelSerializer from rest_framework.serializers import ModelSerializer
from netbox.api.serializers import NetBoxModelSerializer from netbox.api.serializers import NetBoxModelSerializer
from netbox_topology_views.models import RoleImage, IndividualOptions, CoordinateGroups, Coordinates from netbox_topology_views.models import RoleImage, IndividualOptions, CoordinateGroup, Coordinate
class TopologyDummySerializer(ModelSerializer): class TopologyDummySerializer(ModelSerializer):
@@ -22,14 +22,14 @@ class DeviceRoleSerializer(ModelSerializer):
model = DeviceRole model = DeviceRole
fields = ("name", "slug", "color", "vm_role", "description") fields = ("name", "slug", "color", "vm_role", "description")
class CoordinateGroupsSerializer(NetBoxModelSerializer): class CoordinateGroupSerializer(NetBoxModelSerializer):
class Meta: class Meta:
model = CoordinateGroups model = CoordinateGroup
fields = ("name", "description") fields = ("name", "description")
class CoordinatesSerializer(NetBoxModelSerializer): class CoordinateSerializer(NetBoxModelSerializer):
class Meta: class Meta:
model = Coordinates model = Coordinate
fields = ("x", "y") fields = ("x", "y")
class IndividualOptionsSerializer(NetBoxModelSerializer): class IndividualOptionsSerializer(NetBoxModelSerializer):
+2 -2
View File
@@ -1,7 +1,7 @@
import django_filters import django_filters
from dcim.choices import DeviceStatusChoices from dcim.choices import DeviceStatusChoices
from dcim.models import Device, DeviceRole, Location, Rack, Region, Site from dcim.models import Device, DeviceRole, Location, Rack, Region, Site
from .models import Coordinates from .models import Coordinate
from django.db.models import Q from django.db.models import Q
from netbox.filtersets import NetBoxModelFilterSet from netbox.filtersets import NetBoxModelFilterSet
from tenancy.filtersets import TenancyFilterSet from tenancy.filtersets import TenancyFilterSet
@@ -57,7 +57,7 @@ class DeviceFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
class CoordinateFilterSet(NetBoxModelFilterSet): class CoordinateFilterSet(NetBoxModelFilterSet):
class Meta: class Meta:
model = Coordinates model = Coordinate
fields = ('id', 'group', 'device', 'x', 'y') fields = ('id', 'group', 'device', 'x', 'y')
def search(self, queryset, name, value): def search(self, queryset, name, value):
+6 -6
View File
@@ -21,7 +21,7 @@ from utilities.forms.fields import (
) )
from .models import IndividualOptions, CoordinateGroups, Coordinates from .models import IndividualOptions, CoordinateGroup, Coordinate
class DeviceFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): class DeviceFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
model = Device model = Device
@@ -148,23 +148,23 @@ class CoordinateGroupsForm(NetBoxModelForm):
) )
class Meta: class Meta:
model = CoordinateGroups model = CoordinateGroup
fields = ('name', 'description') fields = ('name', 'description')
class CoordinatesForm(NetBoxModelForm): class CoordinatesForm(NetBoxModelForm):
fieldsets = ( fieldsets = (
('Coordinates', ('group', 'device', 'x', 'y')), ('Coordinate', ('group', 'device', 'x', 'y')),
) )
class Meta: class Meta:
model = Coordinates model = Coordinate
fields = ('group', 'device', 'x', 'y') fields = ('group', 'device', 'x', 'y')
class CoordinatesFilterForm(NetBoxModelFilterSetForm): class CoordinatesFilterForm(NetBoxModelFilterSetForm):
model = Coordinates model = Coordinate
group = forms.ModelMultipleChoiceField( group = forms.ModelMultipleChoiceField(
queryset=CoordinateGroups.objects.all(), queryset=CoordinateGroup.objects.all(),
required=False required=False
) )
@@ -1,4 +1,4 @@
# Generated by Django 4.1.8 on 2023-05-01 08:21 # Generated by Django 4.1.8 on 2023-05-01 16:13
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
@@ -16,7 +16,7 @@ class Migration(migrations.Migration):
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name='CoordinateGroups', name='CoordinateGroup',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True, null=True)), ('created', models.DateTimeField(auto_now_add=True, null=True)),
@@ -31,7 +31,7 @@ class Migration(migrations.Migration):
}, },
), ),
migrations.CreateModel( migrations.CreateModel(
name='Coordinates', name='Coordinate',
fields=[ fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
('created', models.DateTimeField(auto_now_add=True, null=True)), ('created', models.DateTimeField(auto_now_add=True, null=True)),
@@ -40,7 +40,7 @@ class Migration(migrations.Migration):
('x', models.IntegerField()), ('x', models.IntegerField()),
('y', models.IntegerField()), ('y', models.IntegerField()),
('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dcim.device')), ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dcim.device')),
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroups')), ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='netbox_topology_views.coordinategroup')),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
], ],
options={ options={
+5 -5
View File
@@ -95,7 +95,7 @@ class RoleImage(ChangeLoggingMixin, ExportTemplatesMixin, WebhooksMixin):
return self.get_default_image(dir) return self.get_default_image(dir)
return static(f"/{self.image}") return static(f"/{self.image}")
class CoordinateGroups(NetBoxModel): class CoordinateGroup(NetBoxModel):
""" """
A coordinate group is used to display the topology for a particular group. A coordinate group is used to display the topology for a particular group.
This allows different visualizations with the same devices. This allows different visualizations with the same devices.
@@ -117,16 +117,16 @@ class CoordinateGroups(NetBoxModel):
return self.name return self.name
def get_absolute_url(self): def get_absolute_url(self):
return reverse('plugins:netbox_topology_views:coordinategroups', args=[self.pk]) return reverse('plugins:netbox_topology_views:coordinategroup', args=[self.pk])
class Coordinates(NetBoxModel): class Coordinate(NetBoxModel):
""" """
Coordinates are being used to place devices in a topology view onto a certian Coordinates are being used to place devices in a topology view onto a certian
position. Devices belong to one or more coordinate groups. They have to position. Devices belong to one or more coordinate groups. They have to
be unique together. be unique together.
""" """
device = models.ForeignKey(Device, on_delete=models.CASCADE) device = models.ForeignKey(Device, on_delete=models.CASCADE)
group = models.ForeignKey(CoordinateGroups, on_delete=models.CASCADE) group = models.ForeignKey(CoordinateGroup, on_delete=models.CASCADE)
x = models.IntegerField( x = models.IntegerField(
help_text='X-coordinate of the device (horizontal) on the canvas. ' help_text='X-coordinate of the device (horizontal) on the canvas. '
@@ -145,7 +145,7 @@ class Coordinates(NetBoxModel):
return f'{self.x};{self.y}' return f'{self.x};{self.y}'
def get_absolute_url(self): def get_absolute_url(self):
return reverse('plugins:netbox_topology_views:coordinates', args=[self.pk]) return reverse('plugins:netbox_topology_views:coordinate', args=[self.pk])
def set_xy_from_text_coords(self, coords: str): def set_xy_from_text_coords(self, coords: str):
xy = coords.split(';') xy = coords.split(';')
+6 -6
View File
@@ -1,18 +1,18 @@
from extras.plugins import PluginMenu, PluginMenuItem, PluginMenuButton from extras.plugins import PluginMenu, PluginMenuItem, PluginMenuButton
from utilities.choices import ButtonColorChoices from utilities.choices import ButtonColorChoices
coordinategroups_buttons = [ coordinategroup_buttons = [
PluginMenuButton( PluginMenuButton(
link='plugins:netbox_topology_views:coordinategroups_add', link='plugins:netbox_topology_views:coordinategroup_add',
title='Add', title='Add',
icon_class='mdi mdi-plus-thick', icon_class='mdi mdi-plus-thick',
color=ButtonColorChoices.GREEN, color=ButtonColorChoices.GREEN,
) )
] ]
coordinates_buttons = [ coordinate_buttons = [
PluginMenuButton( PluginMenuButton(
link='plugins:netbox_topology_views:coordinates_add', link='plugins:netbox_topology_views:coordinate_add',
title='Add', title='Add',
icon_class='mdi mdi-plus-thick', icon_class='mdi mdi-plus-thick',
color=ButtonColorChoices.GREEN, color=ButtonColorChoices.GREEN,
@@ -26,8 +26,8 @@ menu = PluginMenu(
('TOPOLOGY', ('TOPOLOGY',
( (
PluginMenuItem(link="plugins:netbox_topology_views:home", link_text="Topology"), PluginMenuItem(link="plugins:netbox_topology_views:home", link_text="Topology"),
PluginMenuItem(link="plugins:netbox_topology_views:coordinategroups_list", link_text="Coordinate Groups", buttons=coordinategroups_buttons), PluginMenuItem(link="plugins:netbox_topology_views:coordinategroup_list", link_text="Coordinate Groups", buttons=coordinategroup_buttons),
PluginMenuItem(link="plugins:netbox_topology_views:coordinates_list", link_text="Coordinates", buttons=coordinates_buttons), PluginMenuItem(link="plugins:netbox_topology_views:coordinate_list", link_text="Coordinates", buttons=coordinate_buttons),
), ),
), ),
('PREFERENCES', ('PREFERENCES',
+3 -3
View File
@@ -1,9 +1,9 @@
from netbox.search import SearchIndex, register_search from netbox.search import SearchIndex, register_search
from .models import CoordinateGroups, Coordinates from .models import CoordinateGroup, Coordinate
@register_search @register_search
class CoordinateGroupsIndex(SearchIndex): class CoordinateGroupsIndex(SearchIndex):
model = CoordinateGroups model = CoordinateGroup
fields = ( fields = (
('name', 100), ('name', 100),
('description', 2000), ('description', 2000),
@@ -11,7 +11,7 @@ class CoordinateGroupsIndex(SearchIndex):
@register_search @register_search
class CoordinatesIndex(SearchIndex): class CoordinatesIndex(SearchIndex):
model = Coordinates model = Coordinate
fields = ( fields = (
('group', 100), ('group', 100),
('device', 200), ('device', 200),
+3 -3
View File
@@ -1,7 +1,7 @@
import django_tables2 as tables import django_tables2 as tables
from netbox.tables import NetBoxTable, ChoiceFieldColumn from netbox.tables import NetBoxTable, ChoiceFieldColumn
from .models import CoordinateGroups, Coordinates from .models import CoordinateGroup, Coordinate
class CoordinateGroupListTable(NetBoxTable): class CoordinateGroupListTable(NetBoxTable):
name = tables.Column( name = tables.Column(
@@ -9,7 +9,7 @@ class CoordinateGroupListTable(NetBoxTable):
) )
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = CoordinateGroups model = CoordinateGroup
fields = ('pk', 'name', 'description') fields = ('pk', 'name', 'description')
default_columns = ('name', 'description') default_columns = ('name', 'description')
@@ -23,7 +23,7 @@ class CoordinateListTable(NetBoxTable):
) )
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = Coordinates model = Coordinate
fields = ('pk', 'group', 'device', 'x', 'y') fields = ('pk', 'group', 'device', 'x', 'y')
default_columns = ('id', 'group', 'device', 'x', 'y') default_columns = ('id', 'group', 'device', 'x', 'y')
+12 -12
View File
@@ -12,18 +12,18 @@ urlpatterns = (
path("individualoptions/", views.TopologyIndividualOptionsView.as_view(), name="individualoptions"), path("individualoptions/", views.TopologyIndividualOptionsView.as_view(), name="individualoptions"),
# Coordinate Group # Coordinate Group
path("coordinate-groups/", views.CoordinateGroupListView.as_view(), name="coordinategroups_list"), path("coordinate-groups/", views.CoordinateGroupListView.as_view(), name="coordinategroup_list"),
path("coordinate-groups/add/", views.CoordinateGroupAddView.as_view(), name="coordinategroups_add"), path("coordinate-groups/add/", views.CoordinateGroupAddView.as_view(), name="coordinategroup_add"),
path("coordinate-groups/<int:pk>/", views.CoordinateGroupView.as_view(), name="coordinategroups"), path("coordinate-groups/<int:pk>/", views.CoordinateGroupView.as_view(), name="coordinategroup"),
path("coordinate-groups/<int:pk>/edit/", views.CoordinateGroupEditView.as_view(), name="coordinategroups_edit"), path("coordinate-groups/<int:pk>/edit/", views.CoordinateGroupEditView.as_view(), name="coordinategroup_edit"),
path("coordinate-groups/<int:pk>/delete/", views.CoordinateGroupDeleteView.as_view(), name="coordinategroups_delete"), path("coordinate-groups/<int:pk>/delete/", views.CoordinateGroupDeleteView.as_view(), name="coordinategroup_delete"),
path("coordinate-groups/<int:pk>/changelog/", views.CoordinateGroupChangeLogView.as_view(), name="coordinategroups_changelog", kwargs={'model': models.CoordinateGroups}), path("coordinate-groups/<int:pk>/changelog/", views.CoordinateGroupChangeLogView.as_view(), name="coordinategroup_changelog", kwargs={'model': models.CoordinateGroup}),
# Coordinate # Coordinate
path("coordinates/", views.CoordinateListView.as_view(), name="coordinates_list"), path("coordinate/", views.CoordinateListView.as_view(), name="coordinate_list"),
path("coordinates/add/", views.CoordinateAddView.as_view(), name="coordinates_add"), path("coordinate/add/", views.CoordinateAddView.as_view(), name="coordinate_add"),
path("coordinates/<int:pk>/", views.CoordinateView.as_view(), name="coordinates"), path("coordinate/<int:pk>/", views.CoordinateView.as_view(), name="coordinate"),
path("coordinates/<int:pk>/edit/", views.CoordinateEditView.as_view(), name="coordinates_edit"), path("coordinate/<int:pk>/edit/", views.CoordinateEditView.as_view(), name="coordinate_edit"),
path("coordinates/<int:pk>/delete/", views.CoordinateDeleteView.as_view(), name="coordinates_delete"), path("coordinate/<int:pk>/delete/", views.CoordinateDeleteView.as_view(), name="coordinate_delete"),
path("coordinates/<int:pk>/changelog/", views.CoordinateChangeLogView.as_view(), name="coordinates_changelog", kwargs={'model': models.Coordinates}), path("coordinate/<int:pk>/changelog/", views.CoordinateChangeLogView.as_view(), name="coordinate_changelog", kwargs={'model': models.Coordinate}),
) )
+32 -32
View File
@@ -34,7 +34,7 @@ from netbox.views.generic import ObjectView, ObjectListView, ObjectEditView, Obj
from netbox_topology_views.filters import DeviceFilterSet, CoordinateFilterSet from netbox_topology_views.filters import DeviceFilterSet, CoordinateFilterSet
from netbox_topology_views.forms import DeviceFilterForm, IndividualOptionsForm, CoordinateGroupsForm, CoordinatesForm, CoordinatesFilterForm from netbox_topology_views.forms import DeviceFilterForm, IndividualOptionsForm, CoordinateGroupsForm, CoordinatesForm, CoordinatesFilterForm
from netbox_topology_views.models import RoleImage, CoordinateGroups, Coordinates, IndividualOptions from netbox_topology_views.models import RoleImage, CoordinateGroup, Coordinate, IndividualOptions
from netbox_topology_views.tables import CoordinateGroupListTable, CoordinateListTable from netbox_topology_views.tables import CoordinateGroupListTable, CoordinateListTable
from netbox_topology_views.utils import ( from netbox_topology_views.utils import (
CONF_IMAGE_DIR, CONF_IMAGE_DIR,
@@ -755,81 +755,81 @@ class TopologyImagesView(PermissionRequiredMixin, View):
) )
class CoordinateView(PermissionRequiredMixin, ObjectView): class CoordinateView(PermissionRequiredMixin, ObjectView):
permission_required = 'netbox_topology_views.view_coordinates' permission_required = 'netbox_topology_views.view_coordinate'
queryset = Coordinates.objects.all() queryset = Coordinate.objects.all()
class CoordinateAddView(PermissionRequiredMixin, ObjectEditView): class CoordinateAddView(PermissionRequiredMixin, ObjectEditView):
permission_required = 'netbox_topology_views.add_coordinates' permission_required = 'netbox_topology_views.add_coordinate'
queryset = Coordinates.objects.all() queryset = Coordinate.objects.all()
form = CoordinatesForm form = CoordinatesForm
template_name = 'netbox_topology_views/coordinates_add.html' template_name = 'netbox_topology_views/coordinate_add.html'
class CoordinateListView(PermissionRequiredMixin, ObjectListView): class CoordinateListView(PermissionRequiredMixin, ObjectListView):
permission_required = 'netbox_topology_views.view_coordinates' permission_required = 'netbox_topology_views.view_coordinate'
queryset = Coordinates.objects.all() queryset = Coordinate.objects.all()
table = CoordinateListTable table = CoordinateListTable
template_name = 'netbox_topology_views/coordinates_list.html' template_name = 'netbox_topology_views/coordinate_list.html'
filterset = CoordinateFilterSet filterset = CoordinateFilterSet
filterset_form = CoordinatesFilterForm filterset_form = CoordinatesFilterForm
class CoordinateEditView(PermissionRequiredMixin, ObjectEditView): class CoordinateEditView(PermissionRequiredMixin, ObjectEditView):
permission_required = 'netbox_topology_views.change_coordinates' permission_required = 'netbox_topology_views.change_coordinate'
queryset = Coordinates.objects.all() queryset = Coordinate.objects.all()
form = CoordinatesForm form = CoordinatesForm
template_name = 'netbox_topology_views/coordinates_edit.html' template_name = 'netbox_topology_views/coordinate_edit.html'
class CoordinateDeleteView(PermissionRequiredMixin, ObjectDeleteView): class CoordinateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'netbox_topology_views.delete_coordinates' permission_required = 'netbox_topology_views.delete_coordinate'
queryset = Coordinates.objects.all() queryset = Coordinate.objects.all()
class CoordinateChangeLogView(PermissionRequiredMixin, ObjectChangeLogView): class CoordinateChangeLogView(PermissionRequiredMixin, ObjectChangeLogView):
permission_required = 'netbox_topology_views.view_coordinates' permission_required = 'netbox_topology_views.view_coordinate'
queryset = Coordinates.objects.all() queryset = Coordinate.objects.all()
class CoordinateGroupView(PermissionRequiredMixin, ObjectView): class CoordinateGroupView(PermissionRequiredMixin, ObjectView):
permission_required = 'netbox_topology_views.view_coordinategroups' permission_required = 'netbox_topology_views.view_coordinategroup'
queryset = CoordinateGroups.objects.all() queryset = CoordinateGroup.objects.all()
class CoordinateGroupAddView(PermissionRequiredMixin, ObjectEditView): class CoordinateGroupAddView(PermissionRequiredMixin, ObjectEditView):
permission_required = 'netbox_topology_views.add_coordinategroups' permission_required = 'netbox_topology_views.add_coordinategroup'
queryset = CoordinateGroups.objects.all() queryset = CoordinateGroup.objects.all()
form = CoordinateGroupsForm form = CoordinateGroupsForm
template_name = 'netbox_topology_views/coordinategroups_add.html' template_name = 'netbox_topology_views/coordinategroup_add.html'
class CoordinateGroupListView(PermissionRequiredMixin, ObjectListView): class CoordinateGroupListView(PermissionRequiredMixin, ObjectListView):
permission_required = 'netbox_topology_views.view_coordinategroups' permission_required = 'netbox_topology_views.view_coordinategroup'
queryset = CoordinateGroups.objects.all() queryset = CoordinateGroup.objects.all()
table = CoordinateGroupListTable table = CoordinateGroupListTable
template_name = 'netbox_topology_views/coordinategroups_list.html' template_name = 'netbox_topology_views/coordinategroup_list.html'
class CoordinateGroupEditView(PermissionRequiredMixin, ObjectEditView): class CoordinateGroupEditView(PermissionRequiredMixin, ObjectEditView):
permission_required = 'netbox_topology_views.change_coordinategroups' permission_required = 'netbox_topology_views.change_coordinategroup'
queryset = CoordinateGroups.objects.all() queryset = CoordinateGroup.objects.all()
form = CoordinateGroupsForm form = CoordinateGroupsForm
template_name = 'netbox_topology_views/coordinategroups_edit.html' template_name = 'netbox_topology_views/coordinategroup_edit.html'
class CoordinateGroupDeleteView(PermissionRequiredMixin, ObjectDeleteView): class CoordinateGroupDeleteView(PermissionRequiredMixin, ObjectDeleteView):
permission_required = 'netbox_topology_views.delete_coordinategroups' permission_required = 'netbox_topology_views.delete_coordinategroup'
queryset = CoordinateGroups.objects.all() queryset = CoordinateGroup.objects.all()
class CoordinateGroupChangeLogView(PermissionRequiredMixin, ObjectChangeLogView): class CoordinateGroupChangeLogView(PermissionRequiredMixin, ObjectChangeLogView):
permission_required = 'netbox_topology_views.view_coordinategroups' permission_required = 'netbox_topology_views.view_coordinategroup'
queryset = CoordinateGroups.objects.all() queryset = CoordinateGroup.objects.all()
class TopologyIndividualOptionsView(PermissionRequiredMixin, View): class TopologyIndividualOptionsView(PermissionRequiredMixin, View):
permission_required = 'netbox_topology_views.change_individualoptions' permission_required = 'netbox_topology_views.change_individualoption'
def post(self, request): def post(self, request):
instance = IndividualOptions.objects.get(user_id=request.user.id) instance = IndividualOptions.objects.get(user_id=request.user.id)