From 3a47e0e2edb68d5ab1f44bfe5449bf5d224bf433 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 16 Oct 2020 15:09:23 -0400 Subject: [PATCH] Convert device power ports list to table --- netbox/dcim/tables/devices.py | 32 ++++++++- netbox/dcim/tables/template_code.py | 16 +++++ netbox/dcim/views.py | 5 +- netbox/templates/dcim/device.html | 26 ++------ netbox/templates/dcim/inc/powerport.html | 82 ------------------------ 5 files changed, 53 insertions(+), 108 deletions(-) delete mode 100644 netbox/templates/dcim/inc/powerport.html diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 84460a632..92d2be138 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -12,18 +12,19 @@ from utilities.tables import ( ) from .template_code import ( CABLETERMINATION, CONSOLEPORT_BUTTONS, CONSOLESERVERPORT_BUTTONS, DEVICE_LINK, INTERFACE_IPADDRESSES, - INTERFACE_TAGGED_VLANS, + INTERFACE_TAGGED_VLANS, POWERPORT_BUTTONS, ) __all__ = ( 'ConsolePortTable', 'ConsoleServerPortTable', + 'DeviceBayTable', 'DeviceConsolePortTable', 'DeviceConsoleServerPortTable', 'DeviceImportTable', - 'DeviceTable', - 'DeviceBayTable', + 'DevicePowerPortTable', 'DeviceRoleTable', + 'DeviceTable', 'FrontPortTable', 'InterfaceTable', 'InventoryItemTable', @@ -309,6 +310,31 @@ class PowerPortTable(DeviceComponentTable, PathEndpointTable): default_columns = ('pk', 'device', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description') +class DevicePowerPortTable(PowerPortTable): + name = tables.TemplateColumn( + template_code=' {{ value }}' + ) + actions = ButtonsColumn( + model=PowerPort, + buttons=('edit', 'delete'), + prepend_template=POWERPORT_BUTTONS + ) + + class Meta(DeviceComponentTable.Meta): + model = PowerPort + fields = ( + 'pk', 'name', 'label', 'type', 'description', 'maximum_draw', 'allocated_draw', 'cable', 'cable_peer', + 'connection', 'tags', 'actions', + ) + default_columns = ( + 'pk', 'name', 'label', 'type', 'maximum_draw', 'allocated_draw', 'description', 'cable', 'cable_peer', + 'actions', + ) + row_attrs = { + 'class': lambda record: record.cable.get_status_class() if record.cable else '' + } + + class PowerOutletTable(DeviceComponentTable, PathEndpointTable): tags = TagColumn( url_name='dcim:poweroutlet_list' diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index 5e2b7e1c6..121b33bd3 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -111,3 +111,19 @@ CONSOLESERVERPORT_BUTTONS = """ {% endif %} """ + +POWERPORT_BUTTONS = """ +{% if record.cable %} + {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %} +{% elif perms.dcim.add_cable %} + + + + +{% endif %} +""" diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 0de680420..aa00ad1ff 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1038,6 +1038,9 @@ class DeviceView(ObjectView): powerports = PowerPort.objects.restrict(request.user, 'view').filter(device=device).prefetch_related( 'cable', '_path__destination', ) + powerport_table = tables.DevicePowerPortTable(powerports, orderable=False) + if request.user.has_perm('dcim.change_powerport') or request.user.has_perm('dcim.delete_powerport'): + powerport_table.columns.show('pk') # Power outlets poweroutlets = PowerOutlet.objects.restrict(request.user, 'view').filter(device=device).prefetch_related( @@ -1088,7 +1091,7 @@ class DeviceView(ObjectView): 'device': device, 'consoleport_table': consoleport_table, 'consoleserverport_table': consoleserverport_table, - 'powerports': powerports, + 'powerport_table': powerport_table, 'poweroutlets': poweroutlets, 'interfaces': interfaces, 'frontports': frontports, diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index 962d1127f..d9c1e55b8 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -137,7 +137,7 @@ Console Server Ports {% badge consoleserverport_table.rows|length %}
  • - Power Ports {% badge powerports|length %} + Power Ports {% badge powerport_table.rows|length %}
  • Power Outlets {% badge poweroutlets|length %} @@ -744,27 +744,9 @@
    Power Ports
    - - - - {% if perms.dcim.change_consoleport or perms.dcim.delete_consoleport %} - - {% endif %} - - - - - - - - - - {% for pp in powerports %} - {% include 'dcim/inc/powerport.html' %} - {% endfor %} -
    NameTypeDrawDescriptionCableConnection
    + {% include 'responsive_table.html' with table=powerport_table %}