From e0f5c762e02bb9df9dd68b9cb21a8929eac5d95a Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Sun, 16 Oct 2022 12:02:34 +0700 Subject: [PATCH] Update stubs --- odoo-stubs/api.pyi | 2 +- odoo-stubs/models.pyi | 93 +++++++++++++++++++++---------------------- 2 files changed, 46 insertions(+), 49 deletions(-) diff --git a/odoo-stubs/api.pyi b/odoo-stubs/api.pyi index d5d042e..c67da42 100644 --- a/odoo-stubs/api.pyi +++ b/odoo-stubs/api.pyi @@ -139,7 +139,7 @@ class Cache: def get_dirty_records(self, model: _ModelT, field: Field) -> _ModelT: ... def has_dirty_fields(self, records: BaseModel, fields: Iterable[Field] | None = ...) -> bool: ... def clear_dirty_field(self, field: Field) -> Collection[int]: ... - def invalidate(self, spec: list[tuple[Field, tuple | None]] | None = ...) -> None: ... + def invalidate(self, spec: list[tuple[Field, Iterable | None]] | None = ...) -> None: ... def clear(self) -> None: ... def check(self, env: Environment) -> None: ... diff --git a/odoo-stubs/models.pyi b/odoo-stubs/models.pyi index eb3d704..47a9dad 100644 --- a/odoo-stubs/models.pyi +++ b/odoo-stubs/models.pyi @@ -3,7 +3,6 @@ from re import Pattern from typing import Any, Callable, Collection, Container, Iterable, Iterator, MutableMapping, Sequence, TypeVar, Union import psycopg2 -from lxml.etree import _Element from . import api, fields from .api import Environment @@ -21,6 +20,8 @@ regex_object_name: Pattern[str] regex_pg_name: Pattern[str] regex_field_agg: Pattern[str] AUTOINIT_RECALCULATE_STORED_FIELDS: int +INSERT_BATCH_SIZE: int +SQL_DEFAULT: psycopg2.extensions.AsIs def check_object_name(name: str) -> bool: ... def raise_on_invalid_object_name(name: str) -> None: ... @@ -29,9 +30,8 @@ def check_pg_name(name: str) -> None: ... regex_private: Pattern[str] def check_method_name(name: str) -> None: ... -def same_name(f, g) -> bool: ... def fix_import_export_id_paths(fieldname: str) -> list[str]: ... -def trigger_tree_merge(node1: dict, node2: dict) -> None: ... +def merge_trigger_trees(trees: list, select: Callable[[Any], bool] = ...) -> dict: ... class MetaModel(api.Meta): module_to_models: defaultdict[str, list[type[BaseModel]]] @@ -50,6 +50,14 @@ class NewId: def __str__(self) -> str: ... def origin_ids(ids: Iterable) -> Iterator[int]: ... + +class OriginIds: + __slots__ = ['ids'] + ids: Sequence[int] + def __init__(self, ids: Sequence[int]) -> None: ... + def __iter__(self) -> Iterator[int]: ... + def __reversed__(self) -> Iterator[int]: ... + def expand_ids(id0: _T, ids: Iterable) -> Iterator[_T]: ... IdType: tuple[type[int], type[str], type[NewId]] @@ -75,16 +83,14 @@ class BaseModel(metaclass=MetaModel): _inherits: dict[str, str] _table: str _table_query: str | None - _sequence: str | None _sql_constraints: list[tuple[str, str, str]] _rec_name: str | None + _rec_names_search: Sequence[str] | None _order: str _parent_name: str _parent_store: bool _active_name: str | None - _date_name: str _fold_name: str - _needaction: bool _translate: bool _check_company_auto: bool _depends: dict[str, Iterable[str]] @@ -109,7 +115,6 @@ class BaseModel(metaclass=MetaModel): write_uid = fields.Many2one('res.users', string='Last Updated by') write_date = fields.Datetime(string='Last Updated on') CONCURRENCY_CHECK_FIELD: str - def view_init(self, fields_list: list[str]) -> None: ... def _valid_field_parameter(self, field: Field, name: str) -> bool: ... def _add_field(self, name: str, field: Field) -> None: ... def _pop_field(self, name: str) -> Field: ... @@ -130,12 +135,9 @@ class BaseModel(metaclass=MetaModel): def _ondelete_methods(self) -> list: ... @property def _onchange_methods(self) -> dict[str, list]: ... - def __new__(cls) -> None: ... - def __init__(self, pool: Registry, cr: Cursor) -> None: ... def _is_an_ordinary_table(self) -> bool: ... def __ensure_xml_id(self: _ModelT, skip: bool = ...) -> Iterator[tuple[_ModelT, str | None]]: ... def _export_rows(self, fields: list[list[str]], *, _is_toplevel_call: bool = ...) -> list[list]: ... - __export_rows = _export_rows def export_data(self, fields_to_export: list[str]) -> dict[str, list[list]]: ... def load(self, fields: list[str], data: list[list[str]]) -> dict[str, Any]: ... def _add_fake_fields(self, fields: dict[str | None, Field]) -> dict[str | None, Field]: ... @@ -145,23 +147,9 @@ class BaseModel(metaclass=MetaModel): def default_get(self, fields_list: list[str]) -> dict[str, Any]: ... def fields_get_keys(self) -> list[str]: ... def _rec_name_fallback(self) -> str: ... - def view_header_get(self, view_id: Any | None = ..., view_type: str = ...): ... def user_has_groups(self, groups: str) -> bool: ... - def _get_default_form_view(self) -> _Element: ... - def _get_default_search_view(self) -> _Element: ... - def _get_default_tree_view(self) -> _Element: ... - def _get_default_pivot_view(self) -> _Element: ... - def _get_default_kanban_view(self) -> _Element: ... - def _get_default_graph_view(self) -> _Element: ... - def _get_default_calendar_view(self) -> _Element: ... - def load_views(self, views: list, options: dict | None = ...) -> dict[str, Any]: ... - def _fields_view_get(self, view_id: int | None = ..., view_type: str = ..., toolbar: bool = ..., submenu: bool = ...) -> dict[str, Any]: ... - def fields_view_get(self, view_id: int | None = ..., view_type: str = ..., toolbar: bool = ..., submenu: bool = ...) -> dict[str, Any]: ... - def get_formview_id(self, access_uid: int | None = ...): ... - def get_formview_action(self, access_uid: int | None = ...) -> dict[str, Any]: ... - def get_access_action(self, access_uid: int | None = ...) -> dict[str, Any]: ... - def search_count(self, args: _Domain) -> int: ... - def search(self: _ModelT, args: _Domain, offset: int = ..., limit: int | None = ..., order: str | None = ..., count: bool = ...) -> _ModelT | int: ... + def search_count(self, domain: _Domain, limit: int | None = ...) -> int: ... + def search(self: _ModelT, domain: _Domain, offset: int = ..., limit: int | None = ..., order: str | None = ..., count: bool = ...) -> _ModelT | int: ... def _compute_display_name(self) -> None: ... def name_get(self) -> list[tuple[int, str]]: ... def name_create(self, name: str) -> tuple[int, str]: ... @@ -177,8 +165,9 @@ class BaseModel(metaclass=MetaModel): def _read_group_process_groupby(self, gb: str, query: Query) -> dict[str, Any]: ... def _read_group_prepare_data(self, key, value, groupby_dict: dict[str, dict[str, Any]]) -> Any: ... def _read_group_format_result(self, data: dict, annotated_groupbys: list[dict], groupby: list, domain: _Domain) -> dict: ... - def read_group(self, domain: _Domain, fields: list[str], groupby: list[str], offset: int = ..., limit: int | None = ..., orderby: str | None = ..., lazy: bool = ...) -> list[dict[str, Any]]: ... - def _read_group_raw(self, domain: _Domain, fields: list[str], groupby: list[str], offset: int = ..., limit: int | None = ..., orderby: str | None = ..., lazy: bool = ...) -> list[dict[str, Any]]: ... + def _read_group(self, domain: _Domain, fields: list[str], groupby: str | list[str], offset: int = ..., limit: int | None = ..., orderby: str | None = ..., lazy: bool = ...) -> list[dict[str, Any]]: ... + def read_group(self, domain: _Domain, fields: list[str], groupby: str | list[str], offset: int = ..., limit: int | None = ..., orderby: str | None = ..., lazy: bool = ...) -> list[dict[str, Any]]: ... + def _read_group_raw(self, domain: _Domain, fields: list[str], groupby: str | list[str], offset: int = ..., limit: int | None = ..., orderby: str | None = ..., lazy: bool = ...) -> list[dict[str, Any]]: ... def _read_group_resolve_many2x_fields(self, data: list[dict[str, Any]], fields: list[dict[str, Any]]) -> None: ... def _inherits_join_add(self, current_model: BaseModel, parent_model_name: str, query: Query) -> str: ... def _inherits_join_calc(self, alias: str, fname: str, query: Query) -> str: ... @@ -188,9 +177,8 @@ class BaseModel(metaclass=MetaModel): def _table_has_rows(self) -> int: ... def _auto_init(self): ... def init(self) -> None: ... - def _create_parent_columns(self) -> None: ... + def _check_parent_path(self) -> None: ... def _add_sql_constraints(self) -> None: ... - def _execute_sql(self) -> None: ... def _add_inherited_fields(self) -> None: ... def _inherits_check(self) -> None: ... def _prepare_setup(self) -> None: ... @@ -198,15 +186,16 @@ class BaseModel(metaclass=MetaModel): def _setup_fields(self) -> None: ... def _setup_complete(self) -> None: ... def fields_get(self, allfields: list[str] | None = ..., attributes: list[str] | None = ...) -> dict[str, dict[str, Any]]: ... - def get_empty_list_help(self, help: str) -> str: ... def check_field_access_rights(self, operation: str, fields: Collection[str]): ... def read(self, fields: Collection[str] | None = ..., load: str = ...) -> list[dict[str, Any]]: ... + def update_field_translations(self, field_name: str, translations: dict[str, Any]) -> bool: ... + def _update_field_translations(self, field_name: str, translations: dict[str, Any], digest: Callable | None = ...) ->bool: ... + def get_field_translations(self, field_name: str, langs: list[str] | None = ...) -> tuple[list[dict[str, Any]], dict[str, Any]]: ... def _read_format(self, fnames: Collection[str], load: str = ...) -> list[dict[str, Any]]: ... def _fetch_field(self, field: Field) -> None: ... - def _read(self, fields: Collection[str]): ... + def _read(self, field_names: Collection[str]): ... def get_metadata(self) -> list[dict[str, Any]]: ... def get_base_url(self) -> str: ... - def _check_concurrency(self) -> None: ... def _check_company(self, fnames: Collection[str] | None = ...) -> None: ... def check_access_rights(self, operation: str, raise_exception: bool = ...) -> bool: ... def check_access_rule(self, operation: str) -> None: ... @@ -214,8 +203,10 @@ class BaseModel(metaclass=MetaModel): def _filter_access_rules_python(self, operation: str) -> _ModelT: ... def unlink(self): ... def write(self, vals: dict[str, Any]): ... - def _write(self, vals: dict[str, Any]): ... + def _write(self, vals: dict[str, Any]) -> None: ... def create(self: _ModelT, vals_list: list[dict[str, Any]] | dict[str, Any]) -> _ModelT: ... + def _prepare_create_values(self, vals_list: list[dict[str, Any]]) -> list[dict[str, Any]]: ... + def _add_precomputed_values(self, vals_list: list[dict[str, Any]]) -> None: ... def _create(self: _ModelT, data_list: list[dict[str, Any]]) -> _ModelT: ... def _compute_field_value(self, field: Field) -> None: ... def _parent_store_create(self) -> None: ... @@ -227,22 +218,20 @@ class BaseModel(metaclass=MetaModel): def _where_calc(self, domain: _Domain, active_test: bool = ...) -> Query: ... def _check_qorder(self, word: str) -> bool: ... def _apply_ir_rules(self, query: Query, mode: str = ...) -> None: ... - def _generate_translated_field(self, table_alias: str, field: str, query: Query) -> str: ... def _generate_m2o_order_by(self, alias: str, order_field: str, query: Query, reverse_direction: bool, seen: set | None) -> list[str]: ... def _generate_order_by_inner(self, alias: str, order_spec: str, query: Query, reverse_direction: bool = ..., seen: set | None = ...) -> list[str]: ... def _generate_order_by(self, order_spec: str | None, query: Query) -> str: ... def _flush_search(self, domain: _Domain, fields: Sequence[str] | None = ..., order: str | None = ..., seen: set | None = ...) -> None: ... - def _search(self: _ModelT, args: _Domain, offset: int = ..., limit: int | None = ..., order: str | None = ..., count: bool = ..., access_rights_uid: int | None = ...) -> Query | int: ... + def _search(self: _ModelT, domain: _Domain, offset: int = ..., limit: int | None = ..., order: str | None = ..., count: bool = ..., access_rights_uid: int | None = ...) -> Query | int: ... def copy_data(self, default: dict[str, Any] | None = ...) -> list[dict[str, Any]]: ... - def copy_translations(old: _ModelT, new: _ModelT, excluded: Container[str] = ...): ... + def copy_translations(self: _ModelT, new: _ModelT, excluded: Container[str] = ...) -> None: ... def copy(self: _ModelT, default: dict[str, Any] | None = ...) -> _ModelT: ... def exists(self: _ModelT) -> _ModelT: ... def _check_recursion(self, parent: str | None = ...) -> bool: ... def _check_m2m_recursion(self, field_name: str) -> bool: ... - def _get_external_ids(self) -> dict[id, list[str]]: ... - def get_external_id(self) -> dict[id, str]: ... - get_xml_id = get_external_id - _get_xml_ids = _get_external_ids + def _get_external_ids(self) -> dict[int, list[str]]: ... + def get_external_id(self) -> dict[int, str]: ... + def get_xml_id(self) -> dict[int, str]: ... @classmethod def is_transient(cls) -> bool: ... def search_read(self, domain: _Domain | None = ..., fields: list[str] | None = ..., offset: int = ..., limit: int | None = ..., order: str | None = ..., **read_kwargs: str) -> list[dict[str, Any]]: ... @@ -255,8 +244,7 @@ class BaseModel(metaclass=MetaModel): def _patch_method(cls, name: str, method) -> None: ... @classmethod def _revert_method(cls, name: str) -> None: ... - @classmethod - def _browse(cls: type[_ModelT], env: Environment, ids: tuple, prefetch_ids: Iterable[int]) -> _ModelT: ... + def __init__(self, env: Environment, ids: tuple, prefetch_ids: Iterable[int]) -> None: ... def browse(self: _ModelT, ids: int | NewId | Iterable[int | NewId] | None = ...) -> _ModelT: ... @property def ids(self) -> list[int]: ... @@ -275,18 +263,21 @@ class BaseModel(metaclass=MetaModel): def _convert_to_write(self, values: dict[str, Any]) -> dict[str, Any]: ... def _mapped_func(self, func: Callable): ... def mapped(self, func: Callable | str): ... - def _mapped_cache(self, name_seq: str): ... def filtered(self: _ModelT, func: Callable | str) -> _ModelT: ... def filtered_domain(self: _ModelT, domain: _Domain) -> _ModelT: ... def sorted(self: _ModelT, key: Callable | str | None = ..., reverse: bool = ...) -> _ModelT: ... def update(self, values: dict[str, Any]) -> None: ... def flush(self, fnames: Collection[str] | None = ..., records: BaseModel | None = ...) -> None: ... - def new(self: _ModelT, values=..., origin: _ModelT | None = ..., ref: Any | None = ...) -> _ModelT: ... + def flush_model(self, fnames: Iterable[str] | None = ...) -> None: ... + def flush_recordset(self, fnames: Iterable[str] | None = ...) -> None: ... + def _flush(self, fnames: Iterable[str] | None = ...) -> None: ... + def new(self: _ModelT, values: dict[str, Any] | None = ..., origin: _ModelT | None = ..., ref: Any | None = ...) -> _ModelT: ... @property def _origin(self: _ModelT) -> _ModelT: ... def __bool__(self) -> bool: ... def __len__(self) -> int: ... def __iter__(self: _ModelT) -> Iterator[_ModelT]: ... + def __reversed__(self) -> Iterator[_ModelT]: ... def __contains__(self: _ModelT, item: _ModelT | str) -> bool: ... def __add__(self: _ModelT, other: _ModelT) -> _ModelT: ... def concat(self: _ModelT, *args: _ModelT) -> _ModelT: ... @@ -308,13 +299,19 @@ class BaseModel(metaclass=MetaModel): def _cache(self) -> RecordCache: ... def _in_cache_without(self: _ModelT, field: Field, limit: int = ...) -> _ModelT: ... def refresh(self) -> None: ... - def invalidate_cache(self, fnames: Collection[str] | None = ..., ids: Any | None = ...): ... + def invalidate_cache(self, fnames: Collection[str] | None = ..., ids: Iterable[int] | None = ...) -> None: ... + def invalidate_model(self, fnames: Iterable[str] | None = ..., flush: bool = ...) -> None: ... + def invalidate_recordset(self, fnames: Iterable[str] | None = ..., flush: bool = ...) -> None: ... + def _invalidate_cache(self, fnames: Iterable[str] | None = ..., ids: Iterable[int] | None = ...) -> None: ... def modified(self, fnames: Collection[str], create: bool = ..., before: bool = ...) -> None: ... def _modified_triggers(self: _ModelT, tree: dict[Field | None, Any], create: bool = ...) -> Iterator[tuple[Field, _ModelT, bool]]: ... def recompute(self, fnames: Collection[str] | None = ..., records: Union[BaseModel, None] = ...) -> None: ... - def _dependent_fields(self, field: Field) -> Iterator[Field]: ... + def _recompute_model(self, fnames: Iterable[str] | None = ...) -> None: ... + def _recompute_recordset(self, fnames: Iterable[str] | None = ...) -> None: ... + def _recompute_field(self, field: Field, ids: Iterable[int] | None = ...) -> None: ... + @classmethod + def _dependent_fields(cls, field: Field) -> Iterator[Field]: ... def _has_onchange(self, field: Field, other_fields: Container[Field]) -> bool: ... - def _onchange_spec(self, view_info: dict | None = ...) -> dict: ... 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]) -> dict: ... def _get_placeholder_filename(self, field: str) -> str | bool: ...