From 9ccd5280cb01a84c170cb2700b45e2a9ac6344ee Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Mon, 9 Sep 2024 23:04:00 +0700 Subject: [PATCH] Update stubs --- odoo-stubs/api.pyi | 10 +++++++++- odoo-stubs/fields.pyi | 4 ++-- odoo-stubs/http.pyi | 2 ++ odoo-stubs/models.pyi | 16 ++++++---------- odoo-stubs/modules/module.pyi | 2 ++ odoo-stubs/service/db.pyi | 2 ++ odoo-stubs/tests/common.pyi | 31 +++++++++++++++++++++++++++++-- odoo-stubs/tools/__init__.pyi | 1 + odoo-stubs/tools/image.pyi | 6 +++--- odoo-stubs/tools/json.pyi | 2 ++ odoo-stubs/tools/translate.pyi | 1 + 11 files changed, 59 insertions(+), 18 deletions(-) diff --git a/odoo-stubs/api.pyi b/odoo-stubs/api.pyi index f20e8ba..8b6655a 100644 --- a/odoo-stubs/api.pyi +++ b/odoo-stubs/api.pyi @@ -27,7 +27,15 @@ _T = TypeVar("_T") _ModelT = TypeVar("_ModelT", bound=BaseModel) _CallableT = TypeVar("_CallableT", bound=Callable) -INHERITED_ATTRS: tuple[str, ...] +class NewId: + origin: int | None + ref: Any + def __init__(self, origin: int | None = ..., ref: Any | None = ...) -> None: ... + def __bool__(self) -> bool: ... + def __eq__(self, other) -> bool: ... + def __hash__(self) -> int: ... + def __repr__(self) -> str: ... + def __str__(self) -> str: ... class Params: args: tuple diff --git a/odoo-stubs/fields.pyi b/odoo-stubs/fields.pyi index 0ed5cf5..4a027da 100644 --- a/odoo-stubs/fields.pyi +++ b/odoo-stubs/fields.pyi @@ -42,7 +42,7 @@ class MetaField(type): def __init__(cls: type[Field], name, bases, attrs) -> None: ... class Field(Generic[_FieldValueT], metaclass=MetaField): - type: str | None + type: str relational: bool translate: bool column_type: tuple[str, str] | None @@ -52,7 +52,7 @@ class Field(Generic[_FieldValueT], metaclass=MetaField): inherited: bool inherited_field: Field | None name: str - model_name: str + model_name: str | None comodel_name: str | None store: bool index: str | bool | None diff --git a/odoo-stubs/http.pyi b/odoo-stubs/http.pyi index f48e15f..5090db2 100644 --- a/odoo-stubs/http.pyi +++ b/odoo-stubs/http.pyi @@ -254,6 +254,8 @@ class Request: def cr(self, value) -> None: ... @property def best_lang(self) -> str | None: ... + @property + def cookies(self) -> dict: ... def csrf_token(self, time_limit: int | None = ...) -> str: ... def validate_csrf(self, csrf: str) -> bool: ... def default_context(self) -> dict: ... diff --git a/odoo-stubs/models.pyi b/odoo-stubs/models.pyi index 772a2f1..09bfd45 100644 --- a/odoo-stubs/models.pyi +++ b/odoo-stubs/models.pyi @@ -19,7 +19,7 @@ from odoo.addons.base.models.res_company import Company from odoo.addons.base.models.res_users import Users from . import api, fields -from .api import Environment +from .api import Environment, NewId from .fields import Field from .modules.registry import Registry, TriggerTree from .sql_db import Cursor @@ -52,6 +52,7 @@ def check_property_field_value_name(property_name) -> None: ... def fix_import_export_id_paths(fieldname: str) -> list[str]: ... def to_company_ids(companies): ... def check_company_domain_parent_of(self, companies) -> list: ... +def check_companies_domain_parent_of(self, companies) -> list: ... class MetaModel(api.Meta): module_to_models: defaultdict[str, list[type[BaseModel]]] @@ -60,14 +61,6 @@ class MetaModel(api.Meta): self: type[BaseModel], name: str, bases: tuple, attrs: dict ) -> None: ... -class NewId: - origin: int | None - ref: Any - def __init__(self, origin: int | None = ..., ref: Any | None = ...) -> None: ... - def __bool__(self) -> bool: ... - def __eq__(self, other) -> bool: ... - def __hash__(self) -> int: ... - def origin_ids(ids: Iterable) -> Iterator[int]: ... class OriginIds: @@ -78,7 +71,6 @@ class OriginIds: def expand_ids(id0: _T, ids: Iterable) -> Iterator[_T]: ... -IdType: tuple[type[int], type[NewId]] PREFETCH_MAX: int LOG_ACCESS_COLUMNS: list[str] MAGIC_COLUMNS: list[str] @@ -199,6 +191,7 @@ class BaseModel(metaclass=MetaModel): order: str | None = ..., ) -> _ModelT: ... def _compute_display_name(self) -> None: ... + def _search_display_name(self, operator, value): ... def name_create(self, name: str) -> tuple[int, str]: ... def name_search( self, @@ -267,6 +260,9 @@ class BaseModel(metaclass=MetaModel): def _read_group_format_result_properties( self, rows_dict: Iterable[dict], group: str ) -> None: ... + def _read_group_get_annotated_groupby( + self, groupby: str | list[str], lazy: bool + ): ... def read_group( self, domain: list, diff --git a/odoo-stubs/modules/module.pyi b/odoo-stubs/modules/module.pyi index cd05662..06294b3 100644 --- a/odoo-stubs/modules/module.pyi +++ b/odoo-stubs/modules/module.pyi @@ -1,3 +1,4 @@ +from re import Pattern from types import ModuleType from typing import Any, Literal @@ -5,6 +6,7 @@ from odoo.addons.base.models.ir_module import Module MANIFEST_NAMES: tuple[str, ...] README: list[str] +TYPED_FIELD_DEFINITION_RE: Pattern class UpgradeHook: def find_spec( diff --git a/odoo-stubs/service/db.pyi b/odoo-stubs/service/db.pyi index c1e79ee..9fbff03 100644 --- a/odoo-stubs/service/db.pyi +++ b/odoo-stubs/service/db.pyi @@ -2,11 +2,13 @@ from functools import wraps as wraps from typing import IO, Any, Callable, Iterable, Literal, TypeVar from ..sql_db import Cursor +from ..tools import SQL _CallableT = TypeVar("_CallableT", bound=Callable) class DatabaseExists(Warning): ... +def database_identifier(cr: Cursor, name: str) -> SQL: ... def check_db_management_enabled(method: _CallableT) -> _CallableT: ... def check_super(passwd: str) -> Literal[True]: ... def exp_create_database( diff --git a/odoo-stubs/tests/common.pyi b/odoo-stubs/tests/common.pyi index 3e1b9c7..1d74416 100644 --- a/odoo-stubs/tests/common.pyi +++ b/odoo-stubs/tests/common.pyi @@ -3,11 +3,14 @@ from concurrent.futures import Future from contextlib import contextmanager from itertools import count from subprocess import Popen -from typing import Any, Callable, Generator, Mapping, Match, TypeVar +from typing import Any, Callable, Generator, Iterable, Mapping, Match, TypeVar from xmlrpc import client as xmlrpclib import requests +from freezegun.api import _freeze_time +from odoo.addons.base.models.res_currency import Currency from odoo.addons.base.models.res_users import Users +from urllib3.util import Url from websocket import WebSocket from ..api import Environment @@ -100,7 +103,11 @@ class BaseCase(case.TestCase, metaclass=MetaCase): self, default: int = ..., flush: bool = ..., **counters ) -> Generator[None, None, None]: ... def assertRecordValues( - self, records: BaseModel, expected_values: list[dict[str, Any]] + self, + records: BaseModel, + expected_values: list[dict[str, Any]], + *, + field_names: Iterable[str] | None = ... ) -> None: ... def assertItemsEqual(self, a, b, msg: str | None = ...) -> None: ... def assertTreesEqual(self, n1, n2, msg: str | None = ...) -> None: ... @@ -114,6 +121,13 @@ class Like: regex: str def __init__(self, pattern) -> None: ... +class Approx: + value: float + cmp: Callable + def __init__(self, value: float, rounding: int | float | Currency) -> None: ... + def __repr__(self) -> str: ... + def __eq__(self, other: object) -> bool | NotImplemented: ... + savepoint_seq: count[int] class TransactionCase(BaseCase): @@ -121,6 +135,7 @@ class TransactionCase(BaseCase): env: Environment cr: Cursor muted_registry_logger: mute_logger + freeze_time: Any @classmethod def setUpClass(cls) -> None: ... def setUp(self) -> None: ... @@ -207,6 +222,10 @@ class HttpCase(TransactionCase): xmlrpc_object: xmlrpclib.ServerProxy opener: Opener def setUp(self) -> None: ... + def parse_http_location(self, location: str) -> Url: ... + def assertURLEqual( + self, test_url: str, truth_url: str, message: str | None = ... + ) -> None: ... def url_open( self, url: str, @@ -249,3 +268,11 @@ def users(*logins: str) -> Callable[[_CallableT], _CallableT]: ... def warmup(func: _CallableT, *args, **kwargs) -> _CallableT: ... def can_import(module: str) -> bool: ... def tagged(*tags: str) -> Callable[[_CallableT], _CallableT]: ... + +class freeze_time: + freezer: _freeze_time | None + time_to_freeze: Any + def __init__(self, time_to_freeze) -> None: ... + def __call__(self, func): ... + def __enter__(self): ... + def __exit__(self, *args) -> None: ... diff --git a/odoo-stubs/tools/__init__.pyi b/odoo-stubs/tools/__init__.pyi index 46fe4e3..4179571 100644 --- a/odoo-stubs/tools/__init__.pyi +++ b/odoo-stubs/tools/__init__.pyi @@ -22,6 +22,7 @@ from .js_transpiler import ODOO_MODULE_RE as ODOO_MODULE_RE from .js_transpiler import URL_RE as URL_RE from .js_transpiler import is_odoo_module as is_odoo_module from .js_transpiler import transpile_javascript as transpile_javascript +from .json import json_default as json_default from .mail import * from .misc import * from .parse_version import parse_version as parse_version diff --git a/odoo-stubs/tools/image.pyi b/odoo-stubs/tools/image.pyi index ef1297b..df0fa77 100644 --- a/odoo-stubs/tools/image.pyi +++ b/odoo-stubs/tools/image.pyi @@ -46,9 +46,9 @@ def average_dominant_color( ) -> tuple[Any, Any]: ... def image_fix_orientation(image: Image) -> Image: ... def binary_to_image(source: bytes) -> Image: ... -def base64_to_image(base64_source: bytes) -> Image: ... -def image_apply_opt(image: Image, output_format: str | None, **params) -> bytes: ... -def image_to_base64(image: Image, output_format: str | None, **params) -> bytes: ... +def base64_to_image(base64_source: str | bytes) -> Image: ... +def image_apply_opt(image: Image, output_format: str, **params) -> bytes: ... +def image_to_base64(image: Image, output_format: str, **params) -> bytes: ... def get_webp_size(source: bytes) -> tuple[float, float] | None: ... def is_image_size_above(base64_source_1: bytes, base64_source_2: bytes) -> bool: ... def image_guess_size_from_field_name(field_name: str) -> tuple[int, int]: ... diff --git a/odoo-stubs/tools/json.pyi b/odoo-stubs/tools/json.pyi index 1c64bbf..ff9a735 100644 --- a/odoo-stubs/tools/json.pyi +++ b/odoo-stubs/tools/json.pyi @@ -10,3 +10,5 @@ class JSON: def dumps(self, *args, **kwargs) -> _ScriptSafe: ... scriptsafe: JSON + +def json_default(obj): ... diff --git a/odoo-stubs/tools/translate.pyi b/odoo-stubs/tools/translate.pyi index 27ce448..39ffe75 100644 --- a/odoo-stubs/tools/translate.pyi +++ b/odoo-stubs/tools/translate.pyi @@ -24,6 +24,7 @@ TRANSLATED_ATTRS: dict[str, Any] def translate_attrib_value(node: _Element) -> bool: ... avoid_pattern: Pattern +space_pattern: Pattern def translate_xml_node( node: _Element,