# Refactoring APITokenView

* refactors API Token view
* updates tests
This commit is contained in:
mpeltriaux 2025-11-05 10:37:27 +01:00
parent f122778232
commit cf6f188ef3
4 changed files with 18 additions and 21 deletions

View File

@ -22,6 +22,7 @@ class NewAPITokenModalForm(BaseModalForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.template = "modal/modal_form.html" self.template = "modal/modal_form.html"
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.instance = self.user
self.form_title = _("Generate API Token") self.form_title = _("Generate API Token")
self.form_caption = "" self.form_caption = ""

View File

@ -260,7 +260,7 @@ class ApiTokenFormTestCase(BaseTestCase):
} }
self.assertIsNone(self.user.api_token) self.assertIsNone(self.user.api_token)
form = NewAPITokenModalForm(request.POST, instance=self.user) form = NewAPITokenModalForm(request.POST, request=request)
form.save() form.save()
self.user.refresh_from_db() self.user.refresh_from_db()
token = self.user.api_token token = self.user.api_token

View File

@ -9,7 +9,7 @@ from django.urls import path
from user.autocomplete.share import ShareUserAutocomplete, ShareTeamAutocomplete from user.autocomplete.share import ShareUserAutocomplete, ShareTeamAutocomplete
from user.autocomplete.team import TeamAdminAutocomplete from user.autocomplete.team import TeamAdminAutocomplete
from user.views.api_token import APITokenView, new_api_token_view from user.views.api_token import APITokenView, NewAPITokenView
from user.views.propagate import PropagateUserView from user.views.propagate import PropagateUserView
from user.views.teams import TeamIndexView, NewTeamView, TeamDetailModalView, EditTeamView, RemoveTeamView, \ from user.views.teams import TeamIndexView, NewTeamView, TeamDetailModalView, EditTeamView, RemoveTeamView, \
LeaveTeamView LeaveTeamView
@ -21,7 +21,7 @@ urlpatterns = [
path("propagate/", PropagateUserView.as_view(), name="propagate"), path("propagate/", PropagateUserView.as_view(), name="propagate"),
path("notifications/", NotificationsView.as_view(), name="notifications"), path("notifications/", NotificationsView.as_view(), name="notifications"),
path("token/api", APITokenView.as_view(), name="api-token"), path("token/api", APITokenView.as_view(), name="api-token"),
path("token/api/new", new_api_token_view, name="api-token-new"), path("token/api/new", NewAPITokenView.as_view(), name="api-token-new"),
path("contact/<id>", ContactView.as_view(), name="contact"), path("contact/<id>", ContactView.as_view(), name="contact"),
path("team/", TeamIndexView.as_view(), name="team-index"), path("team/", TeamIndexView.as_view(), name="team-index"),
path("team/new", NewTeamView.as_view(), name="team-new"), path("team/new", NewTeamView.as_view(), name="team-new"),

View File

@ -4,9 +4,9 @@ Created on: 08.01.25
""" """
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.http import HttpRequest from django.http import HttpRequest
from django.shortcuts import render from django.shortcuts import render
from django.urls import reverse
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.views import View from django.views import View
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
@ -15,7 +15,9 @@ from konova.contexts import BaseContext
from konova.decorators import default_group_required from konova.decorators import default_group_required
from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER
from konova.utils.message_templates import NEW_API_TOKEN_GENERATED from konova.utils.message_templates import NEW_API_TOKEN_GENERATED
from konova.views.base import BaseModalFormView
from user.forms.modals.api_token import NewAPITokenModalForm from user.forms.modals.api_token import NewAPITokenModalForm
from user.models import User
class APITokenView(View): class APITokenView(View):
@ -36,22 +38,16 @@ class APITokenView(View):
context = BaseContext(request, context).context context = BaseContext(request, context).context
return render(request, template, context) return render(request, template, context)
class NewAPITokenView(LoginRequiredMixin, BaseModalFormView):
_MODEL_CLS = User
_FORM_CLS = NewAPITokenModalForm
_MSG_SUCCESS = NEW_API_TOKEN_GENERATED
_REDIRECT_URL = "user:api-token"
def new_api_token_view(request: HttpRequest): def _user_has_shared_access(self, user, **kwargs):
""" Function based view for processing ModalForm # No special checks to be done in here
(Currently ModalForms only work properly with function based views) return True
Args: def _user_has_permission(self, user, **kwargs):
request (): # User should at least be a default user to be able to use the api
return user.is_default_user()
Returns:
"""
user = request.user
form = NewAPITokenModalForm(request.POST or None, instance=user, request=request)
return form.process_request(
request=request,
msg_success=NEW_API_TOKEN_GENERATED,
redirect_url=reverse("user:api-token"),
)