diff --git a/netbox/extras/scripts.py b/netbox/extras/scripts.py index f28465547..403aaec29 100644 --- a/netbox/extras/scripts.py +++ b/netbox/extras/scripts.py @@ -16,7 +16,7 @@ from core.choices import JobStatusChoices from core.models import Job from extras.api.serializers import ScriptOutputSerializer from extras.choices import LogLevelChoices -from extras.models import ScriptModule +from extras.models import ScriptModule, Script as ScriptModel from extras.signals import clear_events from ipam.formfields import IPAddressFormField, IPNetworkFormField from ipam.validators import MaxPrefixLengthValidator, MinPrefixLengthValidator, prefix_validator @@ -485,8 +485,7 @@ def run_script(data, job, request=None, commit=True, **kwargs): """ job.start() - module = ScriptModule.objects.get(pk=job.object_id) - script = module.scripts.get(job.name)() + script = ScriptModel.objects.get(pk=job.object_id).python_class() logger = logging.getLogger(f"netbox.scripts.{script.full_name}") logger.info(f"Running script (commit={commit})") diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 70a662c06..a0cc9a879 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -1252,7 +1252,6 @@ class ScriptView(ContentTypePermissionRequiredMixin, View): # Allow execution only if RQ worker process is running if not get_workers_for_queue('default'): messages.error(request, "Unable to run script: RQ worker process not running.") - elif form.is_valid(): job = Job.enqueue( run_script, @@ -1263,7 +1262,7 @@ class ScriptView(ContentTypePermissionRequiredMixin, View): interval=form.cleaned_data.pop('_interval'), data=form.cleaned_data, request=copy_safe_request(request), - job_timeout=script.job_timeout, + job_timeout=script.python_class.job_timeout, commit=form.cleaned_data.pop('_commit') ) @@ -1329,11 +1328,10 @@ class ScriptResultView(ContentTypePermissionRequiredMixin, View): return 'extras.view_script' def get(self, request, job_pk): - object_type = ContentType.objects.get_by_natural_key(app_label='extras', model='scriptmodule') + object_type = ContentType.objects.get_by_natural_key(app_label='extras', model='script') job = get_object_or_404(Job.objects.all(), pk=job_pk, object_type=object_type) - module = job.object - script = module.scripts[job.name]() + script = job.object # If this is an HTMX request, return only the result HTML if request.htmx: diff --git a/netbox/templates/extras/script_result.html b/netbox/templates/extras/script_result.html index 985c58d63..53606ed81 100644 --- a/netbox/templates/extras/script_result.html +++ b/netbox/templates/extras/script_result.html @@ -16,7 +16,7 @@