diff --git a/odoo-stubs/http.pyi b/odoo-stubs/http.pyi index d31611f..1d7e8f4 100644 --- a/odoo-stubs/http.pyi +++ b/odoo-stubs/http.pyi @@ -1,185 +1,205 @@ -import werkzeug.wrappers -import werkzeug.wrappers -from typing import Any, Optional, Union +from logging import Logger +from typing import Any, Callable, Generator, Sequence, TypeVar + +import werkzeug +from werkzeug.datastructures import CombinedMultiDict +from werkzeug.exceptions import NotFound +from werkzeug.local import LocalStack +from werkzeug.routing import Map from .api import Environment +from .modules.registry import Registry from .sql_db import Cursor from .tools._vendor import sessions -_logger: Any -rpc_request: Any -rpc_response: Any -STATIC_CACHE: Any -STATIC_CACHE_LONG: Any -ALLOWED_DEBUG_MODES: Any -_request_stack: Any -request: Union[HttpRequest, JsonRequest] +_T = TypeVar('_T') -def replace_request_password(args: Any): ... +rpc_request: Logger +rpc_response: Logger +STATIC_CACHE: int +STATIC_CACHE_LONG: int +ALLOWED_DEBUG_MODES: list[str] +_request_stack: LocalStack +request: HttpRequest | JsonRequest -NO_POSTMORTEM: Any +def replace_request_password(args) -> tuple: ... -def dispatch_rpc(service_name: Any, method: Any, params: Any): ... -def local_redirect(path: Any, query: Optional[Any] = ..., keep_hash: bool = ..., code: int = ...): ... -def redirect_with_hash(url: Any, code: int = ...): ... +NO_POSTMORTEM: tuple[type[Exception], ...] + +def dispatch_rpc(service_name: str, method: str, params): ... +def local_redirect(path: str, query: dict | None = ..., keep_hash: bool = ..., code: int = ...) -> werkzeug.Response: ... +def redirect_with_hash(url: str, code: int = ...) -> werkzeug.Response: ... class WebRequest: - httprequest: werkzeug.wrappers.Request = ... - httpresponse: Response = ... - disable_db: bool = ... - endpoint: Any = ... - endpoint_arguments: Any = ... - auth_method: Any = ... - website = Environment['website'] - lang = Environment['res.lang'] - _cr: Cursor = ... - _uid: int = ... - _context: dict = ... - _env: Environment = ... - _failed: Any = ... - def __init__(self, httprequest: Any) -> None: ... + httprequest: werkzeug.Request + httpresponse: Response | None + disable_db: bool + endpoint: EndPoint | None + endpoint_arguments: Any + auth_method: str | None + website: 'odoo.model.website' + lang: 'odoo.model.res_lang' + _cr: Cursor | None + _uid: int | None + _context: dict | None + _env: Environment | None + _failed: Exception | None + def __init__(self, httprequest: werkzeug.Request) -> None: ... @property def cr(self) -> Cursor: ... @property def uid(self) -> int: ... @uid.setter - def uid(self, val: Any) -> None: ... + def uid(self, val) -> None: ... @property - def context(self): ... + def context(self) -> dict: ... @context.setter - def context(self, val: Any) -> None: ... + def context(self, val) -> None: ... @property def env(self) -> Environment: ... @property def session(self) -> OpenERPSession: ... - def __enter__(self): ... - def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: ... - def set_handler(self, endpoint: Any, arguments: Any, auth: Any) -> None: ... - def _handle_exception(self, exception: Any) -> None: ... - def _is_cors_preflight(self, endpoint: Any): ... - def _call_function(self, *args: Any, **kwargs: Any): ... - def registry_cr(self) -> None: ... + def __enter__(self: _T) -> _T: ... + def __exit__(self, exc_type, exc_value, traceback) -> None: ... + def set_handler(self, endpoint: EndPoint, arguments, auth) -> None: ... + def _handle_exception(self, exception: Exception) -> None: ... + def _is_cors_preflight(self, endpoint: EndPoint) -> bool: ... + def _call_function(self, *args, **kwargs): ... + def registry_cr(self) -> Generator[tuple[Registry, Cursor], None, None]: ... @property - def registry(self): ... + def registry(self) -> Registry: ... @property - def db(self): ... - def csrf_token(self, time_limit: int = ...): ... - def validate_csrf(self, csrf: Any): ... - def redirect(self, url: str, code=302): ... + def db(self) -> str | None: ... + def csrf_token(self, time_limit: int | None = ...): ... + def validate_csrf(self, csrf) -> bool: ... -def route(route: Optional[Any] = ..., **kw: Any): ... +def route(route: str | list[str] | None = ..., + type: str = ..., + auth: str = ..., + methods: list[str] = ..., + cors: str = ..., + csrf: bool = ..., + **kw): ... class JsonRequest(WebRequest): - _request_type: str = ... - params: Any = ... - jsonrequest: Any = ... - context: Any = ... - def __init__(self, *args: Any) -> None: ... - def _json_response(self, result: Optional[Any] = ..., error: Optional[Any] = ...): ... - def _handle_exception(self, exception: Any): ... - def dispatch(self): ... + _request_type: str + params: dict + jsonrequest: Any + context: dict + def __init__(self, *args) -> None: ... + def _json_response(self, result: Any | None = ..., error: dict | None = ...) -> Response: ... + def _handle_exception(self, exception: Exception) -> Response: ... + def dispatch(self) -> Response: ... -def serialize_exception(e: Any): ... +def serialize_exception(e: Exception) -> dict[str, Any]: ... class HttpRequest(WebRequest): - _request_type: str = ... - params: Any = ... - def __init__(self, *args: Any) -> None: ... - def _handle_exception(self, exception: Any): ... - def _is_cors_preflight(self, endpoint: Any): ... + _request_type: str + params: dict + def __init__(self, *args) -> None: ... + def _handle_exception(self, exception: Exception): ... + def _is_cors_preflight(self, endpoint: EndPoint) -> bool: ... def dispatch(self): ... - def make_response(self, data: Any, headers: Optional[Any] = ..., cookies: Optional[Any] = ...): ... - def render(self, template: Any, qcontext: Optional[Any] = ..., lazy: bool = ..., **kw: Any): ... - def not_found(self, description: Optional[Any] = ...): ... + def make_response(self, data, headers: list[tuple[str, str]] | None = ..., cookies: dict | None = ...) -> Response: ... + def render(self, template, qcontext: dict | None = ..., lazy: bool = ..., **kw) -> Response: ... + def not_found(self, description: str | Any | None = ...) -> NotFound: ... -addons_manifest: Any -controllers_per_module: Any +addons_manifest: dict +controllers_per_module: dict[str, list] class ControllerType(type): - def __init__(cls, name: Any, bases: Any, attrs: Any) -> None: ... + def __init__(cls, name: str, bases: tuple, attrs: dict) -> None: ... -Controller: Any +Controller = ControllerType('Controller', (object,), {}) class EndPoint: - method: Any = ... - original: Any = ... - routing: Any = ... - arguments: Any = ... - def __init__(self, method: Any, routing: Any) -> None: ... + method: Callable + original: Callable + routing: dict + arguments: dict + def __init__(self, method, routing) -> None: ... @property - def first_arg_is_req(self): ... - def __call__(self, *args: Any, **kw: Any): ... + def first_arg_is_req(self) -> bool: ... + def __call__(self, *args, **kw): ... + def __eq__(self, other) -> bool: ... + def __hash__(self) -> int: ... + def _as_tuple(self) -> tuple[Callable, dict]: ... + def __repr__(self) -> str: ... -def _generate_routing_rules(modules: Any, nodb_only: Any, converters: Optional[Any] = ...): ... +def _generate_routing_rules(modules: Sequence[str], nodb_only: bool, converters: Any | None = ...) -> Generator[tuple[str, EndPoint, dict], None, None]: ... class AuthenticationError(Exception): ... class SessionExpiredException(Exception): ... class OpenERPSession(sessions.Session): - inited: bool = ... - modified: bool = ... - rotate: bool = ... - def __init__(self, *args: Any, **kwargs: Any) -> None: ... - def __getattr__(self, attr: Any): ... - def __setattr__(self, k: Any, v: Any): ... - pre_uid: Any = ... - db: Any = ... - uid: Any = ... - login: Any = ... - def authenticate(self, db: Any, login: Optional[Any] = ..., password: Optional[Any] = ...): ... - session_token: Any = ... + inited: bool + modified: bool + rotate: bool + def __init__(self, *args, **kwargs) -> None: ... + def __getattr__(self, attr): ... + def __setattr__(self, k, v): ... + pre_uid: int + uid: int + db: str + login: str | None + def authenticate(self, db: str, login: str | None = ..., password: str | None = ...) -> int: ... + session_token: str | None def finalize(self) -> None: ... def check_security(self) -> None: ... def logout(self, keep_db: bool = ...) -> None: ... def _default_values(self) -> None: ... - context: Any = ... - def get_context(self): ... - def _fix_lang(self, context: Any) -> None: ... - def save_action(self, action: Any): ... - def get_action(self, key: Any): ... + context: dict + def get_context(self) -> dict: ... + def _fix_lang(self, context: dict) -> None: ... + def save_action(self, action) -> int: ... + def get_action(self, key: int): ... def save_request_data(self) -> None: ... - def load_request_data(self) -> None: ... + def load_request_data(self) -> Generator[CombinedMultiDict | None, None, None]: ... -def session_gc(session_store: Any) -> None: ... +def session_gc(session_store: sessions.FilesystemSessionStore) -> None: ... -class Response(werkzeug.wrappers.Response): - default_mimetype: str = ... - def __init__(self, *args: Any, **kw: Any) -> None: ... - template: Any = ... - qcontext: Any = ... - uid: Any = ... - def set_default(self, template: Optional[Any] = ..., qcontext: Optional[Any] = ..., uid: Optional[Any] = ...) -> None: ... +ODOO_DISABLE_SESSION_GC: bool + +class Response(werkzeug.Response): + default_mimetype: str + def __init__(self, *args, **kw) -> None: ... + template: Any + qcontext: dict + uid: int + def set_default(self, template: Any | None = ..., qcontext: dict | None = ..., uid: int | None = ...) -> None: ... @property - def is_qweb(self): ... + def is_qweb(self) -> bool: ... def render(self): ... def flatten(self) -> None: ... class DisableCacheMiddleware: - app: Any = ... - def __init__(self, app: Any) -> None: ... - def __call__(self, environ: Any, start_response: Any): ... + app: Callable + def __init__(self, app: Callable) -> None: ... + def __call__(self, environ: dict, start_response: Callable): ... class Root: - _loaded: bool = ... + _loaded: bool def __init__(self) -> None: ... - def session_store(self): ... - def nodb_routing_map(self): ... - def __call__(self, environ: Any, start_response: Any): ... + @property + def session_store(self) -> sessions.FilesystemSessionStore: ... + @property + def nodb_routing_map(self) -> Map: ... + def __call__(self, environ: dict, start_response: Callable): ... def load_addons(self) -> None: ... - def setup_session(self, httprequest: Any): ... - def setup_db(self, httprequest: Any) -> None: ... - def setup_lang(self, httprequest: Any) -> None: ... - def get_request(self, httprequest: Any): ... - def get_response(self, httprequest: Any, result: Any, explicit_session: Any): ... - def dispatch(self, environ: Any, start_response: Any): ... - def get_db_router(self, db: Any): ... + def setup_session(self, httprequest: werkzeug.Request) -> bool: ... + def setup_db(self, httprequest: werkzeug.Request) -> None: ... + def setup_lang(self, httprequest: werkzeug.Request) -> None: ... + def get_request(self, httprequest: werkzeug.Request) -> HttpRequest | JsonRequest: ... + def get_response(self, httprequest: werkzeug.Request, result, explicit_session: bool) -> Any: ... + def set_csp(self, response: werkzeug.Response) -> None: ... + def dispatch(self, environ: dict, start_response: Callable): ... + def get_db_router(self, db: str) -> Map: ... -def db_list(force: bool = ..., httprequest: Optional[Any] = ...): ... -def db_filter(dbs: Any, httprequest: Optional[Any] = ...): ... -def db_monodb(httprequest: Optional[Any] = ...): ... -def send_file(filepath_or_fp: Any, mimetype: Optional[Any] = ..., as_attachment: bool = ..., filename: Optional[Any] = ..., mtime: Optional[Any] = ..., add_etags: bool = ..., cache_timeout: Any = ..., conditional: bool = ...): ... -def content_disposition(filename: Any): ... -def set_safe_image_headers(headers: Any, content: Any): ... -def set_header_field(headers: Any, name: Any, value: Any): ... +def db_list(force: bool = ..., httprequest: werkzeug.Request | None = ...) -> list[str]: ... +def db_filter(dbs, httprequest: werkzeug.Request | None = ...) -> list[str]: ... +def db_monodb(httprequest: werkzeug.Request | None = ...) -> str | None: ... +def send_file(filepath_or_fp, mimetype: str | None = ..., as_attachment: bool = ..., filename: str | None = ..., mtime: Any | None = ..., add_etags: bool = ..., cache_timeout: int =..., conditional: bool = ...) -> Response: ... +def content_disposition(filename: str) -> str: ... +def set_safe_image_headers(headers, content): ... -root: Any +root: Root