From 009891e2dc56e78931115743e475389d54702354 Mon Sep 17 00:00:00 2001 From: donBarbos Date: Sat, 5 Apr 2025 21:02:38 +0400 Subject: [PATCH 1/2] Improve `Authlib` * Define consts and utility functions --- stubs/Authlib/authlib/__init__.pyi | 10 ++++-- stubs/Authlib/authlib/common/encoding.pyi | 36 +++++++++++++------ stubs/Authlib/authlib/common/errors.pyi | 27 ++++++-------- stubs/Authlib/authlib/common/security.pyi | 4 ++- stubs/Authlib/authlib/common/urls.pyi | 8 ++--- stubs/Authlib/authlib/consts.pyi | 14 ++++---- stubs/Authlib/authlib/deprecate.pyi | 6 +--- stubs/Authlib/authlib/jose/__init__.pyi | 6 ++-- stubs/Authlib/authlib/jose/rfc7519/claims.pyi | 4 +-- stubs/Authlib/authlib/jose/util.pyi | 10 ++++-- .../authlib/oidc/registration/__init__.pyi | 3 ++ .../authlib/oidc/registration/claims.pyi | 28 +++++++++++++++ 12 files changed, 101 insertions(+), 55 deletions(-) create mode 100644 stubs/Authlib/authlib/oidc/registration/__init__.pyi create mode 100644 stubs/Authlib/authlib/oidc/registration/claims.pyi diff --git a/stubs/Authlib/authlib/__init__.pyi b/stubs/Authlib/authlib/__init__.pyi index d1c285f4e6d6..a254fc53981c 100644 --- a/stubs/Authlib/authlib/__init__.pyi +++ b/stubs/Authlib/authlib/__init__.pyi @@ -1,4 +1,8 @@ -from .consts import homepage, version +from typing import Final -__version__ = version -__homepage__ = homepage +from .consts import author, homepage, version + +__version__: Final = version +__homepage__: Final = homepage +__author__: Final = author +__license__: Final = "BSD-3-Clause" diff --git a/stubs/Authlib/authlib/common/encoding.pyi b/stubs/Authlib/authlib/common/encoding.pyi index e76f84f033e8..0cddc1311100 100644 --- a/stubs/Authlib/authlib/common/encoding.pyi +++ b/stubs/Authlib/authlib/common/encoding.pyi @@ -1,10 +1,26 @@ -def to_bytes(x, charset: str = "utf-8", errors: str = "strict") -> bytes | None: ... -def to_unicode(x, charset: str = "utf-8", errors: str = "strict") -> str | None: ... -def to_native(x, encoding: str = "ascii"): ... -def json_loads(s): ... -def json_dumps(data, ensure_ascii: bool = False): ... -def urlsafe_b64decode(s): ... -def urlsafe_b64encode(s): ... -def base64_to_int(s): ... -def int_to_base64(num): ... -def json_b64encode(text): ... +from _typeshed import ReadableBuffer +from collections.abc import Iterable +from typing import Any, SupportsBytes, SupportsIndex, overload + +@overload +def to_bytes(x: None, charset: str = "utf-8", errors: str = "strict") -> None: ... +@overload +def to_bytes( + x: str | bytes | float | Iterable[SupportsIndex] | SupportsIndex | SupportsBytes | ReadableBuffer, + charset: str = "utf-8", + errors: str = "strict", +) -> bytes: ... +@overload +def to_unicode(x: None, charset: str = "utf-8", errors: str = "strict") -> None: ... +@overload +def to_unicode(x: object, charset: str = "utf-8", errors: str = "strict") -> str: ... +def to_native(x: str | bytes, encoding: str = "ascii") -> str: ... +def json_loads(s: str | bytes | bytearray) -> Any: ... # returns json.loads() +def json_dumps(data: Any, ensure_ascii: bool = False) -> str: ... # data pass to json.dumps() +def urlsafe_b64decode(s: bytes) -> bytes: ... +def urlsafe_b64encode(s: ReadableBuffer) -> bytes: ... +def base64_to_int(s: str | bytes | float | Iterable[SupportsIndex] | SupportsIndex | SupportsBytes | ReadableBuffer) -> int: ... +def int_to_base64(num: int) -> str: ... +def json_b64encode( + text: str | bytes | float | Iterable[SupportsIndex] | SupportsIndex | SupportsBytes | ReadableBuffer, +) -> bytes: ... diff --git a/stubs/Authlib/authlib/common/errors.pyi b/stubs/Authlib/authlib/common/errors.pyi index 89a45b2d9b4a..c6b1276d2571 100644 --- a/stubs/Authlib/authlib/common/errors.pyi +++ b/stubs/Authlib/authlib/common/errors.pyi @@ -1,26 +1,21 @@ -from _typeshed import Incomplete +from typing import Literal class AuthlibBaseError(Exception): - error: Incomplete + error: str | None description: str - uri: Incomplete - def __init__( - self, error: Incomplete | None = None, description: Incomplete | None = None, uri: Incomplete | None = None - ) -> None: ... + uri: str | None + def __init__(self, error: str | None = None, description: str | None = None, uri: str | None = None) -> None: ... class AuthlibHTTPError(AuthlibBaseError): status_code: int def __init__( - self, - error: Incomplete | None = None, - description: Incomplete | None = None, - uri: Incomplete | None = None, - status_code: Incomplete | None = None, + self, error: str | None = None, description: str | None = None, uri: str | None = None, status_code: int | None = None ) -> None: ... - def get_error_description(self): ... - def get_body(self): ... - def get_headers(self): ... - uri: Incomplete - def __call__(self, uri: Incomplete | None = None): ... + def get_error_description(self) -> str: ... + def get_body(self) -> list[tuple[Literal["error", "error_description", "error_uri"], str | None]]: ... + def get_headers(self) -> list[tuple[str, str]]: ... + def __call__( + self, uri: str | None = None + ) -> tuple[int, dict[Literal["error", "error_description", "error_uri"], str | None], list[tuple[str, str]]]: ... class ContinueIteration(AuthlibBaseError): ... diff --git a/stubs/Authlib/authlib/common/security.pyi b/stubs/Authlib/authlib/common/security.pyi index d69563f0e0cb..dc6786cbcb57 100644 --- a/stubs/Authlib/authlib/common/security.pyi +++ b/stubs/Authlib/authlib/common/security.pyi @@ -1,4 +1,6 @@ -UNICODE_ASCII_CHARACTER_SET: str +from typing import Final + +UNICODE_ASCII_CHARACTER_SET: Final[str] def generate_token(length: int = 30, chars: str = ...) -> str: ... def is_secure_transport(uri: str) -> bool: ... diff --git a/stubs/Authlib/authlib/common/urls.pyi b/stubs/Authlib/authlib/common/urls.pyi index 1d9bffd42459..457993f01006 100644 --- a/stubs/Authlib/authlib/common/urls.pyi +++ b/stubs/Authlib/authlib/common/urls.pyi @@ -1,10 +1,10 @@ -from collections.abc import Collection from re import Pattern +from typing import Final from typing_extensions import TypeAlias -always_safe: str -urlencoded: Collection[str] -INVALID_HEX_PATTERN: Pattern[str] +always_safe: Final[str] +urlencoded: Final[set[str]] +INVALID_HEX_PATTERN: Final[Pattern[str]] _ExplodedQueryString: TypeAlias = list[tuple[str, str]] diff --git a/stubs/Authlib/authlib/consts.pyi b/stubs/Authlib/authlib/consts.pyi index ab047d25406a..6ec14d37c50c 100644 --- a/stubs/Authlib/authlib/consts.pyi +++ b/stubs/Authlib/authlib/consts.pyi @@ -1,8 +1,8 @@ -from _typeshed import Incomplete +from typing import Final -name: str -version: str -author: str -homepage: str -default_user_agent: Incomplete -default_json_headers: Incomplete +name: Final[str] +version: Final[str] +author: Final[str] +homepage: Final[str] +default_user_agent: Final[str] +default_json_headers: Final[list[tuple[str, str]]] diff --git a/stubs/Authlib/authlib/deprecate.pyi b/stubs/Authlib/authlib/deprecate.pyi index c4c5a11b59ce..9f7f18218194 100644 --- a/stubs/Authlib/authlib/deprecate.pyi +++ b/stubs/Authlib/authlib/deprecate.pyi @@ -1,7 +1,3 @@ -from _typeshed import Incomplete - class AuthlibDeprecationWarning(DeprecationWarning): ... -def deprecate( - message, version: Incomplete | None = None, link_uid: Incomplete | None = None, link_file: Incomplete | None = None -) -> None: ... +def deprecate(message: str, version: str | None = None, link_uid: str | None = None, link_file: str | None = None) -> None: ... diff --git a/stubs/Authlib/authlib/jose/__init__.pyi b/stubs/Authlib/authlib/jose/__init__.pyi index e1c930f3cb2d..3377c3dbdef7 100644 --- a/stubs/Authlib/authlib/jose/__init__.pyi +++ b/stubs/Authlib/authlib/jose/__init__.pyi @@ -1,5 +1,3 @@ -from _typeshed import Incomplete - from .errors import JoseError as JoseError from .rfc7515 import ( JsonWebSignature as JsonWebSignature, @@ -18,6 +16,8 @@ from .rfc7518 import ECKey as ECKey, OctKey as OctKey, RSAKey as RSAKey from .rfc7519 import BaseClaims as BaseClaims, JsonWebToken as JsonWebToken, JWTClaims as JWTClaims from .rfc8037 import OKPKey as OKPKey +jwt: JsonWebToken + __all__ = [ "JoseError", "JsonWebSignature", @@ -40,5 +40,3 @@ __all__ = [ "JWTClaims", "jwt", ] - -jwt: Incomplete diff --git a/stubs/Authlib/authlib/jose/rfc7519/claims.pyi b/stubs/Authlib/authlib/jose/rfc7519/claims.pyi index e195536a74b4..63e206f11115 100644 --- a/stubs/Authlib/authlib/jose/rfc7519/claims.pyi +++ b/stubs/Authlib/authlib/jose/rfc7519/claims.pyi @@ -1,7 +1,7 @@ from _typeshed import Incomplete class BaseClaims(dict[str, object]): - REGISTERED_CLAIMS: Incomplete + REGISTERED_CLAIMS: list[str] header: Incomplete options: Incomplete params: Incomplete @@ -10,7 +10,7 @@ class BaseClaims(dict[str, object]): def get_registered_claims(self): ... class JWTClaims(BaseClaims): - REGISTERED_CLAIMS: Incomplete + REGISTERED_CLAIMS: list[str] def validate(self, now: Incomplete | None = None, leeway: int = 0) -> None: ... def validate_iss(self) -> None: ... def validate_sub(self) -> None: ... diff --git a/stubs/Authlib/authlib/jose/util.pyi b/stubs/Authlib/authlib/jose/util.pyi index ef9dc7671b67..780229067d4f 100644 --- a/stubs/Authlib/authlib/jose/util.pyi +++ b/stubs/Authlib/authlib/jose/util.pyi @@ -1,3 +1,7 @@ -def extract_header(header_segment, error_cls): ... -def extract_segment(segment, error_cls, name: str = "payload"): ... -def ensure_dict(s, structure_name): ... +from _typeshed import Incomplete + +from authlib.common.errors import AuthlibBaseError + +def extract_header(header_segment: bytes, error_cls: AuthlibBaseError) -> dict[Incomplete, Incomplete]: ... +def extract_segment(segment: bytes, error_cls: AuthlibBaseError, name: str = "payload") -> bytes: ... +def ensure_dict(s: object, structure_name: str) -> dict[Incomplete, Incomplete]: ... diff --git a/stubs/Authlib/authlib/oidc/registration/__init__.pyi b/stubs/Authlib/authlib/oidc/registration/__init__.pyi new file mode 100644 index 000000000000..e0fca8da8da3 --- /dev/null +++ b/stubs/Authlib/authlib/oidc/registration/__init__.pyi @@ -0,0 +1,3 @@ +from .claims import ClientMetadataClaims as ClientMetadataClaims + +__all__ = ["ClientMetadataClaims"] diff --git a/stubs/Authlib/authlib/oidc/registration/claims.pyi b/stubs/Authlib/authlib/oidc/registration/claims.pyi new file mode 100644 index 000000000000..198470f59565 --- /dev/null +++ b/stubs/Authlib/authlib/oidc/registration/claims.pyi @@ -0,0 +1,28 @@ +from _typeshed import Incomplete + +from authlib.jose import BaseClaims + +class ClientMetadataClaims(BaseClaims): + REGISTERED_CLAIMS: list[str] + + def validate(self) -> None: ... + @classmethod + def get_claims_options(self, metadata: dict[str, Incomplete]) -> dict[Incomplete, Incomplete]: ... + def validate_token_endpoint_auth_signing_alg(self) -> None: ... + def validate_application_type(self) -> None: ... + def validate_sector_identifier_uri(self) -> None: ... + def validate_subject_type(self) -> None: ... + def validate_id_token_signed_response_alg(self) -> None: ... + def validate_id_token_encrypted_response_alg(self) -> None: ... + def validate_id_token_encrypted_response_enc(self) -> None: ... + def validate_userinfo_signed_response_alg(self) -> None: ... + def validate_userinfo_encrypted_response_alg(self) -> None: ... + def validate_userinfo_encrypted_response_enc(self) -> None: ... + def validate_default_max_age(self) -> None: ... + def validate_require_auth_time(self) -> None: ... + def validate_default_acr_values(self) -> None: ... + def validate_initiate_login_uri(self) -> None: ... + def validate_request_object_signing_alg(self) -> None: ... + def validate_request_object_encryption_alg(self) -> None: ... + def validate_request_object_encryption_enc(self) -> None: ... + def validate_request_uris(self) -> None: ... From b285639d3ea00355c1b0f41fa6ca1f329c1704a5 Mon Sep 17 00:00:00 2001 From: donBarbos Date: Mon, 7 Apr 2025 16:17:44 +0400 Subject: [PATCH 2/2] Remove `authlib.oicd.registration` --- .../authlib/oidc/registration/__init__.pyi | 3 -- .../authlib/oidc/registration/claims.pyi | 28 ------------------- 2 files changed, 31 deletions(-) delete mode 100644 stubs/Authlib/authlib/oidc/registration/__init__.pyi delete mode 100644 stubs/Authlib/authlib/oidc/registration/claims.pyi diff --git a/stubs/Authlib/authlib/oidc/registration/__init__.pyi b/stubs/Authlib/authlib/oidc/registration/__init__.pyi deleted file mode 100644 index e0fca8da8da3..000000000000 --- a/stubs/Authlib/authlib/oidc/registration/__init__.pyi +++ /dev/null @@ -1,3 +0,0 @@ -from .claims import ClientMetadataClaims as ClientMetadataClaims - -__all__ = ["ClientMetadataClaims"] diff --git a/stubs/Authlib/authlib/oidc/registration/claims.pyi b/stubs/Authlib/authlib/oidc/registration/claims.pyi deleted file mode 100644 index 198470f59565..000000000000 --- a/stubs/Authlib/authlib/oidc/registration/claims.pyi +++ /dev/null @@ -1,28 +0,0 @@ -from _typeshed import Incomplete - -from authlib.jose import BaseClaims - -class ClientMetadataClaims(BaseClaims): - REGISTERED_CLAIMS: list[str] - - def validate(self) -> None: ... - @classmethod - def get_claims_options(self, metadata: dict[str, Incomplete]) -> dict[Incomplete, Incomplete]: ... - def validate_token_endpoint_auth_signing_alg(self) -> None: ... - def validate_application_type(self) -> None: ... - def validate_sector_identifier_uri(self) -> None: ... - def validate_subject_type(self) -> None: ... - def validate_id_token_signed_response_alg(self) -> None: ... - def validate_id_token_encrypted_response_alg(self) -> None: ... - def validate_id_token_encrypted_response_enc(self) -> None: ... - def validate_userinfo_signed_response_alg(self) -> None: ... - def validate_userinfo_encrypted_response_alg(self) -> None: ... - def validate_userinfo_encrypted_response_enc(self) -> None: ... - def validate_default_max_age(self) -> None: ... - def validate_require_auth_time(self) -> None: ... - def validate_default_acr_values(self) -> None: ... - def validate_initiate_login_uri(self) -> None: ... - def validate_request_object_signing_alg(self) -> None: ... - def validate_request_object_encryption_alg(self) -> None: ... - def validate_request_object_encryption_enc(self) -> None: ... - def validate_request_uris(self) -> None: ...