mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Implemented run_script() wrapper
This commit is contained in:
@ -5,6 +5,7 @@ import pkgutil
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.validators import RegexValidator
|
from django.core.validators import RegexValidator
|
||||||
|
from django.db import transaction
|
||||||
|
|
||||||
from .constants import LOG_DEFAULT, LOG_FAILURE, LOG_INFO, LOG_SUCCESS, LOG_WARNING
|
from .constants import LOG_DEFAULT, LOG_FAILURE, LOG_INFO, LOG_SUCCESS, LOG_WARNING
|
||||||
from .forms import ScriptForm
|
from .forms import ScriptForm
|
||||||
@ -196,6 +197,23 @@ def is_variable(obj):
|
|||||||
return isinstance(obj, ScriptVariable)
|
return isinstance(obj, ScriptVariable)
|
||||||
|
|
||||||
|
|
||||||
|
def run_script(script, data=None):
|
||||||
|
"""
|
||||||
|
A wrapper for calling Script.run(). This performs error handling. It exists outside of the Script class to ensure
|
||||||
|
it cannot be overridden by a script author.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
with transaction.atomic():
|
||||||
|
return script.run(data)
|
||||||
|
except Exception as e:
|
||||||
|
script.log_failure(
|
||||||
|
"An exception occurred: {}".format(e)
|
||||||
|
)
|
||||||
|
script.log_info(
|
||||||
|
"Database changes have been reverted automatically."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_scripts():
|
def get_scripts():
|
||||||
scripts = OrderedDict()
|
scripts = OrderedDict()
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ from django.conf import settings
|
|||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.auth.mixins import PermissionRequiredMixin
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.db import transaction
|
|
||||||
from django.db.models import Count, Q
|
from django.db.models import Count, Q
|
||||||
from django.http import Http404, HttpResponseForbidden
|
from django.http import Http404, HttpResponseForbidden
|
||||||
from django.shortcuts import get_object_or_404, redirect, render
|
from django.shortcuts import get_object_or_404, redirect, render
|
||||||
@ -21,7 +20,7 @@ from .forms import (
|
|||||||
)
|
)
|
||||||
from .models import ConfigContext, ImageAttachment, ObjectChange, ReportResult, Tag, TaggedItem
|
from .models import ConfigContext, ImageAttachment, ObjectChange, ReportResult, Tag, TaggedItem
|
||||||
from .reports import get_report, get_reports
|
from .reports import get_report, get_reports
|
||||||
from .scripts import get_scripts
|
from .scripts import get_scripts, run_script
|
||||||
from .tables import ConfigContextTable, ObjectChangeTable, TagTable, TaggedItemTable
|
from .tables import ConfigContextTable, ObjectChangeTable, TagTable, TaggedItemTable
|
||||||
|
|
||||||
|
|
||||||
@ -405,9 +404,7 @@ class ScriptView(PermissionRequiredMixin, View):
|
|||||||
output = None
|
output = None
|
||||||
|
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
|
run_script(script)
|
||||||
with transaction.atomic():
|
|
||||||
output = script.run(form.cleaned_data)
|
|
||||||
|
|
||||||
return render(request, 'extras/script.html', {
|
return render(request, 'extras/script.html', {
|
||||||
'module': module,
|
'module': module,
|
||||||
|
Reference in New Issue
Block a user