Introduce base table classes with an 'owner' column for primary, organizational, and nested group models

This commit is contained in:
Jeremy Stretch
2025-10-22 13:43:13 -04:00
parent 57daa9f4a4
commit 59082d0364
30 changed files with 316 additions and 428 deletions

View File

@@ -1,11 +1,9 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from circuits.models import * from circuits.models import *
from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from netbox.tables import NetBoxTable, columns
from .columns import CommitRateColumn from .columns import CommitRateColumn
__all__ = ( __all__ = (
@@ -24,7 +22,7 @@ CIRCUITTERMINATION_LINK = """
""" """
class CircuitTypeTable(NetBoxTable): class CircuitTypeTable(OrganizationalModelTable):
name = tables.Column( name = tables.Column(
linkify=True, linkify=True,
verbose_name=_('Name'), verbose_name=_('Name'),
@@ -39,7 +37,7 @@ class CircuitTypeTable(NetBoxTable):
verbose_name=_('Circuits') verbose_name=_('Circuits')
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = CircuitType model = CircuitType
fields = ( fields = (
'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'tags', 'created', 'last_updated', 'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'tags', 'created', 'last_updated',
@@ -48,7 +46,7 @@ class CircuitTypeTable(NetBoxTable):
default_columns = ('pk', 'name', 'circuit_count', 'color', 'description') default_columns = ('pk', 'name', 'circuit_count', 'color', 'description')
class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
cid = tables.Column( cid = tables.Column(
linkify=True, linkify=True,
verbose_name=_('Circuit ID') verbose_name=_('Circuit ID')
@@ -79,9 +77,6 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
verbose_name=_('Commit Rate') verbose_name=_('Commit Rate')
) )
distance = columns.DistanceColumn() distance = columns.DistanceColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments')
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='circuits:circuit_list' url_name='circuits:circuit_list'
) )
@@ -90,7 +85,7 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
linkify_item=True linkify_item=True
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Circuit model = Circuit
fields = ( fields = (
'pk', 'id', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'tenant_group', 'pk', 'id', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'tenant_group',
@@ -163,7 +158,7 @@ class CircuitTerminationTable(NetBoxTable):
) )
class CircuitGroupTable(NetBoxTable): class CircuitGroupTable(OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -177,7 +172,7 @@ class CircuitGroupTable(NetBoxTable):
url_name='circuits:circuitgroup_list' url_name='circuits:circuitgroup_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = CircuitGroup model = CircuitGroup
fields = ( fields = (
'pk', 'name', 'description', 'circuit_group_assignment_count', 'tags', 'pk', 'name', 'description', 'circuit_group_assignment_count', 'tags',

View File

@@ -1,10 +1,10 @@
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from circuits.models import *
from django_tables2.utils import Accessor from django_tables2.utils import Accessor
from tenancy.tables import ContactsColumnMixin
from netbox.tables import NetBoxTable, columns from circuits.models import *
from netbox.tables import PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin
__all__ = ( __all__ = (
'ProviderTable', 'ProviderTable',
@@ -13,7 +13,7 @@ __all__ = (
) )
class ProviderTable(ContactsColumnMixin, NetBoxTable): class ProviderTable(ContactsColumnMixin, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -42,14 +42,11 @@ class ProviderTable(ContactsColumnMixin, NetBoxTable):
url_params={'provider_id': 'pk'}, url_params={'provider_id': 'pk'},
verbose_name=_('Circuits') verbose_name=_('Circuits')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='circuits:provider_list' url_name='circuits:provider_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Provider model = Provider
fields = ( fields = (
'pk', 'id', 'name', 'accounts', 'account_count', 'asns', 'asn_count', 'circuit_count', 'description', 'pk', 'id', 'name', 'accounts', 'account_count', 'asns', 'asn_count', 'circuit_count', 'description',
@@ -58,7 +55,7 @@ class ProviderTable(ContactsColumnMixin, NetBoxTable):
default_columns = ('pk', 'name', 'account_count', 'circuit_count') default_columns = ('pk', 'name', 'account_count', 'circuit_count')
class ProviderAccountTable(ContactsColumnMixin, NetBoxTable): class ProviderAccountTable(ContactsColumnMixin, PrimaryModelTable):
account = tables.Column( account = tables.Column(
linkify=True, linkify=True,
verbose_name=_('Account'), verbose_name=_('Account'),
@@ -76,14 +73,11 @@ class ProviderAccountTable(ContactsColumnMixin, NetBoxTable):
url_params={'provider_account_id': 'pk'}, url_params={'provider_account_id': 'pk'},
verbose_name=_('Circuits') verbose_name=_('Circuits')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='circuits:provideraccount_list' url_name='circuits:provideraccount_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = ProviderAccount model = ProviderAccount
fields = ( fields = (
'pk', 'id', 'account', 'name', 'provider', 'circuit_count', 'comments', 'contacts', 'tags', 'created', 'pk', 'id', 'account', 'name', 'provider', 'circuit_count', 'comments', 'contacts', 'tags', 'created',
@@ -92,7 +86,7 @@ class ProviderAccountTable(ContactsColumnMixin, NetBoxTable):
default_columns = ('pk', 'account', 'name', 'provider', 'circuit_count') default_columns = ('pk', 'account', 'name', 'provider', 'circuit_count')
class ProviderNetworkTable(NetBoxTable): class ProviderNetworkTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -101,14 +95,11 @@ class ProviderNetworkTable(NetBoxTable):
verbose_name=_('Provider'), verbose_name=_('Provider'),
linkify=True linkify=True
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='circuits:providernetwork_list' url_name='circuits:providernetwork_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = ProviderNetwork model = ProviderNetwork
fields = ( fields = (
'pk', 'id', 'name', 'provider', 'service_id', 'description', 'comments', 'created', 'last_updated', 'tags', 'pk', 'id', 'name', 'provider', 'service_id', 'description', 'comments', 'created', 'last_updated', 'tags',

View File

@@ -2,7 +2,7 @@ import django_tables2 as tables
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from circuits.models import * from circuits.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
__all__ = ( __all__ = (
@@ -12,7 +12,7 @@ __all__ = (
) )
class VirtualCircuitTypeTable(NetBoxTable): class VirtualCircuitTypeTable(OrganizationalModelTable):
name = tables.Column( name = tables.Column(
linkify=True, linkify=True,
verbose_name=_('Name'), verbose_name=_('Name'),
@@ -27,7 +27,7 @@ class VirtualCircuitTypeTable(NetBoxTable):
verbose_name=_('Circuits') verbose_name=_('Circuits')
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = VirtualCircuitType model = VirtualCircuitType
fields = ( fields = (
'pk', 'id', 'name', 'virtual_circuit_count', 'color', 'description', 'slug', 'tags', 'created', 'pk', 'id', 'name', 'virtual_circuit_count', 'color', 'description', 'slug', 'tags', 'created',
@@ -36,7 +36,7 @@ class VirtualCircuitTypeTable(NetBoxTable):
default_columns = ('pk', 'name', 'virtual_circuit_count', 'color', 'description') default_columns = ('pk', 'name', 'virtual_circuit_count', 'color', 'description')
class VirtualCircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class VirtualCircuitTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
cid = tables.Column( cid = tables.Column(
linkify=True, linkify=True,
verbose_name=_('Circuit ID') verbose_name=_('Circuit ID')
@@ -63,14 +63,11 @@ class VirtualCircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable)
url_params={'virtual_circuit_id': 'pk'}, url_params={'virtual_circuit_id': 'pk'},
verbose_name=_('Terminations') verbose_name=_('Terminations')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments')
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='circuits:virtualcircuit_list' url_name='circuits:virtualcircuit_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = VirtualCircuit model = VirtualCircuit
fields = ( fields = (
'pk', 'id', 'cid', 'provider', 'provider_account', 'provider_network', 'type', 'status', 'tenant', 'pk', 'id', 'cid', 'provider', 'provider_account', 'provider_network', 'type', 'status', 'tenant',

View File

@@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from core.models import * from core.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, PrimaryModelTable, columns
from .columns import BackendTypeColumn from .columns import BackendTypeColumn
from .template_code import DATA_SOURCE_SYNC_BUTTON from .template_code import DATA_SOURCE_SYNC_BUTTON
@@ -12,7 +12,7 @@ __all__ = (
) )
class DataSourceTable(NetBoxTable): class DataSourceTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True, linkify=True,
@@ -42,7 +42,7 @@ class DataSourceTable(NetBoxTable):
extra_buttons=DATA_SOURCE_SYNC_BUTTON, extra_buttons=DATA_SOURCE_SYNC_BUTTON,
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = DataSource model = DataSource
fields = ( fields = (
'pk', 'id', 'name', 'type', 'status', 'enabled', 'source_url', 'description', 'sync_interval', 'comments', 'pk', 'id', 'name', 'type', 'status', 'enabled', 'source_url', 'description', 'sync_interval', 'comments',

View File

@@ -1,11 +1,11 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django_tables2.utils import Accessor
from django.utils.html import escape from django.utils.html import escape
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor
from dcim.models import Cable from dcim.models import Cable
from netbox.tables import NetBoxTable, columns from netbox.tables import PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import TenancyColumnsMixin
from .template_code import CABLE_LENGTH from .template_code import CABLE_LENGTH
@@ -48,7 +48,7 @@ class CableTerminationsColumn(tables.Column):
# Cables # Cables
# #
class CableTable(TenancyColumnsMixin, NetBoxTable): class CableTable(TenancyColumnsMixin, PrimaryModelTable):
a_terminations = CableTerminationsColumn( a_terminations = CableTerminationsColumn(
cable_end='A', cable_end='A',
orderable=False, orderable=False,
@@ -117,12 +117,11 @@ class CableTable(TenancyColumnsMixin, NetBoxTable):
verbose_name=_('Color Name'), verbose_name=_('Color Name'),
orderable=False orderable=False
) )
comments = columns.MarkdownColumn()
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:cable_list' url_name='dcim:cable_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Cable model = Cable
fields = ( fields = (
'pk', 'id', 'label', 'a_terminations', 'b_terminations', 'device_a', 'device_b', 'rack_a', 'rack_b', 'pk', 'id', 'label', 'a_terminations', 'b_terminations', 'device_a', 'device_b', 'rack_a', 'rack_b',

View File

@@ -3,7 +3,7 @@ from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor from django_tables2.utils import Accessor
from dcim import models from dcim import models
from netbox.tables import NetBoxTable, columns from netbox.tables import NestedGroupModelTable, NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from .template_code import * from .template_code import *
@@ -58,15 +58,7 @@ MACADDRESS_COPY_BUTTON = """
# Device roles # Device roles
# #
class DeviceRoleTable(NetBoxTable): class DeviceRoleTable(NestedGroupModelTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
device_count = columns.LinkedCountColumn( device_count = columns.LinkedCountColumn(
viewname='dcim:device_list', viewname='dcim:device_list',
url_params={'role_id': 'pk'}, url_params={'role_id': 'pk'},
@@ -89,7 +81,7 @@ class DeviceRoleTable(NetBoxTable):
url_name='dcim:devicerole_list' url_name='dcim:devicerole_list'
) )
class Meta(NetBoxTable.Meta): class Meta(NestedGroupModelTable.Meta):
model = models.DeviceRole model = models.DeviceRole
fields = ( fields = (
'pk', 'id', 'name', 'parent', 'device_count', 'vm_count', 'color', 'vm_role', 'config_template', 'pk', 'id', 'name', 'parent', 'device_count', 'vm_count', 'color', 'vm_role', 'config_template',
@@ -102,15 +94,7 @@ class DeviceRoleTable(NetBoxTable):
# Platforms # Platforms
# #
class PlatformTable(NetBoxTable): class PlatformTable(NestedGroupModelTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
manufacturer = tables.Column( manufacturer = tables.Column(
verbose_name=_('Manufacturer'), verbose_name=_('Manufacturer'),
linkify=True linkify=True
@@ -133,7 +117,7 @@ class PlatformTable(NetBoxTable):
url_name='dcim:platform_list' url_name='dcim:platform_list'
) )
class Meta(NetBoxTable.Meta): class Meta(NestedGroupModelTable.Meta):
model = models.Platform model = models.Platform
fields = ( fields = (
'pk', 'id', 'name', 'parent', 'manufacturer', 'device_count', 'vm_count', 'slug', 'config_template', 'pk', 'id', 'name', 'parent', 'manufacturer', 'device_count', 'vm_count', 'slug', 'config_template',
@@ -148,7 +132,7 @@ class PlatformTable(NetBoxTable):
# Devices # Devices
# #
class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
name = tables.TemplateColumn( name = tables.TemplateColumn(
verbose_name=_('Name'), verbose_name=_('Name'),
template_code=DEVICE_LINK, template_code=DEVICE_LINK,
@@ -249,7 +233,6 @@ class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
accessor='parent_bay', accessor='parent_bay',
linkify=True linkify=True
) )
comments = columns.MarkdownColumn()
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:device_list' url_name='dcim:device_list'
) )
@@ -284,7 +267,7 @@ class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
verbose_name=_('Inventory items') verbose_name=_('Inventory items')
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = models.Device model = models.Device
fields = ( fields = (
'pk', 'id', 'name', 'status', 'tenant', 'tenant_group', 'role', 'manufacturer', 'device_type', 'pk', 'id', 'name', 'status', 'tenant', 'tenant_group', 'role', 'manufacturer', 'device_type',
@@ -1050,7 +1033,7 @@ class DeviceInventoryItemTable(InventoryItemTable):
) )
class InventoryItemRoleTable(NetBoxTable): class InventoryItemRoleTable(OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -1067,7 +1050,7 @@ class InventoryItemRoleTable(NetBoxTable):
url_name='dcim:inventoryitemrole_list' url_name='dcim:inventoryitemrole_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = models.InventoryItemRole model = models.InventoryItemRole
fields = ( fields = (
'pk', 'id', 'name', 'inventoryitem_count', 'color', 'description', 'slug', 'tags', 'actions', 'pk', 'id', 'name', 'inventoryitem_count', 'color', 'description', 'slug', 'tags', 'actions',
@@ -1079,7 +1062,7 @@ class InventoryItemRoleTable(NetBoxTable):
# Virtual chassis # Virtual chassis
# #
class VirtualChassisTable(NetBoxTable): class VirtualChassisTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -1093,14 +1076,11 @@ class VirtualChassisTable(NetBoxTable):
url_params={'virtual_chassis_id': 'pk'}, url_params={'virtual_chassis_id': 'pk'},
verbose_name=_('Members') verbose_name=_('Members')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:virtualchassis_list' url_name='dcim:virtualchassis_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = models.VirtualChassis model = models.VirtualChassis
fields = ( fields = (
'pk', 'id', 'name', 'domain', 'master', 'member_count', 'description', 'comments', 'tags', 'created', 'pk', 'id', 'name', 'domain', 'master', 'member_count', 'description', 'comments', 'tags', 'created',
@@ -1109,7 +1089,7 @@ class VirtualChassisTable(NetBoxTable):
default_columns = ('pk', 'name', 'domain', 'master', 'member_count') default_columns = ('pk', 'name', 'domain', 'master', 'member_count')
class VirtualDeviceContextTable(TenancyColumnsMixin, NetBoxTable): class VirtualDeviceContextTable(TenancyColumnsMixin, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -1140,14 +1120,11 @@ class VirtualDeviceContextTable(TenancyColumnsMixin, NetBoxTable):
url_params={'vdc_id': 'pk'}, url_params={'vdc_id': 'pk'},
verbose_name=_('Interfaces') verbose_name=_('Interfaces')
) )
comments = columns.MarkdownColumn()
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:virtualdevicecontext_list' url_name='dcim:virtualdevicecontext_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = models.VirtualDeviceContext model = models.VirtualDeviceContext
fields = ( fields = (
'pk', 'id', 'name', 'status', 'identifier', 'tenant', 'tenant_group', 'primary_ip', 'primary_ip4', 'pk', 'id', 'name', 'status', 'identifier', 'tenant', 'tenant_group', 'primary_ip', 'primary_ip4',
@@ -1158,7 +1135,7 @@ class VirtualDeviceContextTable(TenancyColumnsMixin, NetBoxTable):
) )
class MACAddressTable(NetBoxTable): class MACAddressTable(PrimaryModelTable):
mac_address = tables.TemplateColumn( mac_address = tables.TemplateColumn(
template_code=MACADDRESS_LINK, template_code=MACADDRESS_LINK,
verbose_name=_('MAC Address') verbose_name=_('MAC Address')
@@ -1181,7 +1158,7 @@ class MACAddressTable(NetBoxTable):
extra_buttons=MACADDRESS_COPY_BUTTON extra_buttons=MACADDRESS_COPY_BUTTON
) )
class Meta(DeviceComponentTable.Meta): class Meta(PrimaryModelTable.Meta):
model = models.MACAddress model = models.MACAddress
fields = ( fields = (
'pk', 'id', 'mac_address', 'assigned_object_parent', 'assigned_object', 'description', 'comments', 'tags', 'pk', 'id', 'mac_address', 'assigned_object_parent', 'assigned_object', 'description', 'comments', 'tags',

View File

@@ -2,7 +2,7 @@ import django_tables2 as tables
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from dcim import models from dcim import models
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin from tenancy.tables import ContactsColumnMixin
from .template_code import MODULAR_COMPONENT_TEMPLATE_BUTTONS, WEIGHT from .template_code import MODULAR_COMPONENT_TEMPLATE_BUTTONS, WEIGHT
@@ -26,7 +26,7 @@ __all__ = (
# Manufacturers # Manufacturers
# #
class ManufacturerTable(ContactsColumnMixin, NetBoxTable): class ManufacturerTable(ContactsColumnMixin, OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -60,7 +60,7 @@ class ManufacturerTable(ContactsColumnMixin, NetBoxTable):
url_name='dcim:manufacturer_list' url_name='dcim:manufacturer_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = models.Manufacturer model = models.Manufacturer
fields = ( fields = (
'pk', 'id', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count', 'pk', 'id', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count',
@@ -76,7 +76,7 @@ class ManufacturerTable(ContactsColumnMixin, NetBoxTable):
# Device types # Device types
# #
class DeviceTypeTable(NetBoxTable): class DeviceTypeTable(PrimaryModelTable):
model = tables.Column( model = tables.Column(
linkify=True, linkify=True,
verbose_name=_('Device Type') verbose_name=_('Device Type')
@@ -93,9 +93,6 @@ class DeviceTypeTable(NetBoxTable):
verbose_name=_('Full Depth'), verbose_name=_('Full Depth'),
false_mark=None false_mark=None
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:devicetype_list' url_name='dcim:devicetype_list'
) )
@@ -148,7 +145,7 @@ class DeviceTypeTable(NetBoxTable):
verbose_name=_('Inventory Items') verbose_name=_('Inventory Items')
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = models.DeviceType model = models.DeviceType
fields = ( fields = (
'pk', 'id', 'model', 'manufacturer', 'default_platform', 'slug', 'part_number', 'u_height', 'pk', 'id', 'model', 'manufacturer', 'default_platform', 'slug', 'part_number', 'u_height',

View File

@@ -1,8 +1,8 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from dcim.models import Module, ModuleType, ModuleTypeProfile from dcim.models import Module, ModuleType, ModuleTypeProfile
from netbox.tables import NetBoxTable, columns from netbox.tables import PrimaryModelTable, columns
from .template_code import MODULETYPEPROFILE_ATTRIBUTES, WEIGHT from .template_code import MODULETYPEPROFILE_ATTRIBUTES, WEIGHT
__all__ = ( __all__ = (
@@ -12,7 +12,7 @@ __all__ = (
) )
class ModuleTypeProfileTable(NetBoxTable): class ModuleTypeProfileTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -23,14 +23,11 @@ class ModuleTypeProfileTable(NetBoxTable):
orderable=False, orderable=False,
verbose_name=_('Attributes') verbose_name=_('Attributes')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:moduletypeprofile_list' url_name='dcim:moduletypeprofile_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = ModuleTypeProfile model = ModuleTypeProfile
fields = ( fields = (
'pk', 'id', 'name', 'description', 'comments', 'tags', 'created', 'last_updated', 'pk', 'id', 'name', 'description', 'comments', 'tags', 'created', 'last_updated',
@@ -40,7 +37,7 @@ class ModuleTypeProfileTable(NetBoxTable):
) )
class ModuleTypeTable(NetBoxTable): class ModuleTypeTable(PrimaryModelTable):
profile = tables.Column( profile = tables.Column(
verbose_name=_('Profile'), verbose_name=_('Profile'),
linkify=True linkify=True
@@ -64,14 +61,11 @@ class ModuleTypeTable(NetBoxTable):
url_params={'module_type_id': 'pk'}, url_params={'module_type_id': 'pk'},
verbose_name=_('Instances') verbose_name=_('Instances')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:moduletype_list' url_name='dcim:moduletype_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = ModuleType model = ModuleType
fields = ( fields = (
'pk', 'id', 'model', 'profile', 'manufacturer', 'part_number', 'airflow', 'weight', 'description', 'pk', 'id', 'model', 'profile', 'manufacturer', 'part_number', 'airflow', 'weight', 'description',
@@ -82,7 +76,7 @@ class ModuleTypeTable(NetBoxTable):
) )
class ModuleTable(NetBoxTable): class ModuleTable(PrimaryModelTable):
device = tables.Column( device = tables.Column(
verbose_name=_('Device'), verbose_name=_('Device'),
linkify=True linkify=True
@@ -103,14 +97,11 @@ class ModuleTable(NetBoxTable):
status = columns.ChoiceFieldColumn( status = columns.ChoiceFieldColumn(
verbose_name=_('Status'), verbose_name=_('Status'),
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:module_list' url_name='dcim:module_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Module model = Module
fields = ( fields = (
'pk', 'id', 'device', 'module_bay', 'manufacturer', 'module_type', 'status', 'serial', 'asset_tag', 'pk', 'id', 'device', 'module_bay', 'manufacturer', 'module_type', 'status', 'serial', 'asset_tag',

View File

@@ -1,10 +1,9 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from dcim.models import PowerFeed, PowerPanel from dcim.models import PowerFeed, PowerPanel
from netbox.tables import PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from netbox.tables import NetBoxTable, columns
from .devices import CableTerminationTable from .devices import CableTerminationTable
__all__ = ( __all__ = (
@@ -17,7 +16,7 @@ __all__ = (
# Power panels # Power panels
# #
class PowerPanelTable(ContactsColumnMixin, NetBoxTable): class PowerPanelTable(ContactsColumnMixin, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -35,14 +34,11 @@ class PowerPanelTable(ContactsColumnMixin, NetBoxTable):
url_params={'power_panel_id': 'pk'}, url_params={'power_panel_id': 'pk'},
verbose_name=_('Power Feeds') verbose_name=_('Power Feeds')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:powerpanel_list' url_name='dcim:powerpanel_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = PowerPanel model = PowerPanel
fields = ( fields = (
'pk', 'id', 'name', 'site', 'location', 'powerfeed_count', 'contacts', 'description', 'comments', 'tags', 'pk', 'id', 'name', 'site', 'location', 'powerfeed_count', 'contacts', 'description', 'comments', 'tags',
@@ -57,7 +53,7 @@ class PowerPanelTable(ContactsColumnMixin, NetBoxTable):
# We're not using PathEndpointTable for PowerFeed because power connections # We're not using PathEndpointTable for PowerFeed because power connections
# cannot traverse pass-through ports. # cannot traverse pass-through ports.
class PowerFeedTable(TenancyColumnsMixin, CableTerminationTable): class PowerFeedTable(TenancyColumnsMixin, CableTerminationTable, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -92,14 +88,11 @@ class PowerFeedTable(TenancyColumnsMixin, CableTerminationTable):
linkify=True, linkify=True,
verbose_name=_('Site'), verbose_name=_('Site'),
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:powerfeed_list' url_name='dcim:powerfeed_list'
) )
class Meta(NetBoxTable.Meta): class Meta(CableTerminationTable.Meta, PrimaryModelTable.Meta):
model = PowerFeed model = PowerFeed
fields = ( fields = (
'pk', 'id', 'name', 'power_panel', 'site', 'rack', 'status', 'type', 'supply', 'voltage', 'amperage', 'pk', 'id', 'name', 'power_panel', 'site', 'rack', 'status', 'type', 'supply', 'voltage', 'amperage',

View File

@@ -1,9 +1,9 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor from django_tables2.utils import Accessor
from dcim.models import Rack, RackReservation, RackRole, RackType from dcim.models import Rack, RackReservation, RackRole, RackType
from netbox.tables import NetBoxTable, columns from netbox.tables import OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from .template_code import OUTER_UNIT, WEIGHT from .template_code import OUTER_UNIT, WEIGHT
@@ -15,11 +15,7 @@ __all__ = (
) )
# class RackRoleTable(OrganizationalModelTable):
# Rack roles
#
class RackRoleTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -36,7 +32,7 @@ class RackRoleTable(NetBoxTable):
url_name='dcim:rackrole_list' url_name='dcim:rackrole_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = RackRole model = RackRole
fields = ( fields = (
'pk', 'id', 'name', 'rack_count', 'color', 'description', 'slug', 'tags', 'actions', 'created', 'pk', 'id', 'name', 'rack_count', 'color', 'description', 'slug', 'tags', 'actions', 'created',
@@ -45,11 +41,7 @@ class RackRoleTable(NetBoxTable):
default_columns = ('pk', 'name', 'rack_count', 'color', 'description') default_columns = ('pk', 'name', 'rack_count', 'color', 'description')
# class RackTypeTable(PrimaryModelTable):
# Rack Types
#
class RackTypeTable(NetBoxTable):
model = tables.Column( model = tables.Column(
verbose_name=_('Model'), verbose_name=_('Model'),
linkify=True linkify=True
@@ -84,9 +76,6 @@ class RackTypeTable(NetBoxTable):
template_code=WEIGHT, template_code=WEIGHT,
order_by=('_abs_max_weight', 'weight_unit') order_by=('_abs_max_weight', 'weight_unit')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
instance_count = columns.LinkedCountColumn( instance_count = columns.LinkedCountColumn(
viewname='dcim:rack_list', viewname='dcim:rack_list',
url_params={'rack_type_id': 'pk'}, url_params={'rack_type_id': 'pk'},
@@ -96,7 +85,7 @@ class RackTypeTable(NetBoxTable):
url_name='dcim:rack_list' url_name='dcim:rack_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = RackType model = RackType
fields = ( fields = (
'pk', 'id', 'model', 'manufacturer', 'form_factor', 'u_height', 'starting_unit', 'width', 'outer_width', 'pk', 'id', 'model', 'manufacturer', 'form_factor', 'u_height', 'starting_unit', 'width', 'outer_width',
@@ -108,11 +97,7 @@ class RackTypeTable(NetBoxTable):
) )
# class RackTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
# Racks
#
class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -144,9 +129,6 @@ class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
template_code="{{ value }}U", template_code="{{ value }}U",
verbose_name=_('Height') verbose_name=_('Height')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
device_count = columns.LinkedCountColumn( device_count = columns.LinkedCountColumn(
viewname='dcim:device_list', viewname='dcim:device_list',
url_params={'rack_id': 'pk'}, url_params={'rack_id': 'pk'},
@@ -186,7 +168,7 @@ class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
order_by=('_abs_max_weight', 'weight_unit') order_by=('_abs_max_weight', 'weight_unit')
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Rack model = Rack
fields = ( fields = (
'pk', 'id', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'tenant_group', 'role', 'pk', 'id', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'tenant_group', 'role',
@@ -201,11 +183,7 @@ class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
) )
# class RackReservationTable(TenancyColumnsMixin, PrimaryModelTable):
# Rack reservations
#
class RackReservationTable(TenancyColumnsMixin, NetBoxTable):
reservation = tables.Column( reservation = tables.Column(
verbose_name=_('Reservation'), verbose_name=_('Reservation'),
accessor='pk', accessor='pk',
@@ -232,14 +210,11 @@ class RackReservationTable(TenancyColumnsMixin, NetBoxTable):
status = columns.ChoiceFieldColumn( status = columns.ChoiceFieldColumn(
verbose_name=_('Status'), verbose_name=_('Status'),
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:rackreservation_list' url_name='dcim:rackreservation_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = RackReservation model = RackReservation
fields = ( fields = (
'pk', 'id', 'reservation', 'site', 'location', 'rack', 'unit_list', 'status', 'user', 'created', 'tenant', 'pk', 'id', 'reservation', 'site', 'location', 'rack', 'unit_list', 'status', 'user', 'created', 'tenant',

View File

@@ -1,10 +1,9 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from dcim.models import Location, Region, Site, SiteGroup from dcim.models import Location, Region, Site, SiteGroup
from netbox.tables import NestedGroupModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from netbox.tables import NetBoxTable, columns
from .template_code import LOCATION_BUTTONS from .template_code import LOCATION_BUTTONS
__all__ = ( __all__ = (
@@ -15,19 +14,7 @@ __all__ = (
) )
# class RegionTable(ContactsColumnMixin, NestedGroupModelTable):
# Regions
#
class RegionTable(ContactsColumnMixin, NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
site_count = columns.LinkedCountColumn( site_count = columns.LinkedCountColumn(
viewname='dcim:site_list', viewname='dcim:site_list',
url_params={'region_id': 'pk'}, url_params={'region_id': 'pk'},
@@ -36,11 +23,8 @@ class RegionTable(ContactsColumnMixin, NetBoxTable):
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:region_list' url_name='dcim:region_list'
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta): class Meta(NestedGroupModelTable.Meta):
model = Region model = Region
fields = ( fields = (
'pk', 'id', 'name', 'parent', 'slug', 'site_count', 'description', 'comments', 'contacts', 'tags', 'pk', 'id', 'name', 'parent', 'slug', 'site_count', 'description', 'comments', 'contacts', 'tags',
@@ -49,19 +33,7 @@ class RegionTable(ContactsColumnMixin, NetBoxTable):
default_columns = ('pk', 'name', 'site_count', 'description') default_columns = ('pk', 'name', 'site_count', 'description')
# class SiteGroupTable(ContactsColumnMixin, NestedGroupModelTable):
# Site groups
#
class SiteGroupTable(ContactsColumnMixin, NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
site_count = columns.LinkedCountColumn( site_count = columns.LinkedCountColumn(
viewname='dcim:site_list', viewname='dcim:site_list',
url_params={'group_id': 'pk'}, url_params={'group_id': 'pk'},
@@ -70,11 +42,8 @@ class SiteGroupTable(ContactsColumnMixin, NetBoxTable):
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:sitegroup_list' url_name='dcim:sitegroup_list'
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta): class Meta(NestedGroupModelTable.Meta):
model = SiteGroup model = SiteGroup
fields = ( fields = (
'pk', 'id', 'name', 'parent', 'slug', 'site_count', 'description', 'comments', 'contacts', 'tags', 'pk', 'id', 'name', 'parent', 'slug', 'site_count', 'description', 'comments', 'contacts', 'tags',
@@ -83,11 +52,7 @@ class SiteGroupTable(ContactsColumnMixin, NetBoxTable):
default_columns = ('pk', 'name', 'site_count', 'description') default_columns = ('pk', 'name', 'site_count', 'description')
# class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
# Sites
#
class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -117,14 +82,11 @@ class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
url_params={'site_id': 'pk'}, url_params={'site_id': 'pk'},
verbose_name=_('Devices') verbose_name=_('Devices')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='dcim:site_list' url_name='dcim:site_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Site model = Site
fields = ( fields = (
'pk', 'id', 'name', 'slug', 'status', 'facility', 'region', 'group', 'tenant', 'tenant_group', 'asns', 'pk', 'id', 'name', 'slug', 'status', 'facility', 'region', 'group', 'tenant', 'tenant_group', 'asns',
@@ -134,19 +96,7 @@ class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
default_columns = ('pk', 'name', 'status', 'facility', 'region', 'group', 'tenant', 'description') default_columns = ('pk', 'name', 'status', 'facility', 'region', 'group', 'tenant', 'description')
# class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NestedGroupModelTable):
# Locations
#
class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
site = tables.Column( site = tables.Column(
verbose_name=_('Site'), verbose_name=_('Site'),
linkify=True linkify=True
@@ -175,11 +125,8 @@ class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
extra_buttons=LOCATION_BUTTONS extra_buttons=LOCATION_BUTTONS
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta): class Meta(NestedGroupModelTable.Meta):
model = Location model = Location
fields = ( fields = (
'pk', 'id', 'name', 'parent', 'site', 'status', 'facility', 'tenant', 'tenant_group', 'rack_count', 'pk', 'id', 'name', 'parent', 'site', 'status', 'facility', 'tenant', 'tenant_group', 'rack_count',

View File

@@ -10,7 +10,7 @@ from core.tables import JobTable
from core.models import Job from core.models import Job
from netbox.constants import EMPTY_TABLE_TEXT from netbox.constants import EMPTY_TABLE_TEXT
from netbox.events import get_event_text from netbox.events import get_event_text
from netbox.tables import BaseTable, NetBoxTable, columns from netbox.tables import BaseTable, NetBoxTable, PrimaryModelTable, columns
from .columns import NotificationActionsColumn from .columns import NotificationActionsColumn
__all__ = ( __all__ = (
@@ -109,6 +109,10 @@ class CustomFieldTable(NetBoxTable):
validation_regex = tables.Column( validation_regex = tables.Column(
verbose_name=_('Validation Regex'), verbose_name=_('Validation Regex'),
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = CustomField model = CustomField
@@ -146,6 +150,10 @@ class CustomFieldChoiceSetTable(NetBoxTable):
verbose_name=_('Order Alphabetically'), verbose_name=_('Order Alphabetically'),
false_mark=None false_mark=None
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = CustomFieldChoiceSet model = CustomFieldChoiceSet
@@ -171,6 +179,10 @@ class CustomLinkTable(NetBoxTable):
verbose_name=_('New Window'), verbose_name=_('New Window'),
false_mark=None false_mark=None
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = CustomLink model = CustomLink
@@ -214,6 +226,10 @@ class ExportTemplateTable(NetBoxTable):
orderable=False, orderable=False,
verbose_name=_('Synced') verbose_name=_('Synced')
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = ExportTemplate model = ExportTemplate
@@ -294,6 +310,10 @@ class SavedFilterTable(NetBoxTable):
verbose_name=_('Shared'), verbose_name=_('Shared'),
false_mark=None false_mark=None
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
def value_parameters(self, value): def value_parameters(self, value):
return json.dumps(value) return json.dumps(value)
@@ -450,6 +470,10 @@ class WebhookTable(NetBoxTable):
ssl_validation = columns.BooleanColumn( ssl_validation = columns.BooleanColumn(
verbose_name=_('SSL Validation') verbose_name=_('SSL Validation')
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='extras:webhook_list' url_name='extras:webhook_list'
) )
@@ -488,6 +512,10 @@ class EventRuleTable(NetBoxTable):
func=get_event_text, func=get_event_text,
orderable=False orderable=False
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='extras:webhook_list' url_name='extras:webhook_list'
) )
@@ -514,6 +542,10 @@ class TagTable(NetBoxTable):
object_types = columns.ContentTypesColumn( object_types = columns.ContentTypesColumn(
verbose_name=_('Object Types'), verbose_name=_('Object Types'),
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = Tag model = Tag
@@ -547,7 +579,7 @@ class TaggedItemTable(NetBoxTable):
fields = ('id', 'content_type', 'content_object') fields = ('id', 'content_type', 'content_object')
class ConfigContextProfileTable(NetBoxTable): class ConfigContextProfileTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -568,7 +600,7 @@ class ConfigContextProfileTable(NetBoxTable):
url_name='extras:configcontextprofile_list' url_name='extras:configcontextprofile_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = ConfigContextProfile model = ConfigContextProfile
fields = ( fields = (
'pk', 'id', 'name', 'description', 'comments', 'data_source', 'data_file', 'is_synced', 'tags', 'created', 'pk', 'id', 'name', 'description', 'comments', 'data_source', 'data_file', 'is_synced', 'tags', 'created',
@@ -601,6 +633,10 @@ class ConfigContextTable(NetBoxTable):
orderable=False, orderable=False,
verbose_name=_('Synced') verbose_name=_('Synced')
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='extras:configcontext_list' url_name='extras:configcontext_list'
) )
@@ -645,6 +681,10 @@ class ConfigTemplateTable(NetBoxTable):
verbose_name=_('As Attachment'), verbose_name=_('As Attachment'),
false_mark=None false_mark=None
) )
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='extras:configtemplate_list' url_name='extras:configtemplate_list'
) )

View File

@@ -2,7 +2,7 @@ import django_tables2 as tables
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from ipam.models import * from ipam.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import TenancyColumnsMixin
__all__ = ( __all__ = (
@@ -11,7 +11,7 @@ __all__ = (
) )
class ASNRangeTable(TenancyColumnsMixin, NetBoxTable): class ASNRangeTable(TenancyColumnsMixin, OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -27,7 +27,7 @@ class ASNRangeTable(TenancyColumnsMixin, NetBoxTable):
verbose_name=_('ASNs') verbose_name=_('ASNs')
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = ASNRange model = ASNRange
fields = ( fields = (
'pk', 'name', 'slug', 'rir', 'start', 'end', 'asn_count', 'tenant', 'tenant_group', 'description', 'tags', 'pk', 'name', 'slug', 'rir', 'start', 'end', 'asn_count', 'tenant', 'tenant_group', 'description', 'tags',
@@ -36,7 +36,7 @@ class ASNRangeTable(TenancyColumnsMixin, NetBoxTable):
default_columns = ('pk', 'name', 'rir', 'start', 'end', 'tenant', 'asn_count', 'description') default_columns = ('pk', 'name', 'rir', 'start', 'end', 'tenant', 'asn_count', 'description')
class ASNTable(TenancyColumnsMixin, NetBoxTable): class ASNTable(TenancyColumnsMixin, PrimaryModelTable):
asn = tables.Column( asn = tables.Column(
verbose_name=_('ASN'), verbose_name=_('ASN'),
linkify=True linkify=True
@@ -65,14 +65,11 @@ class ASNTable(TenancyColumnsMixin, NetBoxTable):
linkify_item=True, linkify_item=True,
verbose_name=_('Sites') verbose_name=_('Sites')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:asn_list' url_name='ipam:asn_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = ASN model = ASN
fields = ( fields = (
'pk', 'asn', 'asn_asdot', 'rir', 'site_count', 'provider_count', 'tenant', 'tenant_group', 'description', 'pk', 'asn', 'asn_asdot', 'rir', 'site_count', 'provider_count', 'tenant', 'tenant_group', 'description',

View File

@@ -1,8 +1,8 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from ipam.models import * from ipam.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, PrimaryModelTable, columns
__all__ = ( __all__ = (
'FHRPGroupTable', 'FHRPGroupTable',
@@ -17,7 +17,7 @@ IPADDRESSES = """
""" """
class FHRPGroupTable(NetBoxTable): class FHRPGroupTable(PrimaryModelTable):
group_id = tables.Column( group_id = tables.Column(
verbose_name=_('Group ID'), verbose_name=_('Group ID'),
linkify=True linkify=True
@@ -30,9 +30,6 @@ class FHRPGroupTable(NetBoxTable):
member_count = tables.Column( member_count = tables.Column(
verbose_name=_('Members') verbose_name=_('Members')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:fhrpgroup_list' url_name='ipam:fhrpgroup_list'
) )
@@ -40,7 +37,7 @@ class FHRPGroupTable(NetBoxTable):
def value_ip_addresses(self, value): def value_ip_addresses(self, value):
return ",".join([str(obj.address) for obj in value.all()]) return ",".join([str(obj.address) for obj in value.all()])
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = FHRPGroup model = FHRPGroup
fields = ( fields = (
'pk', 'group_id', 'protocol', 'name', 'auth_type', 'auth_key', 'description', 'comments', 'ip_addresses', 'pk', 'group_id', 'protocol', 'name', 'auth_type', 'auth_key', 'description', 'comments', 'ip_addresses',

View File

@@ -1,10 +1,10 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor from django_tables2.utils import Accessor
from ipam.models import * from ipam.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin, TenantColumn from tenancy.tables import TenancyColumnsMixin, TenantColumn
from .template_code import * from .template_code import *
@@ -27,7 +27,7 @@ AVAILABLE_LABEL = mark_safe('<span class="badge text-bg-success">Available</span
# RIRs # RIRs
# #
class RIRTable(NetBoxTable): class RIRTable(OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -45,7 +45,7 @@ class RIRTable(NetBoxTable):
url_name='ipam:rir_list' url_name='ipam:rir_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = RIR model = RIR
fields = ( fields = (
'pk', 'id', 'name', 'slug', 'is_private', 'aggregate_count', 'description', 'tags', 'created', 'pk', 'id', 'name', 'slug', 'is_private', 'aggregate_count', 'description', 'tags', 'created',
@@ -58,7 +58,7 @@ class RIRTable(NetBoxTable):
# Aggregates # Aggregates
# #
class AggregateTable(TenancyColumnsMixin, NetBoxTable): class AggregateTable(TenancyColumnsMixin, PrimaryModelTable):
prefix = tables.Column( prefix = tables.Column(
linkify=True, linkify=True,
verbose_name=_('Aggregate'), verbose_name=_('Aggregate'),
@@ -79,9 +79,6 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
accessor='get_utilization', accessor='get_utilization',
orderable=False orderable=False
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:aggregate_list' url_name='ipam:aggregate_list'
) )
@@ -89,7 +86,7 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
extra_buttons=AGGREGATE_COPY_BUTTON extra_buttons=AGGREGATE_COPY_BUTTON
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Aggregate model = Aggregate
fields = ( fields = (
'pk', 'id', 'prefix', 'rir', 'tenant', 'tenant_group', 'child_count', 'utilization', 'date_added', 'pk', 'id', 'prefix', 'rir', 'tenant', 'tenant_group', 'child_count', 'utilization', 'date_added',
@@ -102,7 +99,7 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
# Roles # Roles
# #
class RoleTable(NetBoxTable): class RoleTable(OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -126,7 +123,7 @@ class RoleTable(NetBoxTable):
url_name='ipam:role_list' url_name='ipam:role_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = Role model = Role
fields = ( fields = (
'pk', 'id', 'name', 'slug', 'prefix_count', 'iprange_count', 'vlan_count', 'description', 'weight', 'tags', 'pk', 'id', 'name', 'slug', 'prefix_count', 'iprange_count', 'vlan_count', 'description', 'weight', 'tags',
@@ -154,7 +151,7 @@ class PrefixUtilizationColumn(columns.UtilizationColumn):
""" """
class PrefixTable(TenancyColumnsMixin, NetBoxTable): class PrefixTable(TenancyColumnsMixin, PrimaryModelTable):
prefix = columns.TemplateColumn( prefix = columns.TemplateColumn(
verbose_name=_('Prefix'), verbose_name=_('Prefix'),
template_code=PREFIX_LINK_WITH_DEPTH, template_code=PREFIX_LINK_WITH_DEPTH,
@@ -223,9 +220,6 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
accessor='get_utilization', accessor='get_utilization',
orderable=False orderable=False
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:prefix_list' url_name='ipam:prefix_list'
) )
@@ -233,7 +227,7 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
extra_buttons=PREFIX_COPY_BUTTON extra_buttons=PREFIX_COPY_BUTTON
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Prefix model = Prefix
fields = ( fields = (
'pk', 'id', 'prefix', 'prefix_flat', 'status', 'children', 'vrf', 'utilization', 'tenant', 'tenant_group', 'pk', 'id', 'prefix', 'prefix_flat', 'status', 'children', 'vrf', 'utilization', 'tenant', 'tenant_group',
@@ -252,7 +246,7 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
# #
# IP ranges # IP ranges
# #
class IPRangeTable(TenancyColumnsMixin, NetBoxTable): class IPRangeTable(TenancyColumnsMixin, PrimaryModelTable):
start_address = tables.Column( start_address = tables.Column(
verbose_name=_('Start address'), verbose_name=_('Start address'),
linkify=True linkify=True
@@ -282,14 +276,11 @@ class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
accessor='utilization', accessor='utilization',
orderable=False orderable=False
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:iprange_list' url_name='ipam:iprange_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = IPRange model = IPRange
fields = ( fields = (
'pk', 'id', 'start_address', 'end_address', 'size', 'vrf', 'status', 'role', 'tenant', 'tenant_group', 'pk', 'id', 'start_address', 'end_address', 'size', 'vrf', 'status', 'role', 'tenant', 'tenant_group',
@@ -308,7 +299,7 @@ class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
# IPAddresses # IPAddresses
# #
class IPAddressTable(TenancyColumnsMixin, NetBoxTable): class IPAddressTable(TenancyColumnsMixin, PrimaryModelTable):
address = tables.TemplateColumn( address = tables.TemplateColumn(
template_code=IPADDRESS_LINK, template_code=IPADDRESS_LINK,
verbose_name=_('IP Address') verbose_name=_('IP Address')
@@ -351,9 +342,6 @@ class IPAddressTable(TenancyColumnsMixin, NetBoxTable):
verbose_name=_('Assigned'), verbose_name=_('Assigned'),
false_mark=None false_mark=None
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:ipaddress_list' url_name='ipam:ipaddress_list'
) )
@@ -361,7 +349,7 @@ class IPAddressTable(TenancyColumnsMixin, NetBoxTable):
extra_buttons=IPADDRESS_COPY_BUTTON extra_buttons=IPADDRESS_COPY_BUTTON
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = IPAddress model = IPAddress
fields = ( fields = (
'pk', 'id', 'address', 'vrf', 'status', 'role', 'tenant', 'tenant_group', 'nat_inside', 'nat_outside', 'pk', 'id', 'address', 'vrf', 'status', 'role', 'tenant', 'tenant_group', 'nat_inside', 'nat_outside',

View File

@@ -1,8 +1,8 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from ipam.models import * from ipam.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import PrimaryModelTable, columns
__all__ = ( __all__ = (
'ServiceTable', 'ServiceTable',
@@ -10,7 +10,7 @@ __all__ = (
) )
class ServiceTemplateTable(NetBoxTable): class ServiceTemplateTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -20,14 +20,11 @@ class ServiceTemplateTable(NetBoxTable):
accessor=tables.A('port_list'), accessor=tables.A('port_list'),
order_by=tables.A('ports'), order_by=tables.A('ports'),
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:servicetemplate_list' url_name='ipam:servicetemplate_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = ServiceTemplate model = ServiceTemplate
fields = ( fields = (
'pk', 'id', 'name', 'protocol', 'ports', 'description', 'comments', 'tags', 'created', 'last_updated', 'pk', 'id', 'name', 'protocol', 'ports', 'description', 'comments', 'tags', 'created', 'last_updated',
@@ -35,7 +32,7 @@ class ServiceTemplateTable(NetBoxTable):
default_columns = ('pk', 'name', 'protocol', 'ports', 'description') default_columns = ('pk', 'name', 'protocol', 'ports', 'description')
class ServiceTable(NetBoxTable): class ServiceTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -50,14 +47,11 @@ class ServiceTable(NetBoxTable):
accessor=tables.A('port_list'), accessor=tables.A('port_list'),
order_by=tables.A('ports'), order_by=tables.A('ports'),
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:service_list' url_name='ipam:service_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Service model = Service
fields = ( fields = (
'pk', 'id', 'name', 'parent', 'protocol', 'ports', 'ipaddresses', 'description', 'comments', 'tags', 'pk', 'id', 'name', 'parent', 'protocol', 'ports', 'ipaddresses', 'description', 'comments', 'tags',

View File

@@ -5,7 +5,7 @@ from django_tables2.utils import Accessor
from dcim.models import Interface from dcim.models import Interface
from ipam.models import * from ipam.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin, TenantColumn from tenancy.tables import TenancyColumnsMixin, TenantColumn
from virtualization.models import VMInterface from virtualization.models import VMInterface
from .template_code import * from .template_code import *
@@ -28,7 +28,7 @@ AVAILABLE_LABEL = mark_safe('<span class="badge text-bg-success">Available</span
# VLAN groups # VLAN groups
# #
class VLANGroupTable(TenancyColumnsMixin, NetBoxTable): class VLANGroupTable(TenancyColumnsMixin, OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -62,7 +62,7 @@ class VLANGroupTable(TenancyColumnsMixin, NetBoxTable):
extra_buttons=VLANGROUP_BUTTONS extra_buttons=VLANGROUP_BUTTONS
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = VLANGroup model = VLANGroup
fields = ( fields = (
'pk', 'id', 'name', 'scope_type', 'scope', 'vid_ranges_list', 'vlan_count', 'slug', 'description', 'pk', 'id', 'name', 'scope_type', 'scope', 'vid_ranges_list', 'vlan_count', 'slug', 'description',
@@ -77,7 +77,7 @@ class VLANGroupTable(TenancyColumnsMixin, NetBoxTable):
# VLANs # VLANs
# #
class VLANTable(TenancyColumnsMixin, NetBoxTable): class VLANTable(TenancyColumnsMixin, PrimaryModelTable):
vid = tables.TemplateColumn( vid = tables.TemplateColumn(
template_code=VLAN_LINK, template_code=VLAN_LINK,
verbose_name=_('VID') verbose_name=_('VID')
@@ -120,14 +120,11 @@ class VLANTable(TenancyColumnsMixin, NetBoxTable):
orderable=False, orderable=False,
verbose_name=_('Prefixes') verbose_name=_('Prefixes')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:vlan_list' url_name='ipam:vlan_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = VLAN model = VLAN
fields = ( fields = (
'pk', 'id', 'vid', 'name', 'site', 'group', 'prefixes', 'tenant', 'tenant_group', 'status', 'role', 'pk', 'id', 'vid', 'name', 'site', 'group', 'prefixes', 'tenant', 'tenant_group', 'status', 'role',
@@ -229,7 +226,7 @@ class InterfaceVLANTable(NetBoxTable):
# VLAN Translation # VLAN Translation
# #
class VLANTranslationPolicyTable(NetBoxTable): class VLANTranslationPolicyTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -246,7 +243,7 @@ class VLANTranslationPolicyTable(NetBoxTable):
url_name='ipam:vlantranslationpolicy_list' url_name='ipam:vlantranslationpolicy_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = VLANTranslationPolicy model = VLANTranslationPolicy
fields = ( fields = (
'pk', 'id', 'name', 'rule_count', 'description', 'tags', 'created', 'last_updated', 'pk', 'id', 'name', 'rule_count', 'description', 'tags', 'created', 'last_updated',

View File

@@ -1,8 +1,8 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from ipam.models import * from ipam.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import TenancyColumnsMixin
__all__ = ( __all__ = (
@@ -21,7 +21,7 @@ VRF_TARGETS = """
# VRFs # VRFs
# #
class VRFTable(TenancyColumnsMixin, NetBoxTable): class VRFTable(TenancyColumnsMixin, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -43,14 +43,11 @@ class VRFTable(TenancyColumnsMixin, NetBoxTable):
template_code=VRF_TARGETS, template_code=VRF_TARGETS,
orderable=False orderable=False
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:vrf_list' url_name='ipam:vrf_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = VRF model = VRF
fields = ( fields = (
'pk', 'id', 'name', 'rd', 'tenant', 'tenant_group', 'enforce_unique', 'import_targets', 'export_targets', 'pk', 'id', 'name', 'rd', 'tenant', 'tenant_group', 'enforce_unique', 'import_targets', 'export_targets',
@@ -63,19 +60,16 @@ class VRFTable(TenancyColumnsMixin, NetBoxTable):
# Route targets # Route targets
# #
class RouteTargetTable(TenancyColumnsMixin, NetBoxTable): class RouteTargetTable(TenancyColumnsMixin, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:routetarget_list' url_name='ipam:routetarget_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = RouteTarget model = RouteTarget
fields = ( fields = (
'pk', 'id', 'name', 'tenant', 'tenant_group', 'description', 'comments', 'tags', 'created', 'last_updated', 'pk', 'id', 'name', 'tenant', 'tenant_group', 'description', 'comments', 'tags', 'created', 'last_updated',

View File

@@ -27,7 +27,10 @@ from .template_code import *
__all__ = ( __all__ = (
'BaseTable', 'BaseTable',
'NestedGroupModelTable',
'NetBoxTable', 'NetBoxTable',
'OrganizationalModelTable',
'PrimaryModelTable',
'SearchTable', 'SearchTable',
) )
@@ -267,6 +270,41 @@ class NetBoxTable(BaseTable):
return '' return ''
class PrimaryModelTable(NetBoxTable):
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class OrganizationalModelTable(NetBoxTable):
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class NestedGroupModelTable(NetBoxTable):
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class SearchTable(tables.Table): class SearchTable(tables.Table):
object_type = columns.ContentTypeColumn( object_type = columns.ContentTypeColumn(
verbose_name=_('Type'), verbose_name=_('Type'),

View File

@@ -45,6 +45,12 @@ from netbox.graphql.types import (
PrimaryObjectType, PrimaryObjectType,
) )
from netbox.models import NestedGroupModel, NetBoxModel, OrganizationalModel, PrimaryModel from netbox.models import NestedGroupModel, NetBoxModel, OrganizationalModel, PrimaryModel
from netbox.tables import (
NestedGroupModelTable,
NetBoxTable,
OrganizationalModelTable,
PrimaryModelTable,
)
class FormClassesTestCase(TestCase): class FormClassesTestCase(TestCase):
@@ -199,6 +205,50 @@ class FilterSetClassesTestCase(TestCase):
) )
class TableClassesTestCase(TestCase):
@staticmethod
def get_table_for_model(model):
"""
Import and return the table class for a given model.
"""
app_label = model._meta.app_label
model_name = model.__name__
return import_string(f'{app_label}.tables.{model_name}Table')
@staticmethod
def get_model_table_base_class(model):
"""
Return the base table class for the given model.
"""
if model._meta.app_label == 'dummy_plugin':
return
if issubclass(model, PrimaryModel):
return PrimaryModelTable
if issubclass(model, OrganizationalModel):
return OrganizationalModelTable
if issubclass(model, NestedGroupModel):
return NestedGroupModelTable
if issubclass(model, NetBoxModel):
return NetBoxTable
def test_model_table_base_classes(self):
"""
Check that each table inherits from the appropriate base class.
"""
for model in apps.get_models():
if base_class := self.get_model_table_base_class(model):
table = self.get_table_for_model(model)
self.assertTrue(
issubclass(table, base_class),
f"{table} does not inherit from {base_class}",
)
self.assertTrue(
issubclass(table.Meta, base_class.Meta),
f"{table}.Meta does not inherit from {base_class}.Meta",
)
class SerializerClassesTestCase(TestCase): class SerializerClassesTestCase(TestCase):
@staticmethod @staticmethod

View File

@@ -1,8 +1,8 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor from django_tables2.utils import Accessor
from netbox.tables import NetBoxTable, columns from netbox.tables import NestedGroupModelTable, NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.models import * from tenancy.models import *
from utilities.tables import linkify_phone from utilities.tables import linkify_phone
@@ -14,15 +14,7 @@ __all__ = (
) )
class ContactGroupTable(NetBoxTable): class ContactGroupTable(NestedGroupModelTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
contact_count = columns.LinkedCountColumn( contact_count = columns.LinkedCountColumn(
viewname='tenancy:contact_list', viewname='tenancy:contact_list',
url_params={'group_id': 'pk'}, url_params={'group_id': 'pk'},
@@ -31,11 +23,8 @@ class ContactGroupTable(NetBoxTable):
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='tenancy:contactgroup_list' url_name='tenancy:contactgroup_list'
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta): class Meta(NestedGroupModelTable.Meta):
model = ContactGroup model = ContactGroup
fields = ( fields = (
'pk', 'name', 'parent', 'contact_count', 'description', 'comments', 'slug', 'tags', 'created', 'pk', 'name', 'parent', 'contact_count', 'description', 'comments', 'slug', 'tags', 'created',
@@ -44,7 +33,7 @@ class ContactGroupTable(NetBoxTable):
default_columns = ('pk', 'name', 'contact_count', 'description') default_columns = ('pk', 'name', 'contact_count', 'description')
class ContactRoleTable(NetBoxTable): class ContactRoleTable(OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -53,13 +42,13 @@ class ContactRoleTable(NetBoxTable):
url_name='tenancy:contactrole_list' url_name='tenancy:contactrole_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = ContactRole model = ContactRole
fields = ('pk', 'name', 'description', 'slug', 'tags', 'created', 'last_updated', 'actions') fields = ('pk', 'name', 'description', 'slug', 'tags', 'created', 'last_updated', 'actions')
default_columns = ('pk', 'name', 'description') default_columns = ('pk', 'name', 'description')
class ContactTable(NetBoxTable): class ContactTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -72,9 +61,6 @@ class ContactTable(NetBoxTable):
verbose_name=_('Phone'), verbose_name=_('Phone'),
linkify=linkify_phone, linkify=linkify_phone,
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
assignment_count = columns.LinkedCountColumn( assignment_count = columns.LinkedCountColumn(
viewname='tenancy:contactassignment_list', viewname='tenancy:contactassignment_list',
url_params={'contact_id': 'pk'}, url_params={'contact_id': 'pk'},
@@ -84,7 +70,7 @@ class ContactTable(NetBoxTable):
url_name='tenancy:contact_list' url_name='tenancy:contact_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Contact model = Contact
fields = ( fields = (
'pk', 'name', 'groups', 'title', 'phone', 'email', 'address', 'link', 'description', 'comments', 'pk', 'name', 'groups', 'title', 'phone', 'email', 'address', 'link', 'description', 'comments',

View File

@@ -1,25 +1,17 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from netbox.tables import NestedGroupModelTable, PrimaryModelTable, columns
from tenancy.models import * from tenancy.models import *
from tenancy.tables import ContactsColumnMixin from tenancy.tables import ContactsColumnMixin
from netbox.tables import NetBoxTable, columns
__all__ = ( __all__ = (
'TenantGroupTable', 'TenantGroupTable',
'TenantTable', 'TenantTable',
) )
class TenantGroupTable(NetBoxTable): class TenantGroupTable(NestedGroupModelTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
tenant_count = columns.LinkedCountColumn( tenant_count = columns.LinkedCountColumn(
viewname='tenancy:tenant_list', viewname='tenancy:tenant_list',
url_params={'group_id': 'pk'}, url_params={'group_id': 'pk'},
@@ -28,11 +20,8 @@ class TenantGroupTable(NetBoxTable):
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='tenancy:tenantgroup_list' url_name='tenancy:tenantgroup_list'
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta): class Meta(NestedGroupModelTable.Meta):
model = TenantGroup model = TenantGroup
fields = ( fields = (
'pk', 'id', 'name', 'parent', 'tenant_count', 'description', 'comments', 'slug', 'tags', 'created', 'pk', 'id', 'name', 'parent', 'tenant_count', 'description', 'comments', 'slug', 'tags', 'created',
@@ -41,7 +30,7 @@ class TenantGroupTable(NetBoxTable):
default_columns = ('pk', 'name', 'tenant_count', 'description') default_columns = ('pk', 'name', 'tenant_count', 'description')
class TenantTable(ContactsColumnMixin, NetBoxTable): class TenantTable(ContactsColumnMixin, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -50,14 +39,11 @@ class TenantTable(ContactsColumnMixin, NetBoxTable):
verbose_name=_('Group'), verbose_name=_('Group'),
linkify=True linkify=True
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='tenancy:tenant_list' url_name='tenancy:tenant_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Tenant model = Tenant
fields = ( fields = (
'pk', 'id', 'name', 'slug', 'group', 'description', 'comments', 'contacts', 'tags', 'created', 'pk', 'id', 'name', 'slug', 'group', 'description', 'comments', 'contacts', 'tags', 'created',

View File

@@ -156,7 +156,7 @@ class OwnerTable(NetBoxTable):
linkify_item=('users:group', {'pk': tables.A('pk')}) linkify_item=('users:group', {'pk': tables.A('pk')})
) )
users = columns.ManyToManyColumn( users = columns.ManyToManyColumn(
verbose_name=_('Groups'), verbose_name=_('Users'),
linkify_item=('users:user', {'pk': tables.A('pk')}) linkify_item=('users:user', {'pk': tables.A('pk')})
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(

View File

@@ -1,10 +1,10 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from netbox.tables import OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from virtualization.models import Cluster, ClusterGroup, ClusterType from virtualization.models import Cluster, ClusterGroup, ClusterType
from netbox.tables import NetBoxTable, columns
__all__ = ( __all__ = (
'ClusterTable', 'ClusterTable',
'ClusterGroupTable', 'ClusterGroupTable',
@@ -12,7 +12,7 @@ __all__ = (
) )
class ClusterTypeTable(NetBoxTable): class ClusterTypeTable(OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -26,7 +26,7 @@ class ClusterTypeTable(NetBoxTable):
url_name='virtualization:clustertype_list' url_name='virtualization:clustertype_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = ClusterType model = ClusterType
fields = ( fields = (
'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'created', 'last_updated', 'tags', 'actions', 'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'created', 'last_updated', 'tags', 'actions',
@@ -34,7 +34,7 @@ class ClusterTypeTable(NetBoxTable):
default_columns = ('pk', 'name', 'cluster_count', 'description') default_columns = ('pk', 'name', 'cluster_count', 'description')
class ClusterGroupTable(ContactsColumnMixin, NetBoxTable): class ClusterGroupTable(ContactsColumnMixin, OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -48,7 +48,7 @@ class ClusterGroupTable(ContactsColumnMixin, NetBoxTable):
url_name='virtualization:clustergroup_list' url_name='virtualization:clustergroup_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = ClusterGroup model = ClusterGroup
fields = ( fields = (
'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'contacts', 'tags', 'created', 'last_updated', 'pk', 'id', 'name', 'slug', 'cluster_count', 'description', 'contacts', 'tags', 'created', 'last_updated',
@@ -57,7 +57,7 @@ class ClusterGroupTable(ContactsColumnMixin, NetBoxTable):
default_columns = ('pk', 'name', 'cluster_count', 'description') default_columns = ('pk', 'name', 'cluster_count', 'description')
class ClusterTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class ClusterTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -91,14 +91,11 @@ class ClusterTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
url_params={'cluster_id': 'pk'}, url_params={'cluster_id': 'pk'},
verbose_name=_('VMs') verbose_name=_('VMs')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='virtualization:cluster_list' url_name='virtualization:cluster_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Cluster model = Cluster
fields = ( fields = (
'pk', 'id', 'name', 'type', 'group', 'status', 'tenant', 'tenant_group', 'scope', 'scope_type', 'pk', 'id', 'name', 'type', 'group', 'status', 'tenant', 'tenant_group', 'scope', 'scope_type',

View File

@@ -2,7 +2,7 @@ import django_tables2 as tables
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from dcim.tables.devices import BaseInterfaceTable from dcim.tables.devices import BaseInterfaceTable
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from utilities.templatetags.helpers import humanize_disk_megabytes from utilities.templatetags.helpers import humanize_disk_megabytes
from virtualization.models import VirtualDisk, VirtualMachine, VMInterface from virtualization.models import VirtualDisk, VirtualMachine, VMInterface
@@ -21,7 +21,7 @@ __all__ = (
# Virtual machines # Virtual machines
# #
class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -48,9 +48,6 @@ class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable)
linkify=True, linkify=True,
verbose_name=_('Platform') verbose_name=_('Platform')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
primary_ip4 = tables.Column( primary_ip4 = tables.Column(
linkify=True, linkify=True,
verbose_name=_('IPv4 Address') verbose_name=_('IPv4 Address')
@@ -81,7 +78,7 @@ class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable)
verbose_name=_('Disk'), verbose_name=_('Disk'),
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = VirtualMachine model = VirtualMachine
fields = ( fields = (
'pk', 'id', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'tenant_group', 'vcpus', 'pk', 'id', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'tenant_group', 'vcpus',

View File

@@ -1,7 +1,7 @@
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from netbox.tables import NetBoxTable, columns from netbox.tables import PrimaryModelTable, columns
from vpn.models import * from vpn.models import *
__all__ = ( __all__ = (
@@ -13,7 +13,7 @@ __all__ = (
) )
class IKEProposalTable(NetBoxTable): class IKEProposalTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -33,14 +33,11 @@ class IKEProposalTable(NetBoxTable):
sa_lifetime = tables.Column( sa_lifetime = tables.Column(
verbose_name=_('SA Lifetime') verbose_name=_('SA Lifetime')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='vpn:ikeproposal_list' url_name='vpn:ikeproposal_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = IKEProposal model = IKEProposal
fields = ( fields = (
'pk', 'id', 'name', 'authentication_method', 'encryption_algorithm', 'authentication_algorithm', 'pk', 'id', 'name', 'authentication_method', 'encryption_algorithm', 'authentication_algorithm',
@@ -52,7 +49,7 @@ class IKEProposalTable(NetBoxTable):
) )
class IKEPolicyTable(NetBoxTable): class IKEPolicyTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -70,14 +67,11 @@ class IKEPolicyTable(NetBoxTable):
preshared_key = tables.Column( preshared_key = tables.Column(
verbose_name=_('Pre-shared Key') verbose_name=_('Pre-shared Key')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='vpn:ikepolicy_list' url_name='vpn:ikepolicy_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = IKEPolicy model = IKEPolicy
fields = ( fields = (
'pk', 'id', 'name', 'version', 'mode', 'proposals', 'preshared_key', 'description', 'comments', 'tags', 'pk', 'id', 'name', 'version', 'mode', 'proposals', 'preshared_key', 'description', 'comments', 'tags',
@@ -88,7 +82,7 @@ class IKEPolicyTable(NetBoxTable):
) )
class IPSecProposalTable(NetBoxTable): class IPSecProposalTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -105,14 +99,11 @@ class IPSecProposalTable(NetBoxTable):
sa_lifetime_data = tables.Column( sa_lifetime_data = tables.Column(
verbose_name=_('SA Lifetime (KB)') verbose_name=_('SA Lifetime (KB)')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='vpn:ipsecproposal_list' url_name='vpn:ipsecproposal_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = IPSecProposal model = IPSecProposal
fields = ( fields = (
'pk', 'id', 'name', 'encryption_algorithm', 'authentication_algorithm', 'sa_lifetime_seconds', 'pk', 'id', 'name', 'encryption_algorithm', 'authentication_algorithm', 'sa_lifetime_seconds',
@@ -124,7 +115,7 @@ class IPSecProposalTable(NetBoxTable):
) )
class IPSecPolicyTable(NetBoxTable): class IPSecPolicyTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -136,14 +127,11 @@ class IPSecPolicyTable(NetBoxTable):
pfs_group = tables.Column( pfs_group = tables.Column(
verbose_name=_('PFS Group') verbose_name=_('PFS Group')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='vpn:ipsecpolicy_list' url_name='vpn:ipsecpolicy_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = IPSecPolicy model = IPSecPolicy
fields = ( fields = (
'pk', 'id', 'name', 'proposals', 'pfs_group', 'description', 'comments', 'tags', 'created', 'last_updated', 'pk', 'id', 'name', 'proposals', 'pfs_group', 'description', 'comments', 'tags', 'created', 'last_updated',
@@ -153,7 +141,7 @@ class IPSecPolicyTable(NetBoxTable):
) )
class IPSecProfileTable(NetBoxTable): class IPSecProfileTable(PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -169,14 +157,11 @@ class IPSecProfileTable(NetBoxTable):
linkify=True, linkify=True,
verbose_name=_('IPSec Policy') verbose_name=_('IPSec Policy')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='vpn:ipsecprofile_list' url_name='vpn:ipsecprofile_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = IPSecProfile model = IPSecProfile
fields = ( fields = (
'pk', 'id', 'name', 'mode', 'ike_policy', 'ipsec_policy', 'description', 'comments', 'tags', 'created', 'pk', 'id', 'name', 'mode', 'ike_policy', 'ipsec_policy', 'description', 'comments', 'tags', 'created',

View File

@@ -1,7 +1,7 @@
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import TenancyColumnsMixin
from vpn.models import L2VPN, L2VPNTermination from vpn.models import L2VPN, L2VPNTermination
@@ -17,7 +17,7 @@ L2VPN_TARGETS = """
""" """
class L2VPNTable(TenancyColumnsMixin, NetBoxTable): class L2VPNTable(TenancyColumnsMixin, PrimaryModelTable):
pk = columns.ToggleColumn() pk = columns.ToggleColumn()
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
@@ -36,14 +36,11 @@ class L2VPNTable(TenancyColumnsMixin, NetBoxTable):
template_code=L2VPN_TARGETS, template_code=L2VPN_TARGETS,
orderable=False orderable=False
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='vpn:l2vpn_list' url_name='vpn:l2vpn_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = L2VPN model = L2VPN
fields = ( fields = (
'pk', 'name', 'slug', 'status', 'identifier', 'type', 'import_targets', 'export_targets', 'tenant', 'pk', 'name', 'slug', 'status', 'identifier', 'type', 'import_targets', 'export_targets', 'tenant',

View File

@@ -2,7 +2,7 @@ import django_tables2 as tables
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor from django_tables2.utils import Accessor
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import TenancyColumnsMixin
from vpn.models import * from vpn.models import *
@@ -13,7 +13,7 @@ __all__ = (
) )
class TunnelGroupTable(NetBoxTable): class TunnelGroupTable(OrganizationalModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -27,7 +27,7 @@ class TunnelGroupTable(NetBoxTable):
url_name='vpn:tunnelgroup_list' url_name='vpn:tunnelgroup_list'
) )
class Meta(NetBoxTable.Meta): class Meta(OrganizationalModelTable.Meta):
model = TunnelGroup model = TunnelGroup
fields = ( fields = (
'pk', 'id', 'name', 'tunnel_count', 'description', 'slug', 'tags', 'actions', 'created', 'last_updated', 'pk', 'id', 'name', 'tunnel_count', 'description', 'slug', 'tags', 'actions', 'created', 'last_updated',
@@ -35,7 +35,7 @@ class TunnelGroupTable(NetBoxTable):
default_columns = ('pk', 'name', 'tunnel_count', 'description') default_columns = ('pk', 'name', 'tunnel_count', 'description')
class TunnelTable(TenancyColumnsMixin, NetBoxTable): class TunnelTable(TenancyColumnsMixin, PrimaryModelTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'), verbose_name=_('Name'),
linkify=True linkify=True
@@ -57,14 +57,11 @@ class TunnelTable(TenancyColumnsMixin, NetBoxTable):
url_params={'tunnel_id': 'pk'}, url_params={'tunnel_id': 'pk'},
verbose_name=_('Terminations') verbose_name=_('Terminations')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='vpn:tunnel_list' url_name='vpn:tunnel_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = Tunnel model = Tunnel
fields = ( fields = (
'pk', 'id', 'name', 'group', 'status', 'encapsulation', 'ipsec_profile', 'tenant', 'tenant_group', 'pk', 'id', 'name', 'group', 'status', 'encapsulation', 'ipsec_profile', 'tenant', 'tenant_group',

View File

@@ -1,8 +1,8 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from dcim.models import Interface from dcim.models import Interface
from netbox.tables import NetBoxTable, columns from netbox.tables import NestedGroupModelTable, NetBoxTable, PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import TenancyColumnsMixin
from wireless.models import * from wireless.models import *
@@ -13,28 +13,17 @@ __all__ = (
) )
class WirelessLANGroupTable(NetBoxTable): class WirelessLANGroupTable(NestedGroupModelTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
wirelesslan_count = columns.LinkedCountColumn( wirelesslan_count = columns.LinkedCountColumn(
viewname='wireless:wirelesslan_list', viewname='wireless:wirelesslan_list',
url_params={'group_id': 'pk'}, url_params={'group_id': 'pk'},
verbose_name=_('Wireless LANs') verbose_name=_('Wireless LANs')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='wireless:wirelesslangroup_list' url_name='wireless:wirelesslangroup_list'
) )
class Meta(NetBoxTable.Meta): class Meta(NestedGroupModelTable.Meta):
model = WirelessLANGroup model = WirelessLANGroup
fields = ( fields = (
'pk', 'name', 'parent', 'slug', 'description', 'comments', 'tags', 'wirelesslan_count', 'created', 'pk', 'name', 'parent', 'slug', 'description', 'comments', 'tags', 'wirelesslan_count', 'created',
@@ -43,7 +32,7 @@ class WirelessLANGroupTable(NetBoxTable):
default_columns = ('pk', 'name', 'wirelesslan_count', 'description') default_columns = ('pk', 'name', 'wirelesslan_count', 'description')
class WirelessLANTable(TenancyColumnsMixin, NetBoxTable): class WirelessLANTable(TenancyColumnsMixin, PrimaryModelTable):
ssid = tables.Column( ssid = tables.Column(
verbose_name=_('SSID'), verbose_name=_('SSID'),
linkify=True linkify=True
@@ -66,14 +55,11 @@ class WirelessLANTable(TenancyColumnsMixin, NetBoxTable):
interface_count = tables.Column( interface_count = tables.Column(
verbose_name=_('Interfaces') verbose_name=_('Interfaces')
) )
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='wireless:wirelesslan_list' url_name='wireless:wirelesslan_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = WirelessLAN model = WirelessLAN
fields = ( fields = (
'pk', 'ssid', 'group', 'status', 'tenant', 'tenant_group', 'vlan', 'interface_count', 'auth_type', 'pk', 'ssid', 'group', 'status', 'tenant', 'tenant_group', 'vlan', 'interface_count', 'auth_type',

View File

@@ -1,7 +1,7 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from netbox.tables import NetBoxTable, columns from netbox.tables import PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin from tenancy.tables import TenancyColumnsMixin
from wireless.models import * from wireless.models import *
@@ -10,7 +10,7 @@ __all__ = (
) )
class WirelessLinkTable(TenancyColumnsMixin, NetBoxTable): class WirelessLinkTable(TenancyColumnsMixin, PrimaryModelTable):
id = tables.Column( id = tables.Column(
linkify=True, linkify=True,
verbose_name=_('ID') verbose_name=_('ID')
@@ -41,7 +41,7 @@ class WirelessLinkTable(TenancyColumnsMixin, NetBoxTable):
url_name='wireless:wirelesslink_list' url_name='wireless:wirelesslink_list'
) )
class Meta(NetBoxTable.Meta): class Meta(PrimaryModelTable.Meta):
model = WirelessLink model = WirelessLink
fields = ( fields = (
'pk', 'id', 'status', 'device_a', 'interface_a', 'device_b', 'interface_b', 'ssid', 'tenant', 'pk', 'id', 'status', 'device_a', 'interface_a', 'device_b', 'interface_b', 'ssid', 'tenant',