data.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from rest_framework import serializers
  2. from core.choices import *
  3. from core.models import DataFile, DataSource
  4. from netbox.api.fields import ChoiceField, RelatedObjectCountField
  5. from netbox.api.serializers import NetBoxModelSerializer
  6. from netbox.utils import get_data_backend_choices
  7. __all__ = (
  8. 'DataFileSerializer',
  9. 'DataSourceSerializer',
  10. )
  11. class DataSourceSerializer(NetBoxModelSerializer):
  12. url = serializers.HyperlinkedIdentityField(
  13. view_name='core-api:datasource-detail'
  14. )
  15. type = ChoiceField(
  16. choices=get_data_backend_choices()
  17. )
  18. status = ChoiceField(
  19. choices=DataSourceStatusChoices,
  20. read_only=True
  21. )
  22. # Related object counts
  23. file_count = RelatedObjectCountField('datafiles')
  24. class Meta:
  25. model = DataSource
  26. fields = [
  27. 'id', 'url', 'display', 'name', 'type', 'source_url', 'enabled', 'status', 'description', 'comments',
  28. 'parameters', 'ignore_rules', 'custom_fields', 'created', 'last_updated', 'file_count',
  29. ]
  30. brief_fields = ('id', 'url', 'display', 'name', 'description')
  31. class DataFileSerializer(NetBoxModelSerializer):
  32. url = serializers.HyperlinkedIdentityField(
  33. view_name='core-api:datafile-detail'
  34. )
  35. source = DataSourceSerializer(
  36. nested=True,
  37. read_only=True
  38. )
  39. class Meta:
  40. model = DataFile
  41. fields = [
  42. 'id', 'url', 'display', 'source', 'path', 'last_updated', 'size', 'hash',
  43. ]
  44. brief_fields = ('id', 'url', 'display', 'path')