data.py 1.5 KB

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