Forráskód Böngészése

Fix handling of ProtectedError exceptions

Jeremy Stretch 5 éve
szülő
commit
1dbf776279
2 módosított fájl, 9 hozzáadás és 24 törlés
  1. 3 4
      netbox/utilities/api.py
  2. 6 20
      netbox/utilities/error_handlers.py

+ 3 - 4
netbox/utilities/api.py

@@ -345,10 +345,9 @@ class ModelViewSet(_ModelViewSet):
         try:
         try:
             return super().dispatch(request, *args, **kwargs)
             return super().dispatch(request, *args, **kwargs)
         except ProtectedError as e:
         except ProtectedError as e:
-            models = [
-                '{} ({})'.format(o, o._meta) for o in e.protected_objects.all()
-            ]
-            msg = 'Unable to delete object. The following dependent objects were found: {}'.format(', '.join(models))
+            protected_objects = list(e.protected_objects)
+            msg = f'Unable to delete object. {len(protected_objects)} dependent objects were found: '
+            msg += ', '.join([f'{obj} ({obj.pk})' for obj in protected_objects])
             logger.warning(msg)
             logger.warning(msg)
             return self.finalize_response(
             return self.finalize_response(
                 request,
                 request,

+ 6 - 20
netbox/utilities/error_handlers.py

@@ -7,31 +7,17 @@ def handle_protectederror(obj, request, e):
     """
     """
     Generate a user-friendly error message in response to a ProtectedError exception.
     Generate a user-friendly error message in response to a ProtectedError exception.
     """
     """
-    try:
-        dep_class = e.protected_objects[0]._meta.verbose_name_plural
-    except IndexError:
-        raise e
-
-    # Grammar for single versus multiple triggering objects
-    if type(obj) in (list, tuple):
-        err_message = "Unable to delete the requested {}. The following dependent {} were found: ".format(
-            obj[0]._meta.verbose_name_plural,
-            dep_class,
-        )
-    else:
-        err_message = "Unable to delete {} {}. The following dependent {} were found: ".format(
-            obj._meta.verbose_name,
-            obj,
-            dep_class,
-        )
+    protected_objects = list(e.protected_objects)
+    err_message = f"Unable to delete {obj._meta.verbose_name} <strong>{obj}</strong>. " \
+                  f"{len(protected_objects)} dependent objects were found: "
 
 
     # Append dependent objects to error message
     # Append dependent objects to error message
     dependent_objects = []
     dependent_objects = []
-    for obj in e.protected_objects:
+    for dependent in protected_objects:
         if hasattr(obj, 'get_absolute_url'):
         if hasattr(obj, 'get_absolute_url'):
-            dependent_objects.append('<a href="{}">{}</a>'.format(obj.get_absolute_url(), escape(obj)))
+            dependent_objects.append(f'<a href="{dependent.get_absolute_url()}">{escape(dependent)}</a>')
         else:
         else:
-            dependent_objects.append(str(obj))
+            dependent_objects.append(str(dependent))
     err_message += ', '.join(dependent_objects)
     err_message += ', '.join(dependent_objects)
 
 
     messages.error(request, mark_safe(err_message))
     messages.error(request, mark_safe(err_message))