From e370977aacbdf00fcd60307f7176ae28566c74e7 Mon Sep 17 00:00:00 2001 From: Tom Hubrecht Date: Tue, 24 Sep 2024 14:30:58 +0200 Subject: [PATCH] feat(user): Add a type guard to extract the user from a request --- src/dgsi/models.py | 9 +++++++++ src/dgsi/views.py | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/dgsi/models.py b/src/dgsi/models.py index 9ee00b3..59c5f4d 100644 --- a/src/dgsi/models.py +++ b/src/dgsi/models.py @@ -5,6 +5,7 @@ from typing import Optional, Self from asgiref.sync import async_to_sync from django.contrib.auth.models import AbstractUser from django.db import models +from django.http import HttpRequest from django.utils.translation import gettext_lazy as _ from kanidm.exceptions import NoMatchingEntries from kanidm.models.person import Person @@ -87,6 +88,14 @@ class User(AbstractUser): ) # accepted_terms = models.ManyToManyField(TermsAndConditions) + @classmethod + def from_request(cls, request: HttpRequest) -> Self: + u = request.user + + assert isinstance(u, cls) + + return u + @cached_property @async_to_sync async def kanidm(self) -> Optional[KanidmProfile]: diff --git a/src/dgsi/views.py b/src/dgsi/views.py index 5b1310f..ba78f82 100644 --- a/src/dgsi/views.py +++ b/src/dgsi/views.py @@ -61,8 +61,7 @@ class ProfileView(LoginRequiredMixin, TemplateView): template_name = "dgsi/profile.html" def get_context_data(self, **kwargs): - u = self.request.user - assert isinstance(u, User) + u = User.from_request(self.request) return super().get_context_data( displayname=f"{u.first_name} {u.last_name}",