diff --git a/netbox/extras/models/scripts.py b/netbox/extras/models/scripts.py index 85aeb4f23..616d0f01b 100644 --- a/netbox/extras/models/scripts.py +++ b/netbox/extras/models/scripts.py @@ -67,12 +67,12 @@ class Script(EventRulesMixin, JobsMixin, models.Model): def python_class(self): return self.module.get_module_scripts.get(self.name) - def delete_if_no_jobs(self): - if self.jobs.exists(): + def delete(self, soft_delete=False): + if soft_delete and self.jobs.exists(): self.is_executable = False self.save() else: - self.delete() + super().delete() self.id = None @@ -134,7 +134,7 @@ class ScriptModule(PythonModuleMixin, JobsMixin, ManagedFile): # remove any existing db classes if they are no longer in the file removed = db_classes_set - module_classes_set for name in removed: - db_classes[name].delete_if_no_jobs() + db_classes[name].delete(soft_delete=True) added = module_classes_set - db_classes_set for name in added: diff --git a/netbox/extras/views.py b/netbox/extras/views.py index fc49d1cad..b091a37eb 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -1055,7 +1055,7 @@ class BaseScriptView(ContentTypePermissionRequiredMixin, generic.ObjectView): if self.script.python_class: self.script_class = self.script.python_class() else: - self.script.delete_if_no_jobs() + self.script.delete(soft_delete=True) messages.error(request, _("Script class has been deleted from module: ") + str(self.script.module)) if not self.script.id: return redirect('extras:script_list') @@ -1156,7 +1156,7 @@ class ScriptJobsView(ContentTypePermissionRequiredMixin, View): if self.script.python_class: self.script_class = self.script.python_class() else: - self.script.delete_if_no_jobs() + self.script.delete(soft_delete=True) if not self.script.id: messages.error(request, _("Script class has been deleted from module: ") + str(self.script.module)) return redirect('extras:script_list')