Coverage for circuits/tables/circuits.py: 100%
67 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1import django_tables2 as tables
2from django.utils.translation import gettext_lazy as _
4from circuits.models import *
5from netbox.tables import NetBoxTable, OrganizationalModelTable, PrimaryModelTable, columns
6from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
8from .columns import CommitRateColumn
10__all__ = (
11 'CircuitGroupAssignmentTable',
12 'CircuitGroupTable',
13 'CircuitTable',
14 'CircuitTerminationTable',
15 'CircuitTypeTable',
16)
19CIRCUITTERMINATION_LINK = """
20{% if value.termination %}
21 <a href="{{ value.termination.get_absolute_url }}">{{ value.termination }}</a>
22{% endif %}
23"""
26class CircuitTypeTable(OrganizationalModelTable):
27 name = tables.Column(
28 linkify=True,
29 verbose_name=_('Name'),
30 )
31 color = columns.ColorColumn()
32 tags = columns.TagColumn(
33 url_name='circuits:circuittype_list'
34 )
35 circuit_count = columns.LinkedCountColumn(
36 viewname='circuits:circuit_list',
37 url_params={'type_id': 'pk'},
38 verbose_name=_('Circuits')
39 )
41 class Meta(OrganizationalModelTable.Meta):
42 model = CircuitType
43 fields = (
44 'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'comments', 'tags', 'created',
45 'last_updated', 'actions',
46 )
47 default_columns = ('pk', 'name', 'circuit_count', 'color', 'description')
50class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, PrimaryModelTable):
51 cid = tables.Column(
52 linkify=True,
53 verbose_name=_('Circuit ID')
54 )
55 provider = tables.Column(
56 verbose_name=_('Provider'),
57 linkify=True
58 )
59 provider_account = tables.Column(
60 linkify=True,
61 verbose_name=_('Account')
62 )
63 type = columns.ColoredLabelColumn(
64 verbose_name=_('Type'),
65 )
66 status = columns.ChoiceFieldColumn()
67 termination_a = columns.TemplateColumn(
68 template_code=CIRCUITTERMINATION_LINK,
69 orderable=False,
70 verbose_name=_('Side A')
71 )
72 termination_z = columns.TemplateColumn(
73 template_code=CIRCUITTERMINATION_LINK,
74 orderable=False,
75 verbose_name=_('Side Z')
76 )
77 commit_rate = CommitRateColumn(
78 verbose_name=_('Commit Rate')
79 )
80 distance = columns.DistanceColumn()
81 tags = columns.TagColumn(
82 url_name='circuits:circuit_list'
83 )
84 assignments = columns.ManyToManyColumn(
85 verbose_name=_('Assignments'),
86 linkify_item=True
87 )
89 class Meta(PrimaryModelTable.Meta):
90 model = Circuit
91 fields = (
92 'pk', 'id', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'tenant_group',
93 'termination_a', 'termination_z', 'install_date', 'termination_date', 'commit_rate', 'description',
94 'comments', 'contacts', 'tags', 'created', 'last_updated', 'assignments',
95 )
96 default_columns = (
97 'pk', 'cid', 'provider', 'type', 'status', 'tenant', 'termination_a', 'termination_z', 'description',
98 )
101class CircuitTerminationTable(NetBoxTable):
102 circuit = tables.Column(
103 verbose_name=_('Circuit'),
104 linkify=True
105 )
106 provider = tables.Column(
107 verbose_name=_('Provider'),
108 linkify=True,
109 accessor='circuit__provider'
110 )
111 term_side = tables.Column(
112 verbose_name=_('Side')
113 )
114 termination_type = columns.ContentTypeColumn(
115 verbose_name=_('Termination Type'),
116 )
117 termination = tables.Column(
118 verbose_name=_('Termination Point'),
119 linkify=True,
120 orderable=False,
121 )
123 # Termination types
124 site = tables.Column(
125 verbose_name=_('Site'),
126 linkify=True,
127 accessor='_site'
128 )
129 site_group = tables.Column(
130 verbose_name=_('Site Group'),
131 linkify=True,
132 accessor='_site_group'
133 )
134 region = tables.Column(
135 verbose_name=_('Region'),
136 linkify=True,
137 accessor='_region'
138 )
139 location = tables.Column(
140 verbose_name=_('Location'),
141 linkify=True,
142 accessor='_location'
143 )
144 provider_network = tables.Column(
145 verbose_name=_('Provider Network'),
146 linkify=True,
147 accessor='_provider_network'
148 )
150 class Meta(NetBoxTable.Meta):
151 model = CircuitTermination
152 fields = (
153 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'site_group', 'region',
154 'site', 'location', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info',
155 'description', 'created', 'last_updated', 'actions',
156 )
157 default_columns = (
158 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'description',
159 )
162class CircuitGroupTable(TenancyColumnsMixin, OrganizationalModelTable):
163 name = tables.Column(
164 verbose_name=_('Name'),
165 linkify=True
166 )
167 circuit_group_assignment_count = columns.LinkedCountColumn(
168 viewname='circuits:circuitgroupassignment_list',
169 url_params={'group_id': 'pk'},
170 verbose_name=_('Circuits')
171 )
172 tags = columns.TagColumn(
173 url_name='circuits:circuitgroup_list'
174 )
176 class Meta(OrganizationalModelTable.Meta):
177 model = CircuitGroup
178 fields = (
179 'pk', 'name', 'description', 'circuit_group_assignment_count', 'tenant', 'tenant_group', 'comments',
180 'tags', 'created', 'last_updated', 'actions',
181 )
182 default_columns = ('pk', 'name', 'description', 'circuit_group_assignment_count')
185class CircuitGroupAssignmentTable(NetBoxTable):
186 group = tables.Column(
187 verbose_name=_('Group'),
188 linkify=True
189 )
190 provider = tables.Column(
191 accessor='member__provider',
192 verbose_name=_('Provider'),
193 orderable=False,
194 linkify=True,
195 )
196 member_type = columns.ContentTypeColumn(
197 verbose_name=_('Type')
198 )
199 member = tables.Column(
200 verbose_name=_('Circuit'),
201 orderable=False,
202 linkify=True,
203 )
204 priority = tables.Column(
205 verbose_name=_('Priority'),
206 )
207 tags = columns.TagColumn(
208 url_name='circuits:circuitgroupassignment_list'
209 )
211 class Meta(NetBoxTable.Meta):
212 model = CircuitGroupAssignment
213 fields = (
214 'pk', 'id', 'group', 'provider', 'member_type', 'member', 'priority', 'created', 'last_updated', 'actions',
215 'tags',
216 )
217 default_columns = ('pk', 'group', 'provider', 'member_type', 'member', 'priority')