diff --git a/app/access/serializers/organization.py b/app/access/serializers/organization.py index c57c3e30..6884617f 100644 --- a/app/access/serializers/organization.py +++ b/app/access/serializers/organization.py @@ -12,7 +12,7 @@ class OrganizationBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -44,7 +44,7 @@ class OrganizationModelSerializer(OrganizationBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_organization-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), diff --git a/app/access/serializers/team_user.py b/app/access/serializers/team_user.py index a910bef8..82e797e7 100644 --- a/app/access/serializers/team_user.py +++ b/app/access/serializers/team_user.py @@ -12,13 +12,13 @@ class TeamUserBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> str: return reverse( "v2:_api_v2_organization_team_user-detail", @@ -53,7 +53,7 @@ class TeamUserModelSerializer(TeamUserBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/access/serializers/teams.py b/app/access/serializers/teams.py index 9b413227..e2c9743f 100644 --- a/app/access/serializers/teams.py +++ b/app/access/serializers/teams.py @@ -14,13 +14,13 @@ class TeamBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> str: return reverse( "v2:_api_v2_organization_team-detail", @@ -57,7 +57,7 @@ class TeamModelSerializer(TeamBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/access/viewsets/team.py b/app/access/viewsets/team.py index be970363..0c3b4fc9 100644 --- a/app/access/viewsets/team.py +++ b/app/access/viewsets/team.py @@ -1,4 +1,4 @@ -from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter, OpenApiResponse from access.serializers.teams import ( Team, @@ -15,6 +15,13 @@ from api.viewsets.common import ModelViewSet create=extend_schema( summary = 'Create a team within this organization', description='', + parameters = [ + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='Allready exists', response=TeamViewSerializer), 201: OpenApiResponse(description='Created', response=TeamViewSerializer), @@ -25,6 +32,18 @@ from api.viewsets.common import ModelViewSet destroy = extend_schema( summary = 'Delete a team from this organization', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -33,6 +52,13 @@ from api.viewsets.common import ModelViewSet list = extend_schema( summary = 'Fetch all teams from this organization', description='', + parameters = [ + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TeamViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -41,6 +67,18 @@ from api.viewsets.common import ModelViewSet retrieve = extend_schema( summary = 'Fetch a single team from this organization', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TeamViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -50,6 +88,18 @@ from api.viewsets.common import ModelViewSet partial_update = extend_schema( summary = 'Update a team within this organization', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TeamViewSerializer), # 201: OpenApiResponse(description='Created', response=OrganizationViewSerializer), diff --git a/app/access/viewsets/team_user.py b/app/access/viewsets/team_user.py index e6c464d3..2d753a21 100644 --- a/app/access/viewsets/team_user.py +++ b/app/access/viewsets/team_user.py @@ -1,4 +1,4 @@ -from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter, OpenApiResponse from access.serializers.team_user import ( TeamUsers, @@ -14,6 +14,18 @@ from api.viewsets.common import ModelViewSet create=extend_schema( summary = 'Create a user within this team', description='', + parameters = [ + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'team_id', + location = 'path', + type = int + ), + ], responses = { # 200: OpenApiResponse(description='Allready exists', response=TeamUserViewSerializer), 201: OpenApiResponse(description='Created', response=TeamUserViewSerializer), @@ -24,6 +36,23 @@ from api.viewsets.common import ModelViewSet destroy = extend_schema( summary = 'Delete a user from this team', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'team_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -32,6 +61,18 @@ from api.viewsets.common import ModelViewSet list = extend_schema( summary = 'Fetch all users from this team', description='', + parameters = [ + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'team_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TeamUserViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -40,6 +81,23 @@ from api.viewsets.common import ModelViewSet retrieve = extend_schema( summary = 'Fetch a single user from this team', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'team_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TeamUserViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -49,6 +107,23 @@ from api.viewsets.common import ModelViewSet partial_update = extend_schema( summary = 'Update a user within this team', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'organization_id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'team_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TeamUserViewSerializer), # 201: OpenApiResponse(description='Created', response=OrganizationViewSerializer), diff --git a/app/api/auth.py b/app/api/auth.py index 5c8f20c9..4117a148 100644 --- a/app/api/auth.py +++ b/app/api/auth.py @@ -5,6 +5,20 @@ from rest_framework.authentication import BaseAuthentication, get_authorization_ from api.models.tokens import AuthToken +# scheme.py +from drf_spectacular.extensions import OpenApiAuthenticationExtension + +class TokenScheme(OpenApiAuthenticationExtension): + target_class = "api.auth.TokenAuthentication" + name = "TokenAuthentication" + + def get_security_definition(self, auto_schema): + return { + "type": "apiKey", + "in": "header", + "name": "Token Authorization", + "description": "Token-based authentication with required prefix 'Token'", + } class TokenAuthentication(BaseAuthentication): diff --git a/app/api/viewsets/common.py b/app/api/viewsets/common.py index faa1254e..b8613849 100644 --- a/app/api/viewsets/common.py +++ b/app/api/viewsets/common.py @@ -5,6 +5,7 @@ from rest_framework.permissions import IsAuthenticated from access.mixin import OrganizationMixin +from api.auth import TokenScheme from api.react_ui_metadata import ReactUIMetadata from api.views.mixin import OrganizationPermissionAPI diff --git a/app/app/serializers/content_type.py b/app/app/serializers/content_type.py index ae846077..67ad0fae 100644 --- a/app/app/serializers/content_type.py +++ b/app/app/serializers/content_type.py @@ -10,7 +10,7 @@ class ContentTypeBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -43,7 +43,7 @@ class ContentTypeViewSerializer(ContentTypeBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_content_type-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), diff --git a/app/app/serializers/permission.py b/app/app/serializers/permission.py index eb8d45e7..299cab34 100644 --- a/app/app/serializers/permission.py +++ b/app/app/serializers/permission.py @@ -11,7 +11,7 @@ class PermissionBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -46,7 +46,7 @@ class PermissionViewSerializer(PermissionBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_permission-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), diff --git a/app/app/serializers/user.py b/app/app/serializers/user.py index b21b3387..f4671cf1 100644 --- a/app/app/serializers/user.py +++ b/app/app/serializers/user.py @@ -9,7 +9,7 @@ class UserBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) diff --git a/app/assistance/serializers/knowledge_base.py b/app/assistance/serializers/knowledge_base.py index 4d52558e..7da60b71 100644 --- a/app/assistance/serializers/knowledge_base.py +++ b/app/assistance/serializers/knowledge_base.py @@ -17,13 +17,13 @@ class KnowledgeBaseBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> str: return reverse( "v2:_api_v2_knowledge_base-detail", @@ -59,7 +59,7 @@ class KnowledgeBaseModelSerializer(KnowledgeBaseBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/assistance/serializers/knowledge_base_category.py b/app/assistance/serializers/knowledge_base_category.py index ab5b976d..9193c721 100644 --- a/app/assistance/serializers/knowledge_base_category.py +++ b/app/assistance/serializers/knowledge_base_category.py @@ -18,13 +18,13 @@ class KnowledgeBaseCategoryBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> str: return reverse( "v2:_api_v2_knowledge_base_category-detail", @@ -60,7 +60,7 @@ class KnowledgeBaseCategoryModelSerializer(KnowledgeBaseCategoryBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/config_management/serializers/config_group.py b/app/config_management/serializers/config_group.py index 529501d4..9e02cba5 100644 --- a/app/config_management/serializers/config_group.py +++ b/app/config_management/serializers/config_group.py @@ -13,13 +13,13 @@ class ConfigGroupBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> str: request = None @@ -57,7 +57,7 @@ class ConfigGroupModelSerializer(ConfigGroupBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: request = None diff --git a/app/config_management/serializers/config_group_software.py b/app/config_management/serializers/config_group_software.py index f2c6b7d5..bb493772 100644 --- a/app/config_management/serializers/config_group_software.py +++ b/app/config_management/serializers/config_group_software.py @@ -17,13 +17,13 @@ class ConfigGroupSoftwareBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> str: return reverse( "v2:_api_v2_config_group-detail", @@ -60,7 +60,7 @@ class ConfigGroupSoftwareModelSerializer(ConfigGroupSoftwareBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/core/fields/badge.py b/app/core/fields/badge.py index 6b8c5872..c1ce6cff 100644 --- a/app/core/fields/badge.py +++ b/app/core/fields/badge.py @@ -7,7 +7,7 @@ from core.fields.icon import Icon, IconField -class BadgeField(serializers.Field): +class BadgeField(serializers.DictField): source = '' diff --git a/app/core/fields/icon.py b/app/core/fields/icon.py index 1e561714..1544b07b 100644 --- a/app/core/fields/icon.py +++ b/app/core/fields/icon.py @@ -5,7 +5,7 @@ from core.classes.icon import Icon -class IconField(serializers.Field): +class IconField(serializers.DictField): source = '' diff --git a/app/core/serializers/celery_log.py b/app/core/serializers/celery_log.py index e82d0e30..492937b4 100644 --- a/app/core/serializers/celery_log.py +++ b/app/core/serializers/celery_log.py @@ -15,7 +15,7 @@ class TaskResultBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -46,7 +46,7 @@ class TaskResultModelSerializer(TaskResultBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_celery_log-detail", diff --git a/app/core/serializers/history.py b/app/core/serializers/history.py index deaca3d1..c169c7e9 100644 --- a/app/core/serializers/history.py +++ b/app/core/serializers/history.py @@ -11,13 +11,13 @@ class HistoryBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('get_my_url') - def get_my_url(self, item): + def get_my_url(self, item) -> str: return reverse("v2:_api_v2_model_history-detail", request=self._context['view'].request, @@ -55,7 +55,7 @@ class HistoryModelSerializer(HistoryBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_model_history-detail", diff --git a/app/core/serializers/manufacturer.py b/app/core/serializers/manufacturer.py index 29dab0ff..5cfdc1eb 100644 --- a/app/core/serializers/manufacturer.py +++ b/app/core/serializers/manufacturer.py @@ -13,7 +13,7 @@ class ManufacturerBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -44,7 +44,7 @@ class ManufacturerModelSerializer(ManufacturerBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_manufacturer-detail", diff --git a/app/core/serializers/notes.py b/app/core/serializers/notes.py index dcfa3426..8624a3ec 100644 --- a/app/core/serializers/notes.py +++ b/app/core/serializers/notes.py @@ -21,7 +21,7 @@ class NoteBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -54,7 +54,7 @@ class NoteModelSerializer(NoteBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: if 'group_id' in self._kwargs['context']['view'].kwargs: diff --git a/app/core/serializers/ticket.py b/app/core/serializers/ticket.py index 18b5321f..5174c27c 100644 --- a/app/core/serializers/ticket.py +++ b/app/core/serializers/ticket.py @@ -23,14 +23,14 @@ class TicketBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('my_url') - def my_url(self, item): + def my_url(self, item) -> str: context = self.context.copy() @@ -82,7 +82,7 @@ class TicketModelSerializer(TicketBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: context = self.context.copy() diff --git a/app/core/serializers/ticket_category.py b/app/core/serializers/ticket_category.py index ccc93b06..ea8b7d94 100644 --- a/app/core/serializers/ticket_category.py +++ b/app/core/serializers/ticket_category.py @@ -11,7 +11,7 @@ class TicketCategoryBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -44,7 +44,7 @@ class TicketCategoryModelSerializer(TicketCategoryBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("API:_api_v2_ticket_category-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), diff --git a/app/core/serializers/ticket_comment.py b/app/core/serializers/ticket_comment.py index 11a9d6d9..4c31902e 100644 --- a/app/core/serializers/ticket_comment.py +++ b/app/core/serializers/ticket_comment.py @@ -19,7 +19,7 @@ class TicketCommentBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -61,7 +61,7 @@ class TicketCommentModelSerializer( _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: request = self.context.get('request') diff --git a/app/core/serializers/ticket_comment_category.py b/app/core/serializers/ticket_comment_category.py index 33a950e5..b1924c15 100644 --- a/app/core/serializers/ticket_comment_category.py +++ b/app/core/serializers/ticket_comment_category.py @@ -13,7 +13,7 @@ class TicketCommentCategoryBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -44,7 +44,7 @@ class TicketCommentCategoryModelSerializer(TicketCommentCategoryBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_ticket_comment_category-detail", diff --git a/app/core/serializers/ticket_linked_item.py b/app/core/serializers/ticket_linked_item.py index 33aa8696..9684949f 100644 --- a/app/core/serializers/ticket_linked_item.py +++ b/app/core/serializers/ticket_linked_item.py @@ -16,14 +16,14 @@ class TicketLinkedItemBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('my_url') - def my_url(self, item): + def my_url(self, item) -> str: return item.get_url( request = self._context['view'].request ) @@ -54,7 +54,7 @@ class TicketLinkedItemModelSerializer(TicketLinkedItemBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': item.get_url( request = self._context['view'].request ) diff --git a/app/core/serializers/ticket_related.py b/app/core/serializers/ticket_related.py index 76c0a192..846b7d80 100644 --- a/app/core/serializers/ticket_related.py +++ b/app/core/serializers/ticket_related.py @@ -15,7 +15,7 @@ class RelatedTicketBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -64,7 +64,7 @@ class RelatedTicketModelSerializer(RelatedTicketBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: request = None diff --git a/app/core/viewsets/related_ticket.py b/app/core/viewsets/related_ticket.py index 9e597c11..f4149b28 100644 --- a/app/core/viewsets/related_ticket.py +++ b/app/core/viewsets/related_ticket.py @@ -1,6 +1,6 @@ from django.db.models import Q -from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter, OpenApiResponse from access.mixin import OrganizationMixin @@ -18,6 +18,13 @@ from core.serializers.ticket_related import ( destroy = extend_schema( summary = 'Delete a related ticket', description = '', + parameters = [ + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -26,6 +33,13 @@ from core.serializers.ticket_related import ( list = extend_schema( summary = 'Fetch all related tickets', description='', + parameters = [ + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=RelatedTicketViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -34,6 +48,18 @@ from core.serializers.ticket_related import ( retrieve = extend_schema( summary = 'Fetch a related ticket', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=RelatedTicketViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), diff --git a/app/core/viewsets/ticket_comment.py b/app/core/viewsets/ticket_comment.py index 8fbc9320..f640aac9 100644 --- a/app/core/viewsets/ticket_comment.py +++ b/app/core/viewsets/ticket_comment.py @@ -1,7 +1,7 @@ from django.db.models import Q from django.shortcuts import get_object_or_404 -from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse, PolymorphicProxySerializer +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter, OpenApiResponse, PolymorphicProxySerializer from rest_framework import generics, viewsets from rest_framework.response import Response @@ -46,6 +46,13 @@ from settings.models.user_settings import UserSettings Responses from the API are the same for all users when the request returns status `HTTP/20x`. """, + parameters = [ + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], request = PolymorphicProxySerializer( component_name = 'TicketComment', serializers=[ @@ -74,6 +81,18 @@ Responses from the API are the same for all users when the request returns destroy = extend_schema( summary = 'Delete a ticket comment', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -82,6 +101,13 @@ Responses from the API are the same for all users when the request returns list = extend_schema( summary = 'Fetch all ticket comments', description='', + parameters = [ + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TicketCommentViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -90,6 +116,18 @@ Responses from the API are the same for all users when the request returns retrieve = extend_schema( summary = 'Fetch a single ticket comment', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TicketCommentViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -99,6 +137,18 @@ Responses from the API are the same for all users when the request returns partial_update = extend_schema( summary = 'Update a ticket comment', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TicketCommentViewSerializer), 403: OpenApiResponse(description='User is missing change permissions'), diff --git a/app/core/viewsets/ticket_linked_item.py b/app/core/viewsets/ticket_linked_item.py index 8d6dc107..686d7c24 100644 --- a/app/core/viewsets/ticket_linked_item.py +++ b/app/core/viewsets/ticket_linked_item.py @@ -1,4 +1,4 @@ -from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter, OpenApiResponse from core.serializers.ticket_linked_item import ( TicketLinkedItem, @@ -15,6 +15,13 @@ from api.viewsets.common import ModelViewSet create=extend_schema( summary = 'Create a Ticket Linked Item', description='', + parameters = [ + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 201: OpenApiResponse(description='Created', response=TicketLinkedItemViewSerializer), 403: OpenApiResponse(description='User is missing add permissions'), @@ -23,6 +30,18 @@ from api.viewsets.common import ModelViewSet destroy = extend_schema( summary = 'Delete a Ticket Linked Item', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -31,6 +50,13 @@ from api.viewsets.common import ModelViewSet list = extend_schema( summary = 'Fetch all Ticket Linked Items', description='', + parameters = [ + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TicketLinkedItemViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -39,6 +65,18 @@ from api.viewsets.common import ModelViewSet retrieve = extend_schema( summary = 'Fetch a single Ticket Linked Item', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TicketLinkedItemViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -48,6 +86,18 @@ from api.viewsets.common import ModelViewSet partial_update = extend_schema( summary = 'Update a Ticket Linked Item', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'ticket_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=TicketLinkedItemViewSerializer), 403: OpenApiResponse(description='User is missing change permissions'), diff --git a/app/itam/serializers/device.py b/app/itam/serializers/device.py index 445e9e68..3bfa0821 100644 --- a/app/itam/serializers/device.py +++ b/app/itam/serializers/device.py @@ -22,7 +22,7 @@ class DeviceBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -52,7 +52,7 @@ class DeviceModelSerializer(DeviceBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: request = None @@ -108,7 +108,7 @@ class DeviceModelSerializer(DeviceBaseSerializer): rendered_config = serializers.JSONField(source='get_configuration', read_only=True) - def get_rendered_config(self, item): + def get_rendered_config(self, item) -> dict: return item.get_configuration(0) diff --git a/app/itam/serializers/device_model.py b/app/itam/serializers/device_model.py index 6b8e4e8f..a4cb649e 100644 --- a/app/itam/serializers/device_model.py +++ b/app/itam/serializers/device_model.py @@ -14,7 +14,7 @@ class DeviceModelBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -47,7 +47,7 @@ class DeviceModelModelSerializer(DeviceModelBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, obj): + def get_url(self, obj) -> dict: return { '_self': reverse("v2:_api_v2_device_model-detail", request=self._context['view'].request, kwargs={'pk': obj.pk}) diff --git a/app/itam/serializers/device_software.py b/app/itam/serializers/device_software.py index 73cb536a..ebcaeeb4 100644 --- a/app/itam/serializers/device_software.py +++ b/app/itam/serializers/device_software.py @@ -20,7 +20,7 @@ class DeviceSoftwareBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -54,7 +54,7 @@ class DeviceSoftwareModelSerializer(DeviceSoftwareBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, obj): + def get_url(self, obj) -> dict: return { '_self': reverse( diff --git a/app/itam/serializers/device_type.py b/app/itam/serializers/device_type.py index 2b5a755c..abb02bdb 100644 --- a/app/itam/serializers/device_type.py +++ b/app/itam/serializers/device_type.py @@ -11,7 +11,7 @@ class DeviceTypeBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -43,7 +43,7 @@ class DeviceTypeModelSerializer(DeviceTypeBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, obj): + def get_url(self, obj) -> dict: return { '_self': reverse("v2:_api_v2_device_type-detail", request=self._context['view'].request, kwargs={'pk': obj.pk}) diff --git a/app/itam/serializers/operating_system.py b/app/itam/serializers/operating_system.py index 3f540ccd..1b3b3fe8 100644 --- a/app/itam/serializers/operating_system.py +++ b/app/itam/serializers/operating_system.py @@ -14,7 +14,7 @@ class OperatingSystemBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -48,7 +48,7 @@ class OperatingSystemModelSerializer(OperatingSystemBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: request = None diff --git a/app/itam/serializers/operating_system_version.py b/app/itam/serializers/operating_system_version.py index ce9e4cbd..62adb469 100644 --- a/app/itam/serializers/operating_system_version.py +++ b/app/itam/serializers/operating_system_version.py @@ -15,14 +15,14 @@ class OperatingSystemVersionBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('my_url') - def my_url(self, item): + def my_url(self, item) -> str: return reverse( "v2:_api_v2_operating_system_version-detail", @@ -60,7 +60,7 @@ class OperatingSystemVersionModelSerializer(OperatingSystemVersionBaseSerializer _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/itam/serializers/software.py b/app/itam/serializers/software.py index 9caf0c94..f409d9c3 100644 --- a/app/itam/serializers/software.py +++ b/app/itam/serializers/software.py @@ -14,7 +14,7 @@ class SoftwareBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -46,7 +46,7 @@ class SoftwareModelSerializer(SoftwareBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: request = None @@ -88,7 +88,7 @@ class SoftwareModelSerializer(SoftwareBaseSerializer): } - def get_rendered_config(self, item): + def get_rendered_config(self, item) -> dict: return item.get_configuration(0) diff --git a/app/itam/serializers/software_category.py b/app/itam/serializers/software_category.py index 747e87b0..b33c5265 100644 --- a/app/itam/serializers/software_category.py +++ b/app/itam/serializers/software_category.py @@ -13,7 +13,7 @@ class SoftwareCategoryBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -45,7 +45,7 @@ class SoftwareCategoryModelSerializer(SoftwareCategoryBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_software_category-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), @@ -54,7 +54,7 @@ class SoftwareCategoryModelSerializer(SoftwareCategoryBaseSerializer): } - def get_rendered_config(self, item): + def get_rendered_config(self, item) -> dict: return item.get_configuration(0) diff --git a/app/itam/serializers/software_version.py b/app/itam/serializers/software_version.py index f5514acd..ca48b57a 100644 --- a/app/itam/serializers/software_version.py +++ b/app/itam/serializers/software_version.py @@ -12,14 +12,14 @@ class SoftwareVersionBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('my_url') - def my_url(self, item): + def my_url(self, item) -> str: return reverse( "v2:_api_v2_software_version-detail", @@ -54,7 +54,7 @@ class SoftwareVersionModelSerializer(SoftwareVersionBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/itam/viewsets/device_software.py b/app/itam/viewsets/device_software.py index ae74f0af..9a99aabe 100644 --- a/app/itam/viewsets/device_software.py +++ b/app/itam/viewsets/device_software.py @@ -4,7 +4,7 @@ from rest_framework import filters from django.db.models import Q from django.shortcuts import get_object_or_404 -from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter, OpenApiResponse from rest_framework.fields import empty from rest_framework import generics, viewsets @@ -29,6 +29,13 @@ from itam.serializers.device_software import ( create=extend_schema( summary = 'Add device software', description='', + parameters = [ + OpenApiParameter( + name = 'device_id', + location = 'path', + type = int + ), + ], responses = { 201: OpenApiResponse(description='Device created', response=DeviceSoftwareModelSerializer), 400: OpenApiResponse(description='Validation failed.'), @@ -38,6 +45,18 @@ from itam.serializers.device_software import ( destroy = extend_schema( summary = 'Delete a device software', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'device_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -46,6 +65,13 @@ from itam.serializers.device_software import ( list = extend_schema( summary = 'Fetch all device software', description='', + parameters = [ + OpenApiParameter( + name = 'device_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=DeviceSoftwareModelSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -54,6 +80,18 @@ from itam.serializers.device_software import ( retrieve = extend_schema( summary = 'Fetch a single device software', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'device_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=DeviceSoftwareModelSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -63,6 +101,18 @@ from itam.serializers.device_software import ( partial_update = extend_schema( summary = 'Update a device software', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'device_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=DeviceSoftwareModelSerializer), 403: OpenApiResponse(description='User is missing change permissions'), diff --git a/app/itam/viewsets/operating_system_version.py b/app/itam/viewsets/operating_system_version.py index 7202a00e..fc8d3bb0 100644 --- a/app/itam/viewsets/operating_system_version.py +++ b/app/itam/viewsets/operating_system_version.py @@ -1,4 +1,4 @@ -from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter, OpenApiResponse from itam.serializers.operating_system_version import ( OperatingSystemVersion, @@ -13,6 +13,13 @@ from api.viewsets.common import ModelViewSet create=extend_schema( summary = 'Create an operating system version', description='', + parameters = [ + OpenApiParameter( + name = 'operating_system_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='Software allready exists', response=OperatingSystemVersionViewSerializer), 201: OpenApiResponse(description='Software created', response=OperatingSystemVersionViewSerializer), @@ -23,6 +30,18 @@ from api.viewsets.common import ModelViewSet destroy = extend_schema( summary = 'Delete an operating system version', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'operating_system_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -31,6 +50,13 @@ from api.viewsets.common import ModelViewSet list = extend_schema( summary = 'Fetch all operating system versions', description='', + parameters = [ + OpenApiParameter( + name = 'operating_system_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=OperatingSystemVersionViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -39,6 +65,18 @@ from api.viewsets.common import ModelViewSet retrieve = extend_schema( summary = 'Fetch a single operating system version', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'operating_system_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=OperatingSystemVersionViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -48,6 +86,18 @@ from api.viewsets.common import ModelViewSet partial_update = extend_schema( summary = 'Update an operating system version', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'operating_system_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=OperatingSystemVersionViewSerializer), 403: OpenApiResponse(description='User is missing change permissions'), diff --git a/app/itam/viewsets/software_version.py b/app/itam/viewsets/software_version.py index baa92fc2..aec358b5 100644 --- a/app/itam/viewsets/software_version.py +++ b/app/itam/viewsets/software_version.py @@ -1,4 +1,4 @@ -from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter, OpenApiResponse from itam.serializers.software_version import ( SoftwareVersion, @@ -13,6 +13,13 @@ from api.viewsets.common import ModelViewSet create=extend_schema( summary = 'Create a software version', description='', + parameters = [ + OpenApiParameter( + name = 'software_id', + location = 'path', + type = int + ), + ], responses = { 201: OpenApiResponse(description='Software created', response=SoftwareVersionViewSerializer), 400: OpenApiResponse(description='Validation failed.'), @@ -22,6 +29,18 @@ from api.viewsets.common import ModelViewSet destroy = extend_schema( summary = 'Delete a software version', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'software_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -30,6 +49,13 @@ from api.viewsets.common import ModelViewSet list = extend_schema( summary = 'Fetch all software versions', description='', + parameters = [ + OpenApiParameter( + name = 'software_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=SoftwareVersionViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -38,6 +64,18 @@ from api.viewsets.common import ModelViewSet retrieve = extend_schema( summary = 'Fetch a single software version', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'software_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=SoftwareVersionViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -47,6 +85,18 @@ from api.viewsets.common import ModelViewSet partial_update = extend_schema( summary = 'Update a software version', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'software_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=SoftwareVersionViewSerializer), 403: OpenApiResponse(description='User is missing change permissions'), diff --git a/app/itim/serializers/cluster.py b/app/itim/serializers/cluster.py index 7ff2f8a3..af63c507 100644 --- a/app/itim/serializers/cluster.py +++ b/app/itim/serializers/cluster.py @@ -14,7 +14,7 @@ class ClusterBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -45,7 +45,7 @@ class ClusterModelSerializer(ClusterBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: request = None diff --git a/app/itim/serializers/cluster_type.py b/app/itim/serializers/cluster_type.py index 524a3fac..f834d1f0 100644 --- a/app/itim/serializers/cluster_type.py +++ b/app/itim/serializers/cluster_type.py @@ -13,7 +13,7 @@ class ClusterTypeBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -44,7 +44,7 @@ class ClusterTypeModelSerializer(ClusterTypeBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_cluster_type-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), diff --git a/app/itim/serializers/port.py b/app/itim/serializers/port.py index 28eb9bd2..081c758d 100644 --- a/app/itim/serializers/port.py +++ b/app/itim/serializers/port.py @@ -13,7 +13,7 @@ class PortBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -47,7 +47,7 @@ class PortModelSerializer(PortBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_port-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), diff --git a/app/itim/serializers/service.py b/app/itim/serializers/service.py index ded8e8f4..7e5bff7c 100644 --- a/app/itim/serializers/service.py +++ b/app/itim/serializers/service.py @@ -16,7 +16,7 @@ class ServiceBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -47,7 +47,7 @@ class ServiceModelSerializer(ServiceBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: request = None diff --git a/app/project_management/serializers/project.py b/app/project_management/serializers/project.py index 46362880..16cf885a 100644 --- a/app/project_management/serializers/project.py +++ b/app/project_management/serializers/project.py @@ -20,7 +20,7 @@ class ProjectBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -52,7 +52,7 @@ class ProjectModelSerializer(ProjectBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_project-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), diff --git a/app/project_management/serializers/project_milestone.py b/app/project_management/serializers/project_milestone.py index 369aabd3..560405e3 100644 --- a/app/project_management/serializers/project_milestone.py +++ b/app/project_management/serializers/project_milestone.py @@ -13,13 +13,13 @@ class ProjectMilestoneBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) url = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> str: context = self.context.copy() @@ -56,7 +56,7 @@ class ProjectMilestoneModelSerializer(ProjectMilestoneBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/project_management/serializers/project_states.py b/app/project_management/serializers/project_states.py index 52a657aa..6e7ad2e3 100644 --- a/app/project_management/serializers/project_states.py +++ b/app/project_management/serializers/project_states.py @@ -14,7 +14,7 @@ class ProjectStateBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -47,7 +47,7 @@ class ProjectStateModelSerializer(ProjectStateBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/project_management/serializers/project_type.py b/app/project_management/serializers/project_type.py index a8e79b04..74ea6dbd 100644 --- a/app/project_management/serializers/project_type.py +++ b/app/project_management/serializers/project_type.py @@ -14,7 +14,7 @@ class ProjectTypeBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -46,7 +46,7 @@ class ProjectTypeModelSerializer(ProjectTypeBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse( diff --git a/app/project_management/viewsets/project_milestone.py b/app/project_management/viewsets/project_milestone.py index 6b078ef6..ad05845b 100644 --- a/app/project_management/viewsets/project_milestone.py +++ b/app/project_management/viewsets/project_milestone.py @@ -1,4 +1,4 @@ -from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiResponse +from drf_spectacular.utils import extend_schema, extend_schema_view, OpenApiParameter, OpenApiResponse from api.viewsets.common import ModelViewSet @@ -14,6 +14,13 @@ from project_management.serializers.project_milestone import ( create=extend_schema( summary = 'Create a cluster', description='', + parameters = [ + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], responses = { 201: OpenApiResponse(description='Device created', response=ProjectMilestoneViewSerializer), 400: OpenApiResponse(description='Validation failed.'), @@ -23,6 +30,18 @@ from project_management.serializers.project_milestone import ( destroy = extend_schema( summary = 'Delete a cluster', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -31,6 +50,13 @@ from project_management.serializers.project_milestone import ( list = extend_schema( summary = 'Fetch all clusters', description='', + parameters = [ + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=ProjectMilestoneViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -39,6 +65,18 @@ from project_management.serializers.project_milestone import ( retrieve = extend_schema( summary = 'Fetch a single cluster', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=ProjectMilestoneViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -48,6 +86,18 @@ from project_management.serializers.project_milestone import ( partial_update = extend_schema( summary = 'Update a cluster', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=ProjectMilestoneViewSerializer), 403: OpenApiResponse(description='User is missing change permissions'), diff --git a/app/project_management/viewsets/project_task.py b/app/project_management/viewsets/project_task.py index 9e94f939..016f08d6 100644 --- a/app/project_management/viewsets/project_task.py +++ b/app/project_management/viewsets/project_task.py @@ -1,6 +1,7 @@ from drf_spectacular.utils import ( extend_schema, extend_schema_view, + OpenApiParameter, OpenApiResponse, PolymorphicProxySerializer, ) @@ -21,6 +22,13 @@ from core.viewsets.ticket import TicketViewSet create=extend_schema( summary = 'Create a Project Task', description='', + parameters = [ + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], request = PolymorphicProxySerializer( component_name = 'ProjectTask', serializers=[ @@ -40,6 +48,18 @@ from core.viewsets.ticket import TicketViewSet destroy = extend_schema( summary = 'Delete a Project Task', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], responses = { 204: OpenApiResponse(description=''), 403: OpenApiResponse(description='User is missing delete permissions'), @@ -48,6 +68,13 @@ from core.viewsets.ticket import TicketViewSet list = extend_schema( summary = 'Fetch all Project Task', description='', + parameters = [ + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=ProjectTaskTicketViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -56,6 +83,18 @@ from core.viewsets.ticket import TicketViewSet retrieve = extend_schema( summary = 'Fetch a Project Task', description='', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=ProjectTaskTicketViewSerializer), 403: OpenApiResponse(description='User is missing view permissions'), @@ -65,6 +104,18 @@ from core.viewsets.ticket import TicketViewSet partial_update = extend_schema( summary = 'Update a Project Task', description = '', + parameters = [ + OpenApiParameter( + name = 'id', + location = 'path', + type = int + ), + OpenApiParameter( + name = 'project_id', + location = 'path', + type = int + ), + ], responses = { 200: OpenApiResponse(description='', response=ProjectTaskTicketViewSerializer), 403: OpenApiResponse(description='User is missing change permissions'), diff --git a/app/settings/serializers/app_settings.py b/app/settings/serializers/app_settings.py index b55500e8..c43b8927 100644 --- a/app/settings/serializers/app_settings.py +++ b/app/settings/serializers/app_settings.py @@ -12,7 +12,7 @@ class AppSettingsBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -44,7 +44,7 @@ class AppSettingsModelSerializer(AppSettingsBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_app_settings-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), diff --git a/app/settings/serializers/external_links.py b/app/settings/serializers/external_links.py index 2039a8db..c63d786a 100644 --- a/app/settings/serializers/external_links.py +++ b/app/settings/serializers/external_links.py @@ -12,7 +12,7 @@ class ExternalLinkBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -44,7 +44,7 @@ class ExternalLinkModelSerializer(ExternalLinkBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_external_link-detail", request=self._context['view'].request, kwargs={'pk': item.pk}), diff --git a/app/settings/serializers/user_settings.py b/app/settings/serializers/user_settings.py index 5536ee3c..fb4ded7d 100644 --- a/app/settings/serializers/user_settings.py +++ b/app/settings/serializers/user_settings.py @@ -12,7 +12,7 @@ class UserSettingsBaseSerializer(serializers.ModelSerializer): display_name = serializers.SerializerMethodField('get_display_name') - def get_display_name(self, item): + def get_display_name(self, item) -> str: return str( item ) @@ -44,7 +44,7 @@ class UserSettingsModelSerializer(UserSettingsBaseSerializer): _urls = serializers.SerializerMethodField('get_url') - def get_url(self, item): + def get_url(self, item) -> dict: return { '_self': reverse("v2:_api_v2_user_settings-detail", request=self._context['view'].request, kwargs={'pk': item.pk}),