| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- from django.contrib.contenttypes.models import ContentType
- from rest_framework import serializers
- from circuits.choices import CircuitPriorityChoices, CircuitStatusChoices, VirtualCircuitTerminationRoleChoices
- from circuits.constants import CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS, CIRCUIT_TERMINATION_TERMINATION_TYPES
- from circuits.models import (
- Circuit, CircuitGroup, CircuitGroupAssignment, CircuitTermination, CircuitType, VirtualCircuit,
- VirtualCircuitTermination, VirtualCircuitType,
- )
- from dcim.api.serializers_.device_components import InterfaceSerializer
- from dcim.api.serializers_.cables import CabledObjectSerializer
- from netbox.api.fields import ChoiceField, ContentTypeField, RelatedObjectCountField
- from netbox.api.gfk_fields import GFKSerializerField
- from netbox.api.serializers import (
- NetBoxModelSerializer, OrganizationalModelSerializer, PrimaryModelSerializer, WritableNestedSerializer,
- )
- from netbox.choices import DistanceUnitChoices
- from tenancy.api.serializers_.tenants import TenantSerializer
- from .providers import ProviderAccountSerializer, ProviderNetworkSerializer, ProviderSerializer
- __all__ = (
- 'CircuitSerializer',
- 'CircuitGroupAssignmentSerializer',
- 'CircuitGroupSerializer',
- 'CircuitTerminationSerializer',
- 'CircuitTypeSerializer',
- 'VirtualCircuitSerializer',
- 'VirtualCircuitTerminationSerializer',
- 'VirtualCircuitTypeSerializer',
- )
- class CircuitTypeSerializer(OrganizationalModelSerializer):
- # Related object counts
- circuit_count = RelatedObjectCountField('circuits')
- class Meta:
- model = CircuitType
- fields = [
- 'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'comments', 'tags',
- 'custom_fields', 'created', 'last_updated', 'circuit_count',
- ]
- brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'circuit_count')
- class CircuitCircuitTerminationSerializer(WritableNestedSerializer):
- termination_type = ContentTypeField(
- queryset=ContentType.objects.filter(
- model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES
- ),
- allow_null=True,
- required=False,
- default=None
- )
- termination_id = serializers.IntegerField(allow_null=True, required=False, default=None)
- termination = GFKSerializerField(read_only=True)
- class Meta:
- model = CircuitTermination
- fields = [
- 'id', 'url', 'display_url', 'display', 'termination_type', 'termination_id', 'termination', 'port_speed',
- 'upstream_speed', 'xconnect_id', 'description',
- ]
- class CircuitGroupSerializer(OrganizationalModelSerializer):
- tenant = TenantSerializer(nested=True, required=False, allow_null=True)
- circuit_count = RelatedObjectCountField('assignments')
- class Meta:
- model = CircuitGroup
- fields = [
- 'id', 'url', 'display_url', 'display', 'name', 'slug', 'description', 'tenant', 'owner', 'comments', 'tags',
- 'custom_fields', 'created', 'last_updated', 'circuit_count'
- ]
- brief_fields = ('id', 'url', 'display', 'name')
- class CircuitGroupAssignmentSerializer_(NetBoxModelSerializer):
- """
- Base serializer for group assignments under CircuitSerializer.
- """
- group = CircuitGroupSerializer(nested=True)
- priority = ChoiceField(choices=CircuitPriorityChoices, allow_blank=True, required=False)
- class Meta:
- model = CircuitGroupAssignment
- fields = [
- 'id', 'url', 'display_url', 'display', 'group', 'priority', 'tags', 'created', 'last_updated',
- ]
- brief_fields = ('id', 'url', 'display', 'group', 'priority')
- class CircuitSerializer(PrimaryModelSerializer):
- provider = ProviderSerializer(nested=True)
- provider_account = ProviderAccountSerializer(nested=True, required=False, allow_null=True, default=None)
- status = ChoiceField(choices=CircuitStatusChoices, required=False)
- type = CircuitTypeSerializer(nested=True)
- distance_unit = ChoiceField(choices=DistanceUnitChoices, allow_blank=True, required=False, allow_null=True)
- tenant = TenantSerializer(nested=True, required=False, allow_null=True)
- termination_a = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True)
- termination_z = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True)
- assignments = CircuitGroupAssignmentSerializer_(nested=True, many=True, required=False)
- class Meta:
- model = Circuit
- fields = [
- 'id', 'url', 'display_url', 'display', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant',
- 'install_date', 'termination_date', 'commit_rate', 'description', 'distance', 'distance_unit',
- 'termination_a', 'termination_z', 'owner', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
- 'assignments',
- ]
- brief_fields = ('id', 'url', 'display', 'provider', 'cid', 'description')
- class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer):
- circuit = CircuitSerializer(nested=True)
- termination_type = ContentTypeField(
- queryset=ContentType.objects.filter(
- model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES
- ),
- allow_null=True,
- required=False,
- default=None
- )
- termination_id = serializers.IntegerField(allow_null=True, required=False, default=None)
- termination = GFKSerializerField(read_only=True)
- class Meta:
- model = CircuitTermination
- fields = [
- 'id', 'url', 'display_url', 'display', 'circuit', 'term_side', 'termination_type', 'termination_id',
- 'termination', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'mark_connected',
- 'cable', 'cable_end', 'link_peers', 'link_peers_type', 'tags', 'custom_fields', 'created', 'last_updated',
- '_occupied',
- ]
- brief_fields = ('id', 'url', 'display', 'circuit', 'term_side', 'description', 'cable', '_occupied')
- class CircuitGroupAssignmentSerializer(CircuitGroupAssignmentSerializer_):
- member_type = ContentTypeField(
- queryset=ContentType.objects.filter(CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS)
- )
- member = GFKSerializerField(read_only=True)
- class Meta:
- model = CircuitGroupAssignment
- fields = [
- 'id', 'url', 'display_url', 'display', 'group', 'member_type', 'member_id', 'member', 'priority', 'tags',
- 'created', 'last_updated',
- ]
- brief_fields = ('id', 'url', 'display', 'group', 'member_type', 'member_id', 'member', 'priority')
- class VirtualCircuitTypeSerializer(OrganizationalModelSerializer):
- # Related object counts
- virtual_circuit_count = RelatedObjectCountField('virtual_circuits')
- class Meta:
- model = VirtualCircuitType
- fields = [
- 'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'owner', 'comments', 'tags',
- 'custom_fields', 'created', 'last_updated', 'virtual_circuit_count',
- ]
- brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'virtual_circuit_count')
- class VirtualCircuitSerializer(PrimaryModelSerializer):
- provider_network = ProviderNetworkSerializer(nested=True)
- provider_account = ProviderAccountSerializer(nested=True, required=False, allow_null=True, default=None)
- type = VirtualCircuitTypeSerializer(nested=True)
- status = ChoiceField(choices=CircuitStatusChoices, required=False)
- tenant = TenantSerializer(nested=True, required=False, allow_null=True)
- class Meta:
- model = VirtualCircuit
- fields = [
- 'id', 'url', 'display_url', 'display', 'cid', 'provider_network', 'provider_account', 'type', 'status',
- 'tenant', 'description', 'owner', 'comments', 'tags', 'custom_fields', 'created', 'last_updated',
- ]
- brief_fields = ('id', 'url', 'display', 'provider_network', 'cid', 'description')
- class VirtualCircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer):
- virtual_circuit = VirtualCircuitSerializer(nested=True)
- role = ChoiceField(choices=VirtualCircuitTerminationRoleChoices, required=False)
- interface = InterfaceSerializer(nested=True)
- class Meta:
- model = VirtualCircuitTermination
- fields = [
- 'id', 'url', 'display_url', 'display', 'virtual_circuit', 'role', 'interface', 'description', 'tags',
- 'custom_fields', 'created', 'last_updated',
- ]
- brief_fields = ('id', 'url', 'display', 'virtual_circuit', 'role', 'interface', 'description')
|