Coverage for wireless/views.py: 98%

130 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 18:35 +0000

1from django.utils.translation import gettext_lazy as _ 

2 

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 

15 

16from . import filtersets, forms, tables 

17from .models import * 

18from .ui import panels 

19 

20# 

21# Wireless LAN groups 

22# 

23 

24 

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 

37 

38 

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 ) 

76 

77 def get_extra_context(self, request, instance): 

78 groups = instance.get_descendants(include_self=True) 

79 

80 return { 

81 'related_models': self.get_related_models(request, groups), 

82 } 

83 

84 

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 

90 

91 

92@register_model_view(WirelessLANGroup, 'delete') 

93class WirelessLANGroupDeleteView(generic.ObjectDeleteView): 

94 queryset = WirelessLANGroup.objects.all() 

95 

96 

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 

101 

102 

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 

115 

116 

117@register_model_view(WirelessLANGroup, 'bulk_rename', path='rename', detail=False) 

118class WirelessLANGroupBulkRenameView(generic.BulkRenameView): 

119 queryset = WirelessLANGroup.objects.all() 

120 filterset = filtersets.WirelessLANGroupFilterSet 

121 

122 

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 

134 

135 

136# 

137# Wireless LANs 

138# 

139 

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 

148 

149 

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 ) 

172 

173 

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 

179 

180 

181@register_model_view(WirelessLAN, 'delete') 

182class WirelessLANDeleteView(generic.ObjectDeleteView): 

183 queryset = WirelessLAN.objects.all() 

184 

185 

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 

190 

191 

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 

198 

199 

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 

205 

206 

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 

212 

213 

214# 

215# Wireless Links 

216# 

217 

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 

224 

225 

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 ) 

243 

244 

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 

250 

251 

252@register_model_view(WirelessLink, 'delete') 

253class WirelessLinkDeleteView(generic.ObjectDeleteView): 

254 queryset = WirelessLink.objects.all() 

255 

256 

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 

261 

262 

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 

269 

270 

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 

276 

277 

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