plural to singular
This commit is contained in:
@@ -2,7 +2,7 @@ from dcim.models import Device, DeviceRole
|
||||
from rest_framework.serializers import ModelSerializer
|
||||
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):
|
||||
@@ -22,14 +22,14 @@ class DeviceRoleSerializer(ModelSerializer):
|
||||
model = DeviceRole
|
||||
fields = ("name", "slug", "color", "vm_role", "description")
|
||||
|
||||
class CoordinateGroupsSerializer(NetBoxModelSerializer):
|
||||
class CoordinateGroupSerializer(NetBoxModelSerializer):
|
||||
class Meta:
|
||||
model = CoordinateGroups
|
||||
model = CoordinateGroup
|
||||
fields = ("name", "description")
|
||||
|
||||
class CoordinatesSerializer(NetBoxModelSerializer):
|
||||
class CoordinateSerializer(NetBoxModelSerializer):
|
||||
class Meta:
|
||||
model = Coordinates
|
||||
model = Coordinate
|
||||
fields = ("x", "y")
|
||||
|
||||
class IndividualOptionsSerializer(NetBoxModelSerializer):
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import django_filters
|
||||
from dcim.choices import DeviceStatusChoices
|
||||
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 netbox.filtersets import NetBoxModelFilterSet
|
||||
from tenancy.filtersets import TenancyFilterSet
|
||||
@@ -57,7 +57,7 @@ class DeviceFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
||||
|
||||
class CoordinateFilterSet(NetBoxModelFilterSet):
|
||||
class Meta:
|
||||
model = Coordinates
|
||||
model = Coordinate
|
||||
fields = ('id', 'group', 'device', 'x', 'y')
|
||||
|
||||
def search(self, queryset, name, value):
|
||||
|
||||
@@ -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):
|
||||
model = Device
|
||||
@@ -148,23 +148,23 @@ class CoordinateGroupsForm(NetBoxModelForm):
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = CoordinateGroups
|
||||
model = CoordinateGroup
|
||||
fields = ('name', 'description')
|
||||
|
||||
class CoordinatesForm(NetBoxModelForm):
|
||||
fieldsets = (
|
||||
('Coordinates', ('group', 'device', 'x', 'y')),
|
||||
('Coordinate', ('group', 'device', 'x', 'y')),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = Coordinates
|
||||
model = Coordinate
|
||||
fields = ('group', 'device', 'x', 'y')
|
||||
|
||||
class CoordinatesFilterForm(NetBoxModelFilterSetForm):
|
||||
model = Coordinates
|
||||
model = Coordinate
|
||||
|
||||
group = forms.ModelMultipleChoiceField(
|
||||
queryset=CoordinateGroups.objects.all(),
|
||||
queryset=CoordinateGroup.objects.all(),
|
||||
required=False
|
||||
)
|
||||
|
||||
|
||||
+4
-4
@@ -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
|
||||
import django.db.models.deletion
|
||||
@@ -16,7 +16,7 @@ class Migration(migrations.Migration):
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CoordinateGroups',
|
||||
name='CoordinateGroup',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
@@ -31,7 +31,7 @@ class Migration(migrations.Migration):
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Coordinates',
|
||||
name='Coordinate',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||
@@ -40,7 +40,7 @@ class Migration(migrations.Migration):
|
||||
('x', models.IntegerField()),
|
||||
('y', models.IntegerField()),
|
||||
('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')),
|
||||
],
|
||||
options={
|
||||
@@ -95,7 +95,7 @@ class RoleImage(ChangeLoggingMixin, ExportTemplatesMixin, WebhooksMixin):
|
||||
return self.get_default_image(dir)
|
||||
return static(f"/{self.image}")
|
||||
|
||||
class CoordinateGroups(NetBoxModel):
|
||||
class CoordinateGroup(NetBoxModel):
|
||||
"""
|
||||
A coordinate group is used to display the topology for a particular group.
|
||||
This allows different visualizations with the same devices.
|
||||
@@ -117,16 +117,16 @@ class CoordinateGroups(NetBoxModel):
|
||||
return self.name
|
||||
|
||||
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
|
||||
position. Devices belong to one or more coordinate groups. They have to
|
||||
be unique together.
|
||||
"""
|
||||
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(
|
||||
help_text='X-coordinate of the device (horizontal) on the canvas. '
|
||||
@@ -145,7 +145,7 @@ class Coordinates(NetBoxModel):
|
||||
return f'{self.x};{self.y}'
|
||||
|
||||
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):
|
||||
xy = coords.split(';')
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
from extras.plugins import PluginMenu, PluginMenuItem, PluginMenuButton
|
||||
from utilities.choices import ButtonColorChoices
|
||||
|
||||
coordinategroups_buttons = [
|
||||
coordinategroup_buttons = [
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:coordinategroups_add',
|
||||
link='plugins:netbox_topology_views:coordinategroup_add',
|
||||
title='Add',
|
||||
icon_class='mdi mdi-plus-thick',
|
||||
color=ButtonColorChoices.GREEN,
|
||||
)
|
||||
]
|
||||
|
||||
coordinates_buttons = [
|
||||
coordinate_buttons = [
|
||||
PluginMenuButton(
|
||||
link='plugins:netbox_topology_views:coordinates_add',
|
||||
link='plugins:netbox_topology_views:coordinate_add',
|
||||
title='Add',
|
||||
icon_class='mdi mdi-plus-thick',
|
||||
color=ButtonColorChoices.GREEN,
|
||||
@@ -26,8 +26,8 @@ menu = PluginMenu(
|
||||
('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:coordinates_list", link_text="Coordinates", buttons=coordinates_buttons),
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:coordinategroup_list", link_text="Coordinate Groups", buttons=coordinategroup_buttons),
|
||||
PluginMenuItem(link="plugins:netbox_topology_views:coordinate_list", link_text="Coordinates", buttons=coordinate_buttons),
|
||||
),
|
||||
),
|
||||
('PREFERENCES',
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
from netbox.search import SearchIndex, register_search
|
||||
from .models import CoordinateGroups, Coordinates
|
||||
from .models import CoordinateGroup, Coordinate
|
||||
|
||||
@register_search
|
||||
class CoordinateGroupsIndex(SearchIndex):
|
||||
model = CoordinateGroups
|
||||
model = CoordinateGroup
|
||||
fields = (
|
||||
('name', 100),
|
||||
('description', 2000),
|
||||
@@ -11,7 +11,7 @@ class CoordinateGroupsIndex(SearchIndex):
|
||||
|
||||
@register_search
|
||||
class CoordinatesIndex(SearchIndex):
|
||||
model = Coordinates
|
||||
model = Coordinate
|
||||
fields = (
|
||||
('group', 100),
|
||||
('device', 200),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import django_tables2 as tables
|
||||
|
||||
from netbox.tables import NetBoxTable, ChoiceFieldColumn
|
||||
from .models import CoordinateGroups, Coordinates
|
||||
from .models import CoordinateGroup, Coordinate
|
||||
|
||||
class CoordinateGroupListTable(NetBoxTable):
|
||||
name = tables.Column(
|
||||
@@ -9,7 +9,7 @@ class CoordinateGroupListTable(NetBoxTable):
|
||||
)
|
||||
|
||||
class Meta(NetBoxTable.Meta):
|
||||
model = CoordinateGroups
|
||||
model = CoordinateGroup
|
||||
fields = ('pk', 'name', 'description')
|
||||
default_columns = ('name', 'description')
|
||||
|
||||
@@ -23,7 +23,7 @@ class CoordinateListTable(NetBoxTable):
|
||||
)
|
||||
|
||||
class Meta(NetBoxTable.Meta):
|
||||
model = Coordinates
|
||||
model = Coordinate
|
||||
fields = ('pk', 'group', 'device', 'x', 'y')
|
||||
default_columns = ('id', 'group', 'device', 'x', 'y')
|
||||
|
||||
|
||||
@@ -12,18 +12,18 @@ urlpatterns = (
|
||||
path("individualoptions/", views.TopologyIndividualOptionsView.as_view(), name="individualoptions"),
|
||||
|
||||
# Coordinate Group
|
||||
path("coordinate-groups/", views.CoordinateGroupListView.as_view(), name="coordinategroups_list"),
|
||||
path("coordinate-groups/add/", views.CoordinateGroupAddView.as_view(), name="coordinategroups_add"),
|
||||
path("coordinate-groups/<int:pk>/", views.CoordinateGroupView.as_view(), name="coordinategroups"),
|
||||
path("coordinate-groups/<int:pk>/edit/", views.CoordinateGroupEditView.as_view(), name="coordinategroups_edit"),
|
||||
path("coordinate-groups/<int:pk>/delete/", views.CoordinateGroupDeleteView.as_view(), name="coordinategroups_delete"),
|
||||
path("coordinate-groups/<int:pk>/changelog/", views.CoordinateGroupChangeLogView.as_view(), name="coordinategroups_changelog", kwargs={'model': models.CoordinateGroups}),
|
||||
path("coordinate-groups/", views.CoordinateGroupListView.as_view(), name="coordinategroup_list"),
|
||||
path("coordinate-groups/add/", views.CoordinateGroupAddView.as_view(), name="coordinategroup_add"),
|
||||
path("coordinate-groups/<int:pk>/", views.CoordinateGroupView.as_view(), name="coordinategroup"),
|
||||
path("coordinate-groups/<int:pk>/edit/", views.CoordinateGroupEditView.as_view(), name="coordinategroup_edit"),
|
||||
path("coordinate-groups/<int:pk>/delete/", views.CoordinateGroupDeleteView.as_view(), name="coordinategroup_delete"),
|
||||
path("coordinate-groups/<int:pk>/changelog/", views.CoordinateGroupChangeLogView.as_view(), name="coordinategroup_changelog", kwargs={'model': models.CoordinateGroup}),
|
||||
|
||||
# Coordinate
|
||||
path("coordinates/", views.CoordinateListView.as_view(), name="coordinates_list"),
|
||||
path("coordinates/add/", views.CoordinateAddView.as_view(), name="coordinates_add"),
|
||||
path("coordinates/<int:pk>/", views.CoordinateView.as_view(), name="coordinates"),
|
||||
path("coordinates/<int:pk>/edit/", views.CoordinateEditView.as_view(), name="coordinates_edit"),
|
||||
path("coordinates/<int:pk>/delete/", views.CoordinateDeleteView.as_view(), name="coordinates_delete"),
|
||||
path("coordinates/<int:pk>/changelog/", views.CoordinateChangeLogView.as_view(), name="coordinates_changelog", kwargs={'model': models.Coordinates}),
|
||||
path("coordinate/", views.CoordinateListView.as_view(), name="coordinate_list"),
|
||||
path("coordinate/add/", views.CoordinateAddView.as_view(), name="coordinate_add"),
|
||||
path("coordinate/<int:pk>/", views.CoordinateView.as_view(), name="coordinate"),
|
||||
path("coordinate/<int:pk>/edit/", views.CoordinateEditView.as_view(), name="coordinate_edit"),
|
||||
path("coordinate/<int:pk>/delete/", views.CoordinateDeleteView.as_view(), name="coordinate_delete"),
|
||||
path("coordinate/<int:pk>/changelog/", views.CoordinateChangeLogView.as_view(), name="coordinate_changelog", kwargs={'model': models.Coordinate}),
|
||||
)
|
||||
|
||||
@@ -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.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.utils import (
|
||||
CONF_IMAGE_DIR,
|
||||
@@ -755,81 +755,81 @@ class TopologyImagesView(PermissionRequiredMixin, View):
|
||||
)
|
||||
|
||||
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):
|
||||
permission_required = 'netbox_topology_views.add_coordinates'
|
||||
permission_required = 'netbox_topology_views.add_coordinate'
|
||||
|
||||
queryset = Coordinates.objects.all()
|
||||
queryset = Coordinate.objects.all()
|
||||
form = CoordinatesForm
|
||||
template_name = 'netbox_topology_views/coordinates_add.html'
|
||||
template_name = 'netbox_topology_views/coordinate_add.html'
|
||||
|
||||
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
|
||||
template_name = 'netbox_topology_views/coordinates_list.html'
|
||||
template_name = 'netbox_topology_views/coordinate_list.html'
|
||||
filterset = CoordinateFilterSet
|
||||
filterset_form = CoordinatesFilterForm
|
||||
|
||||
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
|
||||
template_name = 'netbox_topology_views/coordinates_edit.html'
|
||||
template_name = 'netbox_topology_views/coordinate_edit.html'
|
||||
|
||||
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):
|
||||
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):
|
||||
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):
|
||||
permission_required = 'netbox_topology_views.add_coordinategroups'
|
||||
permission_required = 'netbox_topology_views.add_coordinategroup'
|
||||
|
||||
queryset = CoordinateGroups.objects.all()
|
||||
queryset = CoordinateGroup.objects.all()
|
||||
form = CoordinateGroupsForm
|
||||
template_name = 'netbox_topology_views/coordinategroups_add.html'
|
||||
template_name = 'netbox_topology_views/coordinategroup_add.html'
|
||||
|
||||
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
|
||||
template_name = 'netbox_topology_views/coordinategroups_list.html'
|
||||
template_name = 'netbox_topology_views/coordinategroup_list.html'
|
||||
|
||||
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
|
||||
template_name = 'netbox_topology_views/coordinategroups_edit.html'
|
||||
template_name = 'netbox_topology_views/coordinategroup_edit.html'
|
||||
|
||||
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):
|
||||
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):
|
||||
permission_required = 'netbox_topology_views.change_individualoptions'
|
||||
permission_required = 'netbox_topology_views.change_individualoption'
|
||||
|
||||
def post(self, request):
|
||||
instance = IndividualOptions.objects.get(user_id=request.user.id)
|
||||
|
||||
Reference in New Issue
Block a user