Skip to content

Commit 4def3fb

Browse files
authored
ref: full tracebacks on exceptions (#870)
1 parent 14e8b2c commit 4def3fb

File tree

4 files changed

+27
-23
lines changed

4 files changed

+27
-23
lines changed

rest_framework_simplejwt/authentication.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,17 @@ def get_user(self, validated_token: Token) -> AuthUser:
123123
"""
124124
try:
125125
user_id = validated_token[api_settings.USER_ID_CLAIM]
126-
except KeyError:
127-
raise InvalidToken(_("Token contained no recognizable user identification"))
126+
except KeyError as e:
127+
raise InvalidToken(
128+
_("Token contained no recognizable user identification")
129+
) from e
128130

129131
try:
130132
user = self.user_model.objects.get(**{api_settings.USER_ID_FIELD: user_id})
131-
except self.user_model.DoesNotExist:
132-
raise AuthenticationFailed(_("User not found"), code="user_not_found")
133+
except self.user_model.DoesNotExist as e:
134+
raise AuthenticationFailed(
135+
_("User not found"), code="user_not_found"
136+
) from e
133137

134138
if api_settings.CHECK_USER_IS_ACTIVE and not user.is_active:
135139
raise AuthenticationFailed(_("User is inactive"), code="user_inactive")

rest_framework_simplejwt/backends.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ def get_verifying_key(self, token: Token) -> Any:
121121
if self.jwks_client:
122122
try:
123123
return self.jwks_client.get_signing_key_from_jwt(token).key
124-
except PyJWKClientError as ex:
125-
raise TokenBackendError(_("Token is invalid")) from ex
124+
except PyJWKClientError as e:
125+
raise TokenBackendError(_("Token is invalid")) from e
126126

127127
return self.prepared_verifying_key
128128

@@ -169,9 +169,9 @@ def decode(self, token: Token, verify: bool = True) -> dict[str, Any]:
169169
"verify_signature": verify,
170170
},
171171
)
172-
except InvalidAlgorithmError as ex:
173-
raise TokenBackendError(_("Invalid algorithm specified")) from ex
174-
except ExpiredSignatureError as ex:
175-
raise TokenBackendExpiredToken(_("Token is expired")) from ex
176-
except InvalidTokenError as ex:
177-
raise TokenBackendError(_("Token is invalid")) from ex
172+
except InvalidAlgorithmError as e:
173+
raise TokenBackendError(_("Invalid algorithm specified")) from e
174+
except ExpiredSignatureError as e:
175+
raise TokenBackendExpiredToken(_("Token is expired")) from e
176+
except InvalidTokenError as e:
177+
raise TokenBackendError(_("Token is invalid")) from e

rest_framework_simplejwt/tokens.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,10 @@ def __init__(self, token: Optional["Token"] = None, verify: bool = True) -> None
6363
# Decode token
6464
try:
6565
self.payload = token_backend.decode(token, verify=verify)
66-
except TokenBackendExpiredToken:
67-
raise ExpiredTokenError(_("Token is expired"))
68-
except TokenBackendError:
69-
raise TokenError(_("Token is invalid"))
66+
except TokenBackendExpiredToken as e:
67+
raise ExpiredTokenError(_("Token is expired")) from e
68+
except TokenBackendError as e:
69+
raise TokenError(_("Token is invalid")) from e
7070

7171
if verify:
7272
self.verify()
@@ -135,8 +135,8 @@ def verify_token_type(self) -> None:
135135
"""
136136
try:
137137
token_type = self.payload[api_settings.TOKEN_TYPE_CLAIM]
138-
except KeyError:
139-
raise TokenError(_("Token has no type"))
138+
except KeyError as e:
139+
raise TokenError(_("Token has no type")) from e
140140

141141
if self.token_type != token_type:
142142
raise TokenError(_("Token has wrong type"))
@@ -197,8 +197,8 @@ def check_exp(
197197

198198
try:
199199
claim_value = self.payload[claim]
200-
except KeyError:
201-
raise TokenError(format_lazy(_("Token has no '{}' claim"), claim))
200+
except KeyError as e:
201+
raise TokenError(format_lazy(_("Token has no '{}' claim"), claim)) from e
202202

203203
claim_time = datetime_from_epoch(claim_value)
204204
leeway = self.get_token_backend().get_leeway()

rest_framework_simplejwt/views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ def get_serializer_class(self) -> Serializer:
2727
return self.serializer_class
2828
try:
2929
return import_string(self._serializer_class)
30-
except ImportError:
30+
except ImportError as e:
3131
msg = f"Could not import serializer '{self._serializer_class}'"
32-
raise ImportError(msg)
32+
raise ImportError(msg) from e
3333

3434
def get_authenticate_header(self, request: Request) -> str:
3535
return '{} realm="{}"'.format(
@@ -43,7 +43,7 @@ def post(self, request: Request, *args, **kwargs) -> Response:
4343
try:
4444
serializer.is_valid(raise_exception=True)
4545
except TokenError as e:
46-
raise InvalidToken(e.args[0])
46+
raise InvalidToken(e.args[0]) from e
4747

4848
return Response(serializer.validated_data, status=status.HTTP_200_OK)
4949

0 commit comments

Comments
 (0)