|
1 | | -from _typeshed import Incomplete |
2 | | -from typing import Any |
| 1 | +import re |
| 2 | +from _typeshed import Incomplete, SupportsLenAndGetItem |
| 3 | +from collections.abc import Iterable, Mapping |
| 4 | +from logging import Logger |
| 5 | +from typing import Any, Final, Literal, TypeVar, overload |
| 6 | +from typing_extensions import TypeAlias |
3 | 7 |
|
4 | | -UNICODE_ASCII_CHARACTER_SET: str |
5 | | -CLIENT_ID_CHARACTER_SET: str |
6 | | -SANITIZE_PATTERN: Any |
7 | | -INVALID_HEX_PATTERN: Any |
8 | | -always_safe: str |
9 | | -log: Any |
| 8 | +_T = TypeVar("_T") |
| 9 | +_V = TypeVar("_V") |
10 | 10 |
|
11 | | -def quote(s, safe: bytes = b"/"): ... |
12 | | -def unquote(s): ... |
13 | | -def urlencode(params): ... |
14 | | -def encode_params_utf8(params): ... |
15 | | -def decode_params_utf8(params): ... |
| 11 | +_HTTPMethod: TypeAlias = Literal["CONNECT", "DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT", "TRACE"] |
16 | 12 |
|
17 | | -urlencoded: Any |
| 13 | +UNICODE_ASCII_CHARACTER_SET: Final[str] |
| 14 | +CLIENT_ID_CHARACTER_SET: Final[str] |
| 15 | +SANITIZE_PATTERN: Final[re.Pattern[str]] |
| 16 | +INVALID_HEX_PATTERN: Final[re.Pattern[str]] |
| 17 | +always_safe: Final[str] |
| 18 | +log: Logger |
18 | 19 |
|
19 | | -def urldecode(query): ... |
20 | | -def extract_params(raw): ... |
21 | | -def generate_nonce(): ... |
22 | | -def generate_timestamp(): ... |
23 | | -def generate_token(length: int = 30, chars=...): ... |
24 | | -def generate_signed_token(private_pem, request): ... |
| 20 | +def quote(s: str | bytes, safe: bytes = b"/") -> str: ... |
| 21 | +def unquote(s: str | bytes) -> str: ... |
| 22 | +def urlencode(params: Iterable[tuple[str | bytes, str | bytes]]) -> str: ... |
| 23 | +def encode_params_utf8(params: Iterable[tuple[str | bytes, str | bytes]]) -> list[tuple[bytes, bytes]]: ... |
| 24 | +def decode_params_utf8(params: Iterable[tuple[str | bytes, str | bytes]]) -> list[tuple[str, str]]: ... |
| 25 | + |
| 26 | +urlencoded: Final[set[str]] |
| 27 | + |
| 28 | +def urldecode(query: str | bytes) -> list[tuple[str, str]]: ... |
| 29 | +def extract_params(raw: str | bytes | dict[str, str] | Iterable[tuple[str, str]]) -> list[tuple[str, str]] | None: ... |
| 30 | +def generate_nonce() -> str: ... |
| 31 | +def generate_timestamp() -> str: ... |
| 32 | +def generate_token(length: int = 30, chars: SupportsLenAndGetItem[str] = ...) -> str: ... |
| 33 | +def generate_signed_token(private_pem: str, request: Request) -> str: ... |
25 | 34 | def verify_signed_token(public_pem, token): ... |
26 | | -def generate_client_id(length: int = 30, chars=...): ... |
27 | | -def add_params_to_qs(query, params): ... |
28 | | -def add_params_to_uri(uri, params, fragment: bool = False): ... |
29 | | -def safe_string_equals(a, b): ... |
30 | | -def to_unicode(data, encoding: str = "UTF-8"): ... |
| 35 | +def generate_client_id(length: int = 30, chars: SupportsLenAndGetItem[str] = ...) -> str: ... |
| 36 | +def add_params_to_qs(query: str, params: dict[str, str] | Iterable[tuple[str, str]]) -> str: ... |
| 37 | +def add_params_to_uri(uri: str, params: dict[str, str] | Iterable[tuple[str, str]], fragment: bool = False) -> str: ... |
| 38 | +def safe_string_equals(a: str, b: str) -> bool: ... |
| 39 | +@overload |
| 40 | +def to_unicode(data: str | bytes, encoding: str = "UTF-8") -> str: ... |
| 41 | +@overload |
| 42 | +def to_unicode(data: Mapping[str, _V] | Mapping[bytes, _V], encoding: str = "UTF-8") -> dict[str, _V]: ... |
| 43 | +@overload |
| 44 | +def to_unicode(data: _T, encoding: str = "UTF-8") -> _T: ... |
31 | 45 |
|
32 | | -class CaseInsensitiveDict(dict[Any, Any]): |
33 | | - proxy: Any |
34 | | - def __init__(self, data) -> None: ... |
35 | | - def __contains__(self, k): ... |
36 | | - def __delitem__(self, k) -> None: ... |
37 | | - def __getitem__(self, k): ... |
38 | | - def get(self, k, default: Incomplete | None = None): ... |
39 | | - def __setitem__(self, k, v) -> None: ... |
| 46 | +class CaseInsensitiveDict(dict[str, Incomplete]): |
| 47 | + proxy: dict[str, str] |
| 48 | + def __init__(self, data: dict[str, Incomplete]) -> None: ... |
| 49 | + @overload |
| 50 | + def __contains__(self, k: str) -> bool: ... |
| 51 | + @overload |
| 52 | + def __contains__(self, k: object) -> bool: ... |
| 53 | + def __delitem__(self, k: str) -> None: ... |
| 54 | + def __getitem__(self, k: str): ... |
| 55 | + def get(self, k: str, default: Incomplete | None = None) -> Incomplete | None: ... |
| 56 | + def __setitem__(self, k: str, v) -> None: ... |
40 | 57 | def update(self, *args, **kwargs) -> None: ... |
41 | 58 |
|
42 | 59 | class Request: |
43 | | - uri: Any |
44 | | - http_method: Any |
45 | | - headers: Any |
46 | | - body: Any |
47 | | - decoded_body: Any |
48 | | - oauth_params: Any |
49 | | - validator_log: Any |
| 60 | + uri: str |
| 61 | + http_method: _HTTPMethod |
| 62 | + headers: CaseInsensitiveDict |
| 63 | + body: str | dict[str, str] | list[tuple[str, str]] | None |
| 64 | + decoded_body: list[tuple[str, str]] | None |
| 65 | + oauth_params: list[str] |
| 66 | + validator_log: dict[str, Any] # value type depends on the key |
50 | 67 | def __init__( |
51 | 68 | self, |
52 | | - uri, |
53 | | - http_method: str = "GET", |
54 | | - body: Incomplete | None = None, |
55 | | - headers: Incomplete | None = None, |
| 69 | + uri: str, |
| 70 | + http_method: _HTTPMethod = "GET", |
| 71 | + body: str | dict[str, str] | list[tuple[str, str]] | None = None, |
| 72 | + headers: Mapping[str, str] | None = None, |
56 | 73 | encoding: str = "utf-8", |
57 | 74 | ): ... |
58 | | - def __getattr__(self, name: str): ... |
| 75 | + def __getattr__(self, name: str) -> str | None: ... # or raises AttributeError if attribute is not found |
59 | 76 | @property |
60 | | - def uri_query(self): ... |
| 77 | + def uri_query(self) -> str: ... |
61 | 78 | @property |
62 | | - def uri_query_params(self): ... |
| 79 | + def uri_query_params(self) -> list[tuple[str, str]]: ... |
63 | 80 | @property |
64 | | - def duplicate_params(self): ... |
| 81 | + def duplicate_params(self) -> list[str]: ... |
0 commit comments