Skip to content

Commit 272e2b2

Browse files
Dresdn50-Course
authored andcommitted
Enhance BlacklistMixin with Generic Type for Accurate Type Inference
1 parent 0b50ee6 commit 272e2b2

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

rest_framework_simplejwt/tokens.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from datetime import datetime, timedelta
2-
from typing import TYPE_CHECKING, Any, Dict, Optional, TypeVar
2+
from typing import TYPE_CHECKING, Any, Dict, Generic, Optional, Type, TypeVar
33
from uuid import uuid4
44

55
from django.conf import settings
@@ -22,6 +22,8 @@
2222
if TYPE_CHECKING:
2323
from .backends import TokenBackend
2424

25+
T = TypeVar('T', bound='Token')
26+
2527
AuthUser = TypeVar("AuthUser", AbstractBaseUser, TokenUser)
2628

2729

@@ -229,7 +231,7 @@ def get_token_backend(self) -> "TokenBackend":
229231
return self.token_backend
230232

231233

232-
class BlacklistMixin:
234+
class BlacklistMixin(Generic[T]):
233235
"""
234236
If the `rest_framework_simplejwt.token_blacklist` app was configured to be
235237
used, tokens created from `BlacklistMixin` subclasses will insert
@@ -276,7 +278,7 @@ def blacklist(self) -> BlacklistedToken:
276278
return BlacklistedToken.objects.get_or_create(token=token)
277279

278280
@classmethod
279-
def for_user(cls, user: AuthUser) -> Token:
281+
def for_user(cls: Type[T], user: AuthUser) -> T:
280282
"""
281283
Adds this token to the outstanding token list.
282284
"""
@@ -296,7 +298,7 @@ def for_user(cls, user: AuthUser) -> Token:
296298
return token
297299

298300

299-
class SlidingToken(BlacklistMixin, Token):
301+
class SlidingToken(BlacklistMixin['SlidingToken'], Token):
300302
token_type = "sliding"
301303
lifetime = api_settings.SLIDING_TOKEN_LIFETIME
302304

@@ -317,7 +319,7 @@ class AccessToken(Token):
317319
lifetime = api_settings.ACCESS_TOKEN_LIFETIME
318320

319321

320-
class RefreshToken(BlacklistMixin, Token):
322+
class RefreshToken(BlacklistMixin['RefreshToken'], Token):
321323
token_type = "refresh"
322324
lifetime = api_settings.REFRESH_TOKEN_LIFETIME
323325
no_copy_claims = (

0 commit comments

Comments
 (0)