2016-03-01 11:23:03 -05:00
|
|
|
from django.contrib import messages
|
|
|
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
2016-05-03 15:46:30 -04:00
|
|
|
from django.db.models import Count
|
|
|
|
from django.shortcuts import get_object_or_404, render
|
2016-03-01 11:23:03 -05:00
|
|
|
|
2016-05-03 15:46:30 -04:00
|
|
|
from utilities.views import BulkImportView, BulkEditView, BulkDeleteView, ObjectListView, ObjectAddView,\
|
|
|
|
ObjectEditView, ObjectDeleteView
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
from .filters import CircuitFilter
|
2016-05-13 12:44:03 -04:00
|
|
|
from .forms import CircuitTypeForm, CircuitTypeBulkDeleteForm, CircuitForm, CircuitImportForm, CircuitBulkEditForm,\
|
|
|
|
CircuitBulkDeleteForm, CircuitFilterForm, ProviderForm, ProviderImportForm, ProviderBulkEditForm,\
|
|
|
|
ProviderBulkDeleteForm
|
|
|
|
from .models import Circuit, CircuitType, Provider
|
|
|
|
from .tables import CircuitTable, CircuitTypeTable, ProviderTable
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Providers
|
|
|
|
#
|
|
|
|
|
2016-03-04 11:05:00 -05:00
|
|
|
class ProviderListView(ObjectListView):
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset = Provider.objects.annotate(count_circuits=Count('circuits'))
|
2016-03-04 11:05:00 -05:00
|
|
|
table = ProviderTable
|
2016-05-13 11:51:50 -04:00
|
|
|
edit_permissions = ['circuits.change_provider', 'circuits.delete_provider']
|
2016-03-04 11:05:00 -05:00
|
|
|
template_name = 'circuits/provider_list.html'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
def provider(request, slug):
|
|
|
|
|
|
|
|
provider = get_object_or_404(Provider, slug=slug)
|
|
|
|
circuits = Circuit.objects.filter(provider=provider).select_related('site', 'interface__device')
|
|
|
|
|
|
|
|
return render(request, 'circuits/provider.html', {
|
|
|
|
'provider': provider,
|
|
|
|
'circuits': circuits,
|
|
|
|
})
|
|
|
|
|
|
|
|
|
2016-05-03 15:46:30 -04:00
|
|
|
class ProviderAddView(PermissionRequiredMixin, ObjectAddView):
|
|
|
|
permission_required = 'circuits.add_provider'
|
|
|
|
model = Provider
|
|
|
|
form_class = ProviderForm
|
|
|
|
template_name = 'circuits/provider_edit.html'
|
|
|
|
cancel_url = 'circuits:provider_list'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2016-05-03 15:46:30 -04:00
|
|
|
class ProviderEditView(PermissionRequiredMixin, ObjectEditView):
|
|
|
|
permission_required = 'circuits.change_provider'
|
|
|
|
model = Provider
|
|
|
|
form_class = ProviderForm
|
|
|
|
template_name = 'circuits/provider_edit.html'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2016-05-03 15:46:30 -04:00
|
|
|
class ProviderDeleteView(PermissionRequiredMixin, ObjectDeleteView):
|
|
|
|
permission_required = 'circuits.delete_provider'
|
|
|
|
model = Provider
|
|
|
|
redirect_url = 'circuits:provider_list'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
class ProviderBulkImportView(PermissionRequiredMixin, BulkImportView):
|
|
|
|
permission_required = 'circuits.add_provider'
|
|
|
|
form = ProviderImportForm
|
|
|
|
table = ProviderTable
|
|
|
|
template_name = 'circuits/provider_import.html'
|
|
|
|
obj_list_url = 'circuits:provider_list'
|
|
|
|
|
|
|
|
|
|
|
|
class ProviderBulkEditView(PermissionRequiredMixin, BulkEditView):
|
|
|
|
permission_required = 'circuits.change_provider'
|
|
|
|
cls = Provider
|
|
|
|
form = ProviderBulkEditForm
|
|
|
|
template_name = 'circuits/provider_bulk_edit.html'
|
2016-04-25 15:39:35 -04:00
|
|
|
default_redirect_url = 'circuits:provider_list'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
def update_objects(self, pk_list, form):
|
|
|
|
|
|
|
|
fields_to_update = {}
|
|
|
|
for field in ['asn', 'account', 'portal_url', 'noc_contact', 'admin_contact', 'comments']:
|
|
|
|
if form.cleaned_data[field]:
|
|
|
|
fields_to_update[field] = form.cleaned_data[field]
|
|
|
|
|
|
|
|
updated_count = self.cls.objects.filter(pk__in=pk_list).update(**fields_to_update)
|
|
|
|
messages.success(self.request, "Updated {} providers".format(updated_count))
|
|
|
|
|
|
|
|
|
|
|
|
class ProviderBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|
|
|
permission_required = 'circuits.delete_provider'
|
|
|
|
cls = Provider
|
|
|
|
form = ProviderBulkDeleteForm
|
2016-04-25 15:39:35 -04:00
|
|
|
default_redirect_url = 'circuits:provider_list'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2016-05-13 12:44:03 -04:00
|
|
|
#
|
|
|
|
# Circuit Types
|
|
|
|
#
|
|
|
|
|
|
|
|
class CircuitTypeListView(ObjectListView):
|
|
|
|
queryset = CircuitType.objects.annotate(circuit_count=Count('circuits'))
|
|
|
|
table = CircuitTypeTable
|
|
|
|
edit_permissions = ['circuits.change_circuittype', 'circuits.delete_circuittype']
|
|
|
|
template_name = 'circuits/circuittype_list.html'
|
|
|
|
|
|
|
|
|
|
|
|
class CircuitTypeAddView(PermissionRequiredMixin, ObjectAddView):
|
|
|
|
permission_required = 'circuits.add_circuittype'
|
|
|
|
model = CircuitType
|
|
|
|
form_class = CircuitTypeForm
|
|
|
|
cancel_url = 'circuits:circuittype_list'
|
|
|
|
|
|
|
|
|
|
|
|
class CircuitTypeEditView(PermissionRequiredMixin, ObjectEditView):
|
|
|
|
permission_required = 'circuits.change_circuittype'
|
|
|
|
model = CircuitType
|
|
|
|
form_class = CircuitTypeForm
|
|
|
|
return_url = 'circuits:circuittype_list'
|
|
|
|
|
|
|
|
|
|
|
|
class CircuitTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|
|
|
permission_required = 'circuits.delete_circuittype'
|
|
|
|
cls = CircuitType
|
|
|
|
form = CircuitTypeBulkDeleteForm
|
|
|
|
default_redirect_url = 'circuits:circuittype_list'
|
|
|
|
|
|
|
|
|
2016-03-01 11:23:03 -05:00
|
|
|
#
|
|
|
|
# Circuits
|
|
|
|
#
|
|
|
|
|
2016-03-04 11:05:00 -05:00
|
|
|
class CircuitListView(ObjectListView):
|
2016-03-01 11:23:03 -05:00
|
|
|
queryset = Circuit.objects.select_related('provider', 'type', 'site')
|
2016-03-04 11:05:00 -05:00
|
|
|
filter = CircuitFilter
|
|
|
|
filter_form = CircuitFilterForm
|
|
|
|
table = CircuitTable
|
2016-05-13 11:51:50 -04:00
|
|
|
edit_permissions = ['circuits.change_circuit', 'circuits.delete_circuit']
|
2016-03-04 11:05:00 -05:00
|
|
|
template_name = 'circuits/circuit_list.html'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
def circuit(request, pk):
|
|
|
|
|
|
|
|
circuit = get_object_or_404(Circuit, pk=pk)
|
|
|
|
|
|
|
|
return render(request, 'circuits/circuit.html', {
|
|
|
|
'circuit': circuit,
|
|
|
|
})
|
|
|
|
|
|
|
|
|
2016-05-03 15:46:30 -04:00
|
|
|
class CircuitAddView(PermissionRequiredMixin, ObjectAddView):
|
|
|
|
permission_required = 'circuits.add_circuit'
|
|
|
|
model = Circuit
|
|
|
|
form_class = CircuitForm
|
|
|
|
template_name = 'circuits/circuit_edit.html'
|
|
|
|
cancel_url = 'circuits:circuit_list'
|
|
|
|
fields_initial = ['site']
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2016-05-03 15:46:30 -04:00
|
|
|
class CircuitEditView(PermissionRequiredMixin, ObjectEditView):
|
|
|
|
permission_required = 'circuits.change_circuit'
|
|
|
|
model = Circuit
|
|
|
|
form_class = CircuitForm
|
|
|
|
template_name = 'circuits/circuit_edit.html'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
2016-05-03 15:46:30 -04:00
|
|
|
class CircuitDeleteView(PermissionRequiredMixin, ObjectDeleteView):
|
|
|
|
permission_required = 'circuits.delete_circuit'
|
|
|
|
model = Circuit
|
|
|
|
redirect_url = 'circuits:circuit_list'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
class CircuitBulkImportView(PermissionRequiredMixin, BulkImportView):
|
|
|
|
permission_required = 'circuits.add_circuit'
|
|
|
|
form = CircuitImportForm
|
|
|
|
table = CircuitTable
|
|
|
|
template_name = 'circuits/circuit_import.html'
|
|
|
|
obj_list_url = 'circuits:circuit_list'
|
|
|
|
|
|
|
|
|
|
|
|
class CircuitBulkEditView(PermissionRequiredMixin, BulkEditView):
|
|
|
|
permission_required = 'circuits.change_circuit'
|
|
|
|
cls = Circuit
|
|
|
|
form = CircuitBulkEditForm
|
|
|
|
template_name = 'circuits/circuit_bulk_edit.html'
|
2016-04-25 15:39:35 -04:00
|
|
|
default_redirect_url = 'circuits:circuit_list'
|
2016-03-01 11:23:03 -05:00
|
|
|
|
|
|
|
def update_objects(self, pk_list, form):
|
|
|
|
|
|
|
|
fields_to_update = {}
|
|
|
|
for field in ['type', 'provider', 'port_speed', 'commit_rate', 'comments']:
|
|
|
|
if form.cleaned_data[field]:
|
|
|
|
fields_to_update[field] = form.cleaned_data[field]
|
|
|
|
|
|
|
|
updated_count = self.cls.objects.filter(pk__in=pk_list).update(**fields_to_update)
|
|
|
|
messages.success(self.request, "Updated {} circuits".format(updated_count))
|
|
|
|
|
|
|
|
|
|
|
|
class CircuitBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|
|
|
permission_required = 'circuits.delete_circuit'
|
|
|
|
cls = Circuit
|
|
|
|
form = CircuitBulkDeleteForm
|
2016-04-25 15:39:35 -04:00
|
|
|
default_redirect_url = 'circuits:circuit_list'
|