Coverage for tenancy/api/serializers_/contacts.py: 100%

37 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 18:35 +0000

1from django.contrib.auth.models import ContentType 

2from rest_framework import serializers 

3 

4from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelatedField 

5from netbox.api.gfk_fields import GFKSerializerField 

6from netbox.api.serializers import ( 

7 NestedGroupModelSerializer, 

8 NetBoxModelSerializer, 

9 OrganizationalModelSerializer, 

10 PrimaryModelSerializer, 

11) 

12from tenancy.choices import ContactPriorityChoices 

13from tenancy.models import Contact, ContactAssignment, ContactGroup, ContactRole 

14 

15from .nested import NestedContactGroupSerializer 

16 

17__all__ = ( 

18 'ContactAssignmentSerializer', 

19 'ContactGroupSerializer', 

20 'ContactRoleSerializer', 

21 'ContactSerializer', 

22) 

23 

24 

25class ContactGroupSerializer(NestedGroupModelSerializer): 

26 parent = NestedContactGroupSerializer(required=False, allow_null=True, default=None) 

27 contact_count = serializers.IntegerField(read_only=True, default=0) 

28 

29 class Meta: 

30 model = ContactGroup 

31 fields = [ 

32 'id', 'url', 'display_url', 'display', 'name', 'slug', 'parent', 'description', 'tags', 'custom_fields', 

33 'created', 'last_updated', 'contact_count', 'owner', 'comments', '_depth', 

34 ] 

35 brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'contact_count', '_depth') 

36 

37 

38class ContactRoleSerializer(OrganizationalModelSerializer): 

39 

40 class Meta: 

41 model = ContactRole 

42 fields = [ 

43 'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'owner', 'comments', 'tags', 

44 'custom_fields', 'created', 'last_updated', 

45 ] 

46 brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description') 

47 

48 

49class ContactSerializer(PrimaryModelSerializer): 

50 groups = SerializedPKRelatedField( 

51 queryset=ContactGroup.objects.all(), 

52 serializer=ContactGroupSerializer, 

53 required=False, 

54 many=True, 

55 nested=True 

56 ) 

57 

58 class Meta: 

59 model = Contact 

60 fields = [ 

61 'id', 'url', 'display_url', 'display', 'groups', 'name', 'title', 'phone', 'email', 'address', 'link', 

62 'description', 'owner', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 

63 ] 

64 brief_fields = ('id', 'url', 'display', 'name', 'description') 

65 

66 

67class ContactAssignmentSerializer(NetBoxModelSerializer): 

68 object_type = ContentTypeField( 

69 queryset=ContentType.objects.all() 

70 ) 

71 object = GFKSerializerField(read_only=True) 

72 contact = ContactSerializer(nested=True) 

73 role = ContactRoleSerializer(nested=True, required=False, allow_null=True) 

74 priority = ChoiceField(choices=ContactPriorityChoices, allow_blank=True, required=False, default=lambda: '') 

75 

76 class Meta: 

77 model = ContactAssignment 

78 fields = [ 

79 'id', 'url', 'display', 'object_type', 'object_id', 'object', 'contact', 'role', 'priority', 

80 'tags', 'custom_fields', 'created', 'last_updated', 

81 ] 

82 brief_fields = ('id', 'url', 'display', 'contact', 'role', 'priority')