providers.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. from rest_framework import serializers
  2. from circuits.models import Provider, ProviderAccount, ProviderNetwork
  3. from ipam.api.nested_serializers import NestedASNSerializer
  4. from ipam.models import ASN
  5. from netbox.api.fields import RelatedObjectCountField, SerializedPKRelatedField
  6. from netbox.api.serializers import NetBoxModelSerializer
  7. from ..nested_serializers import *
  8. __all__ = (
  9. 'ProviderAccountSerializer',
  10. 'ProviderNetworkSerializer',
  11. 'ProviderSerializer',
  12. )
  13. class ProviderSerializer(NetBoxModelSerializer):
  14. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail')
  15. accounts = SerializedPKRelatedField(
  16. queryset=ProviderAccount.objects.all(),
  17. serializer=NestedProviderAccountSerializer,
  18. required=False,
  19. many=True
  20. )
  21. asns = SerializedPKRelatedField(
  22. queryset=ASN.objects.all(),
  23. serializer=NestedASNSerializer,
  24. required=False,
  25. many=True
  26. )
  27. # Related object counts
  28. circuit_count = RelatedObjectCountField('circuits')
  29. class Meta:
  30. model = Provider
  31. fields = [
  32. 'id', 'url', 'display', 'name', 'slug', 'accounts', 'description', 'comments', 'asns', 'tags',
  33. 'custom_fields', 'created', 'last_updated', 'circuit_count',
  34. ]
  35. brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'circuit_count')
  36. class ProviderAccountSerializer(NetBoxModelSerializer):
  37. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provideraccount-detail')
  38. provider = ProviderSerializer(nested=True)
  39. class Meta:
  40. model = ProviderAccount
  41. fields = [
  42. 'id', 'url', 'display', 'provider', 'name', 'account', 'description', 'comments', 'tags', 'custom_fields',
  43. 'created', 'last_updated',
  44. ]
  45. brief_fields = ('id', 'url', 'display', 'name', 'account', 'description')
  46. class ProviderNetworkSerializer(NetBoxModelSerializer):
  47. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:providernetwork-detail')
  48. provider = ProviderSerializer(nested=True)
  49. class Meta:
  50. model = ProviderNetwork
  51. fields = [
  52. 'id', 'url', 'display', 'provider', 'name', 'service_id', 'description', 'comments', 'tags',
  53. 'custom_fields', 'created', 'last_updated',
  54. ]
  55. brief_fields = ('id', 'url', 'display', 'name', 'description')