chore(api): Correct DRF Swagger Docs errors

ref: #248 #361 #383
This commit is contained in:
2024-11-08 21:03:38 +09:30
parent e196033821
commit cd0bcf6731
54 changed files with 622 additions and 105 deletions

View File

@ -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}),

View File

@ -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(

View File

@ -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(

View File

@ -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),

View File

@ -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),

View File

@ -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):

View File

@ -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

View File

@ -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}),

View File

@ -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}),

View File

@ -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 )

View File

@ -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(

View File

@ -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(

View File

@ -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

View File

@ -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(

View File

@ -7,7 +7,7 @@ from core.fields.icon import Icon, IconField
class BadgeField(serializers.Field):
class BadgeField(serializers.DictField):
source = ''

View File

@ -5,7 +5,7 @@ from core.classes.icon import Icon
class IconField(serializers.Field):
class IconField(serializers.DictField):
source = ''

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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:

View File

@ -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()

View File

@ -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}),

View File

@ -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')

View File

@ -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",

View File

@ -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 )

View File

@ -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

View File

@ -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'),

View File

@ -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'),

View File

@ -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'),

View File

@ -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)

View File

@ -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})

View File

@ -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(

View File

@ -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})

View File

@ -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

View File

@ -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(

View File

@ -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)

View File

@ -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)

View File

@ -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(

View File

@ -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'),

View File

@ -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'),

View File

@ -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'),

View File

@ -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

View File

@ -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}),

View File

@ -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}),

View File

@ -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

View File

@ -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}),

View File

@ -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(

View File

@ -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(

View File

@ -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(

View File

@ -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'),

View File

@ -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'),

View File

@ -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}),

View File

@ -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}),

View File

@ -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}),