Coverage for wireless/views.py: 98%
130 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django.utils.translation import gettext_lazy as _
3from dcim.models import Interface
4from extras.ui.panels import CustomFieldsPanel, TagsPanel
5from netbox.ui import actions, layout
6from netbox.ui.breadcrumbs import Breadcrumb, filtered_list_url
7from netbox.ui.panels import (
8 CommentsPanel,
9 ObjectsTablePanel,
10 RelatedObjectsPanel,
11)
12from netbox.views import generic
13from utilities.query import count_related
14from utilities.views import GetRelatedModelsMixin, register_model_view
16from . import filtersets, forms, tables
17from .models import *
18from .ui import panels
20#
21# Wireless LAN groups
22#
25@register_model_view(WirelessLANGroup, 'list', path='', detail=False)
26class WirelessLANGroupListView(generic.ObjectListView):
27 queryset = WirelessLANGroup.objects.add_related_count(
28 WirelessLANGroup.objects.all(),
29 WirelessLAN,
30 'group',
31 'wirelesslan_count',
32 cumulative=True
33 ).prefetch_related('tags')
34 filterset = filtersets.WirelessLANGroupFilterSet
35 filterset_form = forms.WirelessLANGroupFilterForm
36 table = tables.WirelessLANGroupTable
39@register_model_view(WirelessLANGroup)
40class WirelessLANGroupView(GetRelatedModelsMixin, generic.ObjectView):
41 queryset = WirelessLANGroup.objects.all()
42 layout = layout.SimpleLayout(
43 breadcrumbs=[
44 Breadcrumb(
45 lambda o: o.get_ancestors(),
46 url=filtered_list_url('wireless:wirelesslangroup_list', 'parent_id'),
47 ),
48 ],
49 left_panels=[
50 panels.WirelessLANGroupPanel(),
51 TagsPanel(),
52 CommentsPanel(),
53 ],
54 right_panels=[
55 RelatedObjectsPanel(),
56 CustomFieldsPanel(),
57 ],
58 bottom_panels=[
59 ObjectsTablePanel(
60 model='wireless.WirelessLANGroup',
61 title=_('Child Groups'),
62 filters={'parent_id': lambda ctx: ctx['object'].pk},
63 exclude_columns=['parent'],
64 actions=[
65 actions.AddObject(
66 'wireless.WirelessLANGroup',
67 label=_('Add Wireless LAN Group'),
68 url_params={
69 'parent': lambda ctx: ctx['object'].pk,
70 }
71 ),
72 ],
73 ),
74 ],
75 )
77 def get_extra_context(self, request, instance):
78 groups = instance.get_descendants(include_self=True)
80 return {
81 'related_models': self.get_related_models(request, groups),
82 }
85@register_model_view(WirelessLANGroup, 'add', detail=False)
86@register_model_view(WirelessLANGroup, 'edit')
87class WirelessLANGroupEditView(generic.ObjectEditView):
88 queryset = WirelessLANGroup.objects.all()
89 form = forms.WirelessLANGroupForm
92@register_model_view(WirelessLANGroup, 'delete')
93class WirelessLANGroupDeleteView(generic.ObjectDeleteView):
94 queryset = WirelessLANGroup.objects.all()
97@register_model_view(WirelessLANGroup, 'bulk_import', path='import', detail=False)
98class WirelessLANGroupBulkImportView(generic.BulkImportView):
99 queryset = WirelessLANGroup.objects.all()
100 model_form = forms.WirelessLANGroupImportForm
103@register_model_view(WirelessLANGroup, 'bulk_edit', path='edit', detail=False)
104class WirelessLANGroupBulkEditView(generic.BulkEditView):
105 queryset = WirelessLANGroup.objects.add_related_count(
106 WirelessLANGroup.objects.all(),
107 WirelessLAN,
108 'group',
109 'wirelesslan_count',
110 cumulative=True
111 )
112 filterset = filtersets.WirelessLANGroupFilterSet
113 table = tables.WirelessLANGroupTable
114 form = forms.WirelessLANGroupBulkEditForm
117@register_model_view(WirelessLANGroup, 'bulk_rename', path='rename', detail=False)
118class WirelessLANGroupBulkRenameView(generic.BulkRenameView):
119 queryset = WirelessLANGroup.objects.all()
120 filterset = filtersets.WirelessLANGroupFilterSet
123@register_model_view(WirelessLANGroup, 'bulk_delete', path='delete', detail=False)
124class WirelessLANGroupBulkDeleteView(generic.BulkDeleteView):
125 queryset = WirelessLANGroup.objects.add_related_count(
126 WirelessLANGroup.objects.all(),
127 WirelessLAN,
128 'group',
129 'wirelesslan_count',
130 cumulative=True
131 )
132 filterset = filtersets.WirelessLANGroupFilterSet
133 table = tables.WirelessLANGroupTable
136#
137# Wireless LANs
138#
140@register_model_view(WirelessLAN, 'list', path='', detail=False)
141class WirelessLANListView(generic.ObjectListView):
142 queryset = WirelessLAN.objects.annotate(
143 interface_count=count_related(Interface, 'wireless_lans')
144 )
145 filterset = filtersets.WirelessLANFilterSet
146 filterset_form = forms.WirelessLANFilterForm
147 table = tables.WirelessLANTable
150@register_model_view(WirelessLAN)
151class WirelessLANView(generic.ObjectView):
152 queryset = WirelessLAN.objects.all()
153 template_name = 'generic/object.html'
154 layout = layout.SimpleLayout(
155 left_panels=[
156 panels.WirelessLANPanel(),
157 TagsPanel(),
158 CommentsPanel(),
159 ],
160 right_panels=[
161 panels.WirelessAuthenticationPanel(),
162 CustomFieldsPanel(),
163 ],
164 bottom_panels=[
165 ObjectsTablePanel(
166 model='dcim.Interface',
167 title=_('Attached Interfaces'),
168 filters={'wireless_lan_id': lambda ctx: ctx['object'].pk},
169 ),
170 ],
171 )
174@register_model_view(WirelessLAN, 'add', detail=False)
175@register_model_view(WirelessLAN, 'edit')
176class WirelessLANEditView(generic.ObjectEditView):
177 queryset = WirelessLAN.objects.all()
178 form = forms.WirelessLANForm
181@register_model_view(WirelessLAN, 'delete')
182class WirelessLANDeleteView(generic.ObjectDeleteView):
183 queryset = WirelessLAN.objects.all()
186@register_model_view(WirelessLAN, 'bulk_import', path='import', detail=False)
187class WirelessLANBulkImportView(generic.BulkImportView):
188 queryset = WirelessLAN.objects.all()
189 model_form = forms.WirelessLANImportForm
192@register_model_view(WirelessLAN, 'bulk_edit', path='edit', detail=False)
193class WirelessLANBulkEditView(generic.BulkEditView):
194 queryset = WirelessLAN.objects.all()
195 filterset = filtersets.WirelessLANFilterSet
196 table = tables.WirelessLANTable
197 form = forms.WirelessLANBulkEditForm
200@register_model_view(WirelessLAN, 'bulk_rename', path='rename', detail=False)
201class WirelessLANBulkRenameView(generic.BulkRenameView):
202 queryset = WirelessLAN.objects.all()
203 field_name = 'ssid'
204 filterset = filtersets.WirelessLANFilterSet
207@register_model_view(WirelessLAN, 'bulk_delete', path='delete', detail=False)
208class WirelessLANBulkDeleteView(generic.BulkDeleteView):
209 queryset = WirelessLAN.objects.all()
210 filterset = filtersets.WirelessLANFilterSet
211 table = tables.WirelessLANTable
214#
215# Wireless Links
216#
218@register_model_view(WirelessLink, 'list', path='', detail=False)
219class WirelessLinkListView(generic.ObjectListView):
220 queryset = WirelessLink.objects.all()
221 filterset = filtersets.WirelessLinkFilterSet
222 filterset_form = forms.WirelessLinkFilterForm
223 table = tables.WirelessLinkTable
226@register_model_view(WirelessLink)
227class WirelessLinkView(generic.ObjectView):
228 queryset = WirelessLink.objects.all()
229 template_name = 'generic/object.html'
230 layout = layout.SimpleLayout(
231 left_panels=[
232 panels.WirelessLinkInterfacePanel('interface_a', title=_('Interface A')),
233 panels.WirelessLinkPropertiesPanel(),
234 TagsPanel(),
235 CommentsPanel(),
236 ],
237 right_panels=[
238 panels.WirelessLinkInterfacePanel('interface_b', title=_('Interface B')),
239 panels.WirelessAuthenticationPanel(),
240 CustomFieldsPanel(),
241 ],
242 )
245@register_model_view(WirelessLink, 'add', detail=False)
246@register_model_view(WirelessLink, 'edit')
247class WirelessLinkEditView(generic.ObjectEditView):
248 queryset = WirelessLink.objects.all()
249 form = forms.WirelessLinkForm
252@register_model_view(WirelessLink, 'delete')
253class WirelessLinkDeleteView(generic.ObjectDeleteView):
254 queryset = WirelessLink.objects.all()
257@register_model_view(WirelessLink, 'bulk_import', path='import', detail=False)
258class WirelessLinkBulkImportView(generic.BulkImportView):
259 queryset = WirelessLink.objects.all()
260 model_form = forms.WirelessLinkImportForm
263@register_model_view(WirelessLink, 'bulk_edit', path='edit', detail=False)
264class WirelessLinkBulkEditView(generic.BulkEditView):
265 queryset = WirelessLink.objects.all()
266 filterset = filtersets.WirelessLinkFilterSet
267 table = tables.WirelessLinkTable
268 form = forms.WirelessLinkBulkEditForm
271@register_model_view(WirelessLink, 'bulk_rename', path='rename', detail=False)
272class WirelessLinkBulkRenameView(generic.BulkRenameView):
273 queryset = WirelessLink.objects.all()
274 field_name = 'ssid'
275 filterset = filtersets.WirelessLinkFilterSet
278@register_model_view(WirelessLink, 'bulk_delete', path='delete', detail=False)
279class WirelessLinkBulkDeleteView(generic.BulkDeleteView):
280 queryset = WirelessLink.objects.all()
281 filterset = filtersets.WirelessLinkFilterSet
282 table = tables.WirelessLinkTable