mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Merge branch 'develop' into 4722-api-tests
This commit is contained in:
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
* [#4702](https://github.com/netbox-community/netbox/issues/4702) - Catch IntegrityError exception when adding a non-unique secret
|
* [#4702](https://github.com/netbox-community/netbox/issues/4702) - Catch IntegrityError exception when adding a non-unique secret
|
||||||
* [#4707](https://github.com/netbox-community/netbox/issues/4707) - Fix `prefix_count` population on VLAN API serializer
|
* [#4707](https://github.com/netbox-community/netbox/issues/4707) - Fix `prefix_count` population on VLAN API serializer
|
||||||
|
* [#4725](https://github.com/netbox-community/netbox/issues/4725) - Fix "brief" rendering of various REST API endpoints
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -1,32 +1,35 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from dcim.constants import CONNECTION_STATUS_CHOICES
|
from dcim.constants import CONNECTION_STATUS_CHOICES
|
||||||
from dcim.models import (
|
from dcim import models
|
||||||
Cable, ConsolePort, ConsoleServerPort, Device, DeviceBay, DeviceType, DeviceRole, FrontPort, FrontPortTemplate,
|
|
||||||
Interface, Manufacturer, Platform, PowerFeed, PowerOutlet, PowerPanel, PowerPort, PowerPortTemplate, Rack,
|
|
||||||
RackGroup, RackRole, RearPort, RearPortTemplate, Region, Site, VirtualChassis,
|
|
||||||
)
|
|
||||||
from utilities.api import ChoiceField, WritableNestedSerializer
|
from utilities.api import ChoiceField, WritableNestedSerializer
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'NestedCableSerializer',
|
'NestedCableSerializer',
|
||||||
'NestedConsolePortSerializer',
|
'NestedConsolePortSerializer',
|
||||||
|
'NestedConsolePortTemplateSerializer',
|
||||||
'NestedConsoleServerPortSerializer',
|
'NestedConsoleServerPortSerializer',
|
||||||
|
'NestedConsoleServerPortTemplateSerializer',
|
||||||
'NestedDeviceBaySerializer',
|
'NestedDeviceBaySerializer',
|
||||||
|
'NestedDeviceBayTemplateSerializer',
|
||||||
'NestedDeviceRoleSerializer',
|
'NestedDeviceRoleSerializer',
|
||||||
'NestedDeviceSerializer',
|
'NestedDeviceSerializer',
|
||||||
'NestedDeviceTypeSerializer',
|
'NestedDeviceTypeSerializer',
|
||||||
'NestedFrontPortSerializer',
|
'NestedFrontPortSerializer',
|
||||||
'NestedFrontPortTemplateSerializer',
|
'NestedFrontPortTemplateSerializer',
|
||||||
'NestedInterfaceSerializer',
|
'NestedInterfaceSerializer',
|
||||||
|
'NestedInterfaceTemplateSerializer',
|
||||||
|
'NestedInventoryItemSerializer',
|
||||||
'NestedManufacturerSerializer',
|
'NestedManufacturerSerializer',
|
||||||
'NestedPlatformSerializer',
|
'NestedPlatformSerializer',
|
||||||
'NestedPowerFeedSerializer',
|
'NestedPowerFeedSerializer',
|
||||||
'NestedPowerOutletSerializer',
|
'NestedPowerOutletSerializer',
|
||||||
|
'NestedPowerOutletTemplateSerializer',
|
||||||
'NestedPowerPanelSerializer',
|
'NestedPowerPanelSerializer',
|
||||||
'NestedPowerPortSerializer',
|
'NestedPowerPortSerializer',
|
||||||
'NestedPowerPortTemplateSerializer',
|
'NestedPowerPortTemplateSerializer',
|
||||||
'NestedRackGroupSerializer',
|
'NestedRackGroupSerializer',
|
||||||
|
'NestedRackReservationSerializer',
|
||||||
'NestedRackRoleSerializer',
|
'NestedRackRoleSerializer',
|
||||||
'NestedRackSerializer',
|
'NestedRackSerializer',
|
||||||
'NestedRearPortSerializer',
|
'NestedRearPortSerializer',
|
||||||
@ -46,7 +49,7 @@ class NestedRegionSerializer(WritableNestedSerializer):
|
|||||||
site_count = serializers.IntegerField(read_only=True)
|
site_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Region
|
model = models.Region
|
||||||
fields = ['id', 'url', 'name', 'slug', 'site_count']
|
fields = ['id', 'url', 'name', 'slug', 'site_count']
|
||||||
|
|
||||||
|
|
||||||
@ -54,7 +57,7 @@ class NestedSiteSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:site-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:site-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Site
|
model = models.Site
|
||||||
fields = ['id', 'url', 'name', 'slug']
|
fields = ['id', 'url', 'name', 'slug']
|
||||||
|
|
||||||
|
|
||||||
@ -67,7 +70,7 @@ class NestedRackGroupSerializer(WritableNestedSerializer):
|
|||||||
rack_count = serializers.IntegerField(read_only=True)
|
rack_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RackGroup
|
model = models.RackGroup
|
||||||
fields = ['id', 'url', 'name', 'slug', 'rack_count']
|
fields = ['id', 'url', 'name', 'slug', 'rack_count']
|
||||||
|
|
||||||
|
|
||||||
@ -76,7 +79,7 @@ class NestedRackRoleSerializer(WritableNestedSerializer):
|
|||||||
rack_count = serializers.IntegerField(read_only=True)
|
rack_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RackRole
|
model = models.RackRole
|
||||||
fields = ['id', 'url', 'name', 'slug', 'rack_count']
|
fields = ['id', 'url', 'name', 'slug', 'rack_count']
|
||||||
|
|
||||||
|
|
||||||
@ -85,10 +88,22 @@ class NestedRackSerializer(WritableNestedSerializer):
|
|||||||
device_count = serializers.IntegerField(read_only=True)
|
device_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Rack
|
model = models.Rack
|
||||||
fields = ['id', 'url', 'name', 'display_name', 'device_count']
|
fields = ['id', 'url', 'name', 'display_name', 'device_count']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedRackReservationSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rackreservation-detail')
|
||||||
|
user = serializers.SerializerMethodField(read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.RackReservation
|
||||||
|
fields = ['id', 'url', 'user', 'units']
|
||||||
|
|
||||||
|
def get_user(self, obj):
|
||||||
|
return obj.user.username
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Device types
|
# Device types
|
||||||
#
|
#
|
||||||
@ -98,7 +113,7 @@ class NestedManufacturerSerializer(WritableNestedSerializer):
|
|||||||
devicetype_count = serializers.IntegerField(read_only=True)
|
devicetype_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Manufacturer
|
model = models.Manufacturer
|
||||||
fields = ['id', 'url', 'name', 'slug', 'devicetype_count']
|
fields = ['id', 'url', 'name', 'slug', 'devicetype_count']
|
||||||
|
|
||||||
|
|
||||||
@ -108,15 +123,47 @@ class NestedDeviceTypeSerializer(WritableNestedSerializer):
|
|||||||
device_count = serializers.IntegerField(read_only=True)
|
device_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = DeviceType
|
model = models.DeviceType
|
||||||
fields = ['id', 'url', 'manufacturer', 'model', 'slug', 'display_name', 'device_count']
|
fields = ['id', 'url', 'manufacturer', 'model', 'slug', 'display_name', 'device_count']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedConsolePortTemplateSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleporttemplate-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.ConsolePortTemplate
|
||||||
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedConsoleServerPortTemplateSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:consoleserverporttemplate-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.ConsoleServerPortTemplate
|
||||||
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
class NestedPowerPortTemplateSerializer(WritableNestedSerializer):
|
class NestedPowerPortTemplateSerializer(WritableNestedSerializer):
|
||||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerporttemplate-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerporttemplate-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PowerPortTemplate
|
model = models.PowerPortTemplate
|
||||||
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedPowerOutletTemplateSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:poweroutlettemplate-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.PowerOutletTemplate
|
||||||
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedInterfaceTemplateSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interfacetemplate-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.InterfaceTemplate
|
||||||
fields = ['id', 'url', 'name']
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
@ -124,7 +171,7 @@ class NestedRearPortTemplateSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearporttemplate-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearporttemplate-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RearPortTemplate
|
model = models.RearPortTemplate
|
||||||
fields = ['id', 'url', 'name']
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
@ -132,7 +179,15 @@ class NestedFrontPortTemplateSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontporttemplate-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontporttemplate-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = FrontPortTemplate
|
model = models.FrontPortTemplate
|
||||||
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedDeviceBayTemplateSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:devicebaytemplate-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.DeviceBayTemplate
|
||||||
fields = ['id', 'url', 'name']
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
@ -146,7 +201,7 @@ class NestedDeviceRoleSerializer(WritableNestedSerializer):
|
|||||||
virtualmachine_count = serializers.IntegerField(read_only=True)
|
virtualmachine_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = DeviceRole
|
model = models.DeviceRole
|
||||||
fields = ['id', 'url', 'name', 'slug', 'device_count', 'virtualmachine_count']
|
fields = ['id', 'url', 'name', 'slug', 'device_count', 'virtualmachine_count']
|
||||||
|
|
||||||
|
|
||||||
@ -156,7 +211,7 @@ class NestedPlatformSerializer(WritableNestedSerializer):
|
|||||||
virtualmachine_count = serializers.IntegerField(read_only=True)
|
virtualmachine_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Platform
|
model = models.Platform
|
||||||
fields = ['id', 'url', 'name', 'slug', 'device_count', 'virtualmachine_count']
|
fields = ['id', 'url', 'name', 'slug', 'device_count', 'virtualmachine_count']
|
||||||
|
|
||||||
|
|
||||||
@ -164,7 +219,7 @@ class NestedDeviceSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Device
|
model = models.Device
|
||||||
fields = ['id', 'url', 'name', 'display_name']
|
fields = ['id', 'url', 'name', 'display_name']
|
||||||
|
|
||||||
|
|
||||||
@ -174,7 +229,7 @@ class NestedConsoleServerPortSerializer(WritableNestedSerializer):
|
|||||||
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ConsoleServerPort
|
model = models.ConsoleServerPort
|
||||||
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
||||||
|
|
||||||
|
|
||||||
@ -184,7 +239,7 @@ class NestedConsolePortSerializer(WritableNestedSerializer):
|
|||||||
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ConsolePort
|
model = models.ConsolePort
|
||||||
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
||||||
|
|
||||||
|
|
||||||
@ -194,7 +249,7 @@ class NestedPowerOutletSerializer(WritableNestedSerializer):
|
|||||||
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PowerOutlet
|
model = models.PowerOutlet
|
||||||
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
||||||
|
|
||||||
|
|
||||||
@ -204,7 +259,7 @@ class NestedPowerPortSerializer(WritableNestedSerializer):
|
|||||||
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PowerPort
|
model = models.PowerPort
|
||||||
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
||||||
|
|
||||||
|
|
||||||
@ -214,7 +269,7 @@ class NestedInterfaceSerializer(WritableNestedSerializer):
|
|||||||
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
connection_status = ChoiceField(choices=CONNECTION_STATUS_CHOICES, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Interface
|
model = models.Interface
|
||||||
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
fields = ['id', 'url', 'device', 'name', 'cable', 'connection_status']
|
||||||
|
|
||||||
|
|
||||||
@ -223,7 +278,7 @@ class NestedRearPortSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:rearport-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RearPort
|
model = models.RearPort
|
||||||
fields = ['id', 'url', 'device', 'name', 'cable']
|
fields = ['id', 'url', 'device', 'name', 'cable']
|
||||||
|
|
||||||
|
|
||||||
@ -232,7 +287,7 @@ class NestedFrontPortSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontport-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:frontport-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = FrontPort
|
model = models.FrontPort
|
||||||
fields = ['id', 'url', 'device', 'name', 'cable']
|
fields = ['id', 'url', 'device', 'name', 'cable']
|
||||||
|
|
||||||
|
|
||||||
@ -241,7 +296,15 @@ class NestedDeviceBaySerializer(WritableNestedSerializer):
|
|||||||
device = NestedDeviceSerializer(read_only=True)
|
device = NestedDeviceSerializer(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = DeviceBay
|
model = models.DeviceBay
|
||||||
|
fields = ['id', 'url', 'device', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedInventoryItemSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:inventoryitem-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.InventoryItem
|
||||||
fields = ['id', 'url', 'device', 'name']
|
fields = ['id', 'url', 'device', 'name']
|
||||||
|
|
||||||
|
|
||||||
@ -253,7 +316,7 @@ class NestedCableSerializer(serializers.ModelSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:cable-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:cable-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Cable
|
model = models.Cable
|
||||||
fields = ['id', 'url', 'label']
|
fields = ['id', 'url', 'label']
|
||||||
|
|
||||||
|
|
||||||
@ -267,7 +330,7 @@ class NestedVirtualChassisSerializer(WritableNestedSerializer):
|
|||||||
member_count = serializers.IntegerField(read_only=True)
|
member_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VirtualChassis
|
model = models.VirtualChassis
|
||||||
fields = ['id', 'url', 'master', 'member_count']
|
fields = ['id', 'url', 'master', 'member_count']
|
||||||
|
|
||||||
|
|
||||||
@ -280,7 +343,7 @@ class NestedPowerPanelSerializer(WritableNestedSerializer):
|
|||||||
powerfeed_count = serializers.IntegerField(read_only=True)
|
powerfeed_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PowerPanel
|
model = models.PowerPanel
|
||||||
fields = ['id', 'url', 'name', 'powerfeed_count']
|
fields = ['id', 'url', 'name', 'powerfeed_count']
|
||||||
|
|
||||||
|
|
||||||
@ -288,5 +351,5 @@ class NestedPowerFeedSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerfeed-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:powerfeed-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PowerFeed
|
model = models.PowerFeed
|
||||||
fields = ['id', 'url', 'name']
|
fields = ['id', 'url', 'name']
|
||||||
|
@ -1,15 +1,49 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from extras.models import ReportResult
|
from extras import models
|
||||||
|
from utilities.api import WritableNestedSerializer
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
'NestedConfigContextSerializer',
|
||||||
|
'NestedExportTemplateSerializer',
|
||||||
|
'NestedGraphSerializer',
|
||||||
'NestedReportResultSerializer',
|
'NestedReportResultSerializer',
|
||||||
|
'NestedTagSerializer',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
#
|
class NestedConfigContextSerializer(WritableNestedSerializer):
|
||||||
# Reports
|
url = serializers.HyperlinkedIdentityField(view_name='extras-api:configcontext-detail')
|
||||||
#
|
|
||||||
|
class Meta:
|
||||||
|
model = models.ConfigContext
|
||||||
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedExportTemplateSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='extras-api:exporttemplate-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.ExportTemplate
|
||||||
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedGraphSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='extras-api:graph-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.Graph
|
||||||
|
fields = ['id', 'url', 'name']
|
||||||
|
|
||||||
|
|
||||||
|
class NestedTagSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='extras-api:tag-detail')
|
||||||
|
tagged_items = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.Tag
|
||||||
|
fields = ['id', 'url', 'name', 'slug', 'color', 'tagged_items']
|
||||||
|
|
||||||
|
|
||||||
class NestedReportResultSerializer(serializers.ModelSerializer):
|
class NestedReportResultSerializer(serializers.ModelSerializer):
|
||||||
url = serializers.HyperlinkedIdentityField(
|
url = serializers.HyperlinkedIdentityField(
|
||||||
@ -19,5 +53,5 @@ class NestedReportResultSerializer(serializers.ModelSerializer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ReportResult
|
model = models.ReportResult
|
||||||
fields = ['url', 'created', 'user', 'failed']
|
fields = ['url', 'created', 'user', 'failed']
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, VLAN, VLANGroup, VRF
|
from ipam import models
|
||||||
from utilities.api import WritableNestedSerializer
|
from utilities.api import WritableNestedSerializer
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
@ -9,6 +9,7 @@ __all__ = [
|
|||||||
'NestedPrefixSerializer',
|
'NestedPrefixSerializer',
|
||||||
'NestedRIRSerializer',
|
'NestedRIRSerializer',
|
||||||
'NestedRoleSerializer',
|
'NestedRoleSerializer',
|
||||||
|
'NestedServiceSerializer',
|
||||||
'NestedVLANGroupSerializer',
|
'NestedVLANGroupSerializer',
|
||||||
'NestedVLANSerializer',
|
'NestedVLANSerializer',
|
||||||
'NestedVRFSerializer',
|
'NestedVRFSerializer',
|
||||||
@ -24,7 +25,7 @@ class NestedVRFSerializer(WritableNestedSerializer):
|
|||||||
prefix_count = serializers.IntegerField(read_only=True)
|
prefix_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VRF
|
model = models.VRF
|
||||||
fields = ['id', 'url', 'name', 'rd', 'prefix_count']
|
fields = ['id', 'url', 'name', 'rd', 'prefix_count']
|
||||||
|
|
||||||
|
|
||||||
@ -37,7 +38,7 @@ class NestedRIRSerializer(WritableNestedSerializer):
|
|||||||
aggregate_count = serializers.IntegerField(read_only=True)
|
aggregate_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = RIR
|
model = models.RIR
|
||||||
fields = ['id', 'url', 'name', 'slug', 'aggregate_count']
|
fields = ['id', 'url', 'name', 'slug', 'aggregate_count']
|
||||||
|
|
||||||
|
|
||||||
@ -45,7 +46,7 @@ class NestedAggregateSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Aggregate
|
model = models.Aggregate
|
||||||
fields = ['id', 'url', 'family', 'prefix']
|
fields = ['id', 'url', 'family', 'prefix']
|
||||||
|
|
||||||
|
|
||||||
@ -59,7 +60,7 @@ class NestedRoleSerializer(WritableNestedSerializer):
|
|||||||
vlan_count = serializers.IntegerField(read_only=True)
|
vlan_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = models.Role
|
||||||
fields = ['id', 'url', 'name', 'slug', 'prefix_count', 'vlan_count']
|
fields = ['id', 'url', 'name', 'slug', 'prefix_count', 'vlan_count']
|
||||||
|
|
||||||
|
|
||||||
@ -68,7 +69,7 @@ class NestedVLANGroupSerializer(WritableNestedSerializer):
|
|||||||
vlan_count = serializers.IntegerField(read_only=True)
|
vlan_count = serializers.IntegerField(read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VLANGroup
|
model = models.VLANGroup
|
||||||
fields = ['id', 'url', 'name', 'slug', 'vlan_count']
|
fields = ['id', 'url', 'name', 'slug', 'vlan_count']
|
||||||
|
|
||||||
|
|
||||||
@ -76,7 +77,7 @@ class NestedVLANSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = VLAN
|
model = models.VLAN
|
||||||
fields = ['id', 'url', 'vid', 'name', 'display_name']
|
fields = ['id', 'url', 'vid', 'name', 'display_name']
|
||||||
|
|
||||||
|
|
||||||
@ -88,7 +89,7 @@ class NestedPrefixSerializer(WritableNestedSerializer):
|
|||||||
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Prefix
|
model = models.Prefix
|
||||||
fields = ['id', 'url', 'family', 'prefix']
|
fields = ['id', 'url', 'family', 'prefix']
|
||||||
|
|
||||||
|
|
||||||
@ -96,10 +97,21 @@ class NestedPrefixSerializer(WritableNestedSerializer):
|
|||||||
# IP addresses
|
# IP addresses
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
class NestedIPAddressSerializer(WritableNestedSerializer):
|
class NestedIPAddressSerializer(WritableNestedSerializer):
|
||||||
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = IPAddress
|
model = models.IPAddress
|
||||||
fields = ['id', 'url', 'family', 'address']
|
fields = ['id', 'url', 'family', 'address']
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Services
|
||||||
|
#
|
||||||
|
|
||||||
|
class NestedServiceSerializer(WritableNestedSerializer):
|
||||||
|
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:service-detail')
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = models.Service
|
||||||
|
fields = ['id', 'url', 'name', 'protocol', 'port']
|
||||||
|
Reference in New Issue
Block a user