Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closes #17143: Deprecate the use of dedicated nested API serializers #17164

Merged
merged 1 commit into from
Aug 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 9 additions & 12 deletions netbox/circuits/api/nested_serializers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import warnings

from drf_spectacular.utils import extend_schema_serializer
from rest_framework import serializers

from circuits.models import *
from netbox.api.fields import RelatedObjectCountField
from netbox.api.serializers import WritableNestedSerializer
from .serializers_.nested import NestedProviderAccountSerializer

__all__ = [
'NestedCircuitSerializer',
Expand All @@ -14,6 +16,12 @@
'NestedProviderAccountSerializer',
]

# TODO: Remove in v4.2
warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning
)


#
# Provider networks
Expand Down Expand Up @@ -41,17 +49,6 @@ class Meta:
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'circuit_count']


#
# Provider Accounts
#

class NestedProviderAccountSerializer(WritableNestedSerializer):

class Meta:
model = ProviderAccount
fields = ['id', 'url', 'display_url', 'display', 'name', 'account']


#
# Circuits
#
Expand Down
1 change: 0 additions & 1 deletion netbox/circuits/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
from .serializers_.providers import *
from .serializers_.circuits import *
from .nested_serializers import *
13 changes: 13 additions & 0 deletions netbox/circuits/api/serializers_/nested.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from circuits.models import ProviderAccount
from netbox.api.serializers import WritableNestedSerializer

__all__ = (
'NestedProviderAccountSerializer',
)


class NestedProviderAccountSerializer(WritableNestedSerializer):

class Meta:
model = ProviderAccount
fields = ['id', 'url', 'display_url', 'display', 'name', 'account']
2 changes: 1 addition & 1 deletion netbox/circuits/api/serializers_/providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from ipam.models import ASN
from netbox.api.fields import RelatedObjectCountField, SerializedPKRelatedField
from netbox.api.serializers import NetBoxModelSerializer
from ..nested_serializers import *
from .nested import NestedProviderAccountSerializer

__all__ = (
'ProviderAccountSerializer',
Expand Down
8 changes: 8 additions & 0 deletions netbox/core/api/nested_serializers.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import warnings

from rest_framework import serializers

from core.choices import JobStatusChoices
Expand All @@ -12,6 +14,12 @@
'NestedJobSerializer',
)

# TODO: Remove in v4.2
warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning
)


class NestedDataSourceSerializer(WritableNestedSerializer):

Expand Down
1 change: 0 additions & 1 deletion netbox/core/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from .serializers_.change_logging import *
from .serializers_.data import *
from .serializers_.jobs import *
from .nested_serializers import *
94 changes: 12 additions & 82 deletions netbox/dcim/api/nested_serializers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
import warnings

from drf_spectacular.utils import extend_schema_serializer
from rest_framework import serializers

from dcim import models
from netbox.api.fields import RelatedObjectCountField
from netbox.api.serializers import WritableNestedSerializer
from .serializers_.nested import (
NestedDeviceBaySerializer, NestedDeviceSerializer, NestedInterfaceSerializer, NestedInterfaceTemplateSerializer,
NestedLocationSerializer, NestedModuleBaySerializer, NestedRegionSerializer, NestedSiteGroupSerializer,
)

__all__ = [
'NestedCableSerializer',
Expand Down Expand Up @@ -48,35 +54,17 @@
'NestedVirtualDeviceContextSerializer',
]

# TODO: Remove in v4.2
warnings.warn(
f"Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.",
DeprecationWarning
)


#
# Regions/sites
#

@extend_schema_serializer(
exclude_fields=('site_count',),
)
class NestedRegionSerializer(WritableNestedSerializer):
site_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)

class Meta:
model = models.Region
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth']


@extend_schema_serializer(
exclude_fields=('site_count',),
)
class NestedSiteGroupSerializer(WritableNestedSerializer):
site_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)

class Meta:
model = models.SiteGroup
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth']


class NestedSiteSerializer(WritableNestedSerializer):

class Meta:
Expand All @@ -88,18 +76,6 @@ class Meta:
# Racks
#

@extend_schema_serializer(
exclude_fields=('rack_count',),
)
class NestedLocationSerializer(WritableNestedSerializer):
rack_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)

class Meta:
model = models.Location
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'rack_count', '_depth']


@extend_schema_serializer(
exclude_fields=('rack_count',),
)
Expand Down Expand Up @@ -200,13 +176,6 @@ class Meta:
fields = ['id', 'url', 'display_url', 'display', 'name']


class NestedInterfaceTemplateSerializer(WritableNestedSerializer):

class Meta:
model = models.InterfaceTemplate
fields = ['id', 'url', 'display_url', 'display', 'name']


class NestedRearPortTemplateSerializer(WritableNestedSerializer):

class Meta:
Expand Down Expand Up @@ -271,27 +240,13 @@ class Meta:
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'device_count', 'virtualmachine_count']


class NestedDeviceSerializer(WritableNestedSerializer):

class Meta:
model = models.Device
fields = ['id', 'url', 'display_url', 'display', 'name']


class ModuleNestedModuleBaySerializer(WritableNestedSerializer):

class Meta:
model = models.ModuleBay
fields = ['id', 'url', 'display_url', 'display', 'name']


class ModuleBayNestedModuleSerializer(WritableNestedSerializer):

class Meta:
model = models.Module
fields = ['id', 'url', 'display_url', 'display', 'serial']


class NestedModuleSerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)
module_bay = ModuleNestedModuleBaySerializer(read_only=True)
Expand Down Expand Up @@ -338,15 +293,6 @@ class Meta:
fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied']


class NestedInterfaceSerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)
_occupied = serializers.BooleanField(required=False, read_only=True)

class Meta:
model = models.Interface
fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied']


class NestedRearPortSerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)
_occupied = serializers.BooleanField(required=False, read_only=True)
Expand All @@ -365,22 +311,6 @@ class Meta:
fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied']


class NestedModuleBaySerializer(WritableNestedSerializer):
installed_module = ModuleBayNestedModuleSerializer(required=False, allow_null=True)

class Meta:
model = models.ModuleBay
fields = ['id', 'url', 'display_url', 'display', 'installed_module', 'name']


class NestedDeviceBaySerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)

class Meta:
model = models.DeviceBay
fields = ['id', 'url', 'display_url', 'display', 'device', 'name']


class NestedInventoryItemSerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)
Expand Down
1 change: 0 additions & 1 deletion netbox/dcim/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,3 @@
from .serializers_.device_components import *
from .serializers_.power import *
from .serializers_.rackunits import *
from .nested_serializers import *
4 changes: 2 additions & 2 deletions netbox/dcim/api/serializers_/device_components.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,16 @@
from netbox.api.serializers import NetBoxModelSerializer, WritableNestedSerializer
from utilities.api import get_serializer_for_model
from vpn.api.serializers_.l2vpn import L2VPNTerminationSerializer
from wireless.api.nested_serializers import NestedWirelessLinkSerializer
from wireless.api.serializers_.nested import NestedWirelessLinkSerializer
from wireless.api.serializers_.wirelesslans import WirelessLANSerializer
from wireless.choices import *
from wireless.models import WirelessLAN
from .base import ConnectedEndpointsSerializer
from .cables import CabledObjectSerializer
from .devices import DeviceSerializer, ModuleSerializer, VirtualDeviceContextSerializer
from .manufacturers import ManufacturerSerializer
from .nested import NestedInterfaceSerializer
from .roles import InventoryItemRoleSerializer
from ..nested_serializers import *

__all__ = (
'ConsolePortSerializer',
Expand Down
2 changes: 1 addition & 1 deletion netbox/dcim/api/serializers_/devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
from .platforms import PlatformSerializer
from .racks import RackSerializer
from .roles import DeviceRoleSerializer
from .nested import NestedDeviceBaySerializer, NestedDeviceSerializer, NestedModuleBaySerializer
from .sites import LocationSerializer, SiteSerializer
from .virtualchassis import VirtualChassisSerializer
from ..nested_serializers import *

__all__ = (
'DeviceSerializer',
Expand Down
2 changes: 1 addition & 1 deletion netbox/dcim/api/serializers_/devicetype_components.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
from wireless.choices import *
from .devicetypes import DeviceTypeSerializer, ModuleTypeSerializer
from .manufacturers import ManufacturerSerializer
from .nested import NestedInterfaceTemplateSerializer
from .roles import InventoryItemRoleSerializer
from ..nested_serializers import *

__all__ = (
'ConsolePortTemplateSerializer',
Expand Down
98 changes: 98 additions & 0 deletions netbox/dcim/api/serializers_/nested.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
from drf_spectacular.utils import extend_schema_serializer
from rest_framework import serializers

from netbox.api.serializers import WritableNestedSerializer
from dcim import models

__all__ = (
'NestedDeviceBaySerializer',
'NestedDeviceSerializer',
'NestedInterfaceSerializer',
'NestedInterfaceTemplateSerializer',
'NestedLocationSerializer',
'NestedModuleBaySerializer',
'NestedRegionSerializer',
'NestedSiteGroupSerializer',
)


@extend_schema_serializer(
exclude_fields=('site_count',),
)
class NestedRegionSerializer(WritableNestedSerializer):
site_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)

class Meta:
model = models.Region
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth']


@extend_schema_serializer(
exclude_fields=('site_count',),
)
class NestedSiteGroupSerializer(WritableNestedSerializer):
site_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)

class Meta:
model = models.SiteGroup
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'site_count', '_depth']


@extend_schema_serializer(
exclude_fields=('rack_count',),
)
class NestedLocationSerializer(WritableNestedSerializer):
rack_count = serializers.IntegerField(read_only=True)
_depth = serializers.IntegerField(source='level', read_only=True)

class Meta:
model = models.Location
fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'rack_count', '_depth']


class NestedDeviceSerializer(WritableNestedSerializer):

class Meta:
model = models.Device
fields = ['id', 'url', 'display_url', 'display', 'name']


class NestedInterfaceSerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)
_occupied = serializers.BooleanField(required=False, read_only=True)

class Meta:
model = models.Interface
fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied']


class NestedInterfaceTemplateSerializer(WritableNestedSerializer):

class Meta:
model = models.InterfaceTemplate
fields = ['id', 'url', 'display_url', 'display', 'name']


class NestedDeviceBaySerializer(WritableNestedSerializer):
device = NestedDeviceSerializer(read_only=True)

class Meta:
model = models.DeviceBay
fields = ['id', 'url', 'display_url', 'display', 'device', 'name']


class ModuleBayNestedModuleSerializer(WritableNestedSerializer):

class Meta:
model = models.Module
fields = ['id', 'url', 'display_url', 'display', 'serial']


class NestedModuleBaySerializer(WritableNestedSerializer):
installed_module = ModuleBayNestedModuleSerializer(required=False, allow_null=True)

class Meta:
model = models.ModuleBay
fields = ['id', 'url', 'display_url', 'display', 'installed_module', 'name']
Loading