serializers.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. from rest_framework import serializers
  2. from circuits.choices import CircuitStatusChoices
  3. from circuits.models import *
  4. from dcim.api.nested_serializers import NestedCableSerializer, NestedSiteSerializer
  5. from dcim.api.serializers import LinkTerminationSerializer
  6. from ipam.models import ASN
  7. from ipam.api.nested_serializers import NestedASNSerializer
  8. from netbox.api import ChoiceField, SerializedPKRelatedField
  9. from netbox.api.serializers import NetBoxModelSerializer, ValidatedModelSerializer, WritableNestedSerializer
  10. from tenancy.api.nested_serializers import NestedTenantSerializer
  11. from .nested_serializers import *
  12. #
  13. # Providers
  14. #
  15. class ProviderSerializer(NetBoxModelSerializer):
  16. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail')
  17. asns = SerializedPKRelatedField(
  18. queryset=ASN.objects.all(),
  19. serializer=NestedASNSerializer,
  20. required=False,
  21. many=True
  22. )
  23. # Related object counts
  24. circuit_count = serializers.IntegerField(read_only=True)
  25. class Meta:
  26. model = Provider
  27. fields = [
  28. 'id', 'url', 'display', 'name', 'slug', 'asn', 'account', 'portal_url', 'noc_contact', 'admin_contact',
  29. 'comments', 'asns', 'tags', 'custom_fields', 'created', 'last_updated', 'circuit_count',
  30. ]
  31. #
  32. # Provider networks
  33. #
  34. class ProviderNetworkSerializer(NetBoxModelSerializer):
  35. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:providernetwork-detail')
  36. provider = NestedProviderSerializer()
  37. class Meta:
  38. model = ProviderNetwork
  39. fields = [
  40. 'id', 'url', 'display', 'provider', 'name', 'service_id', 'description', 'comments', 'tags',
  41. 'custom_fields', 'created', 'last_updated',
  42. ]
  43. #
  44. # Circuits
  45. #
  46. class CircuitTypeSerializer(NetBoxModelSerializer):
  47. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail')
  48. circuit_count = serializers.IntegerField(read_only=True)
  49. class Meta:
  50. model = CircuitType
  51. fields = [
  52. 'id', 'url', 'display', 'name', 'slug', 'description', 'tags', 'custom_fields', 'created', 'last_updated',
  53. 'circuit_count',
  54. ]
  55. class CircuitCircuitTerminationSerializer(WritableNestedSerializer):
  56. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
  57. site = NestedSiteSerializer()
  58. provider_network = NestedProviderNetworkSerializer()
  59. class Meta:
  60. model = CircuitTermination
  61. fields = [
  62. 'id', 'url', 'display', 'site', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id',
  63. ]
  64. class CircuitSerializer(NetBoxModelSerializer):
  65. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail')
  66. provider = NestedProviderSerializer()
  67. status = ChoiceField(choices=CircuitStatusChoices, required=False)
  68. type = NestedCircuitTypeSerializer()
  69. tenant = NestedTenantSerializer(required=False, allow_null=True)
  70. termination_a = CircuitCircuitTerminationSerializer(read_only=True)
  71. termination_z = CircuitCircuitTerminationSerializer(read_only=True)
  72. class Meta:
  73. model = Circuit
  74. fields = [
  75. 'id', 'url', 'display', 'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'termination_date',
  76. 'commit_rate', 'description', 'termination_a', 'termination_z', 'comments', 'tags', 'custom_fields',
  77. 'created', 'last_updated',
  78. ]
  79. class CircuitTerminationSerializer(ValidatedModelSerializer, LinkTerminationSerializer):
  80. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
  81. circuit = NestedCircuitSerializer()
  82. site = NestedSiteSerializer(required=False, allow_null=True)
  83. provider_network = NestedProviderNetworkSerializer(required=False, allow_null=True)
  84. cable = NestedCableSerializer(read_only=True)
  85. class Meta:
  86. model = CircuitTermination
  87. fields = [
  88. 'id', 'url', 'display', 'circuit', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed',
  89. 'xconnect_id', 'pp_info', 'description', 'mark_connected', 'cable', 'link_peer', 'link_peer_type',
  90. '_occupied', 'created', 'last_updated',
  91. ]