From 53a717f548e14ef1ea870a8dfacbd87e2f54b923 Mon Sep 17 00:00:00 2001 From: Noelle Leigh <5957867+noelleleigh@users.noreply.github.com> Date: Thu, 4 Jun 2026 08:33:01 -0400 Subject: [PATCH 1/5] Improve `authlib/integrations/requests_client/oauth2_session.pyi` - Correct parent classes for `OAuth2Auth`, `OAuth2ClientAuth`, and `OAuth2Session`. - Remove comments that are now redundant. - Add type annotations to method arguments and return types. - Use variable annotations with `ClassVar` instead of assignments for class variables. --- .../requests_client/oauth2_session.pyi | 59 ++++++++++--------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi b/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi index f358acc47ca5..0b642d545275 100644 --- a/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi +++ b/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi @@ -1,43 +1,46 @@ -from _typeshed import Incomplete +from collections.abc import Callable +from typing import Any, ClassVar, TypeVar from authlib.oauth2.auth import ClientAuth, TokenAuth from authlib.oauth2.client import OAuth2Client +from oauthlib.oauth2 import OAuth2Token +from requests import Request, Response, Session +from requests.auth import AuthBase from ..base_client import OAuthError __all__ = ["OAuth2Session", "OAuth2Auth"] -# Inherits from requests.auth.AuthBase -class OAuth2Auth(TokenAuth): +_R = TypeVar("_R", bound=Request) + +class OAuth2Auth(AuthBase, TokenAuth): def ensure_active_token(self) -> None: ... - def __call__(self, req): ... + def __call__(self, req: _R) -> _R: ... -# Inherits from requests.auth.AuthBase -class OAuth2ClientAuth(ClientAuth): - def __call__(self, req): ... +class OAuth2ClientAuth(AuthBase, ClientAuth): + def __call__(self, req: _R) -> _R: ... -# Inherits from requests.Session -class OAuth2Session(OAuth2Client): - client_auth_class = OAuth2ClientAuth - token_auth_class = OAuth2Auth - oauth_error_class = OAuthError # type: ignore[assignment] - SESSION_REQUEST_PARAMS: tuple[str, ...] # type: ignore[assignment] - default_timeout: Incomplete +class OAuth2Session(OAuth2Client, Session): + client_auth_class: ClassVar[type[OAuth2ClientAuth]] + token_auth_class: ClassVar[type[OAuth2Auth]] + oauth_error_class: ClassVar[type[OAuthError]] + SESSION_REQUEST_PARAMS: ClassVar[tuple[str, ...]] + default_timeout: float | tuple[float | None, float | None] | None def __init__( self, - client_id=None, - client_secret=None, - token_endpoint_auth_method=None, - revocation_endpoint_auth_method=None, - scope=None, - state=None, - redirect_uri=None, - token=None, - token_placement="header", - update_token=None, - leeway=60, - default_timeout=None, + client_id: str | None = None, + client_secret: str | None = None, + token_endpoint_auth_method: str | None = None, + revocation_endpoint_auth_method: str | None = None, + scope: str | None = None, + state: str | None = None, + redirect_uri: str | None = None, + token: dict[str, Any] | None = None, + token_placement: str = ..., + update_token: Callable[[OAuth2Token], None] | None = None, + leeway: int = ..., + default_timeout: float | tuple[float | None, float | None] | None = None, **kwargs, ) -> None: ... - def fetch_access_token(self, url=None, **kwargs): ... - def request(self, method, url, withhold_token=False, auth=None, **kwargs): ... + def fetch_access_token(self, url: str | None = None, **kwargs) -> OAuth2Token: ... + def request(self, method: str, url: str, withhold_token: bool = False, auth=None, **kwargs) -> Response: ... From 4e260039ce5e920e300514b37e75ea82c8152ca2 Mon Sep 17 00:00:00 2001 From: Noelle Leigh <5957867+noelleleigh@users.noreply.github.com> Date: Mon, 8 Jun 2026 10:04:21 -0400 Subject: [PATCH 2/5] Add dependencies to stubs/Authlib/METADATA.toml --- stubs/Authlib/METADATA.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/Authlib/METADATA.toml b/stubs/Authlib/METADATA.toml index 5c2a9e76e1ed..12a214e9477b 100644 --- a/stubs/Authlib/METADATA.toml +++ b/stubs/Authlib/METADATA.toml @@ -1,3 +1,3 @@ version = "1.6.11" upstream-repository = "https://github.com/authlib/authlib" -dependencies = ["cryptography"] +dependencies = ["cryptography", "types-oauthlib", "requests"] From d0be1cf9a67e0a298a391a56c545205d3b3e9b63 Mon Sep 17 00:00:00 2001 From: Noelle Leigh <5957867+noelleleigh@users.noreply.github.com> Date: Mon, 8 Jun 2026 10:06:40 -0400 Subject: [PATCH 3/5] OAuth2Auth,OAuth2ClientAuth: Use right binding for type variable error: Signature of "__call__" incompatible with supertype "requests.auth.AuthBase" [override] note: Superclass: note: def __call__(self, r: PreparedRequest) -> PreparedRequest note: Subclass: note: def [_R: Request] __call__(self, req: _R) -> _R error: Signature of "__call__" incompatible with supertype "requests.auth.AuthBase" [override] note: Superclass: note: def __call__(self, r: PreparedRequest) -> PreparedRequest note: Subclass: note: def [_R: Request] __call__(self, req: _R) -> _R --- .../integrations/requests_client/oauth2_session.pyi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi b/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi index 0b642d545275..87d00c77278b 100644 --- a/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi +++ b/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi @@ -4,21 +4,21 @@ from typing import Any, ClassVar, TypeVar from authlib.oauth2.auth import ClientAuth, TokenAuth from authlib.oauth2.client import OAuth2Client from oauthlib.oauth2 import OAuth2Token -from requests import Request, Response, Session +from requests import PreparedRequest, Response, Session from requests.auth import AuthBase from ..base_client import OAuthError __all__ = ["OAuth2Session", "OAuth2Auth"] -_R = TypeVar("_R", bound=Request) +_PR = TypeVar("_PR", bound=PreparedRequest) class OAuth2Auth(AuthBase, TokenAuth): def ensure_active_token(self) -> None: ... - def __call__(self, req: _R) -> _R: ... + def __call__(self, req: _PR) -> _PR: ... class OAuth2ClientAuth(AuthBase, ClientAuth): - def __call__(self, req: _R) -> _R: ... + def __call__(self, req: _PR) -> _PR: ... class OAuth2Session(OAuth2Client, Session): client_auth_class: ClassVar[type[OAuth2ClientAuth]] From 0faedec315d760724c13915b7c31e3522839adbb Mon Sep 17 00:00:00 2001 From: Noelle Leigh <5957867+noelleleigh@users.noreply.github.com> Date: Mon, 8 Jun 2026 11:07:27 -0400 Subject: [PATCH 4/5] OAuth2Session: Ignore override of request method The signature is different from Session.request --- .../authlib/integrations/requests_client/oauth2_session.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi b/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi index 87d00c77278b..81a7559bd0d7 100644 --- a/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi +++ b/stubs/Authlib/authlib/integrations/requests_client/oauth2_session.pyi @@ -43,4 +43,4 @@ class OAuth2Session(OAuth2Client, Session): **kwargs, ) -> None: ... def fetch_access_token(self, url: str | None = None, **kwargs) -> OAuth2Token: ... - def request(self, method: str, url: str, withhold_token: bool = False, auth=None, **kwargs) -> Response: ... + def request(self, method: str, url: str, withhold_token: bool = False, auth=None, **kwargs) -> Response: ... # type: ignore[override] From 64bf6dcdf77ba7df922bb3dba209b76798295194 Mon Sep 17 00:00:00 2001 From: Noelle Leigh <5957867+noelleleigh@users.noreply.github.com> Date: Mon, 8 Jun 2026 11:08:11 -0400 Subject: [PATCH 5/5] OAuth2Client: Add ClassVar, more basic types --- .../httpx_client/oauth2_client.pyi | 18 +++++++++--------- stubs/Authlib/authlib/oauth2/client.pyi | 13 ++++++++----- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/stubs/Authlib/authlib/integrations/httpx_client/oauth2_client.pyi b/stubs/Authlib/authlib/integrations/httpx_client/oauth2_client.pyi index 9493842b5378..9b8cf04e95f7 100644 --- a/stubs/Authlib/authlib/integrations/httpx_client/oauth2_client.pyi +++ b/stubs/Authlib/authlib/integrations/httpx_client/oauth2_client.pyi @@ -1,6 +1,6 @@ from _typeshed import Incomplete from collections.abc import Generator -from typing import NoReturn, TypeAlias +from typing import ClassVar, NoReturn, TypeAlias from authlib.oauth2.auth import ClientAuth, TokenAuth from authlib.oauth2.client import OAuth2Client as _OAuth2Client @@ -24,10 +24,10 @@ class OAuth2ClientAuth(ClientAuth): # Inherits from httpx.AsyncClient class AsyncOAuth2Client(_OAuth2Client): - SESSION_REQUEST_PARAMS: list[str] - client_auth_class = OAuth2ClientAuth - token_auth_class = OAuth2Auth - oauth_error_class = OAuthError # type: ignore[assignment] + SESSION_REQUEST_PARAMS: ClassVar[list[str]] + client_auth_class: ClassVar[type[OAuth2ClientAuth]] + token_auth_class: ClassVar[type[OAuth2Auth]] + oauth_error_class: ClassVar[type[OAuthError]] def __init__( self, client_id=None, @@ -48,10 +48,10 @@ class AsyncOAuth2Client(_OAuth2Client): # Inherits from httpx.Client class OAuth2Client(_OAuth2Client): - SESSION_REQUEST_PARAMS: list[str] - client_auth_class = OAuth2ClientAuth - token_auth_class = OAuth2Auth - oauth_error_class = OAuthError # type: ignore[assignment] + SESSION_REQUEST_PARAMS: ClassVar[list[str]] + client_auth_class: ClassVar[type[OAuth2ClientAuth]] + token_auth_class: ClassVar[type[OAuth2Auth]] + oauth_error_class: ClassVar[type[OAuthError]] def __init__( self, client_id=None, diff --git a/stubs/Authlib/authlib/oauth2/client.pyi b/stubs/Authlib/authlib/oauth2/client.pyi index c502a92b5e67..30b37039b6de 100644 --- a/stubs/Authlib/authlib/oauth2/client.pyi +++ b/stubs/Authlib/authlib/oauth2/client.pyi @@ -1,15 +1,18 @@ from _typeshed import Incomplete +from collections.abc import Sequence +from typing import ClassVar -from authlib.oauth2 import ClientAuth, OAuth2Error, TokenAuth +from authlib.common.errors import AuthlibBaseError +from authlib.oauth2 import ClientAuth, TokenAuth DEFAULT_HEADERS: Incomplete class OAuth2Client: - client_auth_class = ClientAuth - token_auth_class = TokenAuth - oauth_error_class = OAuth2Error + client_auth_class: ClassVar[type[ClientAuth]] + token_auth_class: ClassVar[type[TokenAuth]] + oauth_error_class: ClassVar[type[AuthlibBaseError]] EXTRA_AUTHORIZE_PARAMS: tuple[str, ...] - SESSION_REQUEST_PARAMS: list[str] + SESSION_REQUEST_PARAMS: ClassVar[Sequence[str]] session: Incomplete client_id: Incomplete client_secret: Incomplete