serializers.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. from __future__ import unicode_literals
  2. from rest_framework import serializers
  3. from taggit.models import Tag
  4. from circuits.constants import CIRCUIT_STATUS_CHOICES
  5. from circuits.models import Provider, Circuit, CircuitTermination, CircuitType
  6. from dcim.api.serializers import NestedSiteSerializer, InterfaceSerializer
  7. from extras.api.customfields import CustomFieldModelSerializer
  8. from tenancy.api.serializers import NestedTenantSerializer
  9. from utilities.api import ChoiceFieldSerializer, TagField, ValidatedModelSerializer, WritableNestedSerializer
  10. #
  11. # Providers
  12. #
  13. class ProviderSerializer(CustomFieldModelSerializer):
  14. tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
  15. class Meta:
  16. model = Provider
  17. fields = [
  18. 'id', 'name', 'slug', 'asn', 'account', 'portal_url', 'noc_contact', 'admin_contact', 'comments', 'tags',
  19. 'custom_fields', 'created', 'last_updated',
  20. ]
  21. class NestedProviderSerializer(WritableNestedSerializer):
  22. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail')
  23. class Meta:
  24. model = Provider
  25. fields = ['id', 'url', 'name', 'slug']
  26. #
  27. # Circuit types
  28. #
  29. class CircuitTypeSerializer(ValidatedModelSerializer):
  30. class Meta:
  31. model = CircuitType
  32. fields = ['id', 'name', 'slug']
  33. class NestedCircuitTypeSerializer(WritableNestedSerializer):
  34. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail')
  35. class Meta:
  36. model = CircuitType
  37. fields = ['id', 'url', 'name', 'slug']
  38. #
  39. # Circuits
  40. #
  41. class CircuitSerializer(CustomFieldModelSerializer):
  42. provider = NestedProviderSerializer()
  43. status = ChoiceFieldSerializer(choices=CIRCUIT_STATUS_CHOICES, required=False)
  44. type = NestedCircuitTypeSerializer()
  45. tenant = NestedTenantSerializer(required=False, allow_null=True)
  46. tags = TagField(queryset=Tag.objects.all(), required=False, many=True)
  47. class Meta:
  48. model = Circuit
  49. fields = [
  50. 'id', 'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'commit_rate', 'description',
  51. 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
  52. ]
  53. class NestedCircuitSerializer(WritableNestedSerializer):
  54. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail')
  55. class Meta:
  56. model = Circuit
  57. fields = ['id', 'url', 'cid']
  58. #
  59. # Circuit Terminations
  60. #
  61. class CircuitTerminationSerializer(ValidatedModelSerializer):
  62. circuit = NestedCircuitSerializer()
  63. site = NestedSiteSerializer()
  64. interface = InterfaceSerializer(required=False, allow_null=True)
  65. class Meta:
  66. model = CircuitTermination
  67. fields = [
  68. 'id', 'circuit', 'term_side', 'site', 'interface', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info',
  69. ]