Coverage for extras/api/serializers_/events.py: 97%
30 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from rest_framework import serializers
3from core.models import ObjectType
4from extras.choices import *
5from extras.models import EventRule, Webhook
6from netbox.api.fields import ChoiceField, ContentTypeField
7from netbox.api.gfk_fields import GFKSerializerField
8from netbox.api.serializers import NetBoxModelSerializer
9from netbox.event_rules import get_event_rule_action_choices
10from users.api.serializers_.mixins import OwnerMixin
12__all__ = (
13 'EventRuleSerializer',
14 'WebhookSerializer',
15)
18#
19# Event Rules
20#
22class EventRuleSerializer(OwnerMixin, NetBoxModelSerializer):
23 object_types = ContentTypeField(
24 queryset=ObjectType.objects.with_feature('event_rules'),
25 many=True
26 )
27 action_type = ChoiceField(choices=[]) # Choices are set by get_fields()
28 action_object_type = ContentTypeField(
29 queryset=ObjectType.objects.all(),
30 required=False,
31 allow_null=True,
32 )
33 action_object = GFKSerializerField(read_only=True)
34 action_is_available = serializers.BooleanField(read_only=True)
36 class Meta:
37 model = EventRule
38 fields = [
39 'id', 'url', 'display_url', 'display', 'object_types', 'name', 'enabled', 'event_types', 'conditions',
40 'action_type', 'action_object_type', 'action_object_id', 'action_object', 'action_is_available',
41 'description', 'custom_fields', 'owner', 'tags', 'created', 'last_updated',
42 ]
43 brief_fields = ('id', 'url', 'display', 'name', 'description')
45 def get_fields(self):
46 fields = super().get_fields()
48 # Rebuild action_type from the live registry on each instantiation to ensure all registered
49 # actions are captured as choices.
50 if 'action_type' in fields: 50 ↛ 53line 50 didn't jump to line 53 because the condition on line 50 was always true
51 fields['action_type'] = ChoiceField(choices=get_event_rule_action_choices())
53 return fields
56#
57# Webhooks
58#
60class WebhookSerializer(OwnerMixin, NetBoxModelSerializer):
62 class Meta:
63 model = Webhook
64 fields = [
65 'id', 'url', 'display_url', 'display', 'name', 'description', 'payload_url', 'http_method',
66 'http_content_type', 'additional_headers', 'body_template', 'secret', 'ssl_verification', 'ca_file_path',
67 'timeout', 'custom_fields', 'owner', 'tags', 'created', 'last_updated',
68 ]
69 brief_fields = ('id', 'url', 'display', 'name', 'description')