mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-29 03:46:25 -06:00
18136 update script runner to use SCRIPT_CONTEXT_MANAGERS
This commit is contained in:
parent
768d89734c
commit
03a769e8ec
@ -222,8 +222,8 @@ Enables language translation for the user interface. (This parameter maps to Dja
|
||||
|
||||
---
|
||||
|
||||
## BRANCHING_BACKEND
|
||||
## SCRIPT_CONTEXT_MANAGERS
|
||||
|
||||
Default: None
|
||||
Default: []
|
||||
|
||||
The dotted path to the desired branching class. If using [netboxlabs-netbox-branching](https://github.com/netboxlabs/netbox-branching) set this to `netbox_branching.backends.BranchingBackend`
|
||||
The dotted path to any additional context managers to use when running scripts.
|
||||
|
@ -1,6 +1,6 @@
|
||||
import logging
|
||||
import traceback
|
||||
from contextlib import nullcontext
|
||||
from contextlib import ExitStack, nullcontext
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
@ -91,6 +91,7 @@ class ScriptJob(JobRunner):
|
||||
commit: Passed through to Script.run()
|
||||
"""
|
||||
script = ScriptModel.objects.get(pk=self.job.object_id).python_class()
|
||||
logger = logging.getLogger(f"netbox.scripts.{script.full_name}")
|
||||
|
||||
# Add files to form data
|
||||
if request:
|
||||
@ -101,21 +102,23 @@ class ScriptJob(JobRunner):
|
||||
# Add the current request as a property of the script
|
||||
script.request = request
|
||||
|
||||
# Execute the script. If commit is True, wrap it with the event_tracking context manager to ensure we process
|
||||
# change logging, event rules, etc.
|
||||
branch = None
|
||||
if settings.BRANCHING_BACKEND:
|
||||
context_managers = []
|
||||
for context_manager_str in settings.SCRIPT_CONTEXT_MANAGERS:
|
||||
try:
|
||||
branching_cls = import_string(settings.BRANCHING_BACKEND)
|
||||
context_managers.append(import_string(context_manager_str))
|
||||
except AttributeError:
|
||||
logger = logging.getLogger(f"netbox.scripts.{script.full_name}")
|
||||
message = _("Failed to import configured BRANCHING_BACKEND: ") + settings.BRANCHING_BACKEND
|
||||
message = _("Failed to import configured SCRIPT_CONTEXT_MANAGERS: ") + context_manager_str
|
||||
logger.error(message)
|
||||
raise ImproperlyConfigured(message)
|
||||
|
||||
branching_backend = branching_cls()
|
||||
branch = branching_backend.get_active_branch(request)
|
||||
|
||||
with branching_backend.activate_branch(branch) if branch else nullcontext():
|
||||
# Execute the script. If commit is True, wrap it with the event_tracking context manager to ensure we process
|
||||
# change logging, event rules, etc.
|
||||
with event_tracking(request) if commit else nullcontext():
|
||||
if context_managers:
|
||||
with ExitStack() as stack:
|
||||
for cm in context_managers:
|
||||
stack.enter_context(cm(request))
|
||||
|
||||
self.run_script(script, request, data, commit)
|
||||
else:
|
||||
self.run_script(script, request, data, commit)
|
||||
|
@ -179,7 +179,7 @@ STORAGE_BACKEND = getattr(configuration, 'STORAGE_BACKEND', None)
|
||||
STORAGE_CONFIG = getattr(configuration, 'STORAGE_CONFIG', {})
|
||||
TIME_ZONE = getattr(configuration, 'TIME_ZONE', 'UTC')
|
||||
TRANSLATION_ENABLED = getattr(configuration, 'TRANSLATION_ENABLED', True)
|
||||
BRANCHING_BACKEND = getattr(configuration, 'BRANCHING_BACKEND', None)
|
||||
SCRIPT_CONTEXT_MANAGERS = getattr(configuration, 'SCRIPT_CONTEXT_MANAGERS', [])
|
||||
|
||||
# Load any dynamic configuration parameters which have been hard-coded in the configuration file
|
||||
for param in CONFIG_PARAMS:
|
||||
|
Loading…
Reference in New Issue
Block a user