1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Initial work on a front end for managing DeviceTypes

This commit is contained in:
Jeremy Stretch
2016-03-04 14:39:39 -05:00
parent 0b1df1e60d
commit 32f6b3694a
12 changed files with 474 additions and 9 deletions

View File

@@ -15,19 +15,21 @@ from utilities.error_handlers import handle_protectederror
from utilities.forms import ConfirmationForm
from utilities.views import ObjectListView, BulkImportView, BulkEditView, BulkDeleteView
from .filters import RackFilter, DeviceFilter, ConsoleConnectionFilter, PowerConnectionFilter, InterfaceConnectionFilter
from .filters import RackFilter, DeviceTypeFilter, DeviceFilter, ConsoleConnectionFilter, PowerConnectionFilter, \
InterfaceConnectionFilter
from .forms import SiteForm, SiteImportForm, RackForm, RackImportForm, RackBulkEditForm, RackBulkDeleteForm, \
RackFilterForm, DeviceForm, DeviceImportForm, DeviceBulkEditForm, DeviceBulkDeleteForm, DeviceFilterForm, \
RackFilterForm, DeviceTypeForm, DeviceTypeBulkEditForm, DeviceTypeBulkDeleteForm, DeviceTypeFilterForm, \
DeviceForm, DeviceImportForm, DeviceBulkEditForm, DeviceBulkDeleteForm, DeviceFilterForm, \
ConsolePortForm, ConsolePortCreateForm, ConsolePortConnectionForm, ConsoleConnectionImportForm, \
ConsoleServerPortForm, ConsoleServerPortCreateForm, ConsoleServerPortConnectionForm, PowerPortForm, \
PowerPortCreateForm, PowerPortConnectionForm, PowerConnectionImportForm, PowerOutletForm, PowerOutletCreateForm, \
PowerOutletConnectionForm, InterfaceForm, InterfaceCreateForm, InterfaceBulkCreateForm, InterfaceConnectionForm, \
InterfaceConnectionDeletionForm, InterfaceConnectionImportForm, ConsoleConnectionFilterForm, \
PowerConnectionFilterForm, InterfaceConnectionFilterForm, IPAddressForm
from .models import Site, Rack, Device, ConsolePort, ConsoleServerPort, PowerPort, \
PowerOutlet, Interface, InterfaceConnection, Module, CONNECTION_STATUS_CONNECTED
from .tables import SiteTable, RackTable, RackBulkEditTable, DeviceTable, DeviceBulkEditTable, DeviceImportTable, \
ConsoleConnectionTable, PowerConnectionTable, InterfaceConnectionTable
from .models import Site, Rack, DeviceType, Device, ConsolePort, ConsoleServerPort, PowerPort, PowerOutlet, Interface, \
InterfaceConnection, Module, CONNECTION_STATUS_CONNECTED
from .tables import SiteTable, RackTable, RackBulkEditTable, DeviceTypeTable, DeviceTypeBulkEditTable, DeviceTable, \
DeviceBulkEditTable, DeviceImportTable, ConsoleConnectionTable, PowerConnectionTable, InterfaceConnectionTable
EXPANSION_PATTERN = '\[(\d+-\d+)\]'
@@ -307,6 +309,125 @@ class RackBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
redirect_url = 'dcim:rack_list'
#
# Device types
#
class DeviceTypeListView(ObjectListView):
queryset = DeviceType.objects.select_related('manufacturer')
filter = DeviceTypeFilter
filter_form = DeviceTypeFilterForm
table = DeviceTypeTable
edit_table = DeviceTypeBulkEditTable
edit_table_permissions = ['dcim.change_devicetype', 'dcim.delete_devicetype']
template_name = 'dcim/devicetype_list.html'
def devicetype(request, pk):
devicetype = get_object_or_404(DeviceType, pk=pk)
return render(request, 'dcim/devicetype.html', {
'devicetype': devicetype,
})
@permission_required('dcim.add_devicetype')
def devicetype_add(request):
if request.method == 'POST':
form = DeviceTypeForm(request.POST)
if form.is_valid():
devicetype = form.save()
messages.success(request, "Added new device type: {}".format(devicetype))
if '_addanother' in request.POST:
return redirect('dcim:devicetype_add')
else:
return redirect('dcim:devicetype', pk=devicetype.pk)
else:
form = DeviceTypeForm()
return render(request, 'dcim/devicetype_edit.html', {
'form': form,
'cancel_url': reverse('dcim:devicetype_list'),
})
@permission_required('dcim.change_devicetype')
def devicetype_edit(request, pk):
devicetype = get_object_or_404(DeviceType, pk=pk)
if request.method == 'POST':
form = DeviceTypeForm(request.POST, instance=devicetype)
if form.is_valid():
devicetype = form.save()
messages.success(request, "Modified device type {}".format(devicetype))
return redirect('dcim:devicetype', pk=devicetype.pk)
else:
form = DeviceTypeForm(instance=devicetype)
return render(request, 'dcim/devicetype_edit.html', {
'devicetype': devicetype,
'form': form,
'cancel_url': reverse('dcim:devicetype', kwargs={'pk': devicetype.pk}),
})
@permission_required('dcim.delete_devicetype')
def devicetype_delete(request, pk):
devicetype = get_object_or_404(DeviceType, pk=pk)
if request.method == 'POST':
form = ConfirmationForm(request.POST)
if form.is_valid():
try:
devicetype.delete()
messages.success(request, "Device type {} has been deleted".format(devicetype))
return redirect('dcim:devicetype_list')
except ProtectedError, e:
handle_protectederror(devicetype, request, e)
return redirect('dcim:devicetype', pk=devicetype.pk)
else:
form = ConfirmationForm()
return render(request, 'dcim/devicetype_delete.html', {
'devicetype': device,
'form': form,
'cancel_url': reverse('dcim:devicetype', kwargs={'pk': devicetype.pk}),
})
class DeviceTypeBulkEditView(PermissionRequiredMixin, BulkEditView):
permission_required = 'dcim.change_devicetype'
cls = DeviceType
form = DeviceTypeBulkEditForm
template_name = 'dcim/devicetype_bulk_edit.html'
redirect_url = 'dcim:devicetype_list'
def update_objects(self, pk_list, form):
fields_to_update = {}
for field in ['manufacturer', 'u_height']:
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 {} device types".format(updated_count))
class DeviceTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
permission_required = 'dcim.delete_devicetype'
cls = DeviceType
form = DeviceTypeBulkDeleteForm
template_name = 'dcim/devicetype_bulk_delete.html'
redirect_url = 'dcim:devicetype_list'
#
# Devices
#