Coverage for dcim/tables/power.py: 100%
32 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 dcim.models import PowerFeed, PowerPanel
5from netbox.tables import PrimaryModelTable, columns
6from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
8from .devices import CableTerminationTable
10__all__ = (
11 'PowerFeedTable',
12 'PowerPanelTable',
13)
16#
17# Power panels
18#
20class PowerPanelTable(ContactsColumnMixin, PrimaryModelTable):
21 name = tables.Column(
22 verbose_name=_('Name'),
23 linkify=True
24 )
25 site = tables.Column(
26 verbose_name=_('Site'),
27 linkify=True
28 )
29 location = tables.Column(
30 verbose_name=_('Location'),
31 linkify=True
32 )
33 powerfeed_count = columns.LinkedCountColumn(
34 viewname='dcim:powerfeed_list',
35 url_params={'power_panel_id': 'pk'},
36 verbose_name=_('Power Feeds')
37 )
38 tags = columns.TagColumn(
39 url_name='dcim:powerpanel_list'
40 )
42 class Meta(PrimaryModelTable.Meta):
43 model = PowerPanel
44 fields = (
45 'pk', 'id', 'name', 'site', 'location', 'powerfeed_count', 'contacts', 'description', 'comments', 'tags',
46 'created', 'last_updated',
47 )
48 default_columns = ('pk', 'name', 'site', 'location', 'powerfeed_count')
51#
52# Power feeds
53#
55# We're not using PathEndpointTable for PowerFeed because power connections
56# cannot traverse pass-through ports.
57class PowerFeedTable(TenancyColumnsMixin, CableTerminationTable, PrimaryModelTable):
58 name = tables.Column(
59 verbose_name=_('Name'),
60 linkify=True
61 )
62 power_panel = tables.Column(
63 verbose_name=_('Power Panel'),
64 linkify=True
65 )
66 rack = tables.Column(
67 verbose_name=_('Rack'),
68 linkify=True
69 )
70 status = columns.ChoiceFieldColumn(
71 verbose_name=_('Status'),
72 )
73 type = columns.ChoiceFieldColumn(
74 verbose_name=_('Type'),
75 )
76 max_utilization = tables.TemplateColumn(
77 verbose_name=_('Max Utilization'),
78 template_code="{{ value }}%"
79 )
80 available_power = tables.Column(
81 verbose_name=_('Available Power (VA)')
82 )
83 tenant = tables.Column(
84 linkify=True,
85 verbose_name=_('Tenant')
86 )
87 site = tables.Column(
88 accessor='rack__site',
89 linkify=True,
90 verbose_name=_('Site'),
91 )
92 tags = columns.TagColumn(
93 url_name='dcim:powerfeed_list'
94 )
96 class Meta(CableTerminationTable.Meta, PrimaryModelTable.Meta):
97 model = PowerFeed
98 fields = (
99 'pk', 'id', 'name', 'power_panel', 'site', 'rack', 'status', 'type', 'supply', 'voltage', 'amperage',
100 'phase', 'max_utilization', 'mark_connected', 'cable', 'cable_color', 'link_peer', 'available_power',
101 'tenant', 'tenant_group', 'description', 'comments', 'tags', 'created', 'last_updated',
102 )
103 default_columns = (
104 'pk', 'name', 'power_panel', 'rack', 'status', 'type', 'supply', 'voltage', 'amperage', 'phase', 'cable',
105 'link_peer',
106 )