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

1from rest_framework import serializers 

2 

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 

11 

12__all__ = ( 

13 'EventRuleSerializer', 

14 'WebhookSerializer', 

15) 

16 

17 

18# 

19# Event Rules 

20# 

21 

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) 

35 

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') 

44 

45 def get_fields(self): 

46 fields = super().get_fields() 

47 

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()) 

52 

53 return fields 

54 

55 

56# 

57# Webhooks 

58# 

59 

60class WebhookSerializer(OwnerMixin, NetBoxModelSerializer): 

61 

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')