From 75b0bea22b15adabe95d53f2af74653e46e4e752 Mon Sep 17 00:00:00 2001 From: Daniel Sheppard Date: Mon, 19 Aug 2024 21:16:08 -0500 Subject: [PATCH] Fixes: #14044 - Allow regex renaming of unnamed devices * Allow regex renaming of unnamed devices (already allowed actually) * Catch errors relating to unnamed devices or integrity errors as a result of the rename process --- netbox/dcim/views.py | 11 +++++++++++ netbox/netbox/views/generic/bulk_views.py | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index b18ecdd5b..a89bafc1a 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2122,6 +2122,17 @@ class DeviceBulkRenameView(generic.BulkRenameView): filterset = filtersets.DeviceFilterSet table = tables.DeviceTable + def _rename_objects(self, form, selected_objects): + # Check devices for any unnamed devices and enforce requirements on the renaming of devices + for obj in selected_objects: + if not form.cleaned_data['use_regex'] and not obj.name: + from django.core.exceptions import ValidationError + raise ValidationError({ + 'use_regex': 'You must use regex to rename a unnamed device and must pass device uniqueness checks' + }) + + super()._rename_objects(form, selected_objects) + @register_model_view(Device, 'contacts') class DeviceContactsView(ObjectContactsView): diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index bdc9a7152..8270507b5 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -776,6 +776,14 @@ class BulkRenameView(GetReturnURLMixin, BaseMultiObjectView): ) return redirect(self.get_return_url(request)) + except IntegrityError as e: + messages.error(self.request, ", ".join(e.args)) + clear_events.send(sender=self) + + except ValidationError as e: + messages.error(self.request, ", ".join(e.messages)) + clear_events.send(sender=self) + except (AbortRequest, PermissionsViolation) as e: logger.debug(e.message) form.add_error(None, e.message)