166 lines
3.9 KiB
Python
166 lines
3.9 KiB
Python
from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse
|
|
|
|
from core.serializers.notes import (
|
|
Notes,
|
|
NoteModelSerializer,
|
|
NoteViewSerializer
|
|
)
|
|
|
|
from api.viewsets.common import ModelViewSet
|
|
|
|
from config_management.models.groups import ConfigGroups
|
|
|
|
from itam.models.device import Device
|
|
from itam.models.operating_system import OperatingSystem
|
|
from itam.models.software import Software
|
|
|
|
from itim.models.services import Service
|
|
|
|
|
|
|
|
@extend_schema_view(
|
|
create=extend_schema(
|
|
summary = 'Create a note',
|
|
description = '',
|
|
responses = {
|
|
201: OpenApiResponse(description='created', response=NoteViewSerializer),
|
|
400: OpenApiResponse(description='Validation failed.'),
|
|
403: OpenApiResponse(description='User is missing create permissions'),
|
|
}
|
|
),
|
|
destroy = extend_schema(
|
|
summary = 'Delete a note',
|
|
description = ''
|
|
),
|
|
list = extend_schema(
|
|
summary = 'Fetch all notes',
|
|
description='',
|
|
),
|
|
retrieve = extend_schema(
|
|
summary = 'Fetch a single note',
|
|
description='',
|
|
),
|
|
update = extend_schema(exclude = True),
|
|
partial_update = extend_schema(
|
|
summary = 'Update a note',
|
|
description = ''
|
|
),
|
|
)
|
|
class ViewSet(ModelViewSet):
|
|
|
|
filterset_fields = [
|
|
'config_group',
|
|
'device',
|
|
]
|
|
|
|
search_fields = [
|
|
'note',
|
|
]
|
|
|
|
model = Notes
|
|
|
|
view_description = 'Model notes'
|
|
|
|
|
|
def get_serializer_class(self):
|
|
|
|
if self.serializer_class is not None:
|
|
|
|
return self.serializer_class
|
|
|
|
|
|
if (
|
|
self.action == 'list'
|
|
or self.action == 'retrieve'
|
|
):
|
|
|
|
self.serializer_class = ViewSerializer
|
|
|
|
|
|
else:
|
|
|
|
self.serializer_class = ModelSerializer
|
|
|
|
return self.serializer_class
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
if self.queryset is not None:
|
|
|
|
return self.queryset
|
|
|
|
self.queryset = super().get_queryset()
|
|
|
|
if 'device_id' in self.kwargs:
|
|
|
|
self.queryset = queryset.filter(device_id=self.kwargs['device_id']).order_by('-created')
|
|
|
|
self.parent_model = Device
|
|
|
|
self.parent_model_pk_kwarg = 'device_id'
|
|
|
|
elif 'config_group_id' in self.kwargs:
|
|
|
|
self.queryset = queryset.filter(config_group_id=self.kwargs['config_group_id']).order_by('-created')
|
|
|
|
self.parent_model = ConfigGroups
|
|
|
|
self.parent_model_pk_kwarg = 'config_group_id'
|
|
|
|
elif 'operating_system_id' in self.kwargs:
|
|
|
|
self.queryset = queryset.filter(operatingsystem_id=self.kwargs['operating_system_id']).order_by('-created')
|
|
|
|
self.parent_model = OperatingSystem
|
|
|
|
self.parent_model_pk_kwarg = 'operating_system_id'
|
|
|
|
elif 'service_id' in self.kwargs:
|
|
|
|
self.queryset = queryset.filter(service_id=self.kwargs['service_id']).order_by('-created')
|
|
|
|
self.parent_model = Service
|
|
|
|
self.parent_model_pk_kwarg = 'service_id'
|
|
|
|
elif 'software_id' in self.kwargs:
|
|
|
|
self.queryset = queryset.filter(software_id=self.kwargs['software_id']).order_by('-created')
|
|
|
|
self.parent_model = Software
|
|
|
|
self.parent_model_pk_kwarg = 'software_id'
|
|
|
|
|
|
return self.queryset
|
|
|
|
|
|
def get_view_name(self):
|
|
if self.detail:
|
|
return "Note"
|
|
|
|
return 'Notes'
|
|
|
|
|
|
def get_serializer_class(self):
|
|
|
|
if self.serializer_class:
|
|
|
|
return self.serializer_class
|
|
|
|
|
|
if (
|
|
self.action == 'list'
|
|
or self.action == 'retrieve'
|
|
):
|
|
|
|
self.serializer_class = globals()[str( self.model._meta.verbose_name).replace(' ' , '') + 'ViewSerializer']
|
|
|
|
else:
|
|
|
|
self.serializer_class = globals()[str( self.model._meta.verbose_name).replace(' ' , '') + 'ModelSerializer']
|
|
|
|
|
|
return self.serializer_class
|