Rename SSID model to WirelessLAN

This commit is contained in:
jeremystretch 2021-10-12 17:02:53 -04:00
parent 38f6d22d2d
commit 5271680483
24 changed files with 119 additions and 126 deletions

View File

@ -16,7 +16,7 @@ from utilities.forms import (
SlugField, StaticSelect,
)
from virtualization.models import Cluster, ClusterGroup
from wireless.models import SSID
from wireless.models import WirelessLAN
from .common import InterfaceCommonForm
__all__ = (
@ -1069,10 +1069,10 @@ class InterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm):
'type': 'lag',
}
)
ssids = DynamicModelMultipleChoiceField(
queryset=SSID.objects.all(),
wireless_lans = DynamicModelMultipleChoiceField(
queryset=WirelessLAN.objects.all(),
required=False,
label='SSIDs'
label='Wireless LANs'
)
vlan_group = DynamicModelChoiceField(
queryset=VLANGroup.objects.all(),
@ -1104,7 +1104,7 @@ class InterfaceForm(BootstrapMixin, InterfaceCommonForm, CustomFieldModelForm):
model = Interface
fields = [
'device', 'name', 'label', 'type', 'enabled', 'parent', 'lag', 'mac_address', 'wwn', 'mtu', 'mgmt_only',
'mark_connected', 'description', 'mode', 'rf_channel', 'rf_channel_width', 'ssids', 'untagged_vlan',
'mark_connected', 'description', 'mode', 'rf_channel', 'rf_channel_width', 'wireless_lans', 'untagged_vlan',
'tagged_vlans', 'tags',
]
widgets = {

View File

@ -4,7 +4,7 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wireless', '__first__'),
('wireless', '0001_initial'),
('dcim', '0135_location_tenant'),
]
@ -21,7 +21,7 @@ class Migration(migrations.Migration):
),
migrations.AddField(
model_name='interface',
name='ssids',
field=models.ManyToManyField(blank=True, related_name='interfaces', to='wireless.SSID'),
name='wireless_lans',
field=models.ManyToManyField(blank=True, related_name='interfaces', to='wireless.WirelessLAN'),
),
]

View File

@ -529,11 +529,11 @@ class Interface(ComponentModel, BaseInterface, CableTermination, PathEndpoint):
null=True,
verbose_name='Channel width'
)
ssids = models.ManyToManyField(
to='wireless.SSID',
wireless_lans = models.ManyToManyField(
to='wireless.WirelessLAN',
related_name='interfaces',
blank=True,
verbose_name='SSIDs'
verbose_name='Wireless LANs'
)
untagged_vlan = models.ForeignKey(
to='ipam.VLAN',

View File

@ -195,7 +195,7 @@ WIRELESS_MENU = Menu(
MenuGroup(
label='Wireless',
items=(
get_model_item('wireless', 'ssid', 'SSIDs'),
get_model_item('wireless', 'wirelesslan', 'Wireless LANs'),
),
),
),

View File

@ -260,19 +260,19 @@
{% endif %}
{% if object.is_wireless %}
<div class="card">
<h5 class="card-header">SSIDs</h5>
<h5 class="card-header">Wireless LANs</h5>
<div class="card-body">
<table class="table table-hover table-headings">
<thead>
<tr>
<th>Name</th>
<th>SSID</th>
</tr>
</thead>
<tbody>
{% for ssid in object.ssids.all %}
{% for wlan in object.wlans.all %}
<tr>
<td>
<a href="{{ ssid.get_absolute_url }}">{{ ssid.name }}</a>
<a href="{{ wlan.get_absolute_url }}">{{ wlan.ssid }}</a>
</td>
</tr>
{% empty %}

View File

@ -36,7 +36,7 @@
</div>
{% render_field form.rf_channel %}
{% render_field form.rf_channel_width %}
{% render_field form.ssids %}
{% render_field form.wireless_lans %}
</div>
{% endif %}

View File

@ -6,12 +6,12 @@
<div class="row">
<div class="col col-md-6">
<div class="card">
<h5 class="card-header">SSID</h5>
<h5 class="card-header">Wireless LAN</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Name</th>
<td>{{ object.name }}</td>
<th scope="row">SSID</th>
<td>{{ object.ssid }}</td>
</tr>
<tr>
<th scope="row">Description</th>

View File

@ -4,13 +4,13 @@ from netbox.api import WritableNestedSerializer
from wireless.models import *
__all__ = (
'NestedSSIDSerializer',
'NestedWirelessLANSerializer',
)
class NestedSSIDSerializer(WritableNestedSerializer):
class NestedWirelessLANSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='wireless-api:ssid-detail')
class Meta:
model = SSID
fields = ['id', 'url', 'display', 'name']
model = WirelessLAN
fields = ['id', 'url', 'display', 'ssid']

View File

@ -1,21 +1,20 @@
from rest_framework import serializers
from dcim.api.serializers import NestedInterfaceSerializer
from ipam.api.serializers import NestedVLANSerializer
from netbox.api.serializers import PrimaryModelSerializer
from wireless.models import *
__all__ = (
'SSIDSerializer',
'WirelessLANSerializer',
)
class SSIDSerializer(PrimaryModelSerializer):
class WirelessLANSerializer(PrimaryModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='wireless-api:ssid-detail')
vlan = NestedVLANSerializer(required=False, allow_null=True)
class Meta:
model = SSID
model = WirelessLAN
fields = [
'id', 'url', 'display', 'name', 'description', 'vlan',
'id', 'url', 'display', 'ssid', 'description', 'vlan',
]

View File

@ -5,8 +5,7 @@ from . import views
router = OrderedDefaultRouter()
router.APIRootView = views.WirelessRootView
# SSIDs
router.register('ssids', views.SSIDViewSet)
router.register('wireless-lans', views.WirelessLANViewSet)
app_name = 'wireless-api'
urlpatterns = router.urls

View File

@ -18,7 +18,7 @@ class WirelessRootView(APIRootView):
# Providers
#
class SSIDViewSet(CustomFieldModelViewSet):
queryset = SSID.objects.prefetch_related('tags')
serializer_class = serializers.SSIDSerializer
filterset_class = filtersets.SSIDFilterSet
class WirelessLANViewSet(CustomFieldModelViewSet):
queryset = WirelessLAN.objects.prefetch_related('tags')
serializer_class = serializers.WirelessLANSerializer
filterset_class = filtersets.WirelessLANFilterSet

View File

@ -0,0 +1 @@
SSID_MAX_LENGTH = 32 # Per IEEE 802.11-2007

View File

@ -6,11 +6,11 @@ from netbox.filtersets import PrimaryModelFilterSet
from .models import *
__all__ = (
'SSIDFilterSet',
'WirelessLANFilterSet',
)
class SSIDFilterSet(PrimaryModelFilterSet):
class WirelessLANFilterSet(PrimaryModelFilterSet):
q = django_filters.CharFilter(
method='search',
label='Search',
@ -18,14 +18,14 @@ class SSIDFilterSet(PrimaryModelFilterSet):
tag = TagFilter()
class Meta:
model = SSID
fields = ['id', 'name']
model = WirelessLAN
fields = ['id', 'ssid']
def search(self, queryset, name, value):
if not value.strip():
return queryset
qs_filter = (
Q(name__icontains=value) |
Q(ssid__icontains=value) |
Q(description__icontains=value)
)
return queryset.filter(qs_filter)

View File

@ -6,11 +6,11 @@ from ipam.models import VLAN
from utilities.forms import BootstrapMixin, DynamicModelChoiceField
__all__ = (
'SSIDBulkEditForm',
'WirelessLANBulkEditForm',
)
class SSIDBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
class WirelessLANBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldModelBulkEditForm):
pk = forms.ModelMultipleChoiceField(
queryset=PowerFeed.objects.all(),
widget=forms.MultipleHiddenInput

View File

@ -1,14 +1,14 @@
from extras.forms import CustomFieldModelCSVForm
from ipam.models import VLAN
from utilities.forms import CSVModelChoiceField
from wireless.models import SSID
from wireless.models import WirelessLAN
__all__ = (
'SSIDCSVForm',
'WirelessLANCSVForm',
)
class SSIDCSVForm(CustomFieldModelCSVForm):
class WirelessLANCSVForm(CustomFieldModelCSVForm):
vlan = CSVModelChoiceField(
queryset=VLAN.objects.all(),
to_field_name='name',
@ -16,5 +16,5 @@ class SSIDCSVForm(CustomFieldModelCSVForm):
)
class Meta:
model = SSID
fields = ('name', 'description', 'vlan')
model = WirelessLAN
fields = ('ssid', 'description', 'vlan')

View File

@ -1,13 +1,13 @@
from django import forms
from django.utils.translation import gettext as _
from dcim.models import *
from extras.forms import CustomFieldModelFilterForm
from utilities.forms import BootstrapMixin, TagFilterField
from .models import WirelessLAN
class SSIDFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
model = PowerFeed
class WirelessLANFilterForm(BootstrapMixin, CustomFieldModelFilterForm):
model = WirelessLAN
field_groups = [
['q', 'tag'],
]

View File

@ -1,17 +1,15 @@
from dcim.constants import *
from dcim.models import *
from extras.forms import CustomFieldModelForm
from extras.models import Tag
from ipam.models import VLAN
from utilities.forms import BootstrapMixin, DynamicModelChoiceField, DynamicModelMultipleChoiceField
from wireless.models import SSID
from wireless.models import WirelessLAN
__all__ = (
'SSIDForm',
'WirelessLANForm',
)
class SSIDForm(BootstrapMixin, CustomFieldModelForm):
class WirelessLANForm(BootstrapMixin, CustomFieldModelForm):
vlan = DynamicModelChoiceField(
queryset=VLAN.objects.all(),
required=False
@ -22,11 +20,11 @@ class SSIDForm(BootstrapMixin, CustomFieldModelForm):
)
class Meta:
model = SSID
model = WirelessLAN
fields = [
'name', 'description', 'vlan', 'tags',
'ssid', 'description', 'vlan', 'tags',
]
fieldsets = (
('SSID', ('name', 'description', 'tags')),
('Wireless LAN', ('ssid', 'description', 'tags')),
('VLAN', ('vlan',)),
)

View File

@ -5,5 +5,5 @@ from .types import *
class WirelessQuery(graphene.ObjectType):
ssid = ObjectField(SSIDType)
ssid_list = ObjectListField(SSIDType)
wirelesslan = ObjectField(WirelessLANType)
wirelesslan_list = ObjectListField(WirelessLANType)

View File

@ -2,13 +2,13 @@ from wireless import filtersets, models
from netbox.graphql.types import ObjectType
__all__ = (
'SSIDType',
'WirelessLANType',
)
class SSIDType(ObjectType):
class WirelessLANType(ObjectType):
class Meta:
model = models.SSID
model = models.WirelessLAN
fields = '__all__'
filterset_class = filtersets.SSIDFilterSet
filterset_class = filtersets.WirelessLANFilterSet

View File

@ -9,27 +9,26 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('extras', '0062_clear_secrets_changelog'),
('ipam', '0050_iprange'),
('extras', '0062_clear_secrets_changelog'),
]
operations = [
migrations.CreateModel(
name='SSID',
name='WirelessLAN',
fields=[
('created', models.DateField(auto_now_add=True, null=True)),
('last_updated', models.DateTimeField(auto_now=True, null=True)),
('custom_field_data', models.JSONField(blank=True, default=dict, encoder=django.core.serializers.json.DjangoJSONEncoder)),
('id', models.BigAutoField(primary_key=True, serialize=False)),
('name', models.CharField(max_length=32)),
('ssid', models.CharField(max_length=32)),
('description', models.CharField(blank=True, max_length=200)),
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
('vlan', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='ipam.vlan')),
],
options={
'verbose_name': 'SSID',
'verbose_name_plural': 'SSIDs',
'ordering': ('name', 'pk'),
'verbose_name': 'Wireless LAN',
'ordering': ('ssid', 'pk'),
},
),
]

View File

@ -1,25 +1,23 @@
from django.core.exceptions import ValidationError
from django.db import models
from django.urls import reverse
from dcim.constants import WIRELESS_IFACE_TYPES
from extras.utils import extras_features
from netbox.models import BigIDModel, PrimaryModel
from utilities.querysets import RestrictedQuerySet
__all__ = (
'SSID',
'WirelessLAN',
)
#
# SSIDs
#
@extras_features('custom_fields', 'custom_links', 'export_templates', 'tags', 'webhooks')
class SSID(PrimaryModel):
class WirelessLAN(PrimaryModel):
"""
A service set identifier belonging to a wireless network.
"""
name = models.CharField(
ssid = models.CharField(
max_length=32
)
vlan = models.ForeignKey(
@ -37,12 +35,11 @@ class SSID(PrimaryModel):
objects = RestrictedQuerySet.as_manager()
class Meta:
ordering = ('name', 'pk')
verbose_name = 'SSID'
verbose_name_plural = 'SSIDs'
ordering = ('ssid', 'pk')
verbose_name = 'Wireless LAN'
def __str__(self):
return self.name
return self.ssid
def get_absolute_url(self):
return reverse('wireless:ssid', args=[self.pk])

View File

@ -1,23 +1,23 @@
import django_tables2 as tables
from .models import SSID
from .models import WirelessLAN
from utilities.tables import BaseTable, TagColumn, ToggleColumn
__all__ = (
'SSIDTable',
'WirelessLANTable',
)
class SSIDTable(BaseTable):
class WirelessLANTable(BaseTable):
pk = ToggleColumn()
name = tables.Column(
ssid = tables.Column(
linkify=True
)
tags = TagColumn(
url_name='dcim:cable_list'
url_name='wireless:wirelesslan_list'
)
class Meta(BaseTable.Meta):
model = SSID
fields = ('pk', 'name', 'description', 'vlan')
default_columns = ('pk', 'name', 'description', 'vlan')
model = WirelessLAN
fields = ('pk', 'ssid', 'description', 'vlan')
default_columns = ('pk', 'ssid', 'description', 'vlan')

View File

@ -7,16 +7,16 @@ from .models import *
app_name = 'wireless'
urlpatterns = (
# SSIDs
path('ssids/', views.SSIDListView.as_view(), name='ssid_list'),
path('ssids/add/', views.SSIDEditView.as_view(), name='ssid_add'),
path('ssids/import/', views.SSIDBulkImportView.as_view(), name='ssid_import'),
path('ssids/edit/', views.SSIDBulkEditView.as_view(), name='ssid_bulk_edit'),
path('ssids/delete/', views.SSIDBulkDeleteView.as_view(), name='ssid_bulk_delete'),
path('ssids/<int:pk>/', views.SSIDView.as_view(), name='ssid'),
path('ssids/<int:pk>/edit/', views.SSIDEditView.as_view(), name='ssid_edit'),
path('ssids/<int:pk>/delete/', views.SSIDDeleteView.as_view(), name='ssid_delete'),
path('ssids/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='ssid_changelog', kwargs={'model': SSID}),
path('ssids/<int:pk>/journal/', ObjectJournalView.as_view(), name='ssid_journal', kwargs={'model': SSID}),
# Wireless LANs
path('wireless-lans/', views.WirelessLANListView.as_view(), name='wirelesslan_list'),
path('wireless-lans/add/', views.WirelessLANEditView.as_view(), name='wirelesslan_add'),
path('wireless-lans/import/', views.WirelessLANBulkImportView.as_view(), name='wirelesslan_import'),
path('wireless-lans/edit/', views.WirelessLANBulkEditView.as_view(), name='wirelesslan_bulk_edit'),
path('wireless-lans/delete/', views.WirelessLANBulkDeleteView.as_view(), name='wirelesslan_bulk_delete'),
path('wireless-lans/<int:pk>/', views.WirelessLANView.as_view(), name='wirelesslan'),
path('wireless-lans/<int:pk>/edit/', views.WirelessLANEditView.as_view(), name='wirelesslan_edit'),
path('wireless-lans/<int:pk>/delete/', views.WirelessLANDeleteView.as_view(), name='wirelesslan_delete'),
path('wireless-lans/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='wirelesslan_changelog', kwargs={'model': WirelessLAN}),
path('wireless-lans/<int:pk>/journal/', ObjectJournalView.as_view(), name='wirelesslan_journal', kwargs={'model': WirelessLAN}),
)

View File

@ -4,43 +4,43 @@ from .models import *
#
# SSIDs
# Wireless LANs
#
class SSIDListView(generic.ObjectListView):
queryset = SSID.objects.all()
filterset = filtersets.SSIDFilterSet
filterset_form = forms.SSIDFilterForm
table = tables.SSIDTable
class WirelessLANListView(generic.ObjectListView):
queryset = WirelessLAN.objects.all()
filterset = filtersets.WirelessLANFilterSet
filterset_form = forms.WirelessLANFilterForm
table = tables.WirelessLANTable
class SSIDView(generic.ObjectView):
queryset = SSID.objects.all()
class WirelessLANView(generic.ObjectView):
queryset = WirelessLAN.objects.all()
class SSIDEditView(generic.ObjectEditView):
queryset = SSID.objects.all()
model_form = forms.SSIDForm
class WirelessLANEditView(generic.ObjectEditView):
queryset = WirelessLAN.objects.all()
model_form = forms.WirelessLANForm
class SSIDDeleteView(generic.ObjectDeleteView):
queryset = SSID.objects.all()
class WirelessLANDeleteView(generic.ObjectDeleteView):
queryset = WirelessLAN.objects.all()
class SSIDBulkImportView(generic.BulkImportView):
queryset = SSID.objects.all()
model_form = forms.SSIDCSVForm
table = tables.SSIDTable
class WirelessLANBulkImportView(generic.BulkImportView):
queryset = WirelessLAN.objects.all()
model_form = forms.WirelessLANCSVForm
table = tables.WirelessLANTable
class SSIDBulkEditView(generic.BulkEditView):
queryset = SSID.objects.all()
filterset = filtersets.SSIDFilterSet
table = tables.SSIDTable
form = forms.SSIDBulkEditForm
class WirelessLANBulkEditView(generic.BulkEditView):
queryset = WirelessLAN.objects.all()
filterset = filtersets.WirelessLANFilterSet
table = tables.WirelessLANTable
form = forms.WirelessLANBulkEditForm
class SSIDBulkDeleteView(generic.BulkDeleteView):
queryset = SSID.objects.all()
filterset = filtersets.SSIDFilterSet
table = tables.SSIDTable
class WirelessLANBulkDeleteView(generic.BulkDeleteView):
queryset = WirelessLAN.objects.all()
filterset = filtersets.WirelessLANFilterSet
table = tables.WirelessLANTable