Update stubs

This commit is contained in:
Trinh Anh Ngoc
2022-10-11 23:31:55 +07:00
parent 6144774401
commit b714b79c3d
6 changed files with 235 additions and 139 deletions

View File

@@ -316,7 +316,7 @@ class BaseModel(metaclass=MetaModel):
def _has_onchange(self, field: Field, other_fields: Container[Field]) -> bool: ... def _has_onchange(self, field: Field, other_fields: Container[Field]) -> bool: ...
def _onchange_spec(self, view_info: dict | None = ...) -> dict: ... def _onchange_spec(self, view_info: dict | None = ...) -> dict: ...
def _onchange_eval(self, field_name: str, onchange: str, result: dict) -> None: ... def _onchange_eval(self, field_name: str, onchange: str, result: dict) -> None: ...
def onchange(self, values: dict[str, Any], field_name: str | list[str] | bool, field_onchange: dict[str, str]): ... def onchange(self, values: dict[str, Any], field_name: str | list[str] | bool, field_onchange: dict[str, str]) -> dict: ...
def _get_placeholder_filename(self, field: str) -> str | bool: ... def _get_placeholder_filename(self, field: str) -> str | bool: ...
def _populate_factories(self) -> list[tuple[str, Iterator]]: ... def _populate_factories(self) -> list[tuple[str, Iterator]]: ...
@property @property

View File

@@ -1,41 +1,54 @@
import collections import collections
import logging import logging
import unittest import unittest
from typing import Any from re import Pattern
from itertools import count
from typing import Any, Callable, Generator, Generic, Iterator, Literal, Mapping, Match, TypeVar
from xmlrpc import client as xmlrpclib from xmlrpc import client as xmlrpclib
import requests import requests
from lxml.etree import _Element
from websocket import WebSocket
from ..api import Environment from ..api import Environment
from ..http import OpenERPSession from ..http import OpenERPSession
from ..models import BaseModel
from ..modules.registry import Registry from ..modules.registry import Registry
from ..sql_db import BaseCursor, Cursor from ..sql_db import BaseCursor, Cursor
from ..tools import profiler
from ..tools._vendor.sessions import Session
from ..tools.profiler import Profiler
_logger: Any _T = TypeVar('_T')
ADDONS_PATH: Any _CallableT = TypeVar('_CallableT', bound=Callable)
_ModelT = TypeVar('_ModelT', bound=BaseModel)
_FormT = TypeVar('_FormT', bound=Form)
ADDONS_PATH: str
HOST: str HOST: str
ADMIN_USER_ID: Any ADMIN_USER_ID: int
def get_db_name(): ... def get_db_name() -> str: ...
standalone_tests: Any standalone_tests: collections.defaultdict[str, list]
def standalone(*tags): ... def standalone(*tags: str) -> Callable[[_CallableT], _CallableT]: ...
DB: Any DB: str
def new_test_user(env, login: str = ..., groups: str = ..., context: Any | None = ..., **kwargs): ... def new_test_user(env: Environment, login: str = ..., groups: str = ..., context: dict | None = ..., **kwargs) -> 'odoo.model.res_users': ...
class RecordCapturer: class RecordCapturer:
_model: Any _model: BaseModel
_domain: Any _domain: list
def __init__(self, model, domain) -> None: ... def __init__(self, model: BaseModel, domain: list) -> None: ...
_before: Any _before: BaseModel | None
_after: Any _after: BaseModel | None
def __enter__(self): ... def __enter__(self: _T) -> _T: ...
def __exit__(self, exc_type, exc_value, exc_traceback) -> None: ... def __exit__(self, exc_type, exc_value, exc_traceback) -> None: ...
@property @property
def records(self): ... def records(self) -> BaseModel: ...
class OdooSuite(unittest.suite.TestSuite): class OdooSuite(unittest.suite.TestSuite):
def __init__(self, *args, **kwargs) -> None: ... def __init__(self, *args, **kwargs) -> None: ...
@@ -47,10 +60,14 @@ class OdooSuite(unittest.suite.TestSuite):
class MetaCase(type): class MetaCase(type):
def __init__(cls, name, bases, attrs) -> None: ... def __init__(cls, name, bases, attrs) -> None: ...
def _normalize_arch_for_assert(arch_string, parser_method: str = ...): ... def _normalize_arch_for_assert(arch_string: str, parser_method: str = ...) -> str: ...
class BaseCase(unittest.TestCase, metaclass=MetaCase): class BaseCase(unittest.TestCase, metaclass=MetaCase):
_class_cleanups: Any _class_cleanups: list
tearDown_exceptions: list
registry: Registry
env: Environment
cr: Cursor
@classmethod @classmethod
def addClassCleanup(cls, function, *args, **kwargs) -> None: ... def addClassCleanup(cls, function, *args, **kwargs) -> None: ...
@classmethod @classmethod
@@ -62,27 +79,26 @@ class BaseCase(unittest.TestCase, metaclass=MetaCase):
def cursor(self) -> Cursor: ... def cursor(self) -> Cursor: ...
@property @property
def uid(self) -> int: ... def uid(self) -> int: ...
env: Environment
@uid.setter @uid.setter
def uid(self, user) -> None: ... def uid(self, user) -> None: ...
def ref(self, xid): ... def ref(self, xid: str) -> int: ...
def browse_ref(self, xid): ... def browse_ref(self, xid: str) -> BaseModel | None: ...
def patch(self, obj, key, val) -> None: ... def patch(self, obj, key, val) -> None: ...
def with_user(self, login) -> None: ... def with_user(self, login: str) -> None: ...
def _assertRaises(self, exception, *, msg: Any | None = ...) -> None: ... def _assertRaises(self, exception, *, msg: Any | None = ...) -> Generator[Any, None, None]: ...
def assertRaises(self, exception, func: Any | None = ..., *args, **kwargs): ... def assertRaises(self, exception, func: Any | None = ..., *args, **kwargs) -> Generator[Any, None, None] | None: ...
def assertQueries(self, expected, flush: bool = ...): ... def assertQueries(self, expected, flush: bool = ...) -> Generator[list, None, None]: ...
def assertQueryCount(self, default: int = ..., flush: bool = ..., **counters): ... def assertQueryCount(self, default: int = ..., flush: bool = ..., **counters) -> Generator[None, None, None]: ...
def assertRecordValues(self, records, expected_values): ... def assertRecordValues(self, records: BaseModel, expected_values: list[dict[str, Any]]) -> None: ...
def assertItemsEqual(self, a, b, msg: Any | None = ...) -> None: ... def assertItemsEqual(self, a, b, msg: str | None = ...) -> None: ...
def assertTreesEqual(self, n1, n2, msg: Any | None = ...) -> None: ... def assertTreesEqual(self, n1, n2, msg: str | None = ...) -> None: ...
def _assertXMLEqual(self, original, expected, parser: str = ...) -> None: ... def _assertXMLEqual(self, original: str, expected: str, parser: str = ...) -> None: ...
def assertXMLEqual(self, original, expected): ... def assertXMLEqual(self, original: str, expected: str) -> None: ...
def assertHTMLEqual(self, original, expected): ... def assertHTMLEqual(self, original: str, expected: str) -> None: ...
profile_session: Any profile_session: str
def profile(self, **kwargs): ... def profile(self, **kwargs) -> Profiler: ...
savepoint_seq: Any savepoint_seq: count[int]
class TransactionCase(BaseCase): class TransactionCase(BaseCase):
registry: Registry registry: Registry
@@ -90,7 +106,7 @@ class TransactionCase(BaseCase):
cr: Cursor cr: Cursor
@classmethod @classmethod
def setUpClass(cls) -> None: ... def setUpClass(cls) -> None: ...
_savepoint_id: Any _savepoint_id: int
def setUp(self): ... def setUp(self): ...
class SavepointCase(TransactionCase): class SavepointCase(TransactionCase):
@@ -98,9 +114,6 @@ class SavepointCase(TransactionCase):
def __init_subclass__(cls) -> None: ... def __init_subclass__(cls) -> None: ...
class SingleTransactionCase(BaseCase): class SingleTransactionCase(BaseCase):
registry: Registry
env: Environment
cr: Cursor
@classmethod @classmethod
def __init_subclass__(cls) -> None: ... def __init_subclass__(cls) -> None: ...
@classmethod @classmethod
@@ -110,56 +123,55 @@ class SingleTransactionCase(BaseCase):
class ChromeBrowserException(Exception): ... class ChromeBrowserException(Exception): ...
class ChromeBrowser: class ChromeBrowser:
_logger: Any test_class: str
test_class: Any devtools_port: int | None
devtools_port: Any
ws_url: str ws_url: str
ws: Any ws: WebSocket | None
request_id: int request_id: int
user_data_dir: Any user_data_dir: str
chrome_pid: Any chrome_pid: int | None
screenshots_dir: Any screenshots_dir: str
screencasts_dir: Any screencasts_dir: str | None
screencast_frames: Any screencast_frames: list
window_size: Any window_size: str
sigxcpu_handler: Any sigxcpu_handler: Any
def __init__(self, logger, window_size, test_class) -> None: ... def __init__(self, logger: logging.Logger, window_size: str, test_class: str) -> None: ...
def signal_handler(self, sig, frame) -> None: ... def signal_handler(self, sig, frame) -> None: ...
def stop(self) -> None: ... def stop(self) -> None: ...
@property @property
def executable(self): ... def executable(self) -> str | None: ...
def _spawn_chrome(self, cmd): ... def _spawn_chrome(self, cmd: list[str]) -> int | None: ...
def _chrome_start(self) -> None: ... def _chrome_start(self) -> None: ...
def _find_websocket(self) -> None: ... def _find_websocket(self) -> None: ...
def _json_command(self, command, timeout: int = ..., get_key: Any | None = ...): ... def _json_command(self, command: str, timeout: int = ..., get_key: Any | None = ...): ...
def _open_websocket(self) -> None: ... def _open_websocket(self) -> None: ...
def _websocket_send(self, method, params: Any | None = ...): ... def _websocket_send(self, method: str, params: Any | None = ...) -> int | None: ...
def _get_message(self, raise_log_error: bool = ...): ... def _get_message(self, raise_log_error: bool = ...) -> dict: ...
_TO_LEVEL: Any _TO_LEVEL: dict[str, int]
def _websocket_wait_id(self, awaited_id, timeout: int = ...): ... def _websocket_wait_id(self, awaited_id: int, timeout: int = ...) -> dict: ...
def _websocket_wait_event(self, method, params: Any | None = ..., timeout: int = ...): ... def _websocket_wait_event(self, method: str, params: dict | None = ..., timeout: int = ...) -> dict | None: ...
def take_screenshot(self, prefix: str = ..., suffix: Any | None = ...) -> None: ... def take_screenshot(self, prefix: str = ..., suffix: str | None = ...) -> None: ...
def _save_screencast(self, prefix: str = ...) -> None: ... def _save_screencast(self, prefix: str = ...) -> None: ...
screencasts_frames_dir: Any screencasts_frames_dir: str
def start_screencast(self) -> None: ... def start_screencast(self) -> None: ...
def set_cookie(self, name, value, path, domain): ... def set_cookie(self, name: str, value, path, domain) -> dict: ...
def delete_cookie(self, name, **kwargs): ... def delete_cookie(self, name: str, **kwargs) -> dict: ...
def _wait_ready(self, ready_code, timeout: int = ...): ... def _wait_ready(self, ready_code, timeout: int = ...) -> bool: ...
def _wait_code_ok(self, code, timeout): ... def _wait_code_ok(self, code, timeout: float) -> Literal[True] | None: ...
def navigate_to(self, url, wait_stop: bool = ...) -> None: ... def navigate_to(self, url: str, wait_stop: bool = ...) -> None: ...
def clear(self) -> None: ... def clear(self) -> None: ...
def _from_remoteobject(self, arg): ... def _from_remoteobject(self, arg: Mapping): ...
LINE_PATTERN: str LINE_PATTERN: str
def _format_stack(self, logrecord) -> None: ... def _format_stack(self, logrecord: Mapping) -> None: ...
def console_formatter(self, args): ... def console_formatter(self, args: list) -> Callable[[Match[str]], str]: ...
class Opener(requests.Session): class Opener(requests.Session):
cr: Any cr: BaseCursor
def __init__(self, cr: BaseCursor) -> None: ... def __init__(self, cr: BaseCursor) -> None: ...
def request(self, *args, **kwargs): ... def request(self, *args, **kwargs): ...
class Transport(xmlrpclib.Transport): class Transport(xmlrpclib.Transport):
cr: Any cr: BaseCursor
def __init__(self, cr: BaseCursor) -> None: ... def __init__(self, cr: BaseCursor) -> None: ...
def request(self, *args, **kwargs): ... def request(self, *args, **kwargs): ...
@@ -179,102 +191,110 @@ class HttpCase(TransactionCase):
def start_browser(cls) -> None: ... def start_browser(cls) -> None: ...
@classmethod @classmethod
def terminate_browser(cls) -> None: ... def terminate_browser(cls) -> None: ...
def url_open(self, url, data: Any | None = ..., files: Any | None = ..., timeout: int = ..., headers: Any | None = ..., allow_redirects: bool = ..., head: bool = ...): ... def url_open(self, url: str, data: Any | None = ..., files: Mapping | None = ..., timeout: int = ...,
def _wait_remaining_requests(self, timeout: int = ...): ... headers: Mapping | None = ..., allow_redirects: bool = ..., head: bool = ...) -> requests.Response: ...
def _wait_remaining_requests(self, timeout: int = ...) -> None: ...
def logout(self, keep_db: bool = ...) -> None: ... def logout(self, keep_db: bool = ...) -> None: ...
session: OpenERPSession session: OpenERPSession
def authenticate(self, user, password): ... def authenticate(self, user, password) -> Session: ...
def browser_js(self, url_path, code, ready: str = ..., login: Any | None = ..., timeout: int = ..., **kw) -> None: ... def browser_js(self, url_path: str, code: str, ready: str = ..., login: str | None = ..., timeout: int = ..., **kw) -> None: ...
@classmethod @classmethod
def base_url(cls): ... def base_url(cls) -> str: ...
def start_tour(self, url_path, tour_name, step_delay: Any | None = ..., **kwargs): ... def start_tour(self, url_path: str, tour_name: str, step_delay: float | None = ..., **kwargs) -> None: ...
def profile(self, **kwargs) -> profiler.Nested: ...
class HttpSavepointCase(HttpCase): class HttpSavepointCase(HttpCase):
@classmethod @classmethod
def __init_subclass__(cls) -> None: ... def __init_subclass__(cls) -> None: ...
def users(*logins): ... def users(*logins: str) -> Callable[[_CallableT], _CallableT]: ...
def warmup(func, *args, **kwargs) -> None: ... def warmup(func: _CallableT, *args, **kwargs) -> _CallableT: ...
def can_import(module): ... def can_import(module: str) -> bool: ...
ref_re: Any ref_re: Pattern
class Form: class Form(Generic[_ModelT]):
def __init__(self, recordp, view: Any | None = ...) -> None: ... _env: Environment
def _o2m_set_edition_view(self, descr, node, level) -> None: ... _model: _ModelT
def __str__(self): ... _view: dict
def _process_fvg(self, model, fvg, level: int = ...) -> None: ... _values: dict
def _init_from_defaults(self, model) -> None: ... _changed: set
def _init_from_values(self, values) -> None: ... def __init__(self, recordp: _ModelT, view: _ModelT | str | None = ...) -> None: ...
def __getattr__(self, field): ... def _o2m_set_edition_view(self, descr: dict, node: _Element, level: int) -> None: ...
def _get_modifier(self, field, modifier, default: bool = ..., modmap: Any | None = ..., vals: Any | None = ...): ... def __str__(self) -> str: ...
_OPS: Any def _process_fvg(self, model: BaseModel, fvg: dict, level: int = ...) -> None: ...
def _get_context(self, field): ... def _init_from_defaults(self, model: BaseModel) -> None: ...
def __setattr__(self, field, value) -> None: ... def _init_from_values(self, values: BaseModel) -> None: ...
def __enter__(self) -> Form: ... def __getattr__(self, field: str): ...
def _get_modifier(self, field: str, modifier: str, *, default: Any = ..., view: Any = ..., modmap: Any | None = ...,
vals: Any | None = ...): ...
_OPS: dict[str, Callable[..., bool]]
def _get_context(self, field: str): ...
def __setattr__(self, field: str, value) -> None: ...
def __enter__(self: _FormT) -> _FormT: ...
def __exit__(self, etype, _evalue, _etb) -> None: ... def __exit__(self, etype, _evalue, _etb) -> None: ...
def save(self): ... def save(self) -> _ModelT: ...
def _values_to_save(self, all_fields: bool = ...): ... def _values_to_save(self, all_fields: bool = ...) -> dict: ...
def _values_to_save_(self, record_values, fields, view, changed, all_fields: bool = ..., modifiers_values: Any | None = ..., parent_link: Any | None = ...): ... def _values_to_save_(self, record_values: dict, fields: dict, view: Any, changed: set, all_fields: bool = ...,
def _perform_onchange(self, fields): ... modifiers_values: dict | None = ..., parent_link: Any | None = ...) -> dict: ...
def _onchange_values(self): ... def _perform_onchange(self, fields: list[str]) -> dict: ...
def _onchange_values_(self, fields, record): ... def _onchange_values(self) -> dict: ...
def _cleanup_onchange(self, descr, value, current): ... def _onchange_values_(self, fields, record: dict) -> dict: ...
def _cleanup_onchange(self, descr: dict, value, current): ...
class O2MForm(Form): class O2MForm(Form):
def __init__(self, proxy, index: Any | None = ...) -> None: ... _proxy: O2MProxy
def _get_modifier(self, field, modifier, default: bool = ..., modmap: Any | None = ..., vals: Any | None = ...): ... _index: int | None
def _onchange_values(self): ... def __init__(self, proxy: O2MProxy, index: int | None = ...) -> None: ...
def _get_modifier(self, field: str, modifier: str, *, default: Any = ..., view: Any = ..., modmap: Any | None = ...,
vals: Any | None = ...): ...
def _onchange_values(self) -> dict: ...
def save(self) -> None: ... def save(self) -> None: ...
def _values_to_save(self, all_fields: bool = ...): ... def _values_to_save(self, all_fields: bool = ...) -> UpdateDict: ...
class UpdateDict(dict): class UpdateDict(dict):
_changed: Any _changed: set
def __init__(self, *args, **kwargs) -> None: ... def __init__(self, *args, **kwargs) -> None: ...
def changed_items(self): ... def changed_items(self) -> Iterator[tuple[Any, Any]]: ...
def update(self, *args, **kw) -> None: ... def update(self, *args, **kw) -> None: ...
class X2MProxy: class X2MProxy:
_parent: Any _parent: Form
_field: Any _field: str
def _assert_editable(self) -> None: ... def _assert_editable(self) -> None: ...
class O2MProxy(X2MProxy): class O2MProxy(X2MProxy):
_parent: Any _records: list[dict]
_field: Any def __init__(self, parent: Form, field: str) -> None: ...
_records: Any def __len__(self) -> int: ...
def __init__(self, parent, field) -> None: ...
def __len__(self): ...
@property @property
def _model(self): ... def _model(self) -> BaseModel: ...
@property @property
def _descr(self): ... def _descr(self) -> dict: ...
def _command_index(self, for_record): ... def _command_index(self, for_record: int) -> int: ...
def new(self): ... def new(self) -> O2MForm: ...
def edit(self, index): ... def edit(self, index: int): ...
def remove(self, index) -> None: ... def remove(self, index: int) -> None: ...
class M2MProxy(X2MProxy, collections.Sequence): class M2MProxy(X2MProxy, collections.Sequence):
_parent: Any def __init__(self, parent: Form, field: str) -> None: ...
_field: Any def __getitem__(self, it) -> BaseModel: ...
def __init__(self, parent, field) -> None: ... def __len__(self) -> int: ...
def __getitem__(self, it): ... def __iter__(self) -> Iterator[BaseModel]: ...
def __len__(self): ... def __contains__(self, record: BaseModel) -> bool: ...
def __iter__(self): ... def add(self, record: BaseModel) -> None: ...
def __contains__(self, record): ... def _get_ids(self) -> list[int]: ...
def add(self, record) -> None: ... def remove(self, id: int | None = ..., index: int | None = ...) -> None: ...
def _get_ids(self): ...
def remove(self, id: Any | None = ..., index: Any | None = ...) -> None: ...
def clear(self) -> None: ... def clear(self) -> None: ...
def record_to_values(fields, record): ... def record_to_values(fields: dict, record: BaseModel) -> dict: ...
def _cleanup_from_default(type_, value): ... def _cleanup_from_default(type_: str, value): ...
def _get_node(view, f, *arg): ... def _get_node(view, f, *arg): ...
def tagged(*tags): ... def tagged(*tags: str) -> Callable[[_CallableT], _CallableT]: ...
class TagsSelector: class TagsSelector:
filter_spec_re: Any filter_spec_re: Pattern
exclude: Any exclude: set
include: Any include: set
def __init__(self, spec) -> None: ... def __init__(self, spec: str) -> None: ...
def check(self, test): ... def check(self, test) -> bool: ...

View File

View File

@@ -0,0 +1,53 @@
from re import Pattern
from typing import Any, Generic, TypeVar
from werkzeug.datastructures import CallbackDict
_ModificationTrackingDictT = TypeVar('_ModificationTrackingDictT', bound=ModificationTrackingDict)
_SessionT = TypeVar('_SessionT', bound=Session)
_sha1_re: Pattern
def generate_key(salt: Any = ...) -> str: ...
class ModificationTrackingDict(CallbackDict):
__slots__ = ('modified',)
modified: bool
def __init__(self, *args, **kwargs): ...
def copy(self: _ModificationTrackingDictT) -> _ModificationTrackingDictT: ...
def __copy__(self: _ModificationTrackingDictT) -> _ModificationTrackingDictT: ...
class Session(ModificationTrackingDict):
__slots__ = ('modified', 'sid', 'new')
sid: str
new: bool
def __init__(self, data, sid, new: bool = ...): ...
def __repr__(self) -> str: ...
@property
def should_save(self) -> bool: ...
class SessionStore(Generic[_SessionT]):
session_class: type[_SessionT]
def __init__(self, session_class: type[_SessionT] | None = ...): ...
def is_valid_key(self, key) -> bool: ...
def generate_key(self, salt: Any = ...) -> str: ...
def new(self) -> _SessionT: ...
def save(self, session: _SessionT) -> None: ...
def save_if_modified(self, session: _SessionT) -> None: ...
def delete(self, session: _SessionT) -> None: ...
def get(self, sid: str) -> _SessionT: ...
_fs_transaction_suffix: str
class FilesystemSessionStore(SessionStore[_SessionT]):
path: str | None
filename_template: str
renew_missing: bool
mode: int
def __init__(self, path: str | None = ..., filename_template: str = ..., session_class: type[_SessionT] | None = ...,
renew_missing: bool = ..., mode: int = ...) -> None: ...
def get_session_filename(self, sid: str) -> str: ...
def save(self, session: _SessionT) -> None: ...
def delete(self, session: _SessionT) -> None: ...
def get(self, sid: str) -> _SessionT: ...
def list(self) -> list[str]: ...

View File

@@ -0,0 +1,23 @@
from re import Pattern
class UserAgentParser(object):
platforms: list[tuple[str, Pattern]]
browsers: list[tuple[str, Pattern]]
_browser_version_re: str
_language_re: Pattern
def __init__(self) -> None: ...
def __call__(self, user_agent: str) -> tuple[str | None, str | None, str | None, str | None]: ...
class UserAgent(object):
_parser: UserAgentParser
string: str
platform: str | None
browser: str | None
version: str | None
language: str | None
def __init__(self, environ_or_string: dict | str): ...
def to_header(self) -> str: ...
def __str__(self) -> str: ...
def __nonzero__(self) -> bool: ...
__bool__ = __nonzero__
def __repr__(self) -> str: ...

View File

@@ -123,6 +123,6 @@ class Profiler:
class Nested(Generic[_T]): class Nested(Generic[_T]):
profiler: Profiler profiler: Profiler
context_manager: ContextManager[_T] context_manager: ContextManager[_T]
def __init__(self, profiler: Profiler, context_manager: ContextManager) -> None: ... def __init__(self, profiler: Profiler, context_manager: ContextManager[_T]) -> None: ...
def __enter__(self) -> _T: ... def __enter__(self) -> _T: ...
def __exit__(self, exc_type, exc_value, traceback): ... def __exit__(self, exc_type, exc_value, traceback): ...