diff --git a/stubs/Flask-Cors/@tests/stubtest_allowlist.txt b/stubs/Flask-Cors/@tests/stubtest_allowlist.txt new file mode 100644 index 000000000..d9144f1a2 --- /dev/null +++ b/stubs/Flask-Cors/@tests/stubtest_allowlist.txt @@ -0,0 +1,2 @@ +# Caused by https://github.com/python/mypy/pull/12040 +flask_cors.core.DEFAULT_OPTIONS diff --git a/stubs/Flask-Cors/METADATA.toml b/stubs/Flask-Cors/METADATA.toml new file mode 100644 index 000000000..4a8e90c0c --- /dev/null +++ b/stubs/Flask-Cors/METADATA.toml @@ -0,0 +1 @@ +version = "3.0.*" diff --git a/stubs/Flask-Cors/flask_cors/__init__.pyi b/stubs/Flask-Cors/flask_cors/__init__.pyi new file mode 100644 index 000000000..b0962a739 --- /dev/null +++ b/stubs/Flask-Cors/flask_cors/__init__.pyi @@ -0,0 +1,7 @@ +from logging import Logger + +from .decorator import cross_origin as cross_origin +from .extension import CORS as CORS +from .version import __version__ as __version__ + +rootlogger: Logger diff --git a/stubs/Flask-Cors/flask_cors/core.pyi b/stubs/Flask-Cors/flask_cors/core.pyi new file mode 100644 index 000000000..7d3457b66 --- /dev/null +++ b/stubs/Flask-Cors/flask_cors/core.pyi @@ -0,0 +1,66 @@ +from datetime import timedelta +from logging import Logger +from typing import Any, Iterable, Pattern, TypeVar, overload +from typing_extensions import TypedDict + +_IterableT = TypeVar("_IterableT", bound=Iterable[Any]) +_T = TypeVar("_T") +_App = Any # flask is not part of typeshed +_Response = Any # flask is not part of typeshed +_MultiDict = Any # werkzeug is not part of typeshed +_Options = TypedDict( + "_Options", + { + "resources": dict[str, dict[str, Any]] | list[str] | str | None, + "origins": str | list[str] | None, + "methods": str | list[str] | None, + "expose_headers": str | list[str] | None, + "allow_headers": str | list[str] | None, + "supports_credentials": bool | None, + "max_age": timedelta | int | str | None, + "send_wildcard": bool | None, + "vary_header": bool | None, + "automatic_options": bool | None, + "intercept_exceptions": bool | None, + "always_send": bool | None, + }, + total=False, +) + +LOG: Logger +ACL_ORIGIN: str +ACL_METHODS: str +ACL_ALLOW_HEADERS: str +ACL_EXPOSE_HEADERS: str +ACL_CREDENTIALS: str +ACL_MAX_AGE: str +ACL_REQUEST_METHOD: str +ACL_REQUEST_HEADERS: str +ALL_METHODS: list[str] +CONFIG_OPTIONS: list[str] +FLASK_CORS_EVALUATED: str +RegexObject = Pattern[str] +DEFAULT_OPTIONS: _Options + +def parse_resources(resources: dict[str, _Options] | Iterable[str] | str | Pattern[str]) -> list[tuple[str, _Options]]: ... +def get_regexp_pattern(regexp: str | Pattern[str]) -> str: ... +def get_cors_origins(options: _Options, request_origin: str | None) -> list[str] | None: ... +def get_allow_headers(options: _Options, acl_request_headers: str | None) -> str | None: ... +def get_cors_headers(options: _Options, request_headers: dict[str, Any], request_method: str) -> _MultiDict: ... +def set_cors_headers(resp: _Response, options: _Options) -> _Response: ... +def probably_regex(maybe_regex: str | Pattern[str]) -> bool: ... +def re_fix(reg: str) -> str: ... +def try_match_any(inst: str, patterns: Iterable[str | Pattern[str]]) -> bool: ... +def try_match(request_origin: str, maybe_regex: str | Pattern[str]) -> bool: ... +def get_cors_options(appInstance: _App | None, *dicts: _Options) -> _Options: ... +def get_app_kwarg_dict(appInstance: _App | None = ...) -> _Options: ... +def flexible_str(obj: object) -> str | None: ... +def serialize_option(options_dict: _Options, key: str, upper: bool = ...) -> None: ... +@overload +def ensure_iterable(inst: str) -> list[str]: ... # type: ignore +@overload +def ensure_iterable(inst: _IterableT) -> _IterableT: ... # type: ignore +@overload +def ensure_iterable(inst: _T) -> list[_T]: ... +def sanitize_regex_param(param: str | list[str]) -> list[str]: ... +def serialize_options(opts: _Options) -> _Options: ... diff --git a/stubs/Flask-Cors/flask_cors/decorator.pyi b/stubs/Flask-Cors/flask_cors/decorator.pyi new file mode 100644 index 000000000..5b338c0c9 --- /dev/null +++ b/stubs/Flask-Cors/flask_cors/decorator.pyi @@ -0,0 +1,21 @@ +from datetime import timedelta +from logging import Logger +from typing import Any, Callable +from typing_extensions import ParamSpec + +_P = ParamSpec("_P") + +LOG: Logger + +def cross_origin( + *args: Any, + origins: str | list[str] | None, + methods: str | list[str] | None, + expose_headers: str | list[str] | None, + allow_headers: str | list[str] | None, + supports_credentials: bool | None, + max_age: timedelta | int | str | None, + send_wildcard: bool | None, + vary_header: bool | None, + automatic_options: bool | None, +) -> Callable[[Callable[_P, Any]], Callable[_P, Any]]: ... diff --git a/stubs/Flask-Cors/flask_cors/extension.pyi b/stubs/Flask-Cors/flask_cors/extension.pyi new file mode 100644 index 000000000..4e2a630a7 --- /dev/null +++ b/stubs/Flask-Cors/flask_cors/extension.pyi @@ -0,0 +1,41 @@ +from datetime import timedelta +from logging import Logger +from typing import Any, Callable, Iterable + +_App = Any # flask is not part of typeshed + +LOG: Logger + +class CORS: + def __init__( + self, + app: Any | None = ..., + *, + resources: dict[str, dict[str, Any]] | list[str] | str | None = ..., + origins: str | list[str] | None = ..., + methods: str | list[str] | None = ..., + expose_headers: str | list[str] | None = ..., + allow_headers: str | list[str] | None = ..., + supports_credentials: bool | None = ..., + max_age: timedelta | int | str | None = ..., + send_wildcard: bool | None = ..., + vary_header: bool | None = ..., + **kwargs: Any, + ) -> None: ... + def init_app( + self, + app: _App, + *, + resources: dict[str, dict[str, Any]] | list[str] | str = ..., + origins: str | list[str] = ..., + methods: str | list[str] = ..., + expose_headers: str | list[str] = ..., + allow_headers: str | list[str] = ..., + supports_credentials: bool = ..., + max_age: timedelta | int | str | None = ..., + send_wildcard: bool = ..., + vary_header: bool = ..., + **kwargs: Any, + ) -> None: ... + +def make_after_request_function(resources: Iterable[tuple[str, dict[str, Any]]]) -> Callable[..., Any]: ... diff --git a/stubs/Flask-Cors/flask_cors/version.pyi b/stubs/Flask-Cors/flask_cors/version.pyi new file mode 100644 index 000000000..bda5b5a7f --- /dev/null +++ b/stubs/Flask-Cors/flask_cors/version.pyi @@ -0,0 +1 @@ +__version__: str