mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-24 00:15:17 -06:00
14132 review changes
This commit is contained in:
parent
58136deeaf
commit
e9950459b4
@ -5,9 +5,9 @@ from .events import flush_events
|
|||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def event_wrapper(request):
|
def event_tracking(request):
|
||||||
"""
|
"""
|
||||||
Enable change logging by connecting the appropriate signals to their receivers before code is run, and
|
Enable event tracking by connecting the appropriate signals to their receivers before code is run, and
|
||||||
disconnecting them afterward.
|
disconnecting them afterward.
|
||||||
|
|
||||||
:param request: WSGIRequest object with a unique `id` set
|
:param request: WSGIRequest object with a unique `id` set
|
||||||
|
@ -11,7 +11,7 @@ from django.db import transaction
|
|||||||
from core.choices import JobStatusChoices
|
from core.choices import JobStatusChoices
|
||||||
from core.models import Job
|
from core.models import Job
|
||||||
from extras.api.serializers import ScriptOutputSerializer
|
from extras.api.serializers import ScriptOutputSerializer
|
||||||
from extras.context_managers import event_wrapper
|
from extras.context_managers import event_tracking
|
||||||
from extras.scripts import get_module_and_script
|
from extras.scripts import get_module_and_script
|
||||||
from extras.signals import clear_webhooks
|
from extras.signals import clear_webhooks
|
||||||
from utilities.exceptions import AbortTransaction
|
from utilities.exceptions import AbortTransaction
|
||||||
@ -37,7 +37,7 @@ class Command(BaseCommand):
|
|||||||
def _run_script():
|
def _run_script():
|
||||||
"""
|
"""
|
||||||
Core script execution task. We capture this within a subfunction to allow for conditionally wrapping it with
|
Core script execution task. We capture this within a subfunction to allow for conditionally wrapping it with
|
||||||
the event_wrapper context manager (which is bypassed if commit == False).
|
the event_tracking context manager (which is bypassed if commit == False).
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
@ -136,9 +136,9 @@ class Command(BaseCommand):
|
|||||||
logger.info(f"Running script (commit={commit})")
|
logger.info(f"Running script (commit={commit})")
|
||||||
script.request = request
|
script.request = request
|
||||||
|
|
||||||
# Execute the script. If commit is True, wrap it with the event_wrapper context manager to ensure we process
|
# Execute the script. If commit is True, wrap it with the event_tracking context manager to ensure we process
|
||||||
# change logging, webhooks, etc.
|
# change logging, webhooks, etc.
|
||||||
with event_wrapper(request):
|
with event_tracking(request):
|
||||||
_run_script()
|
_run_script()
|
||||||
else:
|
else:
|
||||||
logger.error('Data is not valid:')
|
logger.error('Data is not valid:')
|
||||||
|
@ -75,8 +75,8 @@ class Migration(migrations.Migration):
|
|||||||
to='contenttypes.contenttype',
|
to='contenttypes.contenttype',
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
('action_object_identifier', models.CharField(max_length=80, blank=True)),
|
('action_parameters', models.CharField(max_length=80, blank=True)),
|
||||||
('parameters', models.JSONField(blank=True, null=True)),
|
('action_data', models.JSONField(blank=True, null=True)),
|
||||||
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
|
@ -115,11 +115,11 @@ class EventRule(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLogged
|
|||||||
fk_field='action_object_id'
|
fk_field='action_object_id'
|
||||||
)
|
)
|
||||||
# internal (not show in UI) - used by scripts to store function name
|
# internal (not show in UI) - used by scripts to store function name
|
||||||
action_object_identifier = models.CharField(
|
action_parameters = models.CharField(
|
||||||
max_length=80,
|
max_length=80,
|
||||||
blank=True
|
blank=True
|
||||||
)
|
)
|
||||||
parameters = models.JSONField(
|
action_data = models.JSONField(
|
||||||
verbose_name=_('parameters'),
|
verbose_name=_('parameters'),
|
||||||
blank=True,
|
blank=True,
|
||||||
null=True,
|
null=True,
|
||||||
@ -137,10 +137,6 @@ class EventRule(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLogged
|
|||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return reverse('extras:eventrule', args=[self.pk])
|
return reverse('extras:eventrule', args=[self.pk])
|
||||||
|
|
||||||
@property
|
|
||||||
def docs_url(self):
|
|
||||||
return f'{settings.STATIC_URL}docs/models/extras/eventrule/'
|
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
super().clean()
|
super().clean()
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ from ipam.validators import MaxPrefixLengthValidator, MinPrefixLengthValidator,
|
|||||||
from utilities.exceptions import AbortScript, AbortTransaction
|
from utilities.exceptions import AbortScript, AbortTransaction
|
||||||
from utilities.forms import add_blank_choice
|
from utilities.forms import add_blank_choice
|
||||||
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField
|
from utilities.forms.fields import DynamicModelChoiceField, DynamicModelMultipleChoiceField
|
||||||
from .context_managers import event_wrapper
|
from .context_managers import event_tracking
|
||||||
from .forms import ScriptForm
|
from .forms import ScriptForm
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
@ -497,7 +497,7 @@ def run_script(data, job, request=None, commit=True, **kwargs):
|
|||||||
def _run_script():
|
def _run_script():
|
||||||
"""
|
"""
|
||||||
Core script execution task. We capture this within a subfunction to allow for conditionally wrapping it with
|
Core script execution task. We capture this within a subfunction to allow for conditionally wrapping it with
|
||||||
the event_wrapper context manager (which is bypassed if commit == False).
|
the event_tracking context manager (which is bypassed if commit == False).
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
try:
|
try:
|
||||||
@ -525,10 +525,10 @@ def run_script(data, job, request=None, commit=True, **kwargs):
|
|||||||
|
|
||||||
logger.info(f"Script completed in {job.duration}")
|
logger.info(f"Script completed in {job.duration}")
|
||||||
|
|
||||||
# Execute the script. If commit is True, wrap it with the event_wrapper context manager to ensure we process
|
# Execute the script. If commit is True, wrap it with the event_tracking context manager to ensure we process
|
||||||
# change logging, webhooks, etc.
|
# change logging, webhooks, etc.
|
||||||
if commit:
|
if commit:
|
||||||
with event_wrapper(request):
|
with event_tracking(request):
|
||||||
_run_script()
|
_run_script()
|
||||||
else:
|
else:
|
||||||
_run_script()
|
_run_script()
|
||||||
|
@ -24,8 +24,8 @@ def process_script(event_rule, model_name, event, data, timestamp, username, req
|
|||||||
if not eval_conditions(event_rule, data):
|
if not eval_conditions(event_rule, data):
|
||||||
return
|
return
|
||||||
|
|
||||||
module_id = event_rule.action_object_identifier.split(":")[0]
|
module_id = event_rule.action_parameters.split(":")[0]
|
||||||
script_name = event_rule.action_object_identifier.split(":")[1]
|
script_name = event_rule.action_parameters.split(":")[1]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
module = ScriptModule.objects.get(pk=module_id)
|
module = ScriptModule.objects.get(pk=module_id)
|
||||||
@ -41,5 +41,5 @@ def process_script(event_rule, model_name, event, data, timestamp, username, req
|
|||||||
user=None,
|
user=None,
|
||||||
schedule_at=None,
|
schedule_at=None,
|
||||||
interval=None,
|
interval=None,
|
||||||
data=event_rule.parameters,
|
data=event_rule.action_data,
|
||||||
)
|
)
|
||||||
|
@ -10,7 +10,7 @@ from django.db import connection, ProgrammingError
|
|||||||
from django.db.utils import InternalError
|
from django.db.utils import InternalError
|
||||||
from django.http import Http404, HttpResponseRedirect
|
from django.http import Http404, HttpResponseRedirect
|
||||||
|
|
||||||
from extras.context_managers import event_wrapper
|
from extras.context_managers import event_tracking
|
||||||
from netbox.config import clear_config, get_config
|
from netbox.config import clear_config, get_config
|
||||||
from netbox.views import handler_500
|
from netbox.views import handler_500
|
||||||
from utilities.api import is_api_request, rest_api_server_error
|
from utilities.api import is_api_request, rest_api_server_error
|
||||||
@ -42,8 +42,8 @@ class CoreMiddleware:
|
|||||||
login_url = f'{settings.LOGIN_URL}?next={parse.quote(request.get_full_path_info())}'
|
login_url = f'{settings.LOGIN_URL}?next={parse.quote(request.get_full_path_info())}'
|
||||||
return HttpResponseRedirect(login_url)
|
return HttpResponseRedirect(login_url)
|
||||||
|
|
||||||
# Enable the event_wrapper context manager and process the request.
|
# Enable the event_tracking context manager and process the request.
|
||||||
with event_wrapper(request):
|
with event_tracking(request):
|
||||||
response = self.get_response(request)
|
response = self.get_response(request)
|
||||||
|
|
||||||
# Attach the unique request ID as an HTTP header.
|
# Attach the unique request ID as an HTTP header.
|
||||||
|
Loading…
Reference in New Issue
Block a user