Enabled creation of device components

This commit is contained in:
Jeremy Stretch 2017-01-31 12:19:41 -05:00
parent 1fcc2b0029
commit e1cd846c9a
3 changed files with 44 additions and 11 deletions

View File

@ -330,6 +330,7 @@ class DeviceConsoleServerPortSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ConsoleServerPort
fields = ['id', 'url', 'name', 'connected_console']
read_only_fields = ['connected_console']
#
@ -351,6 +352,7 @@ class DeviceConsolePortSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = ConsolePort
fields = ['id', 'url', 'name', 'cs_port', 'connection_status']
read_only_fields = ['cs_port', 'connection_status']
#
@ -371,6 +373,7 @@ class DevicePowerOutletSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = PowerOutlet
fields = ['id', 'url', 'name', 'connected_port']
read_only_fields = ['connected_port']
#
@ -392,6 +395,7 @@ class DevicePowerPortSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = PowerPort
fields = ['id', 'url', 'name', 'power_outlet', 'connection_status']
read_only_fields = ['power_outlet', 'connection_status']
#
@ -485,6 +489,7 @@ class DeviceDeviceBaySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = DeviceBay
fields = ['id', 'url', 'name', 'installed_device']
read_only_fields = ['installed_device']
#
@ -502,7 +507,8 @@ class ModuleSerializer(serializers.ModelSerializer):
class DeviceModuleSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:module-detail')
manufacturer = NestedManufacturerSerializer()
class Meta:
model = Module
fields = ['id', 'url', 'parent', 'name', 'manufacturer', 'part_id', 'serial', 'discovered']
fields = ['id', 'url', 'name', 'manufacturer', 'part_id', 'serial', 'discovered']

View File

@ -179,13 +179,17 @@ class ConsolePortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
serializer_class = serializers.ConsolePortSerializer
class DeviceConsolePortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
class DeviceConsolePortViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceConsolePortSerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
return ConsolePort.objects.filter(device=device).select_related('cs_port')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
#
# Console Server Ports
@ -197,13 +201,17 @@ class ConsoleServerPortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyMode
serializer_class = serializers.ConsoleServerPortSerializer
class DeviceConsoleServerPortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
class DeviceConsoleServerPortViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceConsoleServerPortSerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
return ConsoleServerPort.objects.filter(device=device).select_related('connected_console')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
#
# Power Ports
@ -215,13 +223,17 @@ class PowerPortViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin,
serializer_class = serializers.PowerPortSerializer
class DevicePowerPortViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
class DevicePowerPortViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DevicePowerPortSerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
return PowerPort.objects.filter(device=device).select_related('power_outlet')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
#
# Power Outlets
@ -233,13 +245,17 @@ class PowerOutletViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
serializer_class = serializers.PowerOutletSerializer
class DevicePowerOutletViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
class DevicePowerOutletViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DevicePowerOutletSerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
return PowerOutlet.objects.filter(device=device).select_related('connected_port')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
#
# Interfaces
@ -258,7 +274,7 @@ class InterfaceViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin,
return Response(serializer.data)
class DeviceInterfaceViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
class DeviceInterfaceViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceInterfaceSerializer
filter_class = filters.InterfaceFilter
@ -267,6 +283,10 @@ class DeviceInterfaceViewSet(CreateModelMixin, ListModelMixin, WritableSerialize
return Interface.objects.order_naturally(device.device_type.interface_ordering).filter(device=device)\
.select_related('connected_as_a', 'connected_as_b', 'circuit_termination')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
#
# Device bays
@ -278,13 +298,17 @@ class DeviceBayViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin,
serializer_class = serializers.DeviceBaySerializer
class DeviceDeviceBayViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
class DeviceDeviceBayViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceDeviceBaySerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
return DeviceBay.objects.filter(device=device).select_related('installed_device')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
#
# Modules
@ -295,13 +319,17 @@ class ModuleViewSet(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, Wri
serializer_class = serializers.ModuleSerializer
class DeviceModuleViewSet(CreateModelMixin, ListModelMixin, WritableSerializerMixin, GenericViewSet):
class DeviceModuleViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
serializer_class = serializers.DeviceModuleSerializer
def get_queryset(self):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
return Module.objects.filter(device=device).select_related('device', 'manufacturer')
def perform_create(self, serializer):
device = get_object_or_404(Device, pk=self.kwargs['pk'])
serializer.save(device=device)
#
# Interface connections

View File

@ -20,9 +20,8 @@ class WritableSerializerMixin(object):
class WritableSerializer(ModelSerializer):
class Meta:
model = self.get_queryset().model
fields = '__all__'
class Meta(self.serializer_class.Meta):
pass
if self.action in WRITE_OPERATIONS:
return WritableSerializer