Coverage for extras/api/serializers_/journaling.py: 77%

31 statements  

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

1from django.core.exceptions import ObjectDoesNotExist 

2from rest_framework import serializers 

3 

4from core.models import ObjectType 

5from extras.choices import * 

6from extras.models import JournalEntry 

7from netbox.api.fields import ChoiceField, ContentTypeField 

8from netbox.api.gfk_fields import GFKSerializerField 

9from netbox.api.serializers import NetBoxModelSerializer 

10from users.models import User 

11 

12__all__ = ( 

13 'JournalEntrySerializer', 

14) 

15 

16 

17class JournalEntrySerializer(NetBoxModelSerializer): 

18 assigned_object_type = ContentTypeField( 

19 queryset=ObjectType.objects.all() 

20 ) 

21 assigned_object = GFKSerializerField(read_only=True) 

22 created_by = serializers.PrimaryKeyRelatedField( 

23 allow_null=True, 

24 queryset=User.objects.all(), 

25 required=False, 

26 default=serializers.CurrentUserDefault() 

27 ) 

28 kind = ChoiceField( 

29 choices=JournalEntryKindChoices, 

30 required=False 

31 ) 

32 

33 class Meta: 

34 model = JournalEntry 

35 fields = [ 

36 'id', 'url', 'display_url', 'display', 'assigned_object_type', 'assigned_object_id', 'assigned_object', 

37 'created', 'created_by', 'kind', 'comments', 'tags', 'custom_fields', 'last_updated', 

38 ] 

39 brief_fields = ('id', 'url', 'display', 'created') 

40 

41 def get_fields(self): 

42 fields = super().get_fields() 

43 

44 # Make created_by field read-only if updating an existing JournalEntry. 

45 if self.instance is not None: 

46 fields['created_by'].read_only = True 

47 

48 return fields 

49 

50 def validate(self, data): 

51 

52 # Validate that the parent object exists 

53 if not self.nested and 'assigned_object_type' in data and 'assigned_object_id' in data: 

54 try: 

55 data['assigned_object_type'].get_object_for_this_type(id=data['assigned_object_id']) 

56 except ObjectDoesNotExist: 

57 raise serializers.ValidationError( 

58 f"Invalid assigned_object: {data['assigned_object_type']} ID {data['assigned_object_id']}" 

59 ) 

60 

61 return super().validate(data)