serializers.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from rest_framework import serializers
  2. from core.choices import *
  3. from core.models import *
  4. from netbox.api.fields import ChoiceField, ContentTypeField, RelatedObjectCountField
  5. from netbox.api.serializers import BaseModelSerializer, NetBoxModelSerializer
  6. from netbox.utils import get_data_backend_choices
  7. from users.api.nested_serializers import NestedUserSerializer
  8. from .nested_serializers import *
  9. __all__ = (
  10. 'DataFileSerializer',
  11. 'DataSourceSerializer',
  12. 'JobSerializer',
  13. )
  14. class DataSourceSerializer(NetBoxModelSerializer):
  15. url = serializers.HyperlinkedIdentityField(
  16. view_name='core-api:datasource-detail'
  17. )
  18. type = ChoiceField(
  19. choices=get_data_backend_choices()
  20. )
  21. status = ChoiceField(
  22. choices=DataSourceStatusChoices,
  23. read_only=True
  24. )
  25. # Related object counts
  26. file_count = RelatedObjectCountField('datafiles')
  27. class Meta:
  28. model = DataSource
  29. fields = [
  30. 'id', 'url', 'display', 'name', 'type', 'source_url', 'enabled', 'status', 'description', 'comments',
  31. 'parameters', 'ignore_rules', 'custom_fields', 'created', 'last_updated', 'file_count',
  32. ]
  33. brief_fields = ('id', 'url', 'display', 'name', 'description')
  34. class DataFileSerializer(NetBoxModelSerializer):
  35. url = serializers.HyperlinkedIdentityField(
  36. view_name='core-api:datafile-detail'
  37. )
  38. source = NestedDataSourceSerializer(
  39. read_only=True
  40. )
  41. class Meta:
  42. model = DataFile
  43. fields = [
  44. 'id', 'url', 'display', 'source', 'path', 'last_updated', 'size', 'hash',
  45. ]
  46. brief_fields = ('id', 'url', 'display', 'path')
  47. class JobSerializer(BaseModelSerializer):
  48. url = serializers.HyperlinkedIdentityField(view_name='core-api:job-detail')
  49. user = NestedUserSerializer(
  50. read_only=True
  51. )
  52. status = ChoiceField(choices=JobStatusChoices, read_only=True)
  53. object_type = ContentTypeField(
  54. read_only=True
  55. )
  56. class Meta:
  57. model = Job
  58. fields = [
  59. 'id', 'url', 'display', 'object_type', 'object_id', 'name', 'status', 'created', 'scheduled', 'interval',
  60. 'started', 'completed', 'user', 'data', 'error', 'job_id',
  61. ]
  62. brief_fields = ('url', 'created', 'completed', 'user', 'status')