Coverage for core/api/serializers_/data.py: 100%

21 statements  

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

1from core.choices import * 

2from core.models import DataFile, DataSource 

3from netbox.api.fields import ChoiceField, RelatedObjectCountField 

4from netbox.api.serializers import NetBoxModelSerializer, PrimaryModelSerializer 

5from netbox.utils import get_data_backend_choices 

6 

7__all__ = ( 

8 'DataFileSerializer', 

9 'DataSourceSerializer', 

10) 

11 

12 

13class DataSourceSerializer(PrimaryModelSerializer): 

14 type = ChoiceField( 

15 choices=get_data_backend_choices() 

16 ) 

17 status = ChoiceField( 

18 choices=DataSourceStatusChoices, 

19 read_only=True 

20 ) 

21 

22 # Related object counts 

23 file_count = RelatedObjectCountField('datafiles') 

24 

25 class Meta: 

26 model = DataSource 

27 fields = [ 

28 'id', 'url', 'display_url', 'display', 'name', 'type', 'source_url', 'enabled', 'status', 'description', 

29 'sync_interval', 'parameters', 'ignore_rules', 'owner', 'comments', 'tags', 'custom_fields', 'created', 

30 'last_updated', 'last_synced', 'file_count', 

31 ] 

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

33 

34 

35class DataFileSerializer(NetBoxModelSerializer): 

36 source = DataSourceSerializer( 

37 nested=True, 

38 read_only=True 

39 ) 

40 

41 class Meta: 

42 model = DataFile 

43 fields = [ 

44 'id', 'url', 'display_url', 'display', 'source', 'path', 'last_updated', 'size', 'hash', 

45 ] 

46 brief_fields = ('id', 'url', 'display', 'path') 

47 read_only_fields = ['path', 'last_updated', 'size', 'hash']