feat(core): add Swagger docs for CenturionModelNotes ViewSet
ref: #779 #778
This commit is contained in:
@ -1,9 +1,13 @@
|
||||
import importlib
|
||||
|
||||
from django.apps import apps
|
||||
|
||||
from drf_spectacular.utils import (
|
||||
extend_schema,
|
||||
extend_schema_view,
|
||||
# OpenApiParameter,
|
||||
# OpenApiResponse,
|
||||
# PolymorphicProxySerializer
|
||||
OpenApiParameter,
|
||||
OpenApiResponse,
|
||||
PolymorphicProxySerializer
|
||||
)
|
||||
|
||||
from api.viewsets.common import SubModelViewSet_ReWrite
|
||||
@ -12,6 +16,239 @@ from core.models.centurion_notes import CenturionModelNote
|
||||
|
||||
|
||||
|
||||
def spectacular_request_serializers( serializer_type = 'Model'):
|
||||
|
||||
serializers: dict = {}
|
||||
|
||||
|
||||
for model in apps.get_models():
|
||||
|
||||
if issubclass(model, CenturionModelNote):
|
||||
|
||||
serializer_name = 'centurionmodelnote'
|
||||
|
||||
if model != CenturionModelNote:
|
||||
|
||||
serializer_name += '_' + str(model._meta.model_name).replace('centurionmodelnote', '')
|
||||
|
||||
serializer_module = importlib.import_module(
|
||||
model._meta.app_label + '.serializers.' + str(
|
||||
serializer_name
|
||||
)
|
||||
)
|
||||
|
||||
serializers.update({
|
||||
str(model._meta.verbose_name).lower().replace(' ', '_'): getattr( \
|
||||
serializer_module, serializer_type + 'Serializer')
|
||||
})
|
||||
|
||||
return serializers
|
||||
|
||||
|
||||
|
||||
@extend_schema_view(
|
||||
create = extend_schema(
|
||||
summary = 'Add a note to a Model',
|
||||
description = '',
|
||||
parameters = [
|
||||
OpenApiParameter(
|
||||
name = 'app_label',
|
||||
description = 'Enter the note model app_label.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = str,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name = 'model_name',
|
||||
description = 'Enter the note model type.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = str,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name = 'model_id',
|
||||
description = 'Enter the note model id.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = int,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
],
|
||||
request = PolymorphicProxySerializer(
|
||||
component_name = 'CenturionNote (request)',
|
||||
serializers = spectacular_request_serializers(),
|
||||
resource_type_field_name = None,
|
||||
many = False,
|
||||
),
|
||||
responses = {
|
||||
201: OpenApiResponse(
|
||||
description = 'created',
|
||||
response = PolymorphicProxySerializer(
|
||||
component_name = 'CenturionNote (create)',
|
||||
serializers = spectacular_request_serializers( 'View' ),
|
||||
resource_type_field_name = None,
|
||||
many = False,
|
||||
)
|
||||
),
|
||||
403: OpenApiResponse(description='User is missing view permissions'),
|
||||
}
|
||||
),
|
||||
destroy = extend_schema(
|
||||
summary = 'Delete a note',
|
||||
description = '',
|
||||
responses = {
|
||||
204: OpenApiResponse(description = '', response = {} ),
|
||||
403: OpenApiResponse(description = 'User is missing delete permissions'),
|
||||
}
|
||||
),
|
||||
list = extend_schema(
|
||||
summary = 'Fetch all notes',
|
||||
description='.',
|
||||
parameters = [
|
||||
OpenApiParameter(
|
||||
name = 'app_label',
|
||||
description = 'Enter the note model app_label.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = str,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name = 'model_name',
|
||||
description = 'Enter the note model type.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = str,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name = 'model_id',
|
||||
description = 'Enter the note model id.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = int,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
],
|
||||
request = PolymorphicProxySerializer(
|
||||
component_name = 'CenturionNote (list)',
|
||||
serializers = spectacular_request_serializers(),
|
||||
resource_type_field_name = None,
|
||||
many = True,
|
||||
),
|
||||
responses = {
|
||||
200: OpenApiResponse(
|
||||
description='',
|
||||
response = PolymorphicProxySerializer(
|
||||
component_name = 'CenturionNote (View)',
|
||||
serializers = spectacular_request_serializers( 'View' ),
|
||||
resource_type_field_name = None,
|
||||
many = True,
|
||||
)
|
||||
),
|
||||
403: OpenApiResponse(description='User is missing view permissions'),
|
||||
}
|
||||
),
|
||||
retrieve = extend_schema(
|
||||
summary = 'Fetch a single note',
|
||||
description='.',
|
||||
parameters = [
|
||||
OpenApiParameter(
|
||||
name = 'app_label',
|
||||
description = 'Enter the note model app_label.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = str,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name = 'model_name',
|
||||
description = 'Enter the note model type.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = str,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name = 'model_id',
|
||||
description = 'Enter the note model id.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = int,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
],
|
||||
request = PolymorphicProxySerializer(
|
||||
component_name = 'CenturionNote (retrieve)',
|
||||
serializers = spectacular_request_serializers(),
|
||||
resource_type_field_name = None,
|
||||
many = False,
|
||||
),
|
||||
responses = {
|
||||
200: OpenApiResponse(
|
||||
description='',
|
||||
response = PolymorphicProxySerializer(
|
||||
component_name = 'CenturionNote (View)',
|
||||
serializers = spectacular_request_serializers( 'View' ),
|
||||
resource_type_field_name = None,
|
||||
many = False,
|
||||
)
|
||||
),
|
||||
403: OpenApiResponse(description='User is missing view permissions'),
|
||||
}
|
||||
),
|
||||
update = extend_schema(exclude = True),
|
||||
partial_update = extend_schema(
|
||||
summary = 'Update a note',
|
||||
description = '',
|
||||
parameters = [
|
||||
OpenApiParameter(
|
||||
name = 'app_label',
|
||||
description = 'Enter the note model app_label.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = str,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name = 'model_name',
|
||||
description = 'Enter the note model type.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = str,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
OpenApiParameter(
|
||||
name = 'model_id',
|
||||
description = 'Enter the note model id.',
|
||||
location = OpenApiParameter.PATH,
|
||||
type = int,
|
||||
required = True,
|
||||
allow_blank = False,
|
||||
),
|
||||
],
|
||||
request = PolymorphicProxySerializer(
|
||||
component_name = 'CenturionNote(update)',
|
||||
serializers = spectacular_request_serializers(),
|
||||
resource_type_field_name = None,
|
||||
many = False,
|
||||
),
|
||||
responses = {
|
||||
200: OpenApiResponse(
|
||||
description='',
|
||||
response = PolymorphicProxySerializer(
|
||||
component_name = 'CenturionNote (update)',
|
||||
serializers = spectacular_request_serializers( 'View' ),
|
||||
resource_type_field_name = None,
|
||||
many = False,
|
||||
)
|
||||
),
|
||||
403: OpenApiResponse(description='User is missing change permissions'),
|
||||
}
|
||||
),
|
||||
)
|
||||
class ViewSet(
|
||||
SubModelViewSet_ReWrite
|
||||
):
|
||||
|
Reference in New Issue
Block a user