diff --git a/odoo-stubs/fields.pyi b/odoo-stubs/fields.pyi index a1f9e4e..55ec180 100644 --- a/odoo-stubs/fields.pyi +++ b/odoo-stubs/fields.pyi @@ -218,6 +218,7 @@ class _String(Field[str]): def get_translation_dictionary( self, from_lang_value: str, to_lang_values: dict ) -> dict: ... + def get_translation_fallback_langs(self, env: Environment) -> tuple[str, ...]: ... def write(self, records: _ModelT, value) -> None: ... class Char(_String): diff --git a/odoo-stubs/models.pyi b/odoo-stubs/models.pyi index e150fd3..32f1d47 100644 --- a/odoo-stubs/models.pyi +++ b/odoo-stubs/models.pyi @@ -21,9 +21,9 @@ from odoo.addons.base.models.res_users import Users from . import api, fields from .api import Environment from .fields import Field -from .modules.registry import Registry +from .modules.registry import Registry, TriggerTree from .sql_db import Cursor -from .tools.query import Query +from .tools import SQL, Query _T = TypeVar("_T") _ModelT = TypeVar("_ModelT", bound=BaseModel) @@ -226,16 +226,16 @@ class BaseModel(metaclass=MetaModel): ) -> list[tuple]: ... def _read_group_select( self, aggregate_spec: str, query: Query - ) -> tuple[str, list[str]]: ... + ) -> tuple[SQL, list[str]]: ... def _read_group_groupby( self, groupby_spec: str, query: Query - ) -> tuple[str, list[str]]: ... + ) -> tuple[SQL, list[str]]: ... def _read_group_having( self, having_domain: list, query: Query - ) -> tuple[str, list, list[str]]: ... + ) -> tuple[SQL, list[str]]: ... def _read_group_orderby( - self, order: str | None, groupby_terms: dict, query: Query - ) -> tuple[list[str], list[str], list[str]]: ... + self, order: str, groupby_terms: dict[str, SQL], query: Query + ) -> tuple[SQL, SQL, list[str]]: ... def _read_group_check_field_access_rights( self, field_names: Collection[str] ) -> None: ... @@ -283,9 +283,12 @@ class BaseModel(metaclass=MetaModel): lazy: bool = ..., ) -> list[dict[str, Any]]: ... def _inherits_join_calc(self, alias: str, fname: str, query: Query) -> str: ... - def _inherits_join_calc_properties( - self, alias: str, fname: str, query: Query, property_name: str - ) -> str: ... + def _field_to_sql( + self, alias: str, fname: str, query: Query | None = ... + ) -> SQL: ... + def _field_properties_to_sql( + self, alias: str, fname: str, property_name: str, query: Query + ) -> SQL: ... def get_property_definition(self, full_name: str) -> dict: ... def _parent_store_compute(self): ... def _check_removed_columns(self, log: bool = ...) -> None: ... @@ -366,22 +369,12 @@ class BaseModel(metaclass=MetaModel): def _where_calc(self, domain: list, active_test: bool = ...) -> Query: ... def _check_qorder(self, word: str) -> bool: ... def _apply_ir_rules(self, query: Query, mode: str = ...) -> None: ... - 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 _order_to_sql( + self, order: str, query: Query, alias: str | None = ..., reverse: bool = ... + ) -> SQL: ... + def _order_field_to_sql( + self, alias: str, field_name: str, direction: SQL, nulls: SQL, query: Query + ) -> SQL: ... def _generate_order_by(self, order_spec: str | None, query: Query) -> str: ... def _flush_search( self, @@ -527,7 +520,7 @@ class BaseModel(metaclass=MetaModel): self, fnames: Collection[str], create: bool = ..., before: bool = ... ) -> None: ... def _modified_triggers( - self: _ModelT, tree: dict[Field | None, Any], create: bool = ... + self: _ModelT, tree: TriggerTree, create: bool = ... ) -> Iterator[tuple[Field, _ModelT, bool]]: ... def _recompute_model(self, fnames: Iterable[str] | None = ...) -> None: ... def _recompute_recordset(self, fnames: Iterable[str] | None = ...) -> None: ... diff --git a/odoo-stubs/modules/module.pyi b/odoo-stubs/modules/module.pyi index 108545e..8b0f06e 100644 --- a/odoo-stubs/modules/module.pyi +++ b/odoo-stubs/modules/module.pyi @@ -18,6 +18,7 @@ def get_module_path( ) -> str | Literal[False]: ... def get_module_filetree(module: str, dir: str = ...) -> dict: ... def get_resource_path(module: str, *args) -> str | Literal[False]: ... + get_module_resource = get_resource_path check_resource_path = get_resource_path diff --git a/odoo-stubs/osv/expression.pyi b/odoo-stubs/osv/expression.pyi index e0a1e84..2719779 100644 --- a/odoo-stubs/osv/expression.pyi +++ b/odoo-stubs/osv/expression.pyi @@ -3,7 +3,7 @@ from typing import Any, Callable from ..models import MAGIC_COLUMNS as MAGIC_COLUMNS from ..models import BaseModel from ..sql_db import Cursor -from ..tools.query import Query +from ..tools import SQL, Query NOT_OPERATOR: str OR_OPERATOR: str @@ -13,12 +13,12 @@ TERM_OPERATORS: tuple[str, ...] NEGATIVE_TERM_OPERATORS: tuple[str, ...] DOMAIN_OPERATORS_NEGATION: dict[str, str] TERM_OPERATORS_NEGATION: dict[str, str] -ANY_INSELECT: dict[str, str] ANY_IN: dict[str, str] TRUE_LEAF: tuple FALSE_LEAF: tuple TRUE_DOMAIN: list[tuple] FALSE_DOMAIN: list[tuple] +SQL_OPERATORS: dict[str, SQL] def normalize_domain(domain: list) -> list: ... def is_false(model, domain: list) -> bool: ... diff --git a/odoo-stubs/tests/common.pyi b/odoo-stubs/tests/common.pyi index 5efb387..82658d2 100644 --- a/odoo-stubs/tests/common.pyi +++ b/odoo-stubs/tests/common.pyi @@ -123,6 +123,14 @@ class ChromeBrowserException(Exception): ... def fmap(future, map_fun): ... def fchain(future, next_callback): ... +def save_test_file( + test_name: str, + content, + prefix: str, + extension: str = ..., + logger=..., + document_type: str = ..., +) -> None: ... class ChromeBrowser: remote_debugging_port: int @@ -131,7 +139,6 @@ class ChromeBrowser: devtools_port: int | None ws: WebSocket | None user_data_dir: str - screenshots_dir: str screencasts_dir: str | None screencast_frames: list sigxcpu_handler: Any @@ -144,9 +151,7 @@ class ChromeBrowser: def stop(self) -> None: ... @property def executable(self) -> str | None: ... - def take_screenshot( - self, prefix: str = ..., suffix: str | None = ... - ) -> Future: ... + def take_screenshot(self, prefix: str = ...) -> Future: ... def start_screencast(self) -> None: ... def set_cookie(self, name: str, value, path, domain) -> None: ... def delete_cookie(self, name: str, **kwargs) -> None: ... diff --git a/odoo-stubs/tools/misc.pyi b/odoo-stubs/tools/misc.pyi index da151d1..90ea0f2 100644 --- a/odoo-stubs/tools/misc.pyi +++ b/odoo-stubs/tools/misc.pyi @@ -315,3 +315,4 @@ def has_list_types( ) -> bool: ... def get_flag(country_code: str) -> str: ... def format_frame(frame: FrameType) -> str: ... +def named_to_positional_printf(string: str, args: Mapping) -> tuple[str, tuple]: ... diff --git a/odoo-stubs/tools/query.pyi b/odoo-stubs/tools/query.pyi index e273b70..f9bfd71 100644 --- a/odoo-stubs/tools/query.pyi +++ b/odoo-stubs/tools/query.pyi @@ -4,7 +4,6 @@ from ..sql_db import Cursor from . import SQL class Query: - order: str | None limit: int | None offset: int | None def __init__( @@ -35,6 +34,10 @@ class Query: link: str, ) -> str: ... @property + def order(self) -> SQL | None: ... + @order.setter + def order(self, value: SQL | str | None): ... + @property def table(self) -> str: ... @property def from_clause(self) -> SQL: ... diff --git a/odoo-stubs/tools/translate.pyi b/odoo-stubs/tools/translate.pyi index da97005..ff49b5d 100644 --- a/odoo-stubs/tools/translate.pyi +++ b/odoo-stubs/tools/translate.pyi @@ -106,6 +106,9 @@ class TarFileWriter: def trans_export( lang: str, modules: list[str], buffer, format: str, cr: Cursor ) -> None: ... +def trans_export_records( + lang: str, model_name: str, ids, buffer, format: str, cr: Cursor +) -> None: ... def babel_extract_qweb(fileobj: IO, keywords, comment_tags, options) -> list[tuple]: ... def extract_formula_terms(formula: str) -> Iterator[str]: ... def extract_spreadsheet_terms( @@ -114,13 +117,14 @@ def extract_spreadsheet_terms( ImdInfo = namedtuple("ExternalId", ["name", "model", "res_id", "module"]) -class TranslationModuleReader: +class TranslationReader: env: Environment - def __init__( - self, cr: Cursor, modules: list[str] | None = ..., lang: str | None = ... - ) -> None: ... + def __init__(self, cr: Cursor, lang: str | None = ...) -> None: ... def __iter__(self) -> Iterable[tuple]: ... +class TranslationRecordReader(TranslationReader): ... +class TranslationModuleReader(TranslationReader): ... + def DeepDefaultDict() -> defaultdict: ... class TranslationImporter: