serializers.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. from rest_framework import serializers
  2. from circuits.choices import CircuitStatusChoices
  3. from circuits.models import Provider, Circuit, CircuitTermination, CircuitType
  4. from dcim.api.nested_serializers import NestedCableSerializer, NestedInterfaceSerializer, NestedSiteSerializer
  5. from dcim.api.serializers import CableTerminationSerializer, ConnectedEndpointSerializer
  6. from extras.api.customfields import CustomFieldModelSerializer
  7. from extras.api.serializers import TaggedObjectSerializer
  8. from netbox.api import ChoiceField, ValidatedModelSerializer, WritableNestedSerializer
  9. from tenancy.api.nested_serializers import NestedTenantSerializer
  10. from .nested_serializers import *
  11. #
  12. # Providers
  13. #
  14. class ProviderSerializer(TaggedObjectSerializer, CustomFieldModelSerializer):
  15. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:provider-detail')
  16. circuit_count = serializers.IntegerField(read_only=True)
  17. class Meta:
  18. model = Provider
  19. fields = [
  20. 'id', 'url', 'name', 'slug', 'asn', 'account', 'portal_url', 'noc_contact', 'admin_contact', 'comments', 'tags',
  21. 'custom_fields', 'created', 'last_updated', 'circuit_count',
  22. ]
  23. #
  24. # Circuits
  25. #
  26. class CircuitTypeSerializer(ValidatedModelSerializer):
  27. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittype-detail')
  28. circuit_count = serializers.IntegerField(read_only=True)
  29. class Meta:
  30. model = CircuitType
  31. fields = ['id', 'url', 'name', 'slug', 'description', 'circuit_count']
  32. class CircuitCircuitTerminationSerializer(WritableNestedSerializer):
  33. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
  34. site = NestedSiteSerializer()
  35. connected_endpoint = NestedInterfaceSerializer()
  36. class Meta:
  37. model = CircuitTermination
  38. fields = ['id', 'url', 'site', 'connected_endpoint', 'port_speed', 'upstream_speed', 'xconnect_id']
  39. class CircuitSerializer(TaggedObjectSerializer, CustomFieldModelSerializer):
  40. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail')
  41. provider = NestedProviderSerializer()
  42. status = ChoiceField(choices=CircuitStatusChoices, required=False)
  43. type = NestedCircuitTypeSerializer()
  44. tenant = NestedTenantSerializer(required=False, allow_null=True)
  45. termination_a = CircuitCircuitTerminationSerializer(read_only=True)
  46. termination_z = CircuitCircuitTerminationSerializer(read_only=True)
  47. class Meta:
  48. model = Circuit
  49. fields = [
  50. 'id', 'url', 'cid', 'provider', 'type', 'status', 'tenant', 'install_date', 'commit_rate', 'description',
  51. 'termination_a', 'termination_z', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
  52. ]
  53. class CircuitTerminationSerializer(CableTerminationSerializer, ConnectedEndpointSerializer):
  54. url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail')
  55. circuit = NestedCircuitSerializer()
  56. site = NestedSiteSerializer()
  57. cable = NestedCableSerializer(read_only=True)
  58. class Meta:
  59. model = CircuitTermination
  60. fields = [
  61. 'id', 'url', 'circuit', 'term_side', 'site', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info',
  62. 'description', 'cable', 'cable_peer', 'cable_peer_type', 'connected_endpoint', 'connected_endpoint_type',
  63. 'connected_endpoint_reachable'
  64. ]