mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-17 04:58:16 -06:00
14438 update EventRule code / form
This commit is contained in:
parent
1a6099fce9
commit
8c2fbceb76
@ -82,9 +82,9 @@ class EventRuleSerializer(NetBoxModelSerializer):
|
||||
context = {'request': self.context['request']}
|
||||
# We need to manually instantiate the serializer for scripts
|
||||
if instance.action_type == EventRuleActionChoices.SCRIPT:
|
||||
script_name = instance.action_parameters['script_name']
|
||||
script = instance.action_object.scripts[script_name]()
|
||||
return NestedScriptSerializer(script, context=context).data
|
||||
script = instance.action_object
|
||||
script_name = script.name
|
||||
return NestedScriptSerializer(script.python_class(), context=context).data
|
||||
else:
|
||||
serializer = get_serializer_for_model(
|
||||
model=instance.action_object_type.model_class(),
|
||||
|
@ -115,15 +115,13 @@ def process_event_rules(event_rules, model_name, event, data, username=None, sna
|
||||
# Scripts
|
||||
elif event_rule.action_type == EventRuleActionChoices.SCRIPT:
|
||||
# Resolve the script from action parameters
|
||||
script_module = event_rule.action_object
|
||||
script_name = event_rule.action_parameters['script_name']
|
||||
script = script_module.scripts[script_name]()
|
||||
script = event_rule.action_object.python_class()
|
||||
|
||||
# Enqueue a Job to record the script's execution
|
||||
Job.enqueue(
|
||||
"extras.scripts.run_script",
|
||||
instance=script_module,
|
||||
name=script.class_name,
|
||||
instance=script.module,
|
||||
name=script.name,
|
||||
user=user,
|
||||
data=data
|
||||
)
|
||||
|
@ -212,11 +212,8 @@ class EventRuleImportForm(NetBoxModelImportForm):
|
||||
module, script = get_module_and_script(module_name, script_name)
|
||||
except ObjectDoesNotExist:
|
||||
raise forms.ValidationError(f"Script {action_object} not found")
|
||||
self.instance.action_object = module
|
||||
self.instance.action_object_type = ContentType.objects.get_for_model(module, for_concrete_model=False)
|
||||
self.instance.action_parameters = {
|
||||
'script_name': script_name,
|
||||
}
|
||||
self.instance.action_object = script
|
||||
self.instance.action_object_type = ContentType.objects.get_for_model(script, for_concrete_model=False)
|
||||
|
||||
|
||||
class TagImportForm(CSVModelForm):
|
||||
|
@ -299,18 +299,17 @@ class EventRuleForm(NetBoxModelForm):
|
||||
def init_script_choice(self):
|
||||
choices = []
|
||||
for module in ScriptModule.objects.all():
|
||||
scripts = []
|
||||
for script_name in module.scripts.keys():
|
||||
name = f"{str(module.pk)}:{script_name}"
|
||||
scripts.append((name, script_name))
|
||||
if scripts:
|
||||
choices.append((str(module), scripts))
|
||||
script_list = []
|
||||
for script in module.scripts.all():
|
||||
name = f"{str(script.pk)}:{script.name}"
|
||||
script_list.append((name, script.name))
|
||||
if script_list:
|
||||
choices.append((str(module), script_list))
|
||||
self.fields['action_choice'].choices = choices
|
||||
|
||||
if self.instance.action_type == EventRuleActionChoices.SCRIPT and self.instance.action_parameters:
|
||||
scriptmodule_id = self.instance.action_object_id
|
||||
script_name = self.instance.action_parameters.get('script_name')
|
||||
self.fields['action_choice'].initial = f'{scriptmodule_id}:{script_name}'
|
||||
if self.instance.action_type == EventRuleActionChoices.SCRIPT:
|
||||
script = self.instance.action_object
|
||||
self.fields['action_choice'].initial = f'{script.id}:{script.name}'
|
||||
|
||||
def init_webhook_choice(self):
|
||||
initial = None
|
||||
@ -348,26 +347,14 @@ class EventRuleForm(NetBoxModelForm):
|
||||
# Script
|
||||
elif self.cleaned_data.get('action_type') == EventRuleActionChoices.SCRIPT:
|
||||
self.cleaned_data['action_object_type'] = ContentType.objects.get_for_model(
|
||||
ScriptModule,
|
||||
Script,
|
||||
for_concrete_model=False
|
||||
)
|
||||
module_id, script_name = action_choice.split(":", maxsplit=1)
|
||||
self.cleaned_data['action_object_id'] = module_id
|
||||
script_id, script_name = action_choice.split(":", maxsplit=1)
|
||||
self.cleaned_data['action_object_id'] = script_id
|
||||
|
||||
return self.cleaned_data
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
# Set action_parameters on the instance
|
||||
if self.cleaned_data['action_type'] == EventRuleActionChoices.SCRIPT:
|
||||
module_id, script_name = self.cleaned_data.get('action_choice').split(":", maxsplit=1)
|
||||
self.instance.action_parameters = {
|
||||
'script_name': script_name,
|
||||
}
|
||||
else:
|
||||
self.instance.action_parameters = None
|
||||
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class TagForm(forms.ModelForm):
|
||||
slug = SlugField()
|
||||
|
@ -83,13 +83,7 @@
|
||||
<tr>
|
||||
<th scope="row">{% trans "Object" %}</th>
|
||||
<td>
|
||||
{% if object.action_type == 'script' %}
|
||||
<a href="{% url 'extras:script' module=object.action_object.python_name name=object.action_parameters.script_name %}">
|
||||
{{ object.action_object }} / {{ object.action_parameters.script_name }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ object.action_object|linkify }}
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
Loading…
Reference in New Issue
Block a user