views.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. from django.db.models import Count
  2. from core.models import ObjectChange
  3. from core.tables import ObjectChangeTable
  4. from netbox.object_actions import AddObject, BulkDelete, BulkEdit, BulkExport, BulkImport, BulkRename
  5. from netbox.ui import layout
  6. from netbox.views import generic
  7. from users.ui import panels
  8. from utilities.query import count_related
  9. from utilities.views import GetRelatedModelsMixin, register_model_view
  10. from . import filtersets, forms, tables
  11. from .models import Group, User, ObjectPermission, Owner, OwnerGroup, Token
  12. #
  13. # Tokens
  14. #
  15. @register_model_view(Token, 'list', path='', detail=False)
  16. class TokenListView(generic.ObjectListView):
  17. queryset = Token.objects.all()
  18. filterset = filtersets.TokenFilterSet
  19. filterset_form = forms.TokenFilterForm
  20. table = tables.TokenTable
  21. actions = (AddObject, BulkImport, BulkExport, BulkEdit, BulkDelete)
  22. @register_model_view(Token)
  23. class TokenView(generic.ObjectView):
  24. queryset = Token.objects.all()
  25. layout = layout.SimpleLayout(
  26. left_panels=[
  27. panels.TokenPanel(),
  28. ],
  29. right_panels=[
  30. panels.TokenExamplePanel(),
  31. ],
  32. )
  33. @register_model_view(Token, 'add', detail=False)
  34. @register_model_view(Token, 'edit')
  35. class TokenEditView(generic.ObjectEditView):
  36. queryset = Token.objects.all()
  37. form = forms.TokenForm
  38. template_name = 'users/token_edit.html'
  39. @register_model_view(Token, 'delete')
  40. class TokenDeleteView(generic.ObjectDeleteView):
  41. queryset = Token.objects.all()
  42. @register_model_view(Token, 'bulk_import', path='import', detail=False)
  43. class TokenBulkImportView(generic.BulkImportView):
  44. queryset = Token.objects.all()
  45. model_form = forms.TokenImportForm
  46. @register_model_view(Token, 'bulk_edit', path='edit', detail=False)
  47. class TokenBulkEditView(generic.BulkEditView):
  48. queryset = Token.objects.all()
  49. table = tables.TokenTable
  50. form = forms.TokenBulkEditForm
  51. @register_model_view(Token, 'bulk_delete', path='delete', detail=False)
  52. class TokenBulkDeleteView(generic.BulkDeleteView):
  53. queryset = Token.objects.all()
  54. table = tables.TokenTable
  55. #
  56. # Users
  57. #
  58. @register_model_view(User, 'list', path='', detail=False)
  59. class UserListView(generic.ObjectListView):
  60. queryset = User.objects.all()
  61. filterset = filtersets.UserFilterSet
  62. filterset_form = forms.UserFilterForm
  63. table = tables.UserTable
  64. @register_model_view(User)
  65. class UserView(generic.ObjectView):
  66. queryset = User.objects.all()
  67. template_name = 'users/user.html'
  68. def get_extra_context(self, request, instance):
  69. changelog = ObjectChange.objects.valid_models().restrict(request.user, 'view').filter(user=instance)[:20]
  70. changelog_table = ObjectChangeTable(changelog)
  71. changelog_table.orderable = False
  72. changelog_table.configure(request)
  73. return {
  74. 'changelog_table': changelog_table,
  75. }
  76. @register_model_view(User, 'add', detail=False)
  77. @register_model_view(User, 'edit')
  78. class UserEditView(generic.ObjectEditView):
  79. queryset = User.objects.all()
  80. form = forms.UserForm
  81. @register_model_view(User, 'delete')
  82. class UserDeleteView(generic.ObjectDeleteView):
  83. queryset = User.objects.all()
  84. @register_model_view(User, 'bulk_import', path='import', detail=False)
  85. class UserBulkImportView(generic.BulkImportView):
  86. queryset = User.objects.all()
  87. model_form = forms.UserImportForm
  88. @register_model_view(User, 'bulk_edit', path='edit', detail=False)
  89. class UserBulkEditView(generic.BulkEditView):
  90. queryset = User.objects.all()
  91. filterset = filtersets.UserFilterSet
  92. table = tables.UserTable
  93. form = forms.UserBulkEditForm
  94. @register_model_view(User, 'bulk_rename', path='rename', detail=False)
  95. class UserBulkRenameView(generic.BulkRenameView):
  96. queryset = User.objects.all()
  97. field_name = 'username'
  98. filterset = filtersets.UserFilterSet
  99. @register_model_view(User, 'bulk_delete', path='delete', detail=False)
  100. class UserBulkDeleteView(generic.BulkDeleteView):
  101. queryset = User.objects.all()
  102. filterset = filtersets.UserFilterSet
  103. table = tables.UserTable
  104. #
  105. # Groups
  106. #
  107. @register_model_view(Group, 'list', path='', detail=False)
  108. class GroupListView(generic.ObjectListView):
  109. queryset = Group.objects.annotate(users_count=Count('user')).order_by('name')
  110. filterset = filtersets.GroupFilterSet
  111. filterset_form = forms.GroupFilterForm
  112. table = tables.GroupTable
  113. @register_model_view(Group)
  114. class GroupView(generic.ObjectView):
  115. queryset = Group.objects.all()
  116. template_name = 'users/group.html'
  117. @register_model_view(Group, 'add', detail=False)
  118. @register_model_view(Group, 'edit')
  119. class GroupEditView(generic.ObjectEditView):
  120. queryset = Group.objects.all()
  121. form = forms.GroupForm
  122. @register_model_view(Group, 'delete')
  123. class GroupDeleteView(generic.ObjectDeleteView):
  124. queryset = Group.objects.all()
  125. @register_model_view(Group, 'bulk_import', path='import', detail=False)
  126. class GroupBulkImportView(generic.BulkImportView):
  127. queryset = Group.objects.all()
  128. model_form = forms.GroupImportForm
  129. @register_model_view(Group, 'bulk_edit', path='edit', detail=False)
  130. class GroupBulkEditView(generic.BulkEditView):
  131. queryset = Group.objects.all()
  132. filterset = filtersets.GroupFilterSet
  133. table = tables.GroupTable
  134. form = forms.GroupBulkEditForm
  135. @register_model_view(Group, 'bulk_rename', path='rename', detail=False)
  136. class GroupBulkRenameView(generic.BulkRenameView):
  137. queryset = Group.objects.all()
  138. filterset = filtersets.GroupFilterSet
  139. @register_model_view(Group, 'bulk_delete', path='delete', detail=False)
  140. class GroupBulkDeleteView(generic.BulkDeleteView):
  141. queryset = Group.objects.annotate(users_count=Count('user')).order_by('name')
  142. filterset = filtersets.GroupFilterSet
  143. table = tables.GroupTable
  144. #
  145. # ObjectPermissions
  146. #
  147. @register_model_view(ObjectPermission, 'list', path='', detail=False)
  148. class ObjectPermissionListView(generic.ObjectListView):
  149. queryset = ObjectPermission.objects.all()
  150. filterset = filtersets.ObjectPermissionFilterSet
  151. filterset_form = forms.ObjectPermissionFilterForm
  152. table = tables.ObjectPermissionTable
  153. actions = (AddObject, BulkExport, BulkEdit, BulkRename, BulkDelete)
  154. @register_model_view(ObjectPermission)
  155. class ObjectPermissionView(generic.ObjectView):
  156. queryset = ObjectPermission.objects.all()
  157. template_name = 'users/objectpermission.html'
  158. @register_model_view(ObjectPermission, 'add', detail=False)
  159. @register_model_view(ObjectPermission, 'edit')
  160. class ObjectPermissionEditView(generic.ObjectEditView):
  161. queryset = ObjectPermission.objects.all()
  162. form = forms.ObjectPermissionForm
  163. @register_model_view(ObjectPermission, 'delete')
  164. class ObjectPermissionDeleteView(generic.ObjectDeleteView):
  165. queryset = ObjectPermission.objects.all()
  166. filterset = filtersets.ObjectPermissionFilterSet
  167. @register_model_view(ObjectPermission, 'bulk_edit', path='edit', detail=False)
  168. class ObjectPermissionBulkEditView(generic.BulkEditView):
  169. queryset = ObjectPermission.objects.all()
  170. filterset = filtersets.ObjectPermissionFilterSet
  171. table = tables.ObjectPermissionTable
  172. form = forms.ObjectPermissionBulkEditForm
  173. @register_model_view(ObjectPermission, 'bulk_rename', path='rename', detail=False)
  174. class ObjectPermissionBulkRenameView(generic.BulkRenameView):
  175. queryset = ObjectPermission.objects.all()
  176. @register_model_view(ObjectPermission, 'bulk_delete', path='delete', detail=False)
  177. class ObjectPermissionBulkDeleteView(generic.BulkDeleteView):
  178. queryset = ObjectPermission.objects.all()
  179. filterset = filtersets.ObjectPermissionFilterSet
  180. table = tables.ObjectPermissionTable
  181. #
  182. # Owner groups
  183. #
  184. @register_model_view(OwnerGroup, 'list', path='', detail=False)
  185. class OwnerGroupListView(generic.ObjectListView):
  186. queryset = OwnerGroup.objects.annotate(
  187. owner_count=count_related(Owner, 'group')
  188. )
  189. filterset = filtersets.OwnerGroupFilterSet
  190. filterset_form = forms.OwnerGroupFilterForm
  191. table = tables.OwnerGroupTable
  192. @register_model_view(OwnerGroup)
  193. class OwnerGroupView(GetRelatedModelsMixin, generic.ObjectView):
  194. queryset = OwnerGroup.objects.all()
  195. template_name = 'users/ownergroup.html'
  196. def get_extra_context(self, request, instance):
  197. return {
  198. 'related_models': self.get_related_models(request, instance),
  199. }
  200. @register_model_view(OwnerGroup, 'add', detail=False)
  201. @register_model_view(OwnerGroup, 'edit')
  202. class OwnerGroupEditView(generic.ObjectEditView):
  203. queryset = OwnerGroup.objects.all()
  204. form = forms.OwnerGroupForm
  205. @register_model_view(OwnerGroup, 'delete')
  206. class OwnerGroupDeleteView(generic.ObjectDeleteView):
  207. queryset = OwnerGroup.objects.all()
  208. @register_model_view(OwnerGroup, 'bulk_import', path='import', detail=False)
  209. class OwnerGroupBulkImportView(generic.BulkImportView):
  210. queryset = OwnerGroup.objects.all()
  211. model_form = forms.OwnerGroupImportForm
  212. @register_model_view(OwnerGroup, 'bulk_edit', path='edit', detail=False)
  213. class OwnerGroupBulkEditView(generic.BulkEditView):
  214. queryset = OwnerGroup.objects.all()
  215. filterset = filtersets.OwnerGroupFilterSet
  216. table = tables.OwnerGroupTable
  217. form = forms.OwnerGroupBulkEditForm
  218. @register_model_view(OwnerGroup, 'bulk_rename', path='rename', detail=False)
  219. class OwnerGroupBulkRenameView(generic.BulkRenameView):
  220. queryset = OwnerGroup.objects.all()
  221. @register_model_view(OwnerGroup, 'bulk_delete', path='delete', detail=False)
  222. class OwnerGroupBulkDeleteView(generic.BulkDeleteView):
  223. queryset = OwnerGroup.objects.all()
  224. filterset = filtersets.OwnerGroupFilterSet
  225. table = tables.OwnerGroupTable
  226. #
  227. # Owners
  228. #
  229. @register_model_view(Owner, 'list', path='', detail=False)
  230. class OwnerListView(generic.ObjectListView):
  231. queryset = Owner.objects.all()
  232. filterset = filtersets.OwnerFilterSet
  233. filterset_form = forms.OwnerFilterForm
  234. table = tables.OwnerTable
  235. @register_model_view(Owner)
  236. class OwnerView(GetRelatedModelsMixin, generic.ObjectView):
  237. queryset = Owner.objects.all()
  238. template_name = 'users/owner.html'
  239. def get_extra_context(self, request, instance):
  240. return {
  241. 'related_models': self.get_related_models(
  242. request,
  243. instance,
  244. omit=(Group, User),
  245. ),
  246. }
  247. @register_model_view(Owner, 'add', detail=False)
  248. @register_model_view(Owner, 'edit')
  249. class OwnerEditView(generic.ObjectEditView):
  250. queryset = Owner.objects.all()
  251. form = forms.OwnerForm
  252. @register_model_view(Owner, 'delete')
  253. class OwnerDeleteView(generic.ObjectDeleteView):
  254. queryset = Owner.objects.all()
  255. @register_model_view(Owner, 'bulk_import', path='import', detail=False)
  256. class OwnerBulkImportView(generic.BulkImportView):
  257. queryset = Owner.objects.all()
  258. model_form = forms.OwnerImportForm
  259. @register_model_view(Owner, 'bulk_edit', path='edit', detail=False)
  260. class OwnerBulkEditView(generic.BulkEditView):
  261. queryset = Owner.objects.all()
  262. filterset = filtersets.OwnerFilterSet
  263. table = tables.OwnerTable
  264. form = forms.OwnerBulkEditForm
  265. @register_model_view(Owner, 'bulk_rename', path='rename', detail=False)
  266. class OwnerBulkRenameView(generic.BulkRenameView):
  267. queryset = Owner.objects.all()
  268. @register_model_view(Owner, 'bulk_delete', path='delete', detail=False)
  269. class OwnerBulkDeleteView(generic.BulkDeleteView):
  270. queryset = Owner.objects.all()
  271. filterset = filtersets.OwnerFilterSet
  272. table = tables.OwnerTable