13150 internationalize ipam tables

This commit is contained in:
Arthur 2023-07-26 11:53:55 +07:00
parent a4c7fb8294
commit 90d751db26
8 changed files with 301 additions and 124 deletions

View File

@ -2,7 +2,7 @@ import json
import django_tables2 as tables import django_tables2 as tables
from django.conf import settings from django.conf import settings
from django.utils.translation import gettext as _ from django.utils.translation import gettext_lazy as _
from extras.models import * from extras.models import *
from netbox.tables import NetBoxTable, columns from netbox.tables import NetBoxTable, columns
@ -44,8 +44,11 @@ REVISION_BUTTONS = """
class ConfigRevisionTable(NetBoxTable): class ConfigRevisionTable(NetBoxTable):
is_active = columns.BooleanColumn() is_active = columns.BooleanColumn(
verbose_name=_('Is active'),
)
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('delete',), actions=('delete',),
extra_buttons=REVISION_BUTTONS extra_buttons=REVISION_BUTTONS
) )
@ -60,18 +63,29 @@ class ConfigRevisionTable(NetBoxTable):
class CustomFieldTable(NetBoxTable): class CustomFieldTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
content_types = columns.ContentTypesColumn() content_types = columns.ContentTypesColumn(
required = columns.BooleanColumn() verbose_name=_('Content types'),
ui_visibility = columns.ChoiceFieldColumn(verbose_name="UI visibility") )
description = columns.MarkdownColumn() required = columns.BooleanColumn(
verbose_name=_('Required'),
)
ui_visibility = columns.ChoiceFieldColumn(
verbose_name=_("UI visibility")
)
description = columns.MarkdownColumn(
verbose_name=_('Description'),
)
choices = columns.ArrayColumn( choices = columns.ArrayColumn(
max_items=10, max_items=10,
orderable=False, orderable=False,
verbose_name=_('Choices') verbose_name=_('Choices')
) )
is_cloneable = columns.BooleanColumn() is_cloneable = columns.BooleanColumn(
verbose_name=_('Is cloneable'),
)
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = CustomField model = CustomField
@ -85,6 +99,7 @@ class CustomFieldTable(NetBoxTable):
class CustomFieldChoiceSetTable(NetBoxTable): class CustomFieldChoiceSetTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
choices = columns.ArrayColumn( choices = columns.ArrayColumn(
@ -99,7 +114,9 @@ class CustomFieldChoiceSetTable(NetBoxTable):
orderable=False, orderable=False,
verbose_name=_('Count') verbose_name=_('Count')
) )
order_alphabetically = columns.BooleanColumn() order_alphabetically = columns.BooleanColumn(
verbose_name=_('Order alphabetically'),
)
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = CustomFieldChoiceSet model = CustomFieldChoiceSet
@ -112,11 +129,18 @@ class CustomFieldChoiceSetTable(NetBoxTable):
class CustomLinkTable(NetBoxTable): class CustomLinkTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
content_types = columns.ContentTypesColumn() content_types = columns.ContentTypesColumn(
enabled = columns.BooleanColumn() verbose_name=_('Content types'),
new_window = columns.BooleanColumn() )
enabled = columns.BooleanColumn(
verbose_name=_('Enabled'),
)
new_window = columns.BooleanColumn(
verbose_name=_('New window'),
)
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = CustomLink model = CustomLink
@ -129,19 +153,26 @@ class CustomLinkTable(NetBoxTable):
class ExportTemplateTable(NetBoxTable): class ExportTemplateTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
content_types = columns.ContentTypesColumn() content_types = columns.ContentTypesColumn(
as_attachment = columns.BooleanColumn() verbose_name=_('Content types'),
)
as_attachment = columns.BooleanColumn(
verbose_name=_('As attachment'),
)
data_source = tables.Column( data_source = tables.Column(
verbose_name=_('Data source'),
linkify=True linkify=True
) )
data_file = tables.Column( data_file = tables.Column(
verbose_name=_('Data file'),
linkify=True linkify=True
) )
is_synced = columns.BooleanColumn( is_synced = columns.BooleanColumn(
orderable=False, orderable=False,
verbose_name='Synced' verbose_name=_('Synced')
) )
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
@ -157,18 +188,23 @@ class ExportTemplateTable(NetBoxTable):
class ImageAttachmentTable(NetBoxTable): class ImageAttachmentTable(NetBoxTable):
id = tables.Column( id = tables.Column(
verbose_name=_('ID'),
linkify=False linkify=False
) )
content_type = columns.ContentTypeColumn() content_type = columns.ContentTypeColumn(
verbose_name=_('Content type'),
)
parent = tables.Column( parent = tables.Column(
verbose_name=_('Parent'),
linkify=True linkify=True
) )
image = tables.TemplateColumn( image = tables.TemplateColumn(
verbose_name=_('Image'),
template_code=IMAGEATTACHMENT_IMAGE, template_code=IMAGEATTACHMENT_IMAGE,
) )
size = tables.Column( size = tables.Column(
orderable=False, orderable=False,
verbose_name='Size (bytes)' verbose_name=_('Size (bytes)')
) )
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
@ -182,11 +218,18 @@ class ImageAttachmentTable(NetBoxTable):
class SavedFilterTable(NetBoxTable): class SavedFilterTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
content_types = columns.ContentTypesColumn() content_types = columns.ContentTypesColumn(
enabled = columns.BooleanColumn() verbose_name=_('Content types'),
shared = columns.BooleanColumn() )
enabled = columns.BooleanColumn(
verbose_name=_('Enabled'),
)
shared = columns.BooleanColumn(
verbose_name=_('Shared'),
)
def value_parameters(self, value): def value_parameters(self, value):
return json.dumps(value) return json.dumps(value)
@ -203,11 +246,15 @@ class SavedFilterTable(NetBoxTable):
class BookmarkTable(NetBoxTable): class BookmarkTable(NetBoxTable):
object_type = columns.ContentTypeColumn() object_type = columns.ContentTypeColumn(
verbose_name=_('Object types'),
)
object = tables.Column( object = tables.Column(
verbose_name=_('Object'),
linkify=True linkify=True
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('delete',) actions=('delete',)
) )
@ -219,27 +266,32 @@ class BookmarkTable(NetBoxTable):
class WebhookTable(NetBoxTable): class WebhookTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
content_types = columns.ContentTypesColumn() content_types = columns.ContentTypesColumn(
enabled = columns.BooleanColumn() verbose_name=_('Content types'),
)
enabled = columns.BooleanColumn(
verbose_name=_('Enabled'),
)
type_create = columns.BooleanColumn( type_create = columns.BooleanColumn(
verbose_name='Create' verbose_name=_('Create')
) )
type_update = columns.BooleanColumn( type_update = columns.BooleanColumn(
verbose_name='Update' verbose_name=_('Update')
) )
type_delete = columns.BooleanColumn( type_delete = columns.BooleanColumn(
verbose_name='Delete' verbose_name=_('Delete')
) )
type_job_start = columns.BooleanColumn( type_job_start = columns.BooleanColumn(
verbose_name='Job start' verbose_name=_('Job start')
) )
type_job_end = columns.BooleanColumn( type_job_end = columns.BooleanColumn(
verbose_name='Job end' verbose_name=_('Job end')
) )
ssl_validation = columns.BooleanColumn( ssl_validation = columns.BooleanColumn(
verbose_name='SSL Validation' verbose_name=_('SSL Validation')
) )
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
@ -257,10 +309,15 @@ class WebhookTable(NetBoxTable):
class TagTable(NetBoxTable): class TagTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
color = columns.ColorColumn() color = columns.ColorColumn(
object_types = columns.ContentTypesColumn() verbose_name=_('Color'),
)
object_types = columns.ContentTypesColumn(
verbose_name=_('Object types'),
)
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = Tag model = Tag
@ -273,19 +330,20 @@ class TagTable(NetBoxTable):
class TaggedItemTable(NetBoxTable): class TaggedItemTable(NetBoxTable):
id = tables.Column( id = tables.Column(
verbose_name='ID', verbose_name=_('ID'),
linkify=lambda record: record.content_object.get_absolute_url(), linkify=lambda record: record.content_object.get_absolute_url(),
accessor='content_object__id' accessor='content_object__id'
) )
content_type = columns.ContentTypeColumn( content_type = columns.ContentTypeColumn(
verbose_name='Type' verbose_name=_('Type')
) )
content_object = tables.Column( content_object = tables.Column(
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='Object' verbose_name=_('Object')
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=() actions=()
) )
@ -296,20 +354,23 @@ class TaggedItemTable(NetBoxTable):
class ConfigContextTable(NetBoxTable): class ConfigContextTable(NetBoxTable):
data_source = tables.Column( data_source = tables.Column(
verbose_name=_('Data source'),
linkify=True linkify=True
) )
data_file = tables.Column( data_file = tables.Column(
verbose_name=_('Data file'),
linkify=True linkify=True
) )
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
is_active = columns.BooleanColumn( is_active = columns.BooleanColumn(
verbose_name='Active' verbose_name=_('Active')
) )
is_synced = columns.BooleanColumn( is_synced = columns.BooleanColumn(
orderable=False, orderable=False,
verbose_name='Synced' verbose_name=_('Synced')
) )
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
@ -324,17 +385,20 @@ class ConfigContextTable(NetBoxTable):
class ConfigTemplateTable(NetBoxTable): class ConfigTemplateTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
data_source = tables.Column( data_source = tables.Column(
verbose_name=_('Data source'),
linkify=True linkify=True
) )
data_file = tables.Column( data_file = tables.Column(
verbose_name=_('Data file'),
linkify=True linkify=True
) )
is_synced = columns.BooleanColumn( is_synced = columns.BooleanColumn(
orderable=False, orderable=False,
verbose_name='Synced' verbose_name=_('Synced')
) )
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='extras:configtemplate_list' url_name='extras:configtemplate_list'
@ -353,33 +417,37 @@ class ConfigTemplateTable(NetBoxTable):
class ObjectChangeTable(NetBoxTable): class ObjectChangeTable(NetBoxTable):
time = tables.DateTimeColumn( time = tables.DateTimeColumn(
verbose_name=_('Time'),
linkify=True, linkify=True,
format=settings.SHORT_DATETIME_FORMAT format=settings.SHORT_DATETIME_FORMAT
) )
user_name = tables.Column( user_name = tables.Column(
verbose_name='Username' verbose_name=_('Username')
) )
full_name = tables.TemplateColumn( full_name = tables.TemplateColumn(
accessor=tables.A('user'), accessor=tables.A('user'),
template_code=OBJECTCHANGE_FULL_NAME, template_code=OBJECTCHANGE_FULL_NAME,
verbose_name='Full Name', verbose_name=_('Full Name'),
orderable=False orderable=False
) )
action = columns.ChoiceFieldColumn() action = columns.ChoiceFieldColumn(
verbose_name=_('Action'),
)
changed_object_type = columns.ContentTypeColumn( changed_object_type = columns.ContentTypeColumn(
verbose_name='Type' verbose_name=_('Type')
) )
object_repr = tables.TemplateColumn( object_repr = tables.TemplateColumn(
accessor=tables.A('changed_object'), accessor=tables.A('changed_object'),
template_code=OBJECTCHANGE_OBJECT, template_code=OBJECTCHANGE_OBJECT,
verbose_name='Object', verbose_name=_('Object'),
orderable=False orderable=False
) )
request_id = tables.TemplateColumn( request_id = tables.TemplateColumn(
template_code=OBJECTCHANGE_REQUEST_ID, template_code=OBJECTCHANGE_REQUEST_ID,
verbose_name='Request ID' verbose_name=_('Request ID')
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=() actions=()
) )
@ -393,23 +461,28 @@ class ObjectChangeTable(NetBoxTable):
class JournalEntryTable(NetBoxTable): class JournalEntryTable(NetBoxTable):
created = tables.DateTimeColumn( created = tables.DateTimeColumn(
verbose_name=_('Created'),
linkify=True, linkify=True,
format=settings.SHORT_DATETIME_FORMAT format=settings.SHORT_DATETIME_FORMAT
) )
assigned_object_type = columns.ContentTypeColumn( assigned_object_type = columns.ContentTypeColumn(
verbose_name='Object type' verbose_name=_('Object type')
) )
assigned_object = tables.Column( assigned_object = tables.Column(
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='Object' verbose_name=_('Object')
)
kind = columns.ChoiceFieldColumn(
verbose_name=_('Kind'),
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
) )
kind = columns.ChoiceFieldColumn()
comments = columns.MarkdownColumn()
comments_short = tables.TemplateColumn( comments_short = tables.TemplateColumn(
accessor=tables.A('comments'), accessor=tables.A('comments'),
template_code='{{ value|markdown|truncatewords_html:50 }}', template_code='{{ value|markdown|truncatewords_html:50 }}',
verbose_name='Comments (Short)' verbose_name=_('Comments (Short)')
) )
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='extras:journalentry_list' url_name='extras:journalentry_list'

View File

@ -1,5 +1,5 @@
import django_tables2 as tables import django_tables2 as tables
from django.utils.translation import gettext 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 NetBoxTable, columns
@ -13,9 +13,11 @@ __all__ = (
class ASNRangeTable(TenancyColumnsMixin, NetBoxTable): class ASNRangeTable(TenancyColumnsMixin, NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
rir = tables.Column( rir = tables.Column(
verbose_name=_('RIR'),
linkify=True linkify=True
) )
tags = columns.TagColumn( tags = columns.TagColumn(
@ -36,9 +38,11 @@ class ASNRangeTable(TenancyColumnsMixin, NetBoxTable):
class ASNTable(TenancyColumnsMixin, NetBoxTable): class ASNTable(TenancyColumnsMixin, NetBoxTable):
asn = tables.Column( asn = tables.Column(
verbose_name=_('ASN'),
linkify=True linkify=True
) )
rir = tables.Column( rir = tables.Column(
verbose_name=_('RIR'),
linkify=True linkify=True
) )
asn_asdot = tables.Column( asn_asdot = tables.Column(
@ -60,7 +64,9 @@ class ASNTable(TenancyColumnsMixin, NetBoxTable):
linkify_item=True, linkify_item=True,
verbose_name=_('Sites') verbose_name=_('Sites')
) )
comments = columns.MarkdownColumn() comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:asn_list' url_name='ipam:asn_list'
) )

View File

@ -1,3 +1,4 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from ipam.models import * from ipam.models import *
@ -18,17 +19,20 @@ IPADDRESSES = """
class FHRPGroupTable(NetBoxTable): class FHRPGroupTable(NetBoxTable):
group_id = tables.Column( group_id = tables.Column(
verbose_name=_('Group ID'),
linkify=True linkify=True
) )
ip_addresses = tables.TemplateColumn( ip_addresses = tables.TemplateColumn(
template_code=IPADDRESSES, template_code=IPADDRESSES,
orderable=False, orderable=False,
verbose_name='IP Addresses' verbose_name=_('IP Addresses')
) )
member_count = tables.Column( member_count = tables.Column(
verbose_name='Members' verbose_name=_('Members')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
) )
comments = columns.MarkdownColumn()
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:fhrpgroup_list' url_name='ipam:fhrpgroup_list'
) )
@ -52,16 +56,19 @@ class FHRPGroupAssignmentTable(NetBoxTable):
accessor=tables.A('interface__parent_object'), accessor=tables.A('interface__parent_object'),
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='Parent' verbose_name=_('Parent')
) )
interface = tables.Column( interface = tables.Column(
linkify=True, linkify=True,
orderable=False orderable=False,
verbose_name=_('Interface'),
) )
group = tables.Column( group = tables.Column(
verbose_name=_('Group'),
linkify=True linkify=True
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('edit', 'delete') actions=('edit', 'delete')
) )

View File

@ -1,3 +1,4 @@
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_tables2.utils import Accessor from django_tables2.utils import Accessor
@ -17,7 +18,7 @@ __all__ = (
'RoleTable', 'RoleTable',
) )
AVAILABLE_LABEL = mark_safe('<span class="badge bg-success">Available</span>') AVAILABLE_LABEL = mark_safe(_('<span class="badge bg-success">Available</span>'))
AGGREGATE_COPY_BUTTON = """ AGGREGATE_COPY_BUTTON = """
{% copy_content record.pk prefix="aggregate_" %} {% copy_content record.pk prefix="aggregate_" %}
@ -46,7 +47,7 @@ PREFIX_LINK_WITH_DEPTH = """
{% endif %} {% endif %}
""" + PREFIX_LINK """ + PREFIX_LINK
IPADDRESS_LINK = """ IPADDRESS_LINK = _("""
{% if record.pk %} {% if record.pk %}
<a href="{{ record.get_absolute_url }}" id="ipaddress_{{ record.pk }}">{{ record.address }}</a> <a href="{{ record.get_absolute_url }}" id="ipaddress_{{ record.pk }}">{{ record.address }}</a>
{% elif perms.ipam.add_ipaddress %} {% elif perms.ipam.add_ipaddress %}
@ -54,7 +55,7 @@ IPADDRESS_LINK = """
{% else %} {% else %}
{% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available {% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available
{% endif %} {% endif %}
""" """)
IPADDRESS_COPY_BUTTON = """ IPADDRESS_COPY_BUTTON = """
{% copy_content record.pk prefix="ipaddress_" %} {% copy_content record.pk prefix="ipaddress_" %}
@ -81,15 +82,16 @@ VRF_LINK = """
class RIRTable(NetBoxTable): class RIRTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
is_private = columns.BooleanColumn( is_private = columns.BooleanColumn(
verbose_name='Private' verbose_name=_('Private')
) )
aggregate_count = columns.LinkedCountColumn( aggregate_count = columns.LinkedCountColumn(
viewname='ipam:aggregate_list', viewname='ipam:aggregate_list',
url_params={'rir_id': 'pk'}, url_params={'rir_id': 'pk'},
verbose_name='Aggregates' verbose_name=_('Aggregates')
) )
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:rir_list' url_name='ipam:rir_list'
@ -111,7 +113,7 @@ class RIRTable(NetBoxTable):
class AggregateTable(TenancyColumnsMixin, NetBoxTable): class AggregateTable(TenancyColumnsMixin, NetBoxTable):
prefix = tables.Column( prefix = tables.Column(
linkify=True, linkify=True,
verbose_name='Aggregate', verbose_name=_('Aggregate'),
attrs={ attrs={
# Allow the aggregate to be copied to the clipboard # Allow the aggregate to be copied to the clipboard
'a': {'id': lambda record: f"aggregate_{record.pk}"} 'a': {'id': lambda record: f"aggregate_{record.pk}"}
@ -119,20 +121,24 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
) )
date_added = tables.DateColumn( date_added = tables.DateColumn(
format="Y-m-d", format="Y-m-d",
verbose_name='Added' verbose_name=_('Added')
) )
child_count = tables.Column( child_count = tables.Column(
verbose_name='Prefixes' verbose_name=_('Prefixes')
) )
utilization = columns.UtilizationColumn( utilization = columns.UtilizationColumn(
verbose_name=_('Utilization'),
accessor='get_utilization', accessor='get_utilization',
orderable=False orderable=False
) )
comments = columns.MarkdownColumn() comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:aggregate_list' url_name='ipam:aggregate_list'
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
extra_buttons=AGGREGATE_COPY_BUTTON extra_buttons=AGGREGATE_COPY_BUTTON
) )
@ -151,22 +157,23 @@ class AggregateTable(TenancyColumnsMixin, NetBoxTable):
class RoleTable(NetBoxTable): class RoleTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
prefix_count = columns.LinkedCountColumn( prefix_count = columns.LinkedCountColumn(
viewname='ipam:prefix_list', viewname='ipam:prefix_list',
url_params={'role_id': 'pk'}, url_params={'role_id': 'pk'},
verbose_name='Prefixes' verbose_name=_('Prefixes')
) )
iprange_count = columns.LinkedCountColumn( iprange_count = columns.LinkedCountColumn(
viewname='ipam:iprange_list', viewname='ipam:iprange_list',
url_params={'role_id': 'pk'}, url_params={'role_id': 'pk'},
verbose_name='IP Ranges' verbose_name=_('IP Ranges')
) )
vlan_count = columns.LinkedCountColumn( vlan_count = columns.LinkedCountColumn(
viewname='ipam:vlan_list', viewname='ipam:vlan_list',
url_params={'role_id': 'pk'}, url_params={'role_id': 'pk'},
verbose_name='VLANs' verbose_name=_('VLANs')
) )
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:role_list' url_name='ipam:role_list'
@ -202,6 +209,7 @@ class PrefixUtilizationColumn(columns.UtilizationColumn):
class PrefixTable(TenancyColumnsMixin, NetBoxTable): class PrefixTable(TenancyColumnsMixin, NetBoxTable):
prefix = columns.TemplateColumn( prefix = columns.TemplateColumn(
verbose_name=_('Prefix'),
template_code=PREFIX_LINK_WITH_DEPTH, template_code=PREFIX_LINK_WITH_DEPTH,
export_raw=True, export_raw=True,
attrs={'td': {'class': 'text-nowrap'}} attrs={'td': {'class': 'text-nowrap'}}
@ -210,11 +218,11 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
accessor=Accessor('prefix'), accessor=Accessor('prefix'),
template_code=PREFIX_LINK, template_code=PREFIX_LINK,
export_raw=True, export_raw=True,
verbose_name='Prefix (Flat)' verbose_name=_('Prefix (Flat)')
) )
depth = tables.Column( depth = tables.Column(
accessor=Accessor('_depth'), accessor=Accessor('_depth'),
verbose_name='Depth' verbose_name=_('Depth')
) )
children = columns.LinkedCountColumn( children = columns.LinkedCountColumn(
accessor=Accessor('_children'), accessor=Accessor('_children'),
@ -223,45 +231,52 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
'vrf_id': 'vrf_id', 'vrf_id': 'vrf_id',
'within': 'prefix', 'within': 'prefix',
}, },
verbose_name='Children' verbose_name=_('Children')
) )
status = columns.ChoiceFieldColumn( status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
default=AVAILABLE_LABEL default=AVAILABLE_LABEL
) )
vrf = tables.TemplateColumn( vrf = tables.TemplateColumn(
template_code=VRF_LINK, template_code=VRF_LINK,
verbose_name='VRF' verbose_name=_('VRF')
) )
site = tables.Column( site = tables.Column(
verbose_name=_('Site'),
linkify=True linkify=True
) )
vlan_group = tables.Column( vlan_group = tables.Column(
accessor='vlan__group', accessor='vlan__group',
linkify=True, linkify=True,
verbose_name='VLAN Group' verbose_name=_('VLAN Group')
) )
vlan = tables.Column( vlan = tables.Column(
linkify=True, linkify=True,
verbose_name='VLAN' verbose_name=_('VLAN')
) )
role = tables.Column( role = tables.Column(
verbose_name=_('Role'),
linkify=True linkify=True
) )
is_pool = columns.BooleanColumn( is_pool = columns.BooleanColumn(
verbose_name='Pool' verbose_name=_('Pool')
) )
mark_utilized = columns.BooleanColumn( mark_utilized = columns.BooleanColumn(
verbose_name='Marked Utilized' verbose_name=_('Marked Utilized')
) )
utilization = PrefixUtilizationColumn( utilization = PrefixUtilizationColumn(
verbose_name=_('Utilization'),
accessor='get_utilization', accessor='get_utilization',
orderable=False orderable=False
) )
comments = columns.MarkdownColumn() comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:prefix_list' url_name='ipam:prefix_list'
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
extra_buttons=PREFIX_COPY_BUTTON extra_buttons=PREFIX_COPY_BUTTON
) )
@ -285,26 +300,32 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable):
# #
class IPRangeTable(TenancyColumnsMixin, NetBoxTable): class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
start_address = tables.Column( start_address = tables.Column(
verbose_name=_('Start address'),
linkify=True linkify=True
) )
vrf = tables.TemplateColumn( vrf = tables.TemplateColumn(
template_code=VRF_LINK, template_code=VRF_LINK,
verbose_name='VRF' verbose_name=_('VRF')
) )
status = columns.ChoiceFieldColumn( status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
default=AVAILABLE_LABEL default=AVAILABLE_LABEL
) )
role = tables.Column( role = tables.Column(
verbose_name=_('Role'),
linkify=True linkify=True
) )
mark_utilized = columns.BooleanColumn( mark_utilized = columns.BooleanColumn(
verbose_name='Marked Utilized' verbose_name=_('Marked Utilized')
) )
utilization = columns.UtilizationColumn( utilization = columns.UtilizationColumn(
verbose_name=_('Utilization'),
accessor='utilization', accessor='utilization',
orderable=False orderable=False
) )
comments = columns.MarkdownColumn() comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:iprange_list' url_name='ipam:iprange_list'
) )
@ -330,47 +351,53 @@ class IPRangeTable(TenancyColumnsMixin, NetBoxTable):
class IPAddressTable(TenancyColumnsMixin, NetBoxTable): class IPAddressTable(TenancyColumnsMixin, NetBoxTable):
address = tables.TemplateColumn( address = tables.TemplateColumn(
template_code=IPADDRESS_LINK, template_code=IPADDRESS_LINK,
verbose_name='IP Address' verbose_name=_('IP Address')
) )
vrf = tables.TemplateColumn( vrf = tables.TemplateColumn(
template_code=VRF_LINK, template_code=VRF_LINK,
verbose_name='VRF' verbose_name=_('VRF')
) )
status = columns.ChoiceFieldColumn( status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
default=AVAILABLE_LABEL default=AVAILABLE_LABEL
) )
role = columns.ChoiceFieldColumn() role = columns.ChoiceFieldColumn(
verbose_name=_('Role'),
)
assigned_object = tables.Column( assigned_object = tables.Column(
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='Interface' verbose_name=_('Interface')
) )
assigned_object_parent = tables.Column( assigned_object_parent = tables.Column(
accessor='assigned_object__parent_object', accessor='assigned_object__parent_object',
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='Device/VM' verbose_name=_('Device/VM')
) )
nat_inside = tables.Column( nat_inside = tables.Column(
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='NAT (Inside)' verbose_name=_('NAT (Inside)')
) )
nat_outside = tables.ManyToManyColumn( nat_outside = tables.ManyToManyColumn(
linkify_item=True, linkify_item=True,
orderable=False, orderable=False,
verbose_name='NAT (Outside)' verbose_name=_('NAT (Outside)')
) )
assigned = columns.BooleanColumn( assigned = columns.BooleanColumn(
accessor='assigned_object_id', accessor='assigned_object_id',
linkify=lambda record: record.assigned_object.get_absolute_url(), linkify=lambda record: record.assigned_object.get_absolute_url(),
verbose_name='Assigned' verbose_name=_('Assigned')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
) )
comments = columns.MarkdownColumn()
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:ipaddress_list' url_name='ipam:ipaddress_list'
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
extra_buttons=IPADDRESS_COPY_BUTTON extra_buttons=IPADDRESS_COPY_BUTTON
) )
@ -391,10 +418,13 @@ class IPAddressTable(TenancyColumnsMixin, NetBoxTable):
class IPAddressAssignTable(NetBoxTable): class IPAddressAssignTable(NetBoxTable):
address = tables.TemplateColumn( address = tables.TemplateColumn(
template_code=IPADDRESS_ASSIGN_LINK, template_code=IPADDRESS_ASSIGN_LINK,
verbose_name='IP Address' verbose_name=_('IP Address')
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
) )
status = columns.ChoiceFieldColumn()
assigned_object = tables.Column( assigned_object = tables.Column(
verbose_name=_('Assigned object'),
orderable=False orderable=False
) )
@ -411,14 +441,18 @@ class AssignedIPAddressesTable(NetBoxTable):
""" """
address = tables.Column( address = tables.Column(
linkify=True, linkify=True,
verbose_name='IP Address' verbose_name=_('IP Address')
) )
vrf = tables.TemplateColumn( vrf = tables.TemplateColumn(
template_code=VRF_LINK, template_code=VRF_LINK,
verbose_name='VRF' verbose_name=_('VRF')
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
)
tenant = TenantColumn(
verbose_name=_('Tenant'),
) )
status = columns.ChoiceFieldColumn()
tenant = TenantColumn()
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):
model = IPAddress model = IPAddress

View File

@ -1,3 +1,4 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from ipam.models import L2VPN, L2VPNTermination from ipam.models import L2VPN, L2VPNTermination
@ -17,19 +18,26 @@ L2VPN_TARGETS = """
class L2VPNTable(TenancyColumnsMixin, NetBoxTable): class L2VPNTable(TenancyColumnsMixin, NetBoxTable):
pk = columns.ToggleColumn() pk = columns.ToggleColumn(
verbose_name=_('Pk'),
)
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
import_targets = columns.TemplateColumn( import_targets = columns.TemplateColumn(
verbose_name=_('Import targets'),
template_code=L2VPN_TARGETS, template_code=L2VPN_TARGETS,
orderable=False orderable=False
) )
export_targets = columns.TemplateColumn( export_targets = columns.TemplateColumn(
verbose_name=_('Export targets'),
template_code=L2VPN_TARGETS, template_code=L2VPN_TARGETS,
orderable=False orderable=False
) )
comments = columns.MarkdownColumn() comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:l2vpn_list' url_name='ipam:l2vpn_list'
) )
@ -44,28 +52,30 @@ class L2VPNTable(TenancyColumnsMixin, NetBoxTable):
class L2VPNTerminationTable(NetBoxTable): class L2VPNTerminationTable(NetBoxTable):
pk = columns.ToggleColumn() pk = columns.ToggleColumn(
verbose_name=_('Pk'),
)
l2vpn = tables.Column( l2vpn = tables.Column(
verbose_name='L2VPN', verbose_name=_('L2VPN'),
linkify=True linkify=True
) )
assigned_object_type = columns.ContentTypeColumn( assigned_object_type = columns.ContentTypeColumn(
verbose_name='Object Type' verbose_name=_('Object Type')
) )
assigned_object = tables.Column( assigned_object = tables.Column(
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='Object' verbose_name=_('Object')
) )
assigned_object_parent = tables.Column( assigned_object_parent = tables.Column(
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='Object Parent' verbose_name=_('Object Parent')
) )
assigned_object_site = tables.Column( assigned_object_site = tables.Column(
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='Object Site' verbose_name=_('Object Site')
) )
class Meta(NetBoxTable.Meta): class Meta(NetBoxTable.Meta):

View File

@ -1,3 +1,4 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from ipam.models import * from ipam.models import *
@ -11,13 +12,17 @@ __all__ = (
class ServiceTemplateTable(NetBoxTable): class ServiceTemplateTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
ports = tables.Column( ports = tables.Column(
verbose_name=_('Ports'),
accessor=tables.A('port_list'), accessor=tables.A('port_list'),
order_by=tables.A('ports'), order_by=tables.A('ports'),
) )
comments = columns.MarkdownColumn() comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:servicetemplate_list' url_name='ipam:servicetemplate_list'
) )
@ -32,17 +37,22 @@ class ServiceTemplateTable(NetBoxTable):
class ServiceTable(NetBoxTable): class ServiceTable(NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
parent = tables.Column( parent = tables.Column(
verbose_name=_('Parent'),
linkify=True, linkify=True,
order_by=('device', 'virtual_machine') order_by=('device', 'virtual_machine')
) )
ports = tables.Column( ports = tables.Column(
verbose_name=_('Ports'),
accessor=tables.A('port_list'), accessor=tables.A('port_list'),
order_by=tables.A('ports'), order_by=tables.A('ports'),
) )
comments = columns.MarkdownColumn() comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:service_list' url_name='ipam:service_list'
) )

View File

@ -1,5 +1,6 @@
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 dcim.models import Interface from dcim.models import Interface
@ -17,9 +18,9 @@ __all__ = (
'VLANVirtualMachinesTable', 'VLANVirtualMachinesTable',
) )
AVAILABLE_LABEL = mark_safe('<span class="badge bg-success">Available</span>') AVAILABLE_LABEL = mark_safe(_('<span class="badge bg-success">Available</span>'))
VLAN_LINK = """ VLAN_LINK = _("""
{% if record.pk %} {% if record.pk %}
<a href="{{ record.get_absolute_url }}">{{ record.vid }}</a> <a href="{{ record.get_absolute_url }}">{{ record.vid }}</a>
{% elif perms.ipam.add_vlan %} {% elif perms.ipam.add_vlan %}
@ -27,7 +28,7 @@ VLAN_LINK = """
{% else %} {% else %}
{{ record.available }} VLAN{{ record.available|pluralize }} available {{ record.available }} VLAN{{ record.available|pluralize }} available
{% endif %} {% endif %}
""" """)
VLAN_PREFIXES = """ VLAN_PREFIXES = """
{% for prefix in value.all %} {% for prefix in value.all %}
@ -59,25 +60,32 @@ VLAN_MEMBER_TAGGED = """
# #
class VLANGroupTable(NetBoxTable): class VLANGroupTable(NetBoxTable):
name = tables.Column(linkify=True) name = tables.Column(
scope_type = columns.ContentTypeColumn() verbose_name=_('Name'),
linkify=True
)
scope_type = columns.ContentTypeColumn(
verbose_name=_('Scope type'),
)
scope = tables.Column( scope = tables.Column(
verbose_name=_('Scope'),
linkify=True, linkify=True,
orderable=False orderable=False
) )
vlan_count = columns.LinkedCountColumn( vlan_count = columns.LinkedCountColumn(
viewname='ipam:vlan_list', viewname='ipam:vlan_list',
url_params={'group_id': 'pk'}, url_params={'group_id': 'pk'},
verbose_name='VLANs' verbose_name=_('VLANs')
) )
utilization = columns.UtilizationColumn( utilization = columns.UtilizationColumn(
orderable=False, orderable=False,
verbose_name='Utilization' verbose_name=_('Utilization')
) )
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:vlangroup_list' url_name='ipam:vlangroup_list'
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
extra_buttons=VLANGROUP_BUTTONS extra_buttons=VLANGROUP_BUTTONS
) )
@ -97,35 +105,42 @@ class VLANGroupTable(NetBoxTable):
class VLANTable(TenancyColumnsMixin, NetBoxTable): class VLANTable(TenancyColumnsMixin, NetBoxTable):
vid = tables.TemplateColumn( vid = tables.TemplateColumn(
template_code=VLAN_LINK, template_code=VLAN_LINK,
verbose_name='VID' verbose_name=_('VID')
) )
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
site = tables.Column( site = tables.Column(
verbose_name=_('Site'),
linkify=True linkify=True
) )
group = tables.Column( group = tables.Column(
verbose_name=_('Group'),
linkify=True linkify=True
) )
status = columns.ChoiceFieldColumn( status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
default=AVAILABLE_LABEL default=AVAILABLE_LABEL
) )
role = tables.Column( role = tables.Column(
verbose_name=_('Role'),
linkify=True linkify=True
) )
l2vpn = tables.Column( l2vpn = tables.Column(
accessor=tables.A('l2vpn_termination__l2vpn'), accessor=tables.A('l2vpn_termination__l2vpn'),
linkify=True, linkify=True,
orderable=False, orderable=False,
verbose_name='L2VPN' verbose_name=_('L2VPN')
) )
prefixes = columns.TemplateColumn( prefixes = columns.TemplateColumn(
template_code=VLAN_PREFIXES, template_code=VLAN_PREFIXES,
orderable=False, orderable=False,
verbose_name='Prefixes' verbose_name=_('Prefixes')
)
comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
) )
comments = columns.MarkdownColumn()
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:vlan_list' url_name='ipam:vlan_list'
) )
@ -148,9 +163,10 @@ class VLANMembersTable(NetBoxTable):
""" """
name = tables.Column( name = tables.Column(
linkify=True, linkify=True,
verbose_name='Interface' verbose_name=_('Interface')
) )
tagged = tables.TemplateColumn( tagged = tables.TemplateColumn(
verbose_name=_('Tagged'),
template_code=VLAN_MEMBER_TAGGED, template_code=VLAN_MEMBER_TAGGED,
orderable=False orderable=False
) )
@ -158,9 +174,11 @@ class VLANMembersTable(NetBoxTable):
class VLANDevicesTable(VLANMembersTable): class VLANDevicesTable(VLANMembersTable):
device = tables.Column( device = tables.Column(
verbose_name=_('Device'),
linkify=True linkify=True
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('edit',) actions=('edit',)
) )
@ -172,9 +190,11 @@ class VLANDevicesTable(VLANMembersTable):
class VLANVirtualMachinesTable(VLANMembersTable): class VLANVirtualMachinesTable(VLANMembersTable):
virtual_machine = tables.Column( virtual_machine = tables.Column(
verbose_name=_('Virtual machine'),
linkify=True linkify=True
) )
actions = columns.ActionsColumn( actions = columns.ActionsColumn(
verbose_name=_('Actions'),
actions=('edit',) actions=('edit',)
) )
@ -190,19 +210,27 @@ class InterfaceVLANTable(NetBoxTable):
""" """
vid = tables.Column( vid = tables.Column(
linkify=True, linkify=True,
verbose_name='ID' verbose_name=_('ID')
)
tagged = columns.BooleanColumn(
verbose_name=_('Tagged'),
) )
tagged = columns.BooleanColumn()
site = tables.Column( site = tables.Column(
verbose_name=_('Site'),
linkify=True linkify=True
) )
group = tables.Column( group = tables.Column(
accessor=Accessor('group__name'), accessor=Accessor('group__name'),
verbose_name='Group' verbose_name=_('Group')
)
tenant = TenantColumn(
verbose_name=_('Tenant'),
)
status = columns.ChoiceFieldColumn(
verbose_name=_('Status'),
) )
tenant = TenantColumn()
status = columns.ChoiceFieldColumn()
role = tables.Column( role = tables.Column(
verbose_name=_('Role'),
linkify=True linkify=True
) )

View File

@ -1,3 +1,4 @@
from django.utils.translation import gettext_lazy as _
import django_tables2 as tables import django_tables2 as tables
from ipam.models import * from ipam.models import *
@ -22,23 +23,28 @@ VRF_TARGETS = """
class VRFTable(TenancyColumnsMixin, NetBoxTable): class VRFTable(TenancyColumnsMixin, NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
rd = tables.Column( rd = tables.Column(
verbose_name='RD' verbose_name=_('RD')
) )
enforce_unique = columns.BooleanColumn( enforce_unique = columns.BooleanColumn(
verbose_name='Unique' verbose_name=_('Unique')
) )
import_targets = columns.TemplateColumn( import_targets = columns.TemplateColumn(
verbose_name=_('Import targets'),
template_code=VRF_TARGETS, template_code=VRF_TARGETS,
orderable=False orderable=False
) )
export_targets = columns.TemplateColumn( export_targets = columns.TemplateColumn(
verbose_name=_('Export targets'),
template_code=VRF_TARGETS, template_code=VRF_TARGETS,
orderable=False orderable=False
) )
comments = columns.MarkdownColumn() comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:vrf_list' url_name='ipam:vrf_list'
) )
@ -58,9 +64,12 @@ class VRFTable(TenancyColumnsMixin, NetBoxTable):
class RouteTargetTable(TenancyColumnsMixin, NetBoxTable): class RouteTargetTable(TenancyColumnsMixin, NetBoxTable):
name = tables.Column( name = tables.Column(
verbose_name=_('Name'),
linkify=True linkify=True
) )
comments = columns.MarkdownColumn() comments = columns.MarkdownColumn(
verbose_name=_('Comments'),
)
tags = columns.TagColumn( tags = columns.TagColumn(
url_name='ipam:routetarget_list' url_name='ipam:routetarget_list'
) )