60
app/core/viewsets/model_notes.py
Normal file
60
app/core/viewsets/model_notes.py
Normal file
@ -0,0 +1,60 @@
|
||||
from django.contrib.auth.models import ContentType
|
||||
|
||||
from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse
|
||||
|
||||
from core.serializers.model_notes import (
|
||||
ModelNotes,
|
||||
ModelNoteModelSerializer,
|
||||
ModelNoteViewSerializer
|
||||
)
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
class ModelNoteViewSet(ModelViewSet):
|
||||
"""Base class for Model Notes
|
||||
|
||||
This class is intended not to be used directly. It should be used as an
|
||||
inherited class.
|
||||
|
||||
The inherited class must include the following class objects:
|
||||
|
||||
- get_serializer_class function
|
||||
|
||||
- model attribute containing the notes model for the model to receive notes
|
||||
"""
|
||||
|
||||
filterset_fields = []
|
||||
|
||||
search_fields = [
|
||||
'content',
|
||||
]
|
||||
|
||||
|
||||
view_description = 'Model notes'
|
||||
|
||||
|
||||
def get_queryset(self):
|
||||
|
||||
if self.queryset is not None:
|
||||
|
||||
return self.queryset
|
||||
|
||||
self.queryset = self.model.objects.filter(
|
||||
content_type = ContentType.objects.get(
|
||||
app_label = str(self.model._meta.app_label).lower(),
|
||||
model = str(self.model.model.field.related_model.__name__).replace(' ', '').lower()
|
||||
).id,
|
||||
model = int(self.kwargs['model_id'])
|
||||
)
|
||||
|
||||
return self.queryset
|
@ -1,165 +0,0 @@
|
||||
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 = self.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 = self.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 = self.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 = self.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 = self.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
|
Reference in New Issue
Block a user