1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Fixes #1285: Enforce model validation when creating/editing objects via the API

This commit is contained in:
Jeremy Stretch
2017-07-06 17:37:24 -04:00
parent 5b43a108bc
commit 1f9806a480
8 changed files with 74 additions and 31 deletions

View File

@@ -13,7 +13,7 @@ from dcim.models import (
)
from extras.api.customfields import CustomFieldModelSerializer
from tenancy.api.serializers import NestedTenantSerializer
from utilities.api import ChoiceFieldSerializer
from utilities.api import ChoiceFieldSerializer, ModelValidationMixin
#
@@ -36,7 +36,7 @@ class RegionSerializer(serializers.ModelSerializer):
fields = ['id', 'name', 'slug', 'parent']
class WritableRegionSerializer(serializers.ModelSerializer):
class WritableRegionSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = Region
@@ -98,7 +98,7 @@ class NestedRackGroupSerializer(serializers.ModelSerializer):
fields = ['id', 'url', 'name', 'slug']
class WritableRackGroupSerializer(serializers.ModelSerializer):
class WritableRackGroupSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = RackGroup
@@ -109,7 +109,7 @@ class WritableRackGroupSerializer(serializers.ModelSerializer):
# Rack roles
#
class RackRoleSerializer(serializers.ModelSerializer):
class RackRoleSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = RackRole
@@ -174,6 +174,9 @@ class WritableRackSerializer(CustomFieldModelSerializer):
validator.set_context(self)
validator(data)
# Enforce model validation
super(WritableRackSerializer, self).validate(data)
return data
@@ -211,7 +214,7 @@ class RackReservationSerializer(serializers.ModelSerializer):
fields = ['id', 'rack', 'units', 'created', 'user', 'description']
class WritableRackReservationSerializer(serializers.ModelSerializer):
class WritableRackReservationSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = RackReservation
@@ -222,7 +225,7 @@ class WritableRackReservationSerializer(serializers.ModelSerializer):
# Manufacturers
#
class ManufacturerSerializer(serializers.ModelSerializer):
class ManufacturerSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = Manufacturer
@@ -287,7 +290,7 @@ class ConsolePortTemplateSerializer(serializers.ModelSerializer):
fields = ['id', 'device_type', 'name']
class WritableConsolePortTemplateSerializer(serializers.ModelSerializer):
class WritableConsolePortTemplateSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = ConsolePortTemplate
@@ -306,7 +309,7 @@ class ConsoleServerPortTemplateSerializer(serializers.ModelSerializer):
fields = ['id', 'device_type', 'name']
class WritableConsoleServerPortTemplateSerializer(serializers.ModelSerializer):
class WritableConsoleServerPortTemplateSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = ConsoleServerPortTemplate
@@ -325,7 +328,7 @@ class PowerPortTemplateSerializer(serializers.ModelSerializer):
fields = ['id', 'device_type', 'name']
class WritablePowerPortTemplateSerializer(serializers.ModelSerializer):
class WritablePowerPortTemplateSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = PowerPortTemplate
@@ -344,7 +347,7 @@ class PowerOutletTemplateSerializer(serializers.ModelSerializer):
fields = ['id', 'device_type', 'name']
class WritablePowerOutletTemplateSerializer(serializers.ModelSerializer):
class WritablePowerOutletTemplateSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = PowerOutletTemplate
@@ -364,7 +367,7 @@ class InterfaceTemplateSerializer(serializers.ModelSerializer):
fields = ['id', 'device_type', 'name', 'form_factor', 'mgmt_only']
class WritableInterfaceTemplateSerializer(serializers.ModelSerializer):
class WritableInterfaceTemplateSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = InterfaceTemplate
@@ -383,7 +386,7 @@ class DeviceBayTemplateSerializer(serializers.ModelSerializer):
fields = ['id', 'device_type', 'name']
class WritableDeviceBayTemplateSerializer(serializers.ModelSerializer):
class WritableDeviceBayTemplateSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = DeviceBayTemplate
@@ -394,7 +397,7 @@ class WritableDeviceBayTemplateSerializer(serializers.ModelSerializer):
# Device roles
#
class DeviceRoleSerializer(serializers.ModelSerializer):
class DeviceRoleSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = DeviceRole
@@ -413,7 +416,7 @@ class NestedDeviceRoleSerializer(serializers.ModelSerializer):
# Platforms
#
class PlatformSerializer(serializers.ModelSerializer):
class PlatformSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = Platform
@@ -496,6 +499,9 @@ class WritableDeviceSerializer(CustomFieldModelSerializer):
validator.set_context(self)
validator(data)
# Enforce model validation
super(WritableDeviceSerializer, self).validate(data)
return data
@@ -512,7 +518,7 @@ class ConsoleServerPortSerializer(serializers.ModelSerializer):
read_only_fields = ['connected_console']
class WritableConsoleServerPortSerializer(serializers.ModelSerializer):
class WritableConsoleServerPortSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = ConsoleServerPort
@@ -532,7 +538,7 @@ class ConsolePortSerializer(serializers.ModelSerializer):
fields = ['id', 'device', 'name', 'cs_port', 'connection_status']
class WritableConsolePortSerializer(serializers.ModelSerializer):
class WritableConsolePortSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = ConsolePort
@@ -552,7 +558,7 @@ class PowerOutletSerializer(serializers.ModelSerializer):
read_only_fields = ['connected_port']
class WritablePowerOutletSerializer(serializers.ModelSerializer):
class WritablePowerOutletSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = PowerOutlet
@@ -572,7 +578,7 @@ class PowerPortSerializer(serializers.ModelSerializer):
fields = ['id', 'device', 'name', 'power_outlet', 'connection_status']
class WritablePowerPortSerializer(serializers.ModelSerializer):
class WritablePowerPortSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = PowerPort
@@ -630,7 +636,7 @@ class PeerInterfaceSerializer(serializers.ModelSerializer):
]
class WritableInterfaceSerializer(serializers.ModelSerializer):
class WritableInterfaceSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = Interface
@@ -652,7 +658,7 @@ class DeviceBaySerializer(serializers.ModelSerializer):
fields = ['id', 'device', 'name', 'installed_device']
class WritableDeviceBaySerializer(serializers.ModelSerializer):
class WritableDeviceBaySerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = DeviceBay
@@ -675,7 +681,7 @@ class InventoryItemSerializer(serializers.ModelSerializer):
]
class WritableInventoryItemSerializer(serializers.ModelSerializer):
class WritableInventoryItemSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = InventoryItem
@@ -707,7 +713,7 @@ class NestedInterfaceConnectionSerializer(serializers.ModelSerializer):
fields = ['id', 'url', 'connection_status']
class WritableInterfaceConnectionSerializer(serializers.ModelSerializer):
class WritableInterfaceConnectionSerializer(ModelValidationMixin, serializers.ModelSerializer):
class Meta:
model = InterfaceConnection