add extend_schema_field to dcim

This commit is contained in:
Arthur 2023-01-24 08:49:46 -08:00
parent 0a880fe6e3
commit f54dbb66c0

View File

@ -2,13 +2,13 @@ import decimal
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from drf_yasg.utils import swagger_serializer_method
from rest_framework import serializers from rest_framework import serializers
from timezone_field.rest_framework import TimeZoneSerializerField from timezone_field.rest_framework import TimeZoneSerializerField
from dcim.choices import * from dcim.choices import *
from dcim.constants import * from dcim.constants import *
from dcim.models import * from dcim.models import *
from drf_spectacular.utils import extend_schema_field
from ipam.api.nested_serializers import ( from ipam.api.nested_serializers import (
NestedASNSerializer, NestedIPAddressSerializer, NestedL2VPNTerminationSerializer, NestedVLANSerializer, NestedASNSerializer, NestedIPAddressSerializer, NestedL2VPNTerminationSerializer, NestedVLANSerializer,
NestedVRFSerializer, NestedVRFSerializer,
@ -38,6 +38,7 @@ class CabledObjectSerializer(serializers.ModelSerializer):
link_peers = serializers.SerializerMethodField(read_only=True) link_peers = serializers.SerializerMethodField(read_only=True)
_occupied = serializers.SerializerMethodField(read_only=True) _occupied = serializers.SerializerMethodField(read_only=True)
@extend_schema_field(serializers.CharField(allow_null=True))
def get_link_peers_type(self, obj): def get_link_peers_type(self, obj):
""" """
Return the type of the peer link terminations, or None. Return the type of the peer link terminations, or None.
@ -50,7 +51,7 @@ class CabledObjectSerializer(serializers.ModelSerializer):
return None return None
@swagger_serializer_method(serializer_or_field=serializers.ListField) @extend_schema_field(serializers.DictField(allow_null=True))
def get_link_peers(self, obj): def get_link_peers(self, obj):
""" """
Return the appropriate serializer for the link termination model. Return the appropriate serializer for the link termination model.
@ -63,7 +64,6 @@ class CabledObjectSerializer(serializers.ModelSerializer):
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj.link_peers, context=context, many=True).data return serializer(obj.link_peers, context=context, many=True).data
@swagger_serializer_method(serializer_or_field=serializers.BooleanField)
def get__occupied(self, obj): def get__occupied(self, obj):
return obj._occupied return obj._occupied
@ -76,11 +76,12 @@ class ConnectedEndpointsSerializer(serializers.ModelSerializer):
connected_endpoints = serializers.SerializerMethodField(read_only=True) connected_endpoints = serializers.SerializerMethodField(read_only=True)
connected_endpoints_reachable = serializers.SerializerMethodField(read_only=True) connected_endpoints_reachable = serializers.SerializerMethodField(read_only=True)
@extend_schema_field(serializers.CharField(allow_null=True))
def get_connected_endpoints_type(self, obj): def get_connected_endpoints_type(self, obj):
if endpoints := obj.connected_endpoints: if endpoints := obj.connected_endpoints:
return f'{endpoints[0]._meta.app_label}.{endpoints[0]._meta.model_name}' return f'{endpoints[0]._meta.app_label}.{endpoints[0]._meta.model_name}'
@swagger_serializer_method(serializer_or_field=serializers.ListField) @extend_schema_field(serializers.DictField(allow_null=True))
def get_connected_endpoints(self, obj): def get_connected_endpoints(self, obj):
""" """
Return the appropriate serializer for the type of connected object. Return the appropriate serializer for the type of connected object.
@ -90,7 +91,7 @@ class ConnectedEndpointsSerializer(serializers.ModelSerializer):
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(endpoints, many=True, context=context).data return serializer(endpoints, many=True, context=context).data
@swagger_serializer_method(serializer_or_field=serializers.BooleanField) @extend_schema_field(serializers.BooleanField(allow_null=True))
def get_connected_endpoints_reachable(self, obj): def get_connected_endpoints_reachable(self, obj):
return obj._path and obj._path.is_complete and obj._path.is_active return obj._path and obj._path.is_complete and obj._path.is_active
@ -487,7 +488,7 @@ class InterfaceTemplateSerializer(ValidatedModelSerializer):
class Meta: class Meta:
model = InterfaceTemplate model = InterfaceTemplate
fields = [ fields = [
'id', 'url', 'display', 'device_type', 'module_type', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description', 'id', 'url', 'display', 'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description',
'poe_mode', 'poe_type', 'created', 'last_updated', 'poe_mode', 'poe_type', 'created', 'last_updated',
] ]
@ -583,7 +584,6 @@ class InventoryItemTemplateSerializer(ValidatedModelSerializer):
'description', 'component_type', 'component_id', 'component', 'created', 'last_updated', '_depth', 'description', 'component_type', 'component_id', 'component', 'created', 'last_updated', '_depth',
] ]
@swagger_serializer_method(serializer_or_field=serializers.JSONField)
def get_component(self, obj): def get_component(self, obj):
if obj.component is None: if obj.component is None:
return None return None
@ -660,7 +660,7 @@ class DeviceSerializer(NetBoxModelSerializer):
'comments', 'local_context_data', 'tags', 'custom_fields', 'created', 'last_updated', 'comments', 'local_context_data', 'tags', 'custom_fields', 'created', 'last_updated',
] ]
@swagger_serializer_method(serializer_or_field=NestedDeviceSerializer) @extend_schema_field(NestedDeviceSerializer)
def get_parent_device(self, obj): def get_parent_device(self, obj):
try: try:
device_bay = obj.parent_bay device_bay = obj.parent_bay
@ -683,7 +683,7 @@ class DeviceWithConfigContextSerializer(DeviceSerializer):
'comments', 'local_context_data', 'tags', 'custom_fields', 'config_context', 'created', 'last_updated', 'comments', 'local_context_data', 'tags', 'custom_fields', 'config_context', 'created', 'last_updated',
] ]
@swagger_serializer_method(serializer_or_field=serializers.JSONField) @extend_schema_field(serializers.DictField)
def get_config_context(self, obj): def get_config_context(self, obj):
return obj.get_config_context() return obj.get_config_context()
@ -1006,7 +1006,6 @@ class InventoryItemSerializer(NetBoxModelSerializer):
'custom_fields', 'created', 'last_updated', '_depth', 'custom_fields', 'created', 'last_updated', '_depth',
] ]
@swagger_serializer_method(serializer_or_field=serializers.JSONField)
def get_component(self, obj): def get_component(self, obj):
if obj.component is None: if obj.component is None:
return None return None
@ -1077,7 +1076,6 @@ class CableTerminationSerializer(NetBoxModelSerializer):
'id', 'url', 'display', 'cable', 'cable_end', 'termination_type', 'termination_id', 'termination' 'id', 'url', 'display', 'cable', 'cable_end', 'termination_type', 'termination_id', 'termination'
] ]
@swagger_serializer_method(serializer_or_field=serializers.JSONField)
def get_termination(self, obj): def get_termination(self, obj):
serializer = get_serializer_for_model(obj.termination, prefix=NESTED_SERIALIZER_PREFIX) serializer = get_serializer_for_model(obj.termination, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
@ -1091,7 +1089,6 @@ class CablePathSerializer(serializers.ModelSerializer):
model = CablePath model = CablePath
fields = ['id', 'path', 'is_active', 'is_complete', 'is_split'] fields = ['id', 'path', 'is_active', 'is_complete', 'is_split']
@swagger_serializer_method(serializer_or_field=serializers.ListField)
def get_path(self, obj): def get_path(self, obj):
ret = [] ret = []
for nodes in obj.path_objects: for nodes in obj.path_objects: