From ffa9a526677800a44b9faebe58439a8c2eca6a5a Mon Sep 17 00:00:00 2001 From: Jonathan Ramstedt Date: Thu, 24 Jul 2025 19:54:49 +0300 Subject: [PATCH] Closes #18936: add color name support for cable bulk import (#19949) --- netbox/dcim/forms/bulk_import.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/netbox/dcim/forms/bulk_import.py b/netbox/dcim/forms/bulk_import.py index 2d0d8490e..fc33c2162 100644 --- a/netbox/dcim/forms/bulk_import.py +++ b/netbox/dcim/forms/bulk_import.py @@ -1410,6 +1410,12 @@ class CableImportForm(NetBoxModelImportForm): required=False, help_text=_('Length unit') ) + color = forms.CharField( + label=_('Color'), + required=False, + max_length=16, + help_text=_('Color name (e.g. "Red") or hex code (e.g. "f44336")') + ) class Meta: model = Cable @@ -1473,6 +1479,24 @@ class CableImportForm(NetBoxModelImportForm): setattr(self.instance, f'{side}_terminations', [termination_object]) return termination_object + def _clean_color(self, color): + """ + Derive a colors hex code + + :param color: color as hex or color name + """ + color_parsed = color.strip().lower() + + for hex_code, label in ColorChoices.CHOICES: + if color.lower() == label.lower(): + color_parsed = hex_code + + if len(color_parsed) > 6: + raise forms.ValidationError( + _(f"{color} did not match any used color name and was longer than six characters: invalid hex.") + ) + return color_parsed + def clean_side_a_name(self): return self._clean_side('a') @@ -1484,11 +1508,14 @@ class CableImportForm(NetBoxModelImportForm): length_unit = self.cleaned_data.get('length_unit', None) return length_unit if length_unit is not None else '' - + def clean_color(self): + color = self.cleaned_data.get('color', None) + return self._clean_color(color) if color is not None else '' # # Virtual chassis # + class VirtualChassisImportForm(NetBoxModelImportForm): master = CSVModelChoiceField( label=_('Master'),