@@ -56,7 +56,7 @@ def get_token(
5656 claims : Optional [str ] = None ,
5757 tenant_id : Optional [str ] = None ,
5858 ** kwargs : Any ,
59- ) -> AccessToken :
59+ ) -> AccessToken | None :
6060 """Refresh the access token using the refresh_token flow.
6161 :param str scopes: The type of access needed.
6262 :keyword str claims: Additional claims required in the token, such as those returned in a resource
@@ -159,7 +159,7 @@ def __aenter__(self) -> "DiracClient":
159159
160160def refresh_token (
161161 location : Path , token_endpoint : str , client_id : str , refresh_token : str
162- ) -> AccessToken :
162+ ) -> AccessToken | None :
163163 """Refresh the access token using the refresh_token flow."""
164164 from diracx .core .utils import write_credentials
165165
@@ -172,9 +172,13 @@ def refresh_token(
172172 },
173173 )
174174
175- if response .status_code != 200 :
176- # Think more
177- # location.unlink()
175+ if response .status_code == 401 :
176+ reason = response .json ()["detail" ]
177+ logger .warning ("Your refresh token is not valid anymore: %s" , reason )
178+ location .unlink ()
179+ return None
180+ elif response .status_code != 200 :
181+ # TODO: Better handle this case, retry?
178182 raise RuntimeError (
179183 f"An issue occured while refreshing your access token: { response .json ()['detail' ]} "
180184 )
0 commit comments