views.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. from django.contrib.auth.mixins import PermissionRequiredMixin
  2. from django.db.models import Count
  3. from django.shortcuts import get_object_or_404, render
  4. from extras.models import Graph, GRAPH_TYPE_PROVIDER
  5. from utilities.views import (
  6. BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
  7. )
  8. from . import filters, forms, tables
  9. from .models import Circuit, CircuitType, Provider
  10. #
  11. # Providers
  12. #
  13. class ProviderListView(ObjectListView):
  14. queryset = Provider.objects.annotate(count_circuits=Count('circuits'))
  15. filter = filters.ProviderFilter
  16. filter_form = forms.ProviderFilterForm
  17. table = tables.ProviderTable
  18. edit_permissions = ['circuits.change_provider', 'circuits.delete_provider']
  19. template_name = 'circuits/provider_list.html'
  20. def provider(request, slug):
  21. provider = get_object_or_404(Provider, slug=slug)
  22. circuits = Circuit.objects.filter(provider=provider).select_related('site', 'interface__device')
  23. show_graphs = Graph.objects.filter(type=GRAPH_TYPE_PROVIDER).exists()
  24. return render(request, 'circuits/provider.html', {
  25. 'provider': provider,
  26. 'circuits': circuits,
  27. 'show_graphs': show_graphs,
  28. })
  29. class ProviderEditView(PermissionRequiredMixin, ObjectEditView):
  30. permission_required = 'circuits.change_provider'
  31. model = Provider
  32. form_class = forms.ProviderForm
  33. template_name = 'circuits/provider_edit.html'
  34. obj_list_url = 'circuits:provider_list'
  35. class ProviderDeleteView(PermissionRequiredMixin, ObjectDeleteView):
  36. permission_required = 'circuits.delete_provider'
  37. model = Provider
  38. redirect_url = 'circuits:provider_list'
  39. class ProviderBulkImportView(PermissionRequiredMixin, BulkImportView):
  40. permission_required = 'circuits.add_provider'
  41. form = forms.ProviderImportForm
  42. table = tables.ProviderTable
  43. template_name = 'circuits/provider_import.html'
  44. obj_list_url = 'circuits:provider_list'
  45. class ProviderBulkEditView(PermissionRequiredMixin, BulkEditView):
  46. permission_required = 'circuits.change_provider'
  47. cls = Provider
  48. form = forms.ProviderBulkEditForm
  49. template_name = 'circuits/provider_bulk_edit.html'
  50. default_redirect_url = 'circuits:provider_list'
  51. class ProviderBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  52. permission_required = 'circuits.delete_provider'
  53. cls = Provider
  54. default_redirect_url = 'circuits:provider_list'
  55. #
  56. # Circuit Types
  57. #
  58. class CircuitTypeListView(ObjectListView):
  59. queryset = CircuitType.objects.annotate(circuit_count=Count('circuits'))
  60. table = tables.CircuitTypeTable
  61. edit_permissions = ['circuits.change_circuittype', 'circuits.delete_circuittype']
  62. template_name = 'circuits/circuittype_list.html'
  63. class CircuitTypeEditView(PermissionRequiredMixin, ObjectEditView):
  64. permission_required = 'circuits.change_circuittype'
  65. model = CircuitType
  66. form_class = forms.CircuitTypeForm
  67. obj_list_url = 'circuits:circuittype_list'
  68. use_obj_view = False
  69. class CircuitTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  70. permission_required = 'circuits.delete_circuittype'
  71. cls = CircuitType
  72. default_redirect_url = 'circuits:circuittype_list'
  73. #
  74. # Circuits
  75. #
  76. class CircuitListView(ObjectListView):
  77. queryset = Circuit.objects.select_related('provider', 'type', 'tenant', 'site')
  78. filter = filters.CircuitFilter
  79. filter_form = forms.CircuitFilterForm
  80. table = tables.CircuitTable
  81. edit_permissions = ['circuits.change_circuit', 'circuits.delete_circuit']
  82. template_name = 'circuits/circuit_list.html'
  83. def circuit(request, pk):
  84. circuit = get_object_or_404(Circuit, pk=pk)
  85. return render(request, 'circuits/circuit.html', {
  86. 'circuit': circuit,
  87. })
  88. class CircuitEditView(PermissionRequiredMixin, ObjectEditView):
  89. permission_required = 'circuits.change_circuit'
  90. model = Circuit
  91. form_class = forms.CircuitForm
  92. fields_initial = ['site']
  93. template_name = 'circuits/circuit_edit.html'
  94. obj_list_url = 'circuits:circuit_list'
  95. class CircuitDeleteView(PermissionRequiredMixin, ObjectDeleteView):
  96. permission_required = 'circuits.delete_circuit'
  97. model = Circuit
  98. redirect_url = 'circuits:circuit_list'
  99. class CircuitBulkImportView(PermissionRequiredMixin, BulkImportView):
  100. permission_required = 'circuits.add_circuit'
  101. form = forms.CircuitImportForm
  102. table = tables.CircuitTable
  103. template_name = 'circuits/circuit_import.html'
  104. obj_list_url = 'circuits:circuit_list'
  105. class CircuitBulkEditView(PermissionRequiredMixin, BulkEditView):
  106. permission_required = 'circuits.change_circuit'
  107. cls = Circuit
  108. form = forms.CircuitBulkEditForm
  109. template_name = 'circuits/circuit_bulk_edit.html'
  110. default_redirect_url = 'circuits:circuit_list'
  111. class CircuitBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  112. permission_required = 'circuits.delete_circuit'
  113. cls = Circuit
  114. default_redirect_url = 'circuits:circuit_list'