views.py 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. from django.utils.translation import gettext_lazy as _
  2. from dcim.models import Interface
  3. from extras.ui.panels import CustomFieldsPanel, TagsPanel
  4. from netbox.ui import actions, layout
  5. from netbox.ui.panels import (
  6. CommentsPanel,
  7. ObjectsTablePanel,
  8. RelatedObjectsPanel,
  9. )
  10. from netbox.views import generic
  11. from utilities.query import count_related
  12. from utilities.views import GetRelatedModelsMixin, register_model_view
  13. from . import filtersets, forms, tables
  14. from .models import *
  15. from .ui import panels
  16. #
  17. # Wireless LAN groups
  18. #
  19. @register_model_view(WirelessLANGroup, 'list', path='', detail=False)
  20. class WirelessLANGroupListView(generic.ObjectListView):
  21. queryset = WirelessLANGroup.objects.add_related_count(
  22. WirelessLANGroup.objects.all(),
  23. WirelessLAN,
  24. 'group',
  25. 'wirelesslan_count',
  26. cumulative=True
  27. ).prefetch_related('tags')
  28. filterset = filtersets.WirelessLANGroupFilterSet
  29. filterset_form = forms.WirelessLANGroupFilterForm
  30. table = tables.WirelessLANGroupTable
  31. @register_model_view(WirelessLANGroup)
  32. class WirelessLANGroupView(GetRelatedModelsMixin, generic.ObjectView):
  33. queryset = WirelessLANGroup.objects.all()
  34. layout = layout.SimpleLayout(
  35. left_panels=[
  36. panels.WirelessLANGroupPanel(),
  37. TagsPanel(),
  38. CommentsPanel(),
  39. ],
  40. right_panels=[
  41. RelatedObjectsPanel(),
  42. CustomFieldsPanel(),
  43. ],
  44. bottom_panels=[
  45. ObjectsTablePanel(
  46. model='wireless.WirelessLANGroup',
  47. title=_('Child Groups'),
  48. filters={'parent_id': lambda ctx: ctx['object'].pk},
  49. exclude_columns=['parent'],
  50. actions=[
  51. actions.AddObject(
  52. 'wireless.WirelessLANGroup',
  53. label=_('Add Wireless LAN Group'),
  54. url_params={
  55. 'parent': lambda ctx: ctx['object'].pk,
  56. }
  57. ),
  58. ],
  59. ),
  60. ],
  61. )
  62. def get_extra_context(self, request, instance):
  63. groups = instance.get_descendants(include_self=True)
  64. return {
  65. 'related_models': self.get_related_models(request, groups),
  66. }
  67. @register_model_view(WirelessLANGroup, 'add', detail=False)
  68. @register_model_view(WirelessLANGroup, 'edit')
  69. class WirelessLANGroupEditView(generic.ObjectEditView):
  70. queryset = WirelessLANGroup.objects.all()
  71. form = forms.WirelessLANGroupForm
  72. @register_model_view(WirelessLANGroup, 'delete')
  73. class WirelessLANGroupDeleteView(generic.ObjectDeleteView):
  74. queryset = WirelessLANGroup.objects.all()
  75. @register_model_view(WirelessLANGroup, 'bulk_import', path='import', detail=False)
  76. class WirelessLANGroupBulkImportView(generic.BulkImportView):
  77. queryset = WirelessLANGroup.objects.all()
  78. model_form = forms.WirelessLANGroupImportForm
  79. @register_model_view(WirelessLANGroup, 'bulk_edit', path='edit', detail=False)
  80. class WirelessLANGroupBulkEditView(generic.BulkEditView):
  81. queryset = WirelessLANGroup.objects.add_related_count(
  82. WirelessLANGroup.objects.all(),
  83. WirelessLAN,
  84. 'group',
  85. 'wirelesslan_count',
  86. cumulative=True
  87. )
  88. filterset = filtersets.WirelessLANGroupFilterSet
  89. table = tables.WirelessLANGroupTable
  90. form = forms.WirelessLANGroupBulkEditForm
  91. @register_model_view(WirelessLANGroup, 'bulk_rename', path='rename', detail=False)
  92. class WirelessLANGroupBulkRenameView(generic.BulkRenameView):
  93. queryset = WirelessLANGroup.objects.all()
  94. filterset = filtersets.WirelessLANGroupFilterSet
  95. @register_model_view(WirelessLANGroup, 'bulk_delete', path='delete', detail=False)
  96. class WirelessLANGroupBulkDeleteView(generic.BulkDeleteView):
  97. queryset = WirelessLANGroup.objects.add_related_count(
  98. WirelessLANGroup.objects.all(),
  99. WirelessLAN,
  100. 'group',
  101. 'wirelesslan_count',
  102. cumulative=True
  103. )
  104. filterset = filtersets.WirelessLANGroupFilterSet
  105. table = tables.WirelessLANGroupTable
  106. #
  107. # Wireless LANs
  108. #
  109. @register_model_view(WirelessLAN, 'list', path='', detail=False)
  110. class WirelessLANListView(generic.ObjectListView):
  111. queryset = WirelessLAN.objects.annotate(
  112. interface_count=count_related(Interface, 'wireless_lans')
  113. )
  114. filterset = filtersets.WirelessLANFilterSet
  115. filterset_form = forms.WirelessLANFilterForm
  116. table = tables.WirelessLANTable
  117. @register_model_view(WirelessLAN)
  118. class WirelessLANView(generic.ObjectView):
  119. queryset = WirelessLAN.objects.all()
  120. layout = layout.SimpleLayout(
  121. left_panels=[
  122. panels.WirelessLANPanel(),
  123. TagsPanel(),
  124. CommentsPanel(),
  125. ],
  126. right_panels=[
  127. panels.WirelessAuthenticationPanel(),
  128. CustomFieldsPanel(),
  129. ],
  130. bottom_panels=[
  131. ObjectsTablePanel(
  132. model='dcim.Interface',
  133. title=_('Attached Interfaces'),
  134. filters={'wireless_lan_id': lambda ctx: ctx['object'].pk},
  135. ),
  136. ],
  137. )
  138. @register_model_view(WirelessLAN, 'add', detail=False)
  139. @register_model_view(WirelessLAN, 'edit')
  140. class WirelessLANEditView(generic.ObjectEditView):
  141. queryset = WirelessLAN.objects.all()
  142. form = forms.WirelessLANForm
  143. @register_model_view(WirelessLAN, 'delete')
  144. class WirelessLANDeleteView(generic.ObjectDeleteView):
  145. queryset = WirelessLAN.objects.all()
  146. @register_model_view(WirelessLAN, 'bulk_import', path='import', detail=False)
  147. class WirelessLANBulkImportView(generic.BulkImportView):
  148. queryset = WirelessLAN.objects.all()
  149. model_form = forms.WirelessLANImportForm
  150. @register_model_view(WirelessLAN, 'bulk_edit', path='edit', detail=False)
  151. class WirelessLANBulkEditView(generic.BulkEditView):
  152. queryset = WirelessLAN.objects.all()
  153. filterset = filtersets.WirelessLANFilterSet
  154. table = tables.WirelessLANTable
  155. form = forms.WirelessLANBulkEditForm
  156. @register_model_view(WirelessLAN, 'bulk_rename', path='rename', detail=False)
  157. class WirelessLANBulkRenameView(generic.BulkRenameView):
  158. queryset = WirelessLAN.objects.all()
  159. field_name = 'ssid'
  160. filterset = filtersets.WirelessLANFilterSet
  161. @register_model_view(WirelessLAN, 'bulk_delete', path='delete', detail=False)
  162. class WirelessLANBulkDeleteView(generic.BulkDeleteView):
  163. queryset = WirelessLAN.objects.all()
  164. filterset = filtersets.WirelessLANFilterSet
  165. table = tables.WirelessLANTable
  166. #
  167. # Wireless Links
  168. #
  169. @register_model_view(WirelessLink, 'list', path='', detail=False)
  170. class WirelessLinkListView(generic.ObjectListView):
  171. queryset = WirelessLink.objects.all()
  172. filterset = filtersets.WirelessLinkFilterSet
  173. filterset_form = forms.WirelessLinkFilterForm
  174. table = tables.WirelessLinkTable
  175. @register_model_view(WirelessLink)
  176. class WirelessLinkView(generic.ObjectView):
  177. queryset = WirelessLink.objects.all()
  178. layout = layout.SimpleLayout(
  179. left_panels=[
  180. panels.WirelessLinkInterfacePanel('interface_a', title=_('Interface A')),
  181. panels.WirelessLinkPropertiesPanel(),
  182. TagsPanel(),
  183. CommentsPanel(),
  184. ],
  185. right_panels=[
  186. panels.WirelessLinkInterfacePanel('interface_b', title=_('Interface B')),
  187. panels.WirelessAuthenticationPanel(),
  188. CustomFieldsPanel(),
  189. ],
  190. )
  191. @register_model_view(WirelessLink, 'add', detail=False)
  192. @register_model_view(WirelessLink, 'edit')
  193. class WirelessLinkEditView(generic.ObjectEditView):
  194. queryset = WirelessLink.objects.all()
  195. form = forms.WirelessLinkForm
  196. @register_model_view(WirelessLink, 'delete')
  197. class WirelessLinkDeleteView(generic.ObjectDeleteView):
  198. queryset = WirelessLink.objects.all()
  199. @register_model_view(WirelessLink, 'bulk_import', path='import', detail=False)
  200. class WirelessLinkBulkImportView(generic.BulkImportView):
  201. queryset = WirelessLink.objects.all()
  202. model_form = forms.WirelessLinkImportForm
  203. @register_model_view(WirelessLink, 'bulk_edit', path='edit', detail=False)
  204. class WirelessLinkBulkEditView(generic.BulkEditView):
  205. queryset = WirelessLink.objects.all()
  206. filterset = filtersets.WirelessLinkFilterSet
  207. table = tables.WirelessLinkTable
  208. form = forms.WirelessLinkBulkEditForm
  209. @register_model_view(WirelessLink, 'bulk_rename', path='rename', detail=False)
  210. class WirelessLinkBulkRenameView(generic.BulkRenameView):
  211. queryset = WirelessLink.objects.all()
  212. field_name = 'ssid'
  213. filterset = filtersets.WirelessLinkFilterSet
  214. @register_model_view(WirelessLink, 'bulk_delete', path='delete', detail=False)
  215. class WirelessLinkBulkDeleteView(generic.BulkDeleteView):
  216. queryset = WirelessLink.objects.all()
  217. filterset = filtersets.WirelessLinkFilterSet
  218. table = tables.WirelessLinkTable