serializers.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. from rest_framework import serializers
  2. from core.choices import *
  3. from core.models import *
  4. from netbox.api.fields import ChoiceField, ContentTypeField
  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 = serializers.IntegerField(
  27. read_only=True
  28. )
  29. class Meta:
  30. model = DataSource
  31. fields = [
  32. 'id', 'url', 'display', 'name', 'type', 'source_url', 'enabled', 'status', 'description', 'comments',
  33. 'parameters', 'ignore_rules', 'created', 'last_updated', 'file_count',
  34. ]
  35. class DataFileSerializer(NetBoxModelSerializer):
  36. url = serializers.HyperlinkedIdentityField(
  37. view_name='core-api:datafile-detail'
  38. )
  39. source = NestedDataSourceSerializer(
  40. read_only=True
  41. )
  42. class Meta:
  43. model = DataFile
  44. fields = [
  45. 'id', 'url', 'display', 'source', 'path', 'last_updated', 'size', 'hash',
  46. ]
  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', 'job_id',
  61. ]