Skip to content

Commit 52d4498

Browse files
Add color to PowerOutletTemplate (#20530)
1 parent 5bbab7e commit 52d4498

File tree

9 files changed

+43
-5
lines changed

9 files changed

+43
-5
lines changed

netbox/dcim/api/serializers_/devicetype_components.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ class Meta:
155155
model = PowerOutletTemplate
156156
fields = [
157157
'id', 'url', 'display', 'device_type', 'module_type', 'name', 'label', 'type',
158-
'power_port', 'feed_leg', 'description', 'created', 'last_updated',
158+
'color', 'power_port', 'feed_leg', 'description', 'created', 'last_updated',
159159
]
160160
brief_fields = ('id', 'url', 'display', 'name', 'description')
161161

netbox/dcim/filtersets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ class PowerOutletTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceType
842842

843843
class Meta:
844844
model = PowerOutletTemplate
845-
fields = ('id', 'name', 'label', 'type', 'feed_leg', 'description')
845+
fields = ('id', 'name', 'label', 'type', 'color', 'feed_leg', 'description')
846846

847847

848848
class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):

netbox/dcim/forms/bulk_edit.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,6 +1163,10 @@ class PowerOutletTemplateBulkEditForm(ComponentTemplateBulkEditForm):
11631163
choices=add_blank_choice(PowerOutletTypeChoices),
11641164
required=False
11651165
)
1166+
color = ColorField(
1167+
label=_('Color'),
1168+
required=False
1169+
)
11661170
power_port = forms.ModelChoiceField(
11671171
label=_('Power port'),
11681172
queryset=PowerPortTemplate.objects.all(),

netbox/dcim/forms/model_forms.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,14 +1092,14 @@ class PowerOutletTemplateForm(ModularComponentTemplateForm):
10921092
FieldSet('device_type', name=_('Device Type')),
10931093
FieldSet('module_type', name=_('Module Type')),
10941094
),
1095-
'name', 'label', 'type', 'power_port', 'feed_leg', 'description',
1095+
'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'description',
10961096
),
10971097
)
10981098

10991099
class Meta:
11001100
model = PowerOutletTemplate
11011101
fields = [
1102-
'device_type', 'module_type', 'name', 'label', 'type', 'power_port', 'feed_leg', 'description',
1102+
'device_type', 'module_type', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'description',
11031103
]
11041104

11051105

netbox/dcim/graphql/types.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,7 @@ class PowerOutletType(ModularComponentType, CabledObjectMixin, PathEndpointMixin
673673
)
674674
class PowerOutletTemplateType(ModularComponentTemplateType):
675675
power_port: Annotated["PowerPortTemplateType", strawberry.lazy('dcim.graphql.types')] | None
676+
color: str
676677

677678

678679
@strawberry_django.type(
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import utilities.fields
2+
from django.db import migrations
3+
4+
5+
class Migration(migrations.Migration):
6+
7+
dependencies = [
8+
('dcim', '0215_rackreservation_status'),
9+
]
10+
11+
operations = [
12+
migrations.AddField(
13+
model_name='poweroutlettemplate',
14+
name='color',
15+
field=utilities.fields.ColorField(blank=True, max_length=6),
16+
),
17+
]

netbox/dcim/models/device_component_templates.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,10 @@ class PowerOutletTemplate(ModularComponentTemplateModel):
339339
blank=True,
340340
null=True
341341
)
342+
color = ColorField(
343+
verbose_name=_('color'),
344+
blank=True
345+
)
342346
power_port = models.ForeignKey(
343347
to='dcim.PowerPortTemplate',
344348
on_delete=models.SET_NULL,
@@ -389,6 +393,7 @@ def instantiate(self, **kwargs):
389393
name=self.resolve_name(kwargs.get('module')),
390394
label=self.resolve_label(kwargs.get('module')),
391395
type=self.type,
396+
color=self.color,
392397
power_port=power_port,
393398
feed_leg=self.feed_leg,
394399
**kwargs
@@ -399,6 +404,7 @@ def to_yaml(self):
399404
return {
400405
'name': self.name,
401406
'type': self.type,
407+
'color': self.color,
402408
'power_port': self.power_port.name if self.power_port else None,
403409
'feed_leg': self.feed_leg,
404410
'label': self.label,

netbox/dcim/tables/devicetypes.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,14 +211,17 @@ class Meta(ComponentTemplateTable.Meta):
211211

212212

213213
class PowerOutletTemplateTable(ComponentTemplateTable):
214+
color = columns.ColorColumn(
215+
verbose_name=_('Color'),
216+
)
214217
actions = columns.ActionsColumn(
215218
actions=('edit', 'delete'),
216219
extra_buttons=MODULAR_COMPONENT_TEMPLATE_BUTTONS
217220
)
218221

219222
class Meta(ComponentTemplateTable.Meta):
220223
model = models.PowerOutletTemplate
221-
fields = ('pk', 'name', 'label', 'type', 'power_port', 'feed_leg', 'description', 'actions')
224+
fields = ('pk', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'description', 'actions')
222225
empty_text = "None"
223226

224227

netbox/dcim/tests/test_filtersets.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,18 +1919,21 @@ def setUpTestData(cls):
19191919
device_type=device_types[0],
19201920
name='Power Outlet 1',
19211921
feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A,
1922+
color=ColorChoices.COLOR_RED,
19221923
description='foobar1'
19231924
),
19241925
PowerOutletTemplate(
19251926
device_type=device_types[1],
19261927
name='Power Outlet 2',
19271928
feed_leg=PowerOutletFeedLegChoices.FEED_LEG_B,
1929+
color=ColorChoices.COLOR_GREEN,
19281930
description='foobar2'
19291931
),
19301932
PowerOutletTemplate(
19311933
device_type=device_types[2],
19321934
name='Power Outlet 3',
19331935
feed_leg=PowerOutletFeedLegChoices.FEED_LEG_C,
1936+
color=ColorChoices.COLOR_BLUE,
19341937
description='foobar3'
19351938
),
19361939
))
@@ -1943,6 +1946,10 @@ def test_feed_leg(self):
19431946
params = {'feed_leg': [PowerOutletFeedLegChoices.FEED_LEG_A, PowerOutletFeedLegChoices.FEED_LEG_B]}
19441947
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
19451948

1949+
def test_color(self):
1950+
params = {'color': [ColorChoices.COLOR_RED, ColorChoices.COLOR_GREEN]}
1951+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
1952+
19461953

19471954
class InterfaceTemplateTestCase(TestCase, DeviceComponentTemplateFilterSetTests, ChangeLoggedFilterSetTests):
19481955
queryset = InterfaceTemplate.objects.all()

0 commit comments

Comments
 (0)