Define NESTED_SERIALIZER_PREFIX constant

This commit is contained in:
jeremystretch 2022-07-15 15:31:42 -04:00
parent 68f53aaa87
commit e07dd3ddcb
8 changed files with 30 additions and 20 deletions

View File

@ -15,6 +15,7 @@ from netbox.api.serializers import (
NestedGroupModelSerializer, NetBoxModelSerializer, ValidatedModelSerializer, WritableNestedSerializer, NestedGroupModelSerializer, NetBoxModelSerializer, ValidatedModelSerializer, WritableNestedSerializer,
) )
from netbox.config import ConfigItem from netbox.config import ConfigItem
from netbox.constants import NESTED_SERIALIZER_PREFIX
from tenancy.api.nested_serializers import NestedTenantSerializer from tenancy.api.nested_serializers import NestedTenantSerializer
from users.api.nested_serializers import NestedUserSerializer from users.api.nested_serializers import NestedUserSerializer
from utilities.api import get_serializer_for_model from utilities.api import get_serializer_for_model
@ -41,7 +42,7 @@ class LinkTerminationSerializer(serializers.ModelSerializer):
Return the appropriate serializer for the link termination model. Return the appropriate serializer for the link termination model.
""" """
if obj._link_peer is not None: if obj._link_peer is not None:
serializer = get_serializer_for_model(obj._link_peer, prefix='Nested') serializer = get_serializer_for_model(obj._link_peer, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj._link_peer, context=context).data return serializer(obj._link_peer, context=context).data
return None return None
@ -67,7 +68,7 @@ class ConnectedEndpointSerializer(serializers.ModelSerializer):
Return the appropriate serializer for the type of connected object. Return the appropriate serializer for the type of connected object.
""" """
if obj._path is not None and obj._path.destination is not None: if obj._path is not None and obj._path.destination is not None:
serializer = get_serializer_for_model(obj._path.destination, prefix='Nested') serializer = get_serializer_for_model(obj._path.destination, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj._path.destination, context=context).data return serializer(obj._path.destination, context=context).data
return None return None
@ -543,7 +544,7 @@ class InventoryItemTemplateSerializer(ValidatedModelSerializer):
def get_component(self, obj): def get_component(self, obj):
if obj.component is None: if obj.component is None:
return None return None
serializer = get_serializer_for_model(obj.component, prefix='Nested') serializer = get_serializer_for_model(obj.component, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj.component, context=context).data return serializer(obj.component, context=context).data
@ -935,7 +936,7 @@ class InventoryItemSerializer(NetBoxModelSerializer):
def get_component(self, obj): def get_component(self, obj):
if obj.component is None: if obj.component is None:
return None return None
serializer = get_serializer_for_model(obj.component, prefix='Nested') serializer = get_serializer_for_model(obj.component, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj.component, context=context).data return serializer(obj.component, context=context).data
@ -991,7 +992,7 @@ class CableSerializer(NetBoxModelSerializer):
termination = getattr(obj, 'termination_{}'.format(side.lower())) termination = getattr(obj, 'termination_{}'.format(side.lower()))
if termination is None: if termination is None:
return None return None
serializer = get_serializer_for_model(termination, prefix='Nested') serializer = get_serializer_for_model(termination, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
data = serializer(termination, context=context).data data = serializer(termination, context=context).data
@ -1037,7 +1038,7 @@ class CablePathSerializer(serializers.ModelSerializer):
""" """
Return the appropriate serializer for the origin. Return the appropriate serializer for the origin.
""" """
serializer = get_serializer_for_model(obj.origin, prefix='Nested') serializer = get_serializer_for_model(obj.origin, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj.origin, context=context).data return serializer(obj.origin, context=context).data
@ -1047,7 +1048,7 @@ class CablePathSerializer(serializers.ModelSerializer):
Return the appropriate serializer for the destination, if any. Return the appropriate serializer for the destination, if any.
""" """
if obj.destination_id is not None: if obj.destination_id is not None:
serializer = get_serializer_for_model(obj.destination, prefix='Nested') serializer = get_serializer_for_model(obj.destination, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj.destination, context=context).data return serializer(obj.destination, context=context).data
return None return None
@ -1056,7 +1057,7 @@ class CablePathSerializer(serializers.ModelSerializer):
def get_path(self, obj): def get_path(self, obj):
ret = [] ret = []
for node in obj.get_path(): for node in obj.get_path():
serializer = get_serializer_for_model(node, prefix='Nested') serializer = get_serializer_for_model(node, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
ret.append(serializer(node, context=context).data) ret.append(serializer(node, context=context).data)
return ret return ret

View File

@ -22,6 +22,7 @@ from netbox.api.metadata import ContentTypeMetadata
from netbox.api.pagination import StripCountAnnotationsPaginator from netbox.api.pagination import StripCountAnnotationsPaginator
from netbox.api.viewsets import NetBoxModelViewSet from netbox.api.viewsets import NetBoxModelViewSet
from netbox.config import get_config from netbox.config import get_config
from netbox.constants import NESTED_SERIALIZER_PREFIX
from utilities.api import get_serializer_for_model from utilities.api import get_serializer_for_model
from utilities.utils import count_related from utilities.utils import count_related
from virtualization.models import VirtualMachine from virtualization.models import VirtualMachine
@ -69,14 +70,14 @@ class PathEndpointMixin(object):
break break
# Serialize each object # Serialize each object
serializer_a = get_serializer_for_model(near_end, prefix='Nested') serializer_a = get_serializer_for_model(near_end, prefix=NESTED_SERIALIZER_PREFIX)
x = serializer_a(near_end, context={'request': request}).data x = serializer_a(near_end, context={'request': request}).data
if cable is not None: if cable is not None:
y = serializers.TracedCableSerializer(cable, context={'request': request}).data y = serializers.TracedCableSerializer(cable, context={'request': request}).data
else: else:
y = None y = None
if far_end is not None: if far_end is not None:
serializer_b = get_serializer_for_model(far_end, prefix='Nested') serializer_b = get_serializer_for_model(far_end, prefix=NESTED_SERIALIZER_PREFIX)
z = serializer_b(far_end, context={'request': request}).data z = serializer_b(far_end, context={'request': request}).data
else: else:
z = None z = None

View File

@ -3,6 +3,7 @@ from rest_framework.fields import Field
from extras.choices import CustomFieldTypeChoices from extras.choices import CustomFieldTypeChoices
from extras.models import CustomField from extras.models import CustomField
from netbox.constants import NESTED_SERIALIZER_PREFIX
# #
@ -51,10 +52,10 @@ class CustomFieldsDataField(Field):
for cf in self._get_custom_fields(): for cf in self._get_custom_fields():
value = cf.deserialize(obj.get(cf.name)) value = cf.deserialize(obj.get(cf.name))
if value is not None and cf.type == CustomFieldTypeChoices.TYPE_OBJECT: if value is not None and cf.type == CustomFieldTypeChoices.TYPE_OBJECT:
serializer = get_serializer_for_model(cf.object_type.model_class(), prefix='Nested') serializer = get_serializer_for_model(cf.object_type.model_class(), prefix=NESTED_SERIALIZER_PREFIX)
value = serializer(value, context=self.parent.context).data value = serializer(value, context=self.parent.context).data
elif value is not None and cf.type == CustomFieldTypeChoices.TYPE_MULTIOBJECT: elif value is not None and cf.type == CustomFieldTypeChoices.TYPE_MULTIOBJECT:
serializer = get_serializer_for_model(cf.object_type.model_class(), prefix='Nested') serializer = get_serializer_for_model(cf.object_type.model_class(), prefix=NESTED_SERIALIZER_PREFIX)
value = serializer(value, many=True, context=self.parent.context).data value = serializer(value, many=True, context=self.parent.context).data
data[cf.name] = value data[cf.name] = value

View File

@ -15,6 +15,7 @@ from extras.utils import FeatureQuery
from netbox.api import ChoiceField, ContentTypeField, SerializedPKRelatedField from netbox.api import ChoiceField, ContentTypeField, SerializedPKRelatedField
from netbox.api.exceptions import SerializerNotFound from netbox.api.exceptions import SerializerNotFound
from netbox.api.serializers import BaseModelSerializer, NetBoxModelSerializer, ValidatedModelSerializer from netbox.api.serializers import BaseModelSerializer, NetBoxModelSerializer, ValidatedModelSerializer
from netbox.constants import NESTED_SERIALIZER_PREFIX
from tenancy.api.nested_serializers import NestedTenantSerializer, NestedTenantGroupSerializer from tenancy.api.nested_serializers import NestedTenantSerializer, NestedTenantGroupSerializer
from tenancy.models import Tenant, TenantGroup from tenancy.models import Tenant, TenantGroup
from users.api.nested_serializers import NestedUserSerializer from users.api.nested_serializers import NestedUserSerializer
@ -192,7 +193,7 @@ class ImageAttachmentSerializer(ValidatedModelSerializer):
@swagger_serializer_method(serializer_or_field=serializers.DictField) @swagger_serializer_method(serializer_or_field=serializers.DictField)
def get_parent(self, obj): def get_parent(self, obj):
serializer = get_serializer_for_model(obj.parent, prefix='Nested') serializer = get_serializer_for_model(obj.parent, prefix=NESTED_SERIALIZER_PREFIX)
return serializer(obj.parent, context={'request': self.context['request']}).data return serializer(obj.parent, context={'request': self.context['request']}).data
@ -242,7 +243,7 @@ class JournalEntrySerializer(NetBoxModelSerializer):
@swagger_serializer_method(serializer_or_field=serializers.DictField) @swagger_serializer_method(serializer_or_field=serializers.DictField)
def get_assigned_object(self, instance): def get_assigned_object(self, instance):
serializer = get_serializer_for_model(instance.assigned_object_type.model_class(), prefix='Nested') serializer = get_serializer_for_model(instance.assigned_object_type.model_class(), prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(instance.assigned_object, context=context).data return serializer(instance.assigned_object, context=context).data
@ -462,7 +463,7 @@ class ObjectChangeSerializer(BaseModelSerializer):
return None return None
try: try:
serializer = get_serializer_for_model(obj.changed_object, prefix='Nested') serializer = get_serializer_for_model(obj.changed_object, prefix=NESTED_SERIALIZER_PREFIX)
except SerializerNotFound: except SerializerNotFound:
return obj.object_repr return obj.object_repr
context = { context = {

View File

@ -10,6 +10,7 @@ from ipam.constants import IPADDRESS_ASSIGNMENT_MODELS, VLANGROUP_SCOPE_TYPES
from ipam.models import * from ipam.models import *
from netbox.api import ChoiceField, ContentTypeField, SerializedPKRelatedField from netbox.api import ChoiceField, ContentTypeField, SerializedPKRelatedField
from netbox.api.serializers import NetBoxModelSerializer from netbox.api.serializers import NetBoxModelSerializer
from netbox.constants import NESTED_SERIALIZER_PREFIX
from tenancy.api.nested_serializers import NestedTenantSerializer from tenancy.api.nested_serializers import NestedTenantSerializer
from utilities.api import get_serializer_for_model from utilities.api import get_serializer_for_model
from virtualization.api.nested_serializers import NestedVirtualMachineSerializer from virtualization.api.nested_serializers import NestedVirtualMachineSerializer
@ -145,7 +146,7 @@ class FHRPGroupAssignmentSerializer(NetBoxModelSerializer):
def get_interface(self, obj): def get_interface(self, obj):
if obj.interface is None: if obj.interface is None:
return None return None
serializer = get_serializer_for_model(obj.interface, prefix='Nested') serializer = get_serializer_for_model(obj.interface, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj.interface, context=context).data return serializer(obj.interface, context=context).data
@ -191,7 +192,7 @@ class VLANGroupSerializer(NetBoxModelSerializer):
def get_scope(self, obj): def get_scope(self, obj):
if obj.scope_id is None: if obj.scope_id is None:
return None return None
serializer = get_serializer_for_model(obj.scope, prefix='Nested') serializer = get_serializer_for_model(obj.scope, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj.scope, context=context).data return serializer(obj.scope, context=context).data
@ -375,7 +376,7 @@ class IPAddressSerializer(NetBoxModelSerializer):
def get_assigned_object(self, obj): def get_assigned_object(self, obj):
if obj.assigned_object is None: if obj.assigned_object is None:
return None return None
serializer = get_serializer_for_model(obj.assigned_object, prefix='Nested') serializer = get_serializer_for_model(obj.assigned_object, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(obj.assigned_object, context=context).data return serializer(obj.assigned_object, context=context).data

View File

@ -10,6 +10,7 @@ from rest_framework.viewsets import ModelViewSet
from extras.models import ExportTemplate from extras.models import ExportTemplate
from netbox.api.exceptions import SerializerNotFound from netbox.api.exceptions import SerializerNotFound
from netbox.constants import NESTED_SERIALIZER_PREFIX
from utilities.api import get_serializer_for_model from utilities.api import get_serializer_for_model
from .mixins import * from .mixins import *
@ -60,7 +61,7 @@ class NetBoxModelViewSet(BulkUpdateModelMixin, BulkDestroyModelMixin, ObjectVali
if self.brief: if self.brief:
logger.debug("Request is for 'brief' format; initializing nested serializer") logger.debug("Request is for 'brief' format; initializing nested serializer")
try: try:
serializer = get_serializer_for_model(self.queryset.model, prefix='Nested') serializer = get_serializer_for_model(self.queryset.model, prefix=NESTED_SERIALIZER_PREFIX)
logger.debug(f"Using serializer {serializer}") logger.debug(f"Using serializer {serializer}")
return serializer return serializer
except SerializerNotFound: except SerializerNotFound:

View File

@ -1,2 +1,5 @@
# Prefix for nested serializers
NESTED_SERIALIZER_PREFIX = 'Nested'
# Max results per object type # Max results per object type
SEARCH_MAX_RESULTS = 15 SEARCH_MAX_RESULTS = 15

View File

@ -4,6 +4,7 @@ from rest_framework import serializers
from netbox.api import ChoiceField, ContentTypeField from netbox.api import ChoiceField, ContentTypeField
from netbox.api.serializers import NestedGroupModelSerializer, NetBoxModelSerializer from netbox.api.serializers import NestedGroupModelSerializer, NetBoxModelSerializer
from netbox.constants import NESTED_SERIALIZER_PREFIX
from tenancy.choices import ContactPriorityChoices from tenancy.choices import ContactPriorityChoices
from tenancy.models import * from tenancy.models import *
from utilities.api import get_serializer_for_model from utilities.api import get_serializer_for_model
@ -108,6 +109,6 @@ class ContactAssignmentSerializer(NetBoxModelSerializer):
@swagger_serializer_method(serializer_or_field=serializers.DictField) @swagger_serializer_method(serializer_or_field=serializers.DictField)
def get_object(self, instance): def get_object(self, instance):
serializer = get_serializer_for_model(instance.content_type.model_class(), prefix='Nested') serializer = get_serializer_for_model(instance.content_type.model_class(), prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']} context = {'request': self.context['request']}
return serializer(instance.object, context=context).data return serializer(instance.object, context=context).data