From e07dd3ddcb2b8453d5a72ccb984e456297fb8296 Mon Sep 17 00:00:00 2001 From: jeremystretch Date: Fri, 15 Jul 2022 15:31:42 -0400 Subject: [PATCH] Define NESTED_SERIALIZER_PREFIX constant --- netbox/dcim/api/serializers.py | 17 +++++++++-------- netbox/dcim/api/views.py | 5 +++-- netbox/extras/api/customfields.py | 5 +++-- netbox/extras/api/serializers.py | 7 ++++--- netbox/ipam/api/serializers.py | 7 ++++--- netbox/netbox/api/viewsets/__init__.py | 3 ++- netbox/netbox/constants.py | 3 +++ netbox/tenancy/api/serializers.py | 3 ++- 8 files changed, 30 insertions(+), 20 deletions(-) diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py index c2cb846a9..d95480aa7 100644 --- a/netbox/dcim/api/serializers.py +++ b/netbox/dcim/api/serializers.py @@ -15,6 +15,7 @@ from netbox.api.serializers import ( NestedGroupModelSerializer, NetBoxModelSerializer, ValidatedModelSerializer, WritableNestedSerializer, ) from netbox.config import ConfigItem +from netbox.constants import NESTED_SERIALIZER_PREFIX from tenancy.api.nested_serializers import NestedTenantSerializer from users.api.nested_serializers import NestedUserSerializer 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. """ 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']} return serializer(obj._link_peer, context=context).data return None @@ -67,7 +68,7 @@ class ConnectedEndpointSerializer(serializers.ModelSerializer): Return the appropriate serializer for the type of connected object. """ 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']} return serializer(obj._path.destination, context=context).data return None @@ -543,7 +544,7 @@ class InventoryItemTemplateSerializer(ValidatedModelSerializer): def get_component(self, obj): if obj.component is 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']} return serializer(obj.component, context=context).data @@ -935,7 +936,7 @@ class InventoryItemSerializer(NetBoxModelSerializer): def get_component(self, obj): if obj.component is 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']} return serializer(obj.component, context=context).data @@ -991,7 +992,7 @@ class CableSerializer(NetBoxModelSerializer): termination = getattr(obj, 'termination_{}'.format(side.lower())) if termination is 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']} data = serializer(termination, context=context).data @@ -1037,7 +1038,7 @@ class CablePathSerializer(serializers.ModelSerializer): """ 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']} return serializer(obj.origin, context=context).data @@ -1047,7 +1048,7 @@ class CablePathSerializer(serializers.ModelSerializer): Return the appropriate serializer for the destination, if any. """ 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']} return serializer(obj.destination, context=context).data return None @@ -1056,7 +1057,7 @@ class CablePathSerializer(serializers.ModelSerializer): def get_path(self, obj): ret = [] 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']} ret.append(serializer(node, context=context).data) return ret diff --git a/netbox/dcim/api/views.py b/netbox/dcim/api/views.py index 3fa652a9b..6387e26f8 100644 --- a/netbox/dcim/api/views.py +++ b/netbox/dcim/api/views.py @@ -22,6 +22,7 @@ from netbox.api.metadata import ContentTypeMetadata from netbox.api.pagination import StripCountAnnotationsPaginator from netbox.api.viewsets import NetBoxModelViewSet from netbox.config import get_config +from netbox.constants import NESTED_SERIALIZER_PREFIX from utilities.api import get_serializer_for_model from utilities.utils import count_related from virtualization.models import VirtualMachine @@ -69,14 +70,14 @@ class PathEndpointMixin(object): break # 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 if cable is not None: y = serializers.TracedCableSerializer(cable, context={'request': request}).data else: y = 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 else: z = None diff --git a/netbox/extras/api/customfields.py b/netbox/extras/api/customfields.py index fd6e1f550..b7fd1e129 100644 --- a/netbox/extras/api/customfields.py +++ b/netbox/extras/api/customfields.py @@ -3,6 +3,7 @@ from rest_framework.fields import Field from extras.choices import CustomFieldTypeChoices 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(): value = cf.deserialize(obj.get(cf.name)) 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 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 data[cf.name] = value diff --git a/netbox/extras/api/serializers.py b/netbox/extras/api/serializers.py index bdb54067a..a4e3c6609 100644 --- a/netbox/extras/api/serializers.py +++ b/netbox/extras/api/serializers.py @@ -15,6 +15,7 @@ from extras.utils import FeatureQuery from netbox.api import ChoiceField, ContentTypeField, SerializedPKRelatedField from netbox.api.exceptions import SerializerNotFound 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.models import Tenant, TenantGroup from users.api.nested_serializers import NestedUserSerializer @@ -192,7 +193,7 @@ class ImageAttachmentSerializer(ValidatedModelSerializer): @swagger_serializer_method(serializer_or_field=serializers.DictField) 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 @@ -242,7 +243,7 @@ class JournalEntrySerializer(NetBoxModelSerializer): @swagger_serializer_method(serializer_or_field=serializers.DictField) 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']} return serializer(instance.assigned_object, context=context).data @@ -462,7 +463,7 @@ class ObjectChangeSerializer(BaseModelSerializer): return None 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: return obj.object_repr context = { diff --git a/netbox/ipam/api/serializers.py b/netbox/ipam/api/serializers.py index 3fa1bcc7e..4462ed697 100644 --- a/netbox/ipam/api/serializers.py +++ b/netbox/ipam/api/serializers.py @@ -10,6 +10,7 @@ from ipam.constants import IPADDRESS_ASSIGNMENT_MODELS, VLANGROUP_SCOPE_TYPES from ipam.models import * from netbox.api import ChoiceField, ContentTypeField, SerializedPKRelatedField from netbox.api.serializers import NetBoxModelSerializer +from netbox.constants import NESTED_SERIALIZER_PREFIX from tenancy.api.nested_serializers import NestedTenantSerializer from utilities.api import get_serializer_for_model from virtualization.api.nested_serializers import NestedVirtualMachineSerializer @@ -145,7 +146,7 @@ class FHRPGroupAssignmentSerializer(NetBoxModelSerializer): def get_interface(self, obj): if obj.interface is 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']} return serializer(obj.interface, context=context).data @@ -191,7 +192,7 @@ class VLANGroupSerializer(NetBoxModelSerializer): def get_scope(self, obj): if obj.scope_id is 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']} return serializer(obj.scope, context=context).data @@ -375,7 +376,7 @@ class IPAddressSerializer(NetBoxModelSerializer): def get_assigned_object(self, obj): if obj.assigned_object is 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']} return serializer(obj.assigned_object, context=context).data diff --git a/netbox/netbox/api/viewsets/__init__.py b/netbox/netbox/api/viewsets/__init__.py index 462c07c6f..0f149240d 100644 --- a/netbox/netbox/api/viewsets/__init__.py +++ b/netbox/netbox/api/viewsets/__init__.py @@ -10,6 +10,7 @@ from rest_framework.viewsets import ModelViewSet from extras.models import ExportTemplate from netbox.api.exceptions import SerializerNotFound +from netbox.constants import NESTED_SERIALIZER_PREFIX from utilities.api import get_serializer_for_model from .mixins import * @@ -60,7 +61,7 @@ class NetBoxModelViewSet(BulkUpdateModelMixin, BulkDestroyModelMixin, ObjectVali if self.brief: logger.debug("Request is for 'brief' format; initializing nested serializer") 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}") return serializer except SerializerNotFound: diff --git a/netbox/netbox/constants.py b/netbox/netbox/constants.py index 61588d331..776938a97 100644 --- a/netbox/netbox/constants.py +++ b/netbox/netbox/constants.py @@ -1,2 +1,5 @@ +# Prefix for nested serializers +NESTED_SERIALIZER_PREFIX = 'Nested' + # Max results per object type SEARCH_MAX_RESULTS = 15 diff --git a/netbox/tenancy/api/serializers.py b/netbox/tenancy/api/serializers.py index a2286efed..626554077 100644 --- a/netbox/tenancy/api/serializers.py +++ b/netbox/tenancy/api/serializers.py @@ -4,6 +4,7 @@ from rest_framework import serializers from netbox.api import ChoiceField, ContentTypeField from netbox.api.serializers import NestedGroupModelSerializer, NetBoxModelSerializer +from netbox.constants import NESTED_SERIALIZER_PREFIX from tenancy.choices import ContactPriorityChoices from tenancy.models import * from utilities.api import get_serializer_for_model @@ -108,6 +109,6 @@ class ContactAssignmentSerializer(NetBoxModelSerializer): @swagger_serializer_method(serializer_or_field=serializers.DictField) 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']} return serializer(instance.object, context=context).data