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
from django.utils.translation import gettext_lazy as _
from circuits.models import *
from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from netbox.tables import NetBoxTable, columns
from .columns import CommitRateColumn
__all__ = (
@@ -24,7 +22,7 @@ CIRCUITTERMINATION_LINK = """
"""
class CircuitTypeTable(NetBoxTable):
class CircuitTypeTable(OrganizationalModelTable):
name = tables.Column(
linkify=True,
verbose_name=_('Name'),
@@ -39,7 +37,7 @@ class CircuitTypeTable(NetBoxTable):
verbose_name=_('Circuits')
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = CircuitType
fields = (
'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')
class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
cid = tables.Column(
linkify=True,
verbose_name=_('Circuit ID')
@@ -79,9 +77,6 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
verbose_name=_('Commit Rate')
)
distance = columns.DistanceColumn()
comments = columns.MarkdownColumn(
verbose_name=_('Comments')
)
tags = columns.TagColumn(
url_name='circuits:circuit_list'
)
@@ -90,7 +85,7 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
linkify_item=True
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Circuit
fields = (
'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(
verbose_name=_('Name'),
linkify=True
@@ -177,7 +172,7 @@ class CircuitGroupTable(NetBoxTable):
url_name='circuits:circuitgroup_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = CircuitGroup
fields = (
'pk', 'name', 'description', 'circuit_group_assignment_count', 'tags',

View File

@@ -1,10 +1,10 @@
import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from circuits.models import *
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__ = (
'ProviderTable',
@@ -13,7 +13,7 @@ __all__ = (
)
class ProviderTable(ContactsColumnMixin, NetBoxTable):
class ProviderTable(ContactsColumnMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -42,14 +42,11 @@ class ProviderTable(ContactsColumnMixin, NetBoxTable):
url_params={'provider_id': 'pk'},
verbose_name=_('Circuits')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='circuits:provider_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Provider
fields = (
'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')
class ProviderAccountTable(ContactsColumnMixin, NetBoxTable):
class ProviderAccountTable(ContactsColumnMixin, PrimaryModelTable):
account = tables.Column(
linkify=True,
verbose_name=_('Account'),
@@ -76,14 +73,11 @@ class ProviderAccountTable(ContactsColumnMixin, NetBoxTable):
url_params={'provider_account_id': 'pk'},
verbose_name=_('Circuits')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='circuits:provideraccount_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = ProviderAccount
fields = (
'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')
class ProviderNetworkTable(NetBoxTable):
class ProviderNetworkTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -101,14 +95,11 @@ class ProviderNetworkTable(NetBoxTable):
verbose_name=_('Provider'),
linkify=True
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='circuits:providernetwork_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = ProviderNetwork
fields = (
'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 circuits.models import *
from netbox.tables import NetBoxTable, columns
from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
__all__ = (
@@ -12,7 +12,7 @@ __all__ = (
)
class VirtualCircuitTypeTable(NetBoxTable):
class VirtualCircuitTypeTable(OrganizationalModelTable):
name = tables.Column(
linkify=True,
verbose_name=_('Name'),
@@ -27,7 +27,7 @@ class VirtualCircuitTypeTable(NetBoxTable):
verbose_name=_('Circuits')
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = VirtualCircuitType
fields = (
'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')
class VirtualCircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
class VirtualCircuitTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
cid = tables.Column(
linkify=True,
verbose_name=_('Circuit ID')
@@ -63,14 +63,11 @@ class VirtualCircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable)
url_params={'virtual_circuit_id': 'pk'},
verbose_name=_('Terminations')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments')
)
tags = columns.TagColumn(
url_name='circuits:virtualcircuit_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = VirtualCircuit
fields = (
'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
from core.models import *
from netbox.tables import NetBoxTable, columns
from netbox.tables import NetBoxTable, PrimaryModelTable, columns
from .columns import BackendTypeColumn
from .template_code import DATA_SOURCE_SYNC_BUTTON
@@ -12,7 +12,7 @@ __all__ = (
)
class DataSourceTable(NetBoxTable):
class DataSourceTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True,
@@ -42,7 +42,7 @@ class DataSourceTable(NetBoxTable):
extra_buttons=DATA_SOURCE_SYNC_BUTTON,
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = DataSource
fields = (
'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
from django_tables2.utils import Accessor
from django.utils.html import escape
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 netbox.tables import NetBoxTable, columns
from netbox.tables import PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin
from .template_code import CABLE_LENGTH
@@ -48,7 +48,7 @@ class CableTerminationsColumn(tables.Column):
# Cables
#
class CableTable(TenancyColumnsMixin, NetBoxTable):
class CableTable(TenancyColumnsMixin, PrimaryModelTable):
a_terminations = CableTerminationsColumn(
cable_end='A',
orderable=False,
@@ -117,12 +117,11 @@ class CableTable(TenancyColumnsMixin, NetBoxTable):
verbose_name=_('Color Name'),
orderable=False
)
comments = columns.MarkdownColumn()
tags = columns.TagColumn(
url_name='dcim:cable_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Cable
fields = (
'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 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 .template_code import *
@@ -58,15 +58,7 @@ MACADDRESS_COPY_BUTTON = """
# Device roles
#
class DeviceRoleTable(NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
class DeviceRoleTable(NestedGroupModelTable):
device_count = columns.LinkedCountColumn(
viewname='dcim:device_list',
url_params={'role_id': 'pk'},
@@ -89,7 +81,7 @@ class DeviceRoleTable(NetBoxTable):
url_name='dcim:devicerole_list'
)
class Meta(NetBoxTable.Meta):
class Meta(NestedGroupModelTable.Meta):
model = models.DeviceRole
fields = (
'pk', 'id', 'name', 'parent', 'device_count', 'vm_count', 'color', 'vm_role', 'config_template',
@@ -102,15 +94,7 @@ class DeviceRoleTable(NetBoxTable):
# Platforms
#
class PlatformTable(NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
class PlatformTable(NestedGroupModelTable):
manufacturer = tables.Column(
verbose_name=_('Manufacturer'),
linkify=True
@@ -133,7 +117,7 @@ class PlatformTable(NetBoxTable):
url_name='dcim:platform_list'
)
class Meta(NetBoxTable.Meta):
class Meta(NestedGroupModelTable.Meta):
model = models.Platform
fields = (
'pk', 'id', 'name', 'parent', 'manufacturer', 'device_count', 'vm_count', 'slug', 'config_template',
@@ -148,7 +132,7 @@ class PlatformTable(NetBoxTable):
# Devices
#
class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
name = tables.TemplateColumn(
verbose_name=_('Name'),
template_code=DEVICE_LINK,
@@ -249,7 +233,6 @@ class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
accessor='parent_bay',
linkify=True
)
comments = columns.MarkdownColumn()
tags = columns.TagColumn(
url_name='dcim:device_list'
)
@@ -284,7 +267,7 @@ class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
verbose_name=_('Inventory items')
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = models.Device
fields = (
'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(
verbose_name=_('Name'),
linkify=True
@@ -1067,7 +1050,7 @@ class InventoryItemRoleTable(NetBoxTable):
url_name='dcim:inventoryitemrole_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = models.InventoryItemRole
fields = (
'pk', 'id', 'name', 'inventoryitem_count', 'color', 'description', 'slug', 'tags', 'actions',
@@ -1079,7 +1062,7 @@ class InventoryItemRoleTable(NetBoxTable):
# Virtual chassis
#
class VirtualChassisTable(NetBoxTable):
class VirtualChassisTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -1093,14 +1076,11 @@ class VirtualChassisTable(NetBoxTable):
url_params={'virtual_chassis_id': 'pk'},
verbose_name=_('Members')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='dcim:virtualchassis_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = models.VirtualChassis
fields = (
'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')
class VirtualDeviceContextTable(TenancyColumnsMixin, NetBoxTable):
class VirtualDeviceContextTable(TenancyColumnsMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -1140,14 +1120,11 @@ class VirtualDeviceContextTable(TenancyColumnsMixin, NetBoxTable):
url_params={'vdc_id': 'pk'},
verbose_name=_('Interfaces')
)
comments = columns.MarkdownColumn()
tags = columns.TagColumn(
url_name='dcim:virtualdevicecontext_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = models.VirtualDeviceContext
fields = (
'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(
template_code=MACADDRESS_LINK,
verbose_name=_('MAC Address')
@@ -1181,7 +1158,7 @@ class MACAddressTable(NetBoxTable):
extra_buttons=MACADDRESS_COPY_BUTTON
)
class Meta(DeviceComponentTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = models.MACAddress
fields = (
'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 dcim import models
from netbox.tables import NetBoxTable, columns
from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin
from .template_code import MODULAR_COMPONENT_TEMPLATE_BUTTONS, WEIGHT
@@ -26,7 +26,7 @@ __all__ = (
# Manufacturers
#
class ManufacturerTable(ContactsColumnMixin, NetBoxTable):
class ManufacturerTable(ContactsColumnMixin, OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -60,7 +60,7 @@ class ManufacturerTable(ContactsColumnMixin, NetBoxTable):
url_name='dcim:manufacturer_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = models.Manufacturer
fields = (
'pk', 'id', 'name', 'racktype_count', 'devicetype_count', 'moduletype_count', 'inventoryitem_count',
@@ -76,7 +76,7 @@ class ManufacturerTable(ContactsColumnMixin, NetBoxTable):
# Device types
#
class DeviceTypeTable(NetBoxTable):
class DeviceTypeTable(PrimaryModelTable):
model = tables.Column(
linkify=True,
verbose_name=_('Device Type')
@@ -93,9 +93,6 @@ class DeviceTypeTable(NetBoxTable):
verbose_name=_('Full Depth'),
false_mark=None
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='dcim:devicetype_list'
)
@@ -148,7 +145,7 @@ class DeviceTypeTable(NetBoxTable):
verbose_name=_('Inventory Items')
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = models.DeviceType
fields = (
'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
from django.utils.translation import gettext_lazy as _
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
__all__ = (
@@ -12,7 +12,7 @@ __all__ = (
)
class ModuleTypeProfileTable(NetBoxTable):
class ModuleTypeProfileTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -23,14 +23,11 @@ class ModuleTypeProfileTable(NetBoxTable):
orderable=False,
verbose_name=_('Attributes')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='dcim:moduletypeprofile_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = ModuleTypeProfile
fields = (
'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(
verbose_name=_('Profile'),
linkify=True
@@ -64,14 +61,11 @@ class ModuleTypeTable(NetBoxTable):
url_params={'module_type_id': 'pk'},
verbose_name=_('Instances')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='dcim:moduletype_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = ModuleType
fields = (
'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(
verbose_name=_('Device'),
linkify=True
@@ -103,14 +97,11 @@ class ModuleTable(NetBoxTable):
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='dcim:module_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Module
fields = (
'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
from django.utils.translation import gettext_lazy as _
from dcim.models import PowerFeed, PowerPanel
from netbox.tables import PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from netbox.tables import NetBoxTable, columns
from .devices import CableTerminationTable
__all__ = (
@@ -17,7 +16,7 @@ __all__ = (
# Power panels
#
class PowerPanelTable(ContactsColumnMixin, NetBoxTable):
class PowerPanelTable(ContactsColumnMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -35,14 +34,11 @@ class PowerPanelTable(ContactsColumnMixin, NetBoxTable):
url_params={'power_panel_id': 'pk'},
verbose_name=_('Power Feeds')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='dcim:powerpanel_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = PowerPanel
fields = (
'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
# cannot traverse pass-through ports.
class PowerFeedTable(TenancyColumnsMixin, CableTerminationTable):
class PowerFeedTable(TenancyColumnsMixin, CableTerminationTable, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -92,14 +88,11 @@ class PowerFeedTable(TenancyColumnsMixin, CableTerminationTable):
linkify=True,
verbose_name=_('Site'),
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='dcim:powerfeed_list'
)
class Meta(NetBoxTable.Meta):
class Meta(CableTerminationTable.Meta, PrimaryModelTable.Meta):
model = PowerFeed
fields = (
'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
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor
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 .template_code import OUTER_UNIT, WEIGHT
@@ -15,11 +15,7 @@ __all__ = (
)
#
# Rack roles
#
class RackRoleTable(NetBoxTable):
class RackRoleTable(OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -36,7 +32,7 @@ class RackRoleTable(NetBoxTable):
url_name='dcim:rackrole_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = RackRole
fields = (
'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')
#
# Rack Types
#
class RackTypeTable(NetBoxTable):
class RackTypeTable(PrimaryModelTable):
model = tables.Column(
verbose_name=_('Model'),
linkify=True
@@ -84,9 +76,6 @@ class RackTypeTable(NetBoxTable):
template_code=WEIGHT,
order_by=('_abs_max_weight', 'weight_unit')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
instance_count = columns.LinkedCountColumn(
viewname='dcim:rack_list',
url_params={'rack_type_id': 'pk'},
@@ -96,7 +85,7 @@ class RackTypeTable(NetBoxTable):
url_name='dcim:rack_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = RackType
fields = (
'pk', 'id', 'model', 'manufacturer', 'form_factor', 'u_height', 'starting_unit', 'width', 'outer_width',
@@ -108,11 +97,7 @@ class RackTypeTable(NetBoxTable):
)
#
# Racks
#
class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
class RackTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -144,9 +129,6 @@ class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
template_code="{{ value }}U",
verbose_name=_('Height')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
device_count = columns.LinkedCountColumn(
viewname='dcim:device_list',
url_params={'rack_id': 'pk'},
@@ -186,7 +168,7 @@ class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
order_by=('_abs_max_weight', 'weight_unit')
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Rack
fields = (
'pk', 'id', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'tenant_group', 'role',
@@ -201,11 +183,7 @@ class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
)
#
# Rack reservations
#
class RackReservationTable(TenancyColumnsMixin, NetBoxTable):
class RackReservationTable(TenancyColumnsMixin, PrimaryModelTable):
reservation = tables.Column(
verbose_name=_('Reservation'),
accessor='pk',
@@ -232,14 +210,11 @@ class RackReservationTable(TenancyColumnsMixin, NetBoxTable):
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='dcim:rackreservation_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = RackReservation
fields = (
'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
from django.utils.translation import gettext_lazy as _
from dcim.models import Location, Region, Site, SiteGroup
from netbox.tables import NestedGroupModelTable, PrimaryModelTable, columns
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
from netbox.tables import NetBoxTable, columns
from .template_code import LOCATION_BUTTONS
__all__ = (
@@ -15,19 +14,7 @@ __all__ = (
)
#
# Regions
#
class RegionTable(ContactsColumnMixin, NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
class RegionTable(ContactsColumnMixin, NestedGroupModelTable):
site_count = columns.LinkedCountColumn(
viewname='dcim:site_list',
url_params={'region_id': 'pk'},
@@ -36,11 +23,8 @@ class RegionTable(ContactsColumnMixin, NetBoxTable):
tags = columns.TagColumn(
url_name='dcim:region_list'
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta):
class Meta(NestedGroupModelTable.Meta):
model = Region
fields = (
'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')
#
# Site groups
#
class SiteGroupTable(ContactsColumnMixin, NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
class SiteGroupTable(ContactsColumnMixin, NestedGroupModelTable):
site_count = columns.LinkedCountColumn(
viewname='dcim:site_list',
url_params={'group_id': 'pk'},
@@ -70,11 +42,8 @@ class SiteGroupTable(ContactsColumnMixin, NetBoxTable):
tags = columns.TagColumn(
url_name='dcim:sitegroup_list'
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta):
class Meta(NestedGroupModelTable.Meta):
model = SiteGroup
fields = (
'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')
#
# Sites
#
class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -117,14 +82,11 @@ class SiteTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
url_params={'site_id': 'pk'},
verbose_name=_('Devices')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='dcim:site_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Site
fields = (
'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')
#
# Locations
#
class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NestedGroupModelTable):
site = tables.Column(
verbose_name=_('Site'),
linkify=True
@@ -175,11 +125,8 @@ class LocationTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
actions = columns.ActionsColumn(
extra_buttons=LOCATION_BUTTONS
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta):
class Meta(NestedGroupModelTable.Meta):
model = Location
fields = (
'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 netbox.constants import EMPTY_TABLE_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
__all__ = (
@@ -109,6 +109,10 @@ class CustomFieldTable(NetBoxTable):
validation_regex = tables.Column(
verbose_name=_('Validation Regex'),
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta):
model = CustomField
@@ -146,6 +150,10 @@ class CustomFieldChoiceSetTable(NetBoxTable):
verbose_name=_('Order Alphabetically'),
false_mark=None
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta):
model = CustomFieldChoiceSet
@@ -171,6 +179,10 @@ class CustomLinkTable(NetBoxTable):
verbose_name=_('New Window'),
false_mark=None
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta):
model = CustomLink
@@ -214,6 +226,10 @@ class ExportTemplateTable(NetBoxTable):
orderable=False,
verbose_name=_('Synced')
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta):
model = ExportTemplate
@@ -294,6 +310,10 @@ class SavedFilterTable(NetBoxTable):
verbose_name=_('Shared'),
false_mark=None
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
def value_parameters(self, value):
return json.dumps(value)
@@ -450,6 +470,10 @@ class WebhookTable(NetBoxTable):
ssl_validation = columns.BooleanColumn(
verbose_name=_('SSL Validation')
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
tags = columns.TagColumn(
url_name='extras:webhook_list'
)
@@ -488,6 +512,10 @@ class EventRuleTable(NetBoxTable):
func=get_event_text,
orderable=False
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
tags = columns.TagColumn(
url_name='extras:webhook_list'
)
@@ -514,6 +542,10 @@ class TagTable(NetBoxTable):
object_types = columns.ContentTypesColumn(
verbose_name=_('Object Types'),
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
class Meta(NetBoxTable.Meta):
model = Tag
@@ -547,7 +579,7 @@ class TaggedItemTable(NetBoxTable):
fields = ('id', 'content_type', 'content_object')
class ConfigContextProfileTable(NetBoxTable):
class ConfigContextProfileTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -568,7 +600,7 @@ class ConfigContextProfileTable(NetBoxTable):
url_name='extras:configcontextprofile_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = ConfigContextProfile
fields = (
'pk', 'id', 'name', 'description', 'comments', 'data_source', 'data_file', 'is_synced', 'tags', 'created',
@@ -601,6 +633,10 @@ class ConfigContextTable(NetBoxTable):
orderable=False,
verbose_name=_('Synced')
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
tags = columns.TagColumn(
url_name='extras:configcontext_list'
)
@@ -645,6 +681,10 @@ class ConfigTemplateTable(NetBoxTable):
verbose_name=_('As Attachment'),
false_mark=None
)
owner = tables.Column(
linkify=True,
verbose_name=_('Owner')
)
tags = columns.TagColumn(
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 ipam.models import *
from netbox.tables import NetBoxTable, columns
from netbox.tables import OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin
__all__ = (
@@ -11,7 +11,7 @@ __all__ = (
)
class ASNRangeTable(TenancyColumnsMixin, NetBoxTable):
class ASNRangeTable(TenancyColumnsMixin, OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -27,7 +27,7 @@ class ASNRangeTable(TenancyColumnsMixin, NetBoxTable):
verbose_name=_('ASNs')
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = ASNRange
fields = (
'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')
class ASNTable(TenancyColumnsMixin, NetBoxTable):
class ASNTable(TenancyColumnsMixin, PrimaryModelTable):
asn = tables.Column(
verbose_name=_('ASN'),
linkify=True
@@ -65,14 +65,11 @@ class ASNTable(TenancyColumnsMixin, NetBoxTable):
linkify_item=True,
verbose_name=_('Sites')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:asn_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = ASN
fields = (
'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
from django.utils.translation import gettext_lazy as _
from ipam.models import *
from netbox.tables import NetBoxTable, columns
from netbox.tables import NetBoxTable, PrimaryModelTable, columns
__all__ = (
'FHRPGroupTable',
@@ -17,7 +17,7 @@ IPADDRESSES = """
"""
class FHRPGroupTable(NetBoxTable):
class FHRPGroupTable(PrimaryModelTable):
group_id = tables.Column(
verbose_name=_('Group ID'),
linkify=True
@@ -30,9 +30,6 @@ class FHRPGroupTable(NetBoxTable):
member_count = tables.Column(
verbose_name=_('Members')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:fhrpgroup_list'
)
@@ -40,7 +37,7 @@ class FHRPGroupTable(NetBoxTable):
def value_ip_addresses(self, value):
return ",".join([str(obj.address) for obj in value.all()])
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = FHRPGroup
fields = (
'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
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor
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 .template_code import *
@@ -27,7 +27,7 @@ AVAILABLE_LABEL = mark_safe('<span class="badge text-bg-success">Available</span
# RIRs
#
class RIRTable(NetBoxTable):
class RIRTable(OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -45,7 +45,7 @@ class RIRTable(NetBoxTable):
url_name='ipam:rir_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = RIR
fields = (
'pk', 'id', 'name', 'slug', 'is_private', 'aggregate_count', 'description', 'tags', 'created',
@@ -58,7 +58,7 @@ class RIRTable(NetBoxTable):
# Aggregates
#
class AggregateTable(TenancyColumnsMixin, NetBoxTable):
class AggregateTable(TenancyColumnsMixin, PrimaryModelTable):
prefix = tables.Column(
linkify=True,
verbose_name=_('Aggregate'),
@@ -79,9 +79,6 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
accessor='get_utilization',
orderable=False
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:aggregate_list'
)
@@ -89,7 +86,7 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
extra_buttons=AGGREGATE_COPY_BUTTON
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Aggregate
fields = (
'pk', 'id', 'prefix', 'rir', 'tenant', 'tenant_group', 'child_count', 'utilization', 'date_added',
@@ -102,7 +99,7 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
# Roles
#
class RoleTable(NetBoxTable):
class RoleTable(OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -126,7 +123,7 @@ class RoleTable(NetBoxTable):
url_name='ipam:role_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = Role
fields = (
'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(
verbose_name=_('Prefix'),
template_code=PREFIX_LINK_WITH_DEPTH,
@@ -223,9 +220,6 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
accessor='get_utilization',
orderable=False
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:prefix_list'
)
@@ -233,7 +227,7 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
extra_buttons=PREFIX_COPY_BUTTON
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Prefix
fields = (
'pk', 'id', 'prefix', 'prefix_flat', 'status', 'children', 'vrf', 'utilization', 'tenant', 'tenant_group',
@@ -252,7 +246,7 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
#
# IP ranges
#
class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
class IPRangeTable(TenancyColumnsMixin, PrimaryModelTable):
start_address = tables.Column(
verbose_name=_('Start address'),
linkify=True
@@ -282,14 +276,11 @@ class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
accessor='utilization',
orderable=False
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:iprange_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = IPRange
fields = (
'pk', 'id', 'start_address', 'end_address', 'size', 'vrf', 'status', 'role', 'tenant', 'tenant_group',
@@ -308,7 +299,7 @@ class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
# IPAddresses
#
class IPAddressTable(TenancyColumnsMixin, NetBoxTable):
class IPAddressTable(TenancyColumnsMixin, PrimaryModelTable):
address = tables.TemplateColumn(
template_code=IPADDRESS_LINK,
verbose_name=_('IP Address')
@@ -351,9 +342,6 @@ class IPAddressTable(TenancyColumnsMixin, NetBoxTable):
verbose_name=_('Assigned'),
false_mark=None
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:ipaddress_list'
)
@@ -361,7 +349,7 @@ class IPAddressTable(TenancyColumnsMixin, NetBoxTable):
extra_buttons=IPADDRESS_COPY_BUTTON
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = IPAddress
fields = (
'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
from django.utils.translation import gettext_lazy as _
from ipam.models import *
from netbox.tables import NetBoxTable, columns
from netbox.tables import PrimaryModelTable, columns
__all__ = (
'ServiceTable',
@@ -10,7 +10,7 @@ __all__ = (
)
class ServiceTemplateTable(NetBoxTable):
class ServiceTemplateTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -20,14 +20,11 @@ class ServiceTemplateTable(NetBoxTable):
accessor=tables.A('port_list'),
order_by=tables.A('ports'),
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:servicetemplate_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = ServiceTemplate
fields = (
'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')
class ServiceTable(NetBoxTable):
class ServiceTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -50,14 +47,11 @@ class ServiceTable(NetBoxTable):
accessor=tables.A('port_list'),
order_by=tables.A('ports'),
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:service_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Service
fields = (
'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 ipam.models import *
from netbox.tables import NetBoxTable, columns
from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin, TenantColumn
from virtualization.models import VMInterface
from .template_code import *
@@ -28,7 +28,7 @@ AVAILABLE_LABEL = mark_safe('<span class="badge text-bg-success">Available</span
# VLAN groups
#
class VLANGroupTable(TenancyColumnsMixin, NetBoxTable):
class VLANGroupTable(TenancyColumnsMixin, OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -62,7 +62,7 @@ class VLANGroupTable(TenancyColumnsMixin, NetBoxTable):
extra_buttons=VLANGROUP_BUTTONS
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = VLANGroup
fields = (
'pk', 'id', 'name', 'scope_type', 'scope', 'vid_ranges_list', 'vlan_count', 'slug', 'description',
@@ -77,7 +77,7 @@ class VLANGroupTable(TenancyColumnsMixin, NetBoxTable):
# VLANs
#
class VLANTable(TenancyColumnsMixin, NetBoxTable):
class VLANTable(TenancyColumnsMixin, PrimaryModelTable):
vid = tables.TemplateColumn(
template_code=VLAN_LINK,
verbose_name=_('VID')
@@ -120,14 +120,11 @@ class VLANTable(TenancyColumnsMixin, NetBoxTable):
orderable=False,
verbose_name=_('Prefixes')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:vlan_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = VLAN
fields = (
'pk', 'id', 'vid', 'name', 'site', 'group', 'prefixes', 'tenant', 'tenant_group', 'status', 'role',
@@ -229,7 +226,7 @@ class InterfaceVLANTable(NetBoxTable):
# VLAN Translation
#
class VLANTranslationPolicyTable(NetBoxTable):
class VLANTranslationPolicyTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -246,7 +243,7 @@ class VLANTranslationPolicyTable(NetBoxTable):
url_name='ipam:vlantranslationpolicy_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = VLANTranslationPolicy
fields = (
'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
from django.utils.translation import gettext_lazy as _
from ipam.models import *
from netbox.tables import NetBoxTable, columns
from netbox.tables import PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin
__all__ = (
@@ -21,7 +21,7 @@ VRF_TARGETS = """
# VRFs
#
class VRFTable(TenancyColumnsMixin, NetBoxTable):
class VRFTable(TenancyColumnsMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -43,14 +43,11 @@ class VRFTable(TenancyColumnsMixin, NetBoxTable):
template_code=VRF_TARGETS,
orderable=False
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:vrf_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = VRF
fields = (
'pk', 'id', 'name', 'rd', 'tenant', 'tenant_group', 'enforce_unique', 'import_targets', 'export_targets',
@@ -63,19 +60,16 @@ class VRFTable(TenancyColumnsMixin, NetBoxTable):
# Route targets
#
class RouteTargetTable(TenancyColumnsMixin, NetBoxTable):
class RouteTargetTable(TenancyColumnsMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='ipam:routetarget_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = RouteTarget
fields = (
'pk', 'id', 'name', 'tenant', 'tenant_group', 'description', 'comments', 'tags', 'created', 'last_updated',

View File

@@ -27,7 +27,10 @@ from .template_code import *
__all__ = (
'BaseTable',
'NestedGroupModelTable',
'NetBoxTable',
'OrganizationalModelTable',
'PrimaryModelTable',
'SearchTable',
)
@@ -267,6 +270,41 @@ class NetBoxTable(BaseTable):
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):
object_type = columns.ContentTypeColumn(
verbose_name=_('Type'),

View File

@@ -45,6 +45,12 @@ from netbox.graphql.types import (
PrimaryObjectType,
)
from netbox.models import NestedGroupModel, NetBoxModel, OrganizationalModel, PrimaryModel
from netbox.tables import (
NestedGroupModelTable,
NetBoxTable,
OrganizationalModelTable,
PrimaryModelTable,
)
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):
@staticmethod

View File

@@ -1,8 +1,8 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
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 utilities.tables import linkify_phone
@@ -14,15 +14,7 @@ __all__ = (
)
class ContactGroupTable(NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
class ContactGroupTable(NestedGroupModelTable):
contact_count = columns.LinkedCountColumn(
viewname='tenancy:contact_list',
url_params={'group_id': 'pk'},
@@ -31,11 +23,8 @@ class ContactGroupTable(NetBoxTable):
tags = columns.TagColumn(
url_name='tenancy:contactgroup_list'
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta):
class Meta(NestedGroupModelTable.Meta):
model = ContactGroup
fields = (
'pk', 'name', 'parent', 'contact_count', 'description', 'comments', 'slug', 'tags', 'created',
@@ -44,7 +33,7 @@ class ContactGroupTable(NetBoxTable):
default_columns = ('pk', 'name', 'contact_count', 'description')
class ContactRoleTable(NetBoxTable):
class ContactRoleTable(OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -53,13 +42,13 @@ class ContactRoleTable(NetBoxTable):
url_name='tenancy:contactrole_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = ContactRole
fields = ('pk', 'name', 'description', 'slug', 'tags', 'created', 'last_updated', 'actions')
default_columns = ('pk', 'name', 'description')
class ContactTable(NetBoxTable):
class ContactTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -72,9 +61,6 @@ class ContactTable(NetBoxTable):
verbose_name=_('Phone'),
linkify=linkify_phone,
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
assignment_count = columns.LinkedCountColumn(
viewname='tenancy:contactassignment_list',
url_params={'contact_id': 'pk'},
@@ -84,7 +70,7 @@ class ContactTable(NetBoxTable):
url_name='tenancy:contact_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Contact
fields = (
'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
from django.utils.translation import gettext_lazy as _
from netbox.tables import NestedGroupModelTable, PrimaryModelTable, columns
from tenancy.models import *
from tenancy.tables import ContactsColumnMixin
from netbox.tables import NetBoxTable, columns
__all__ = (
'TenantGroupTable',
'TenantTable',
)
class TenantGroupTable(NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
class TenantGroupTable(NestedGroupModelTable):
tenant_count = columns.LinkedCountColumn(
viewname='tenancy:tenant_list',
url_params={'group_id': 'pk'},
@@ -28,11 +20,8 @@ class TenantGroupTable(NetBoxTable):
tags = columns.TagColumn(
url_name='tenancy:tenantgroup_list'
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
class Meta(NetBoxTable.Meta):
class Meta(NestedGroupModelTable.Meta):
model = TenantGroup
fields = (
'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')
class TenantTable(ContactsColumnMixin, NetBoxTable):
class TenantTable(ContactsColumnMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -50,14 +39,11 @@ class TenantTable(ContactsColumnMixin, NetBoxTable):
verbose_name=_('Group'),
linkify=True
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='tenancy:tenant_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Tenant
fields = (
'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')})
)
users = columns.ManyToManyColumn(
verbose_name=_('Groups'),
verbose_name=_('Users'),
linkify_item=('users:user', {'pk': tables.A('pk')})
)
actions = columns.ActionsColumn(

View File

@@ -1,10 +1,10 @@
from django.utils.translation import gettext_lazy as _
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 virtualization.models import Cluster, ClusterGroup, ClusterType
from netbox.tables import NetBoxTable, columns
__all__ = (
'ClusterTable',
'ClusterGroupTable',
@@ -12,7 +12,7 @@ __all__ = (
)
class ClusterTypeTable(NetBoxTable):
class ClusterTypeTable(OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -26,7 +26,7 @@ class ClusterTypeTable(NetBoxTable):
url_name='virtualization:clustertype_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = ClusterType
fields = (
'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')
class ClusterGroupTable(ContactsColumnMixin, NetBoxTable):
class ClusterGroupTable(ContactsColumnMixin, OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -48,7 +48,7 @@ class ClusterGroupTable(ContactsColumnMixin, NetBoxTable):
url_name='virtualization:clustergroup_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = ClusterGroup
fields = (
'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')
class ClusterTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
class ClusterTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -91,14 +91,11 @@ class ClusterTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
url_params={'cluster_id': 'pk'},
verbose_name=_('VMs')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='virtualization:cluster_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Cluster
fields = (
'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 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 utilities.templatetags.helpers import humanize_disk_megabytes
from virtualization.models import VirtualDisk, VirtualMachine, VMInterface
@@ -21,7 +21,7 @@ __all__ = (
# Virtual machines
#
class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -48,9 +48,6 @@ class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable)
linkify=True,
verbose_name=_('Platform')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
primary_ip4 = tables.Column(
linkify=True,
verbose_name=_('IPv4 Address')
@@ -81,7 +78,7 @@ class VirtualMachineTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable)
verbose_name=_('Disk'),
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = VirtualMachine
fields = (
'pk', 'id', 'name', 'status', 'site', 'cluster', 'device', 'role', 'tenant', 'tenant_group', 'vcpus',

View File

@@ -1,7 +1,7 @@
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 vpn.models import *
__all__ = (
@@ -13,7 +13,7 @@ __all__ = (
)
class IKEProposalTable(NetBoxTable):
class IKEProposalTable(PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -33,14 +33,11 @@ class IKEProposalTable(NetBoxTable):
sa_lifetime = tables.Column(
verbose_name=_('SA Lifetime')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='vpn:ikeproposal_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = IKEProposal
fields = (
'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(
verbose_name=_('Name'),
linkify=True
@@ -70,14 +67,11 @@ class IKEPolicyTable(NetBoxTable):
preshared_key = tables.Column(
verbose_name=_('Pre-shared Key')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='vpn:ikepolicy_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = IKEPolicy
fields = (
'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(
verbose_name=_('Name'),
linkify=True
@@ -105,14 +99,11 @@ class IPSecProposalTable(NetBoxTable):
sa_lifetime_data = tables.Column(
verbose_name=_('SA Lifetime (KB)')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='vpn:ipsecproposal_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = IPSecProposal
fields = (
'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(
verbose_name=_('Name'),
linkify=True
@@ -136,14 +127,11 @@ class IPSecPolicyTable(NetBoxTable):
pfs_group = tables.Column(
verbose_name=_('PFS Group')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='vpn:ipsecpolicy_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = IPSecPolicy
fields = (
'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(
verbose_name=_('Name'),
linkify=True
@@ -169,14 +157,11 @@ class IPSecProfileTable(NetBoxTable):
linkify=True,
verbose_name=_('IPSec Policy')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='vpn:ipsecprofile_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = IPSecProfile
fields = (
'pk', 'id', 'name', 'mode', 'ike_policy', 'ipsec_policy', 'description', 'comments', 'tags', 'created',

View File

@@ -1,7 +1,7 @@
import django_tables2 as tables
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 vpn.models import L2VPN, L2VPNTermination
@@ -17,7 +17,7 @@ L2VPN_TARGETS = """
"""
class L2VPNTable(TenancyColumnsMixin, NetBoxTable):
class L2VPNTable(TenancyColumnsMixin, PrimaryModelTable):
pk = columns.ToggleColumn()
name = tables.Column(
verbose_name=_('Name'),
@@ -36,14 +36,11 @@ class L2VPNTable(TenancyColumnsMixin, NetBoxTable):
template_code=L2VPN_TARGETS,
orderable=False
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='vpn:l2vpn_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = L2VPN
fields = (
'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_tables2.utils import Accessor
from netbox.tables import NetBoxTable, columns
from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
from tenancy.tables import TenancyColumnsMixin
from vpn.models import *
@@ -13,7 +13,7 @@ __all__ = (
)
class TunnelGroupTable(NetBoxTable):
class TunnelGroupTable(OrganizationalModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -27,7 +27,7 @@ class TunnelGroupTable(NetBoxTable):
url_name='vpn:tunnelgroup_list'
)
class Meta(NetBoxTable.Meta):
class Meta(OrganizationalModelTable.Meta):
model = TunnelGroup
fields = (
'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')
class TunnelTable(TenancyColumnsMixin, NetBoxTable):
class TunnelTable(TenancyColumnsMixin, PrimaryModelTable):
name = tables.Column(
verbose_name=_('Name'),
linkify=True
@@ -57,14 +57,11 @@ class TunnelTable(TenancyColumnsMixin, NetBoxTable):
url_params={'tunnel_id': 'pk'},
verbose_name=_('Terminations')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='vpn:tunnel_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = Tunnel
fields = (
'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
from django.utils.translation import gettext_lazy as _
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 wireless.models import *
@@ -13,28 +13,17 @@ __all__ = (
)
class WirelessLANGroupTable(NetBoxTable):
name = columns.MPTTColumn(
verbose_name=_('Name'),
linkify=True
)
parent = tables.Column(
verbose_name=_('Parent'),
linkify=True,
)
class WirelessLANGroupTable(NestedGroupModelTable):
wirelesslan_count = columns.LinkedCountColumn(
viewname='wireless:wirelesslan_list',
url_params={'group_id': 'pk'},
verbose_name=_('Wireless LANs')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='wireless:wirelesslangroup_list'
)
class Meta(NetBoxTable.Meta):
class Meta(NestedGroupModelTable.Meta):
model = WirelessLANGroup
fields = (
'pk', 'name', 'parent', 'slug', 'description', 'comments', 'tags', 'wirelesslan_count', 'created',
@@ -43,7 +32,7 @@ class WirelessLANGroupTable(NetBoxTable):
default_columns = ('pk', 'name', 'wirelesslan_count', 'description')
class WirelessLANTable(TenancyColumnsMixin, NetBoxTable):
class WirelessLANTable(TenancyColumnsMixin, PrimaryModelTable):
ssid = tables.Column(
verbose_name=_('SSID'),
linkify=True
@@ -66,14 +55,11 @@ class WirelessLANTable(TenancyColumnsMixin, NetBoxTable):
interface_count = tables.Column(
verbose_name=_('Interfaces')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn(
url_name='wireless:wirelesslan_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = WirelessLAN
fields = (
'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
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 wireless.models import *
@@ -10,7 +10,7 @@ __all__ = (
)
class WirelessLinkTable(TenancyColumnsMixin, NetBoxTable):
class WirelessLinkTable(TenancyColumnsMixin, PrimaryModelTable):
id = tables.Column(
linkify=True,
verbose_name=_('ID')
@@ -41,7 +41,7 @@ class WirelessLinkTable(TenancyColumnsMixin, NetBoxTable):
url_name='wireless:wirelesslink_list'
)
class Meta(NetBoxTable.Meta):
class Meta(PrimaryModelTable.Meta):
model = WirelessLink
fields = (
'pk', 'id', 'status', 'device_a', 'interface_a', 'device_b', 'interface_b', 'ssid', 'tenant',