serializers.py 3.9 KB

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