From 27b1042b1b4cf983c20050282d171b742c23d6b0 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Sun, 22 Mar 2020 16:29:07 +0700 Subject: [PATCH 01/12] Update setup --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index b03c75f..ea3db1b 100644 --- a/setup.py +++ b/setup.py @@ -11,8 +11,8 @@ def find_stubs(package): setup( - name="Odoo12-stubs", - url="https://github.com/trinhanhngoc/odoo12-stubs", + name="odoo12-stubs", + url="https://github.com/trinhanhngoc/odoo-stubs", author="Trinh Anh Ngoc", author_email="atw1990@gmail.com", version="0.0.1", From fbc30ca8459c2a8da3ac17b77dd34deab7b24d9c Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Sun, 22 Mar 2020 16:37:42 +0700 Subject: [PATCH 02/12] Add README --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..188c7c3 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +This is used by [PyCharm Odoo](https://github.com/trinhanhngoc/pycharm-odoo) to improve +code completion. \ No newline at end of file From f0899a7c8da6b9ad70195440ef97612e6d0f4292 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Sat, 30 May 2020 23:02:11 +0700 Subject: [PATCH 03/12] Update stubs --- odoo-stubs/api.pyi | 46 +++++++-- odoo-stubs/exceptions.pyi | 41 ++++++++ odoo-stubs/fields.pyi | 131 +++++++++++++++++++++++++ odoo-stubs/http.pyi | 21 ++++- odoo-stubs/loglevels.pyi | 15 +++ odoo-stubs/models.pyi | 194 +++++++++++++++++++++++++++++++++----- odoo-stubs/netsvc.pyi | 45 +++++++++ odoo-stubs/release.pyi | 22 +++++ odoo-stubs/sql_db.pyi | 111 ++++++++++++++++++++++ 9 files changed, 591 insertions(+), 35 deletions(-) create mode 100644 odoo-stubs/exceptions.pyi create mode 100644 odoo-stubs/loglevels.pyi create mode 100644 odoo-stubs/netsvc.pyi create mode 100644 odoo-stubs/release.pyi create mode 100644 odoo-stubs/sql_db.pyi diff --git a/odoo-stubs/api.pyi b/odoo-stubs/api.pyi index 371ac72..66ebbcf 100644 --- a/odoo-stubs/api.pyi +++ b/odoo-stubs/api.pyi @@ -3,24 +3,42 @@ from typing import Any, Optional from .sql_db import Cursor + +__all__: Any +_logger: Any +WRAPPED_ATTRS: Any +INHERITED_ATTRS: Any + class Params: args: Any = ... kwargs: Any = ... def __init__(self, args: Any, kwargs: Any) -> None: ... + def __str__(self): ... class Meta(type): def __new__(meta: Any, name: Any, bases: Any, attrs: Any): ... +def attrsetter(attr: Any, value: Any): ... +def propagate(method1: Any, method2: Any): ... def constrains(*args: Any): ... def onchange(*args: Any): ... def depends(*args: Any): ... def returns(model: Any, downgrade: Optional[Any] = ..., upgrade: Optional[Any] = ...): ... +def downgrade(method: Any, value: Any, self: Any, args: Any, kwargs: Any): ... +def aggregate(method: Any, value: Any, self: Any): ... +def split_context(method: Any, args: Any, kwargs: Any): ... def model(method: Any): ... -def model_create_multi(method: Any): ... def multi(method: Any): ... def one(method: Any): ... def model_cr(method: Any): ... def model_cr_context(method: Any): ... + +_create_logger: Any + +def _model_create_single(create: Any, self: Any, arg: Any): ... +def model_create_single(method: Any): ... +def _model_create_multi(create: Any, self: Any, arg: Any): ... +def model_create_multi(method: Any): ... def cr(method: Any): ... def cr_context(method: Any): ... def cr_uid(method: Any): ... @@ -31,14 +49,21 @@ def cr_uid_ids(method: Any): ... def cr_uid_ids_context(method: Any): ... def cr_uid_records(method: Any): ... def cr_uid_records_context(method: Any): ... +def v7(method_v7: Any): ... +def v8(method_v8: Any): ... def noguess(method: Any): ... def guess(method: Any): ... +def expected(decorator: Any, func: Any): ... +def _call_kw_model(method: Any, self: Any, args: Any, kwargs: Any): ... +def _call_kw_model_create(method: Any, self: Any, args: Any, kwargs: Any): ... +def _call_kw_multi(method: Any, self: Any, args: Any, kwargs: Any): ... def call_kw(model: Any, name: Any, args: Any, kwargs: Any): ... class Environment(Mapping): cr: Cursor = ... uid: int = ... context: dict = ... + _local: Any = ... @property def envs(cls) -> Environments: ... @classmethod @@ -47,23 +72,26 @@ class Environment(Mapping): def reset(cls) -> None: ... registry: Any = ... cache: Any = ... + _cache_key: Any = ... + _protected: Any = ... dirty: Any = ... all: Any = ... def __new__(cls, cr: Any, uid: Any, context: Any) -> Environment: ... def __contains__(self, model_name: Any): ... def __getitem__(self, model_name: Any): ... - def __iter__(self): ... + def __iter__(self) -> Any: ... def __len__(self): ... - def __eq__(self, other: Any): ... - def __ne__(self, other: Any): ... - def __hash__(self): ... - def __call__(self, cr: Optional[Any] = ..., user: Optional[Any] = ..., context: Optional[Any] = ...) -> Environment: ... + def __eq__(self, other: Any) -> Any: ... + def __ne__(self, other: Any) -> Any: ... + def __hash__(self) -> Any: ... + def __call__(self, cr: Optional[Any] = ..., user: Optional[Any] = ..., context: Optional[Any] = ...): ... def ref(self, xml_id: Any, raise_if_not_found: bool = ...): ... @property def user(self): return self['res.users'] @property def lang(self) -> str: ... + def _do_in_mode(self, mode: Any) -> None: ... def do_in_draft(self): ... @property def in_draft(self): ... @@ -93,10 +121,11 @@ class Environments: recompute: bool = ... def __init__(self) -> None: ... def add(self, env: Any) -> None: ... - def __iter__(self): ... + def __iter__(self) -> Any: ... class Cache: - def __init__(self) -> None: ... + _data: Any = ... + def __init__(self): ... def contains(self, record: Any, field: Any): ... def get(self, record: Any, field: Any): ... def set(self, record: Any, field: Any, value: Any) -> None: ... @@ -115,5 +144,6 @@ class Cache: def check(self, env: Any) -> None: ... class SpecialValue: + __slots__: Any = ... get: Any = ... def __init__(self, getter: Any) -> None: ... diff --git a/odoo-stubs/exceptions.pyi b/odoo-stubs/exceptions.pyi new file mode 100644 index 0000000..979e56e --- /dev/null +++ b/odoo-stubs/exceptions.pyi @@ -0,0 +1,41 @@ +from typing import Any, Optional + +_logger: Any + +class except_orm(Exception): + name: Any = ... + value: Any = ... + args: Any = ... + def __init__(self, name: Any, value: Optional[Any] = ...) -> None: ... + +class UserError(except_orm): + def __init__(self, msg: Any) -> None: ... +Warning = UserError + +class RedirectWarning(Exception): + @property + def name(self): ... + +class AccessDenied(Exception): + __cause__: Any = ... + traceback: Any = ... + def __init__(self, message: str = ...) -> None: ... + +class AccessError(except_orm): + def __init__(self, msg: Any) -> None: ... + +class CacheMiss(except_orm, KeyError): + def __init__(self, record: Any, field: Any) -> None: ... + +class MissingError(except_orm): + def __init__(self, msg: Any) -> None: ... + +class ValidationError(except_orm): + def __init__(self, msg: Any) -> None: ... + +class DeferredException(Exception): + message: Any = ... + traceback: Any = ... + def __init__(self, msg: Any, tb: Any) -> None: ... + +class QWebException(Exception): ... diff --git a/odoo-stubs/fields.pyi b/odoo-stubs/fields.pyi index 256706a..6d5433b 100644 --- a/odoo-stubs/fields.pyi +++ b/odoo-stubs/fields.pyi @@ -7,6 +7,8 @@ DATE_LENGTH: Any DATETIME_LENGTH: Any EMPTY_DICT: Any RENAMED_ATTRS: Any +_logger: Any +_schema: Any Default: Any def copy_cache(records: Any, env: Any) -> None: ... @@ -18,6 +20,8 @@ class MetaField(type): def __new__(meta: Any, name: Any, bases: Any, attrs: Any): ... def __init__(cls, name: Any, bases: Any, attrs: Any) -> None: ... +_global_seq: Any + class Field(MetaField('DummyField', (object,), {})): type: Any = ... relational: bool = ... @@ -25,22 +29,76 @@ class Field(MetaField('DummyField', (object,), {})): column_type: Any = ... column_format: str = ... column_cast_from: Any = ... + _slots: Any = ... + _sequence: Any = ... args: Any = ... + _setup_done: Any = ... def __init__(self, string: Any = ..., **kwargs: Any) -> None: ... def new(self, **kwargs: Any): ... def __getattr__(self, name: Any): ... + _attrs: Any = ... def __setattr__(self, name: Any, value: Any) -> None: ... def set_all_attrs(self, attrs: Any) -> None: ... def __delattr__(self, name: Any) -> None: ... + def __str__(self): ... + def __repr__(self): ... def setup_base(self, model: Any, name: Any) -> None: ... + def _can_setup_from(self, field: Any): ... + def _get_attrs(self, model: Any, name: Any): ... + prefetch: bool = ... + string: Any = ... + default: Any = ... + def _setup_attrs(self, model: Any, name: Any): ... def setup_full(self, model: Any) -> None: ... + def _setup_regular_base(self, model: Any) -> None: ... + depends: Any = ... + def _setup_regular_full(self, model: Any): ... + related: Any = ... + related_field: Any = ... + compute: Any = ... + inverse: Any = ... + search: Any = ... + states: Any = ... + required: bool = ... + def _setup_related_full(self, model: Any) -> None: ... def traverse_related(self, record: Any): ... + def _compute_related(self, records: Any) -> None: ... + def _inverse_related(self, records: Any) -> None: ... + def _search_related(self, records: Any, operator: Any, value: Any): ... + _related_comodel_name: Any = ... + _related_string: Any = ... + _related_help: Any = ... + _related_groups: Any = ... + _related_group_operator: Any = ... + _related_context_dependent: Any = ... @property def base_field(self): ... + def _default_company_dependent(self, model: Any): ... + def _compute_company_dependent(self, records: Any) -> None: ... + def _inverse_company_dependent(self, records: Any) -> None: ... + def _search_company_dependent(self, records: Any, operator: Any, value: Any): ... def resolve_deps(self, model: Any, path0: Any = ..., seen: Any = ...): ... recursive: bool = ... def setup_triggers(self, model: Any) -> None: ... def get_description(self, env: Any): ... + _description_store: Any = ... + _description_manual: Any = ... + _description_depends: Any = ... + _description_related: Any = ... + _description_company_dependent: Any = ... + _description_readonly: Any = ... + _description_required: Any = ... + _description_states: Any = ... + _description_groups: Any = ... + _description_change_default: Any = ... + _description_deprecated: Any = ... + _description_group_operator: Any = ... + @property + def _description_searchable(self): ... + @property + def _description_sortable(self): ... + def _description_string(self, env: Any): ... + def _description_help(self, env: Any): ... def null(self, record: Any): ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... @@ -59,6 +117,7 @@ class Field(MetaField('DummyField', (object,), {})): def write(self, records: Any, value: Any): ... # def __get__(self, record: Any, owner: Any): ... def __set__(self, record: Any, value: Any) -> None: ... + def _compute_value(self, records: Any) -> None: ... def compute_value(self, records: Any) -> None: ... def determine_value(self, record: Any) -> None: ... def determine_draft_value(self, record: Any): ... @@ -76,19 +135,24 @@ class Boolean(Field): class Integer(Field): type: str = ... column_type: Any = ... + _slots: Any = ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... def convert_to_read(self, value: Any, record: Any, use_name_get: bool = ...): ... + def _update(self, records: Any, value: Any) -> None: ... def convert_to_export(self, value: Any, record: Any): ... class Float(Field): type: str = ... column_cast_from: Any = ... + _slots: Any = ... def __init__(self, string: Any = ..., digits: Any = ..., **kwargs: Any) -> None: ... @property def column_type(self): ... @property def digits(self): ... + _related__digits: Any = ... + _description_digits: Any = ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... def convert_to_export(self, value: Any, record: Any): ... @@ -97,14 +161,25 @@ class Monetary(Field): type: str = ... column_type: Any = ... column_cast_from: Any = ... + _slots: Any = ... def __init__(self, string: Any = ..., currency_field: Any = ..., **kwargs: Any) -> None: ... + _description_currency_field: Any = ... + currency_field: str = ... + def _setup_currency_field(self, model: Any) -> None: ... + def _setup_regular_full(self, model: Any) -> None: ... + def _setup_related_full(self, model: Any) -> None: ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... def convert_to_read(self, value: Any, record: Any, use_name_get: bool = ...): ... def convert_to_write(self, value: Any, record: Any): ... class _String(Field): + _slots: Any = ... def __init__(self, string: Any = ..., **kwargs: Any) -> None: ... + prefetch: Any = ... + def _setup_attrs(self, model: Any, name: Any) -> None: ... + _related_translate: Any = ... + def _description_translate(self, env: Any): ... def get_trans_terms(self, value: Any): ... def get_trans_func(self, records: Any): ... def check_trans_value(self, value: Any): ... @@ -112,9 +187,15 @@ class _String(Field): class Char(_String): type: str = ... column_cast_from: Any = ... + _slots: Any = ... @property def column_type(self): ... def update_db_column(self, model: Any, column: Any) -> None: ... + _related_size: Any = ... + _related_trim: Any = ... + _description_size: Any = ... + _description_trim: Any = ... + def _setup_regular_base(self, model: Any) -> None: ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... @@ -127,6 +208,20 @@ class Text(_String): class Html(_String): type: str = ... column_type: Any = ... + _slots: Any = ... + def _get_attrs(self, model: Any, name: Any): ... + _related_sanitize: Any = ... + _related_sanitize_tags: Any = ... + _related_sanitize_attributes: Any = ... + _related_sanitize_style: Any = ... + _related_strip_style: Any = ... + _related_strip_classes: Any = ... + _description_sanitize: Any = ... + _description_sanitize_tags: Any = ... + _description_sanitize_attributes: Any = ... + _description_sanitize_style: Any = ... + _description_strip_style: Any = ... + _description_strip_classes: Any = ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... @@ -175,8 +270,10 @@ class Datetime(Field): class Binary(Field): type: str = ... + _slots: Any = ... @property def column_type(self): ... + _description_attachment: Any = ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... def read(self, records: Any) -> None: ... @@ -185,9 +282,15 @@ class Binary(Field): class Selection(Field): type: str = ... + _slots: Any = ... def __init__(self, selection: Any = ..., string: Any = ..., **kwargs: Any) -> None: ... @property def column_type(self): ... + def _setup_regular_base(self, model: Any) -> None: ... + selection: Any = ... + def _setup_related_full(self, model: Any): ... + def _setup_attrs(self, model: Any, name: Any) -> None: ... + def _description_selection(self, env: Any): ... def get_values(self, env: Any): ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... @@ -206,16 +309,29 @@ class Reference(Selection): class _Relational(Field): relational: bool = ... + _slots: Any = ... + comodel_name: str = ... + def _setup_regular_base(self, model: Any) -> None: ... + @property + def _related_domain(self): ... + _related_context: Any = ... + _description_relation: Any = ... + _description_context: Any = ... + def _description_domain(self, env: Any): ... def null(self, record: Any): ... class Many2one(_Relational): type: str = ... column_type: Any = ... + _slots: Any = ... def __init__(self, comodel_name: Any = ..., string: Any = ..., **kwargs: Any) -> None: ... + delegate: Any = ... + def _setup_attrs(self, model: Any, name: Any) -> None: ... ondelete: Any = ... def update_db(self, model: Any, columns: Any): ... def update_db_column(self, model: Any, column: Any) -> None: ... def update_db_foreign_key(self, model: Any, column: Any) -> None: ... + def _update(self, records: Any, value: Any) -> None: ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... def convert_to_record(self, value: Any, record: Any): ... @@ -226,6 +342,7 @@ class Many2one(_Relational): def convert_to_onchange(self, value: Any, record: Any, names: Any): ... class _RelationalMultiUpdate: + __slots__: Any = ... record: Any = ... field: Any = ... value: Any = ... @@ -233,6 +350,8 @@ class _RelationalMultiUpdate: def __call__(self): ... class _RelationalMulti(_Relational): + _slots: Any = ... + def _update(self, records: Any, value: Any) -> None: ... def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... def convert_to_record(self, value: Any, record: Any): ... def convert_to_read(self, value: Any, record: Any, use_name_get: bool = ...): ... @@ -240,10 +359,15 @@ class _RelationalMulti(_Relational): def convert_to_onchange(self, value: Any, record: Any, names: Any): ... def convert_to_export(self, value: Any, record: Any): ... def convert_to_display_name(self, value: Any, record: Any) -> None: ... + def _compute_related(self, records: Any): ... + def _setup_regular_full(self, model: Any) -> None: ... class One2many(_RelationalMulti): type: str = ... + _slots: Any = ... def __init__(self, comodel_name: Any = ..., inverse_name: Any = ..., string: Any = ..., **kwargs: Any) -> None: ... + def _setup_regular_full(self, model: Any) -> None: ... + _description_relation_field: Any = ... def convert_to_onchange(self, value: Any, record: Any, names: Any): ... def update_db(self, model: Any, columns: Any) -> None: ... def read(self, records: Any): ... @@ -252,7 +376,13 @@ class One2many(_RelationalMulti): class Many2many(_RelationalMulti): type: str = ... + _slots: Any = ... def __init__(self, comodel_name: Any = ..., relation: Any = ..., column1: Any = ..., column2: Any = ..., string: Any = ..., **kwargs: Any) -> None: ... + relation: Any = ... + column1: Any = ... + column2: Any = ... + def _setup_regular_base(self, model: Any) -> None: ... + def _setup_regular_full(self, model: Any) -> None: ... def update_db(self, model: Any, columns: Any): ... def update_db_foreign_keys(self, model: Any) -> None: ... def read(self, records: Any) -> None: ... @@ -262,6 +392,7 @@ class Many2many(_RelationalMulti): class Id(Field): type: str = ... column_type: Any = ... + _slots: Any = ... def update_db(self, model: Any, columns: Any) -> None: ... def __get__(self, record: Any, owner: Any): ... def __set__(self, record: Any, value: Any) -> None: ... diff --git a/odoo-stubs/http.pyi b/odoo-stubs/http.pyi index 71c3aff..fb3d554 100644 --- a/odoo-stubs/http.pyi +++ b/odoo-stubs/http.pyi @@ -9,6 +9,7 @@ from .sql_db import Cursor rpc_request: Any rpc_response: Any STATIC_CACHE: Any +_request_stack: Any request: '__Request' def replace_request_password(args: Any): ... @@ -26,6 +27,11 @@ class WebRequest: endpoint: Any = ... endpoint_arguments: Any = ... auth_method: Any = ... + _cr: Cursor = ... + _uid: int = ... + _context: Any = ... + _env: Environment = ... + _failed: Any = ... def __init__(self, httprequest: Any) -> None: ... @property def cr(self) -> Cursor: ... @@ -39,7 +45,6 @@ class WebRequest: def context(self, val: Any) -> None: ... @property def env(self) -> Environment: ... - context: Any = ... @property def lang(self): ... @property @@ -47,6 +52,8 @@ class WebRequest: 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 _call_function(self, *args: Any, **kwargs: Any): ... @property def debug(self): ... def registry_cr(self) -> None: ... @@ -60,19 +67,24 @@ class WebRequest: def route(route: Optional[Any] = ..., **kw: Any): ... class JsonRequest(WebRequest): + _request_type: str = ... jsonp_handler: Any = ... params: Any = ... jsonp: Any = ... jsonrequest: Any = ... context: Any = ... - def __init__(self, *args: Any) -> None: ... + def __init__(self, *args: Any): ... + def _json_response(self, result: Optional[Any] = ..., error: Optional[Any] = ...): ... + def _handle_exception(self, exception: Any): ... def dispatch(self): ... def serialize_exception(e: Any): ... class HttpRequest(WebRequest): + _request_type: str = ... params: Any = ... def __init__(self, *args: Any) -> None: ... + def _handle_exception(self, exception: Any): ... 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): ... @@ -88,7 +100,7 @@ controllers_per_module: Any class ControllerType(type): def __init__(cls, name: Any, bases: Any, attrs: Any) -> None: ... -Controller: Any = ... +Controller: Any class EndPoint: method: Any = ... @@ -119,8 +131,10 @@ class OpenERPSession(Session): def authenticate(self, db: Any, login: Optional[Any] = ..., password: Optional[Any] = ..., uid: Optional[Any] = ...): ... 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): ... def save_request_data(self) -> None: ... @@ -146,6 +160,7 @@ class DisableCacheMiddleware: def __call__(self, environ: Any, start_response: Any): ... class Root: + _loaded: bool = ... def __init__(self) -> None: ... def session_store(self): ... def nodb_routing_map(self): ... diff --git a/odoo-stubs/loglevels.pyi b/odoo-stubs/loglevels.pyi new file mode 100644 index 0000000..a0121db --- /dev/null +++ b/odoo-stubs/loglevels.pyi @@ -0,0 +1,15 @@ +from typing import Any + +LOG_NOTSET: str +LOG_DEBUG: str +LOG_INFO: str +LOG_WARNING: str +LOG_ERROR: str +LOG_CRITICAL: str + +def get_encodings(hint_encoding: str = ...) -> None: ... + +text_type: Any + +def ustr(value: Any, hint_encoding: str = ..., errors: str = ...): ... +def exception_to_unicode(e: Any): ... diff --git a/odoo-stubs/models.pyi b/odoo-stubs/models.pyi index 8bade19..8bb9777 100644 --- a/odoo-stubs/models.pyi +++ b/odoo-stubs/models.pyi @@ -1,13 +1,11 @@ from collections import MutableMapping -from typing import Any, Optional, List, Union, Sequence, Tuple, Dict, Generator +from typing import Any, Optional, List, Dict, Generator from . import api, fields from .api import Environment from .modules.registry import Registry from .sql_db import Cursor -SearchDomain = List[Union[str, Sequence[str]]] -RecordValue = Dict[str, Any] regex_order: Any regex_object_name: Any @@ -27,7 +25,10 @@ def fix_import_export_id_paths(fieldname: Any): ... class MetaModel(api.Meta): module_to_models: Any = ... + _register: bool = ... + _module: Any = ... def __init__(self, name: Any, bases: Any, attrs: Any) -> None: ... + def _get_addon_name(self, full_name: Any): ... class NewId: ref: Any = ... @@ -42,17 +43,32 @@ MAGIC_COLUMNS: Any VALID_AGGREGATE_FUNCTIONS: Any class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): + _auto: bool = ... + _register: bool = ... + _abstract: bool = ... + _transient: bool = ... _name: str _description: str - _sql_constraints: List + _custom: bool = ... _inherit: List[str] _inherits: Dict[str, str] + _constraints: Any = ... + _table: Any = ... + _sequence: Any = ... + _sql_constraints: list _rec_name: str _order: str + _parent_name: str = ... + _parent_store: bool = ... + _date_name: str = ... + _fold_name: str = ... + _needaction: bool = ... + _translate: bool = ... + _depends: Any = ... + _transient_check_count: int = ... + _transient_max_count: Any = ... + _transient_max_hours: Any = ... _fields: Dict[str, fields.Field] - _context: Dict - _cr: Cursor - _uid: int env: Environment = ... pool: Registry id = fields.Id() @@ -63,65 +79,173 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): write_date = fields.Datetime() CONCURRENCY_CHECK_FIELD: str = ... def view_init(self, fields_list: Any) -> None: ... + def _reflect(self) -> None: ... + def _add_field(self, name: Any, field: Any) -> None: ... + def _pop_field(self, name: Any): ... + def _add_magic_fields(self) -> None: ... def compute_concurrency_field(self) -> None: ... def compute_concurrency_field_with_access(self) -> None: ... + @classmethod + def _build_model(cls, pool: Any, cr: Any): ... + @classmethod + def _build_model_check_base(model_class: Any, cls: Any) -> None: ... + @classmethod + def _build_model_check_parent(model_class: Any, cls: Any, parent_class: Any) -> None: ... + @classmethod + def _build_model_attributes(cls, pool: Any) -> None: ... + @classmethod + def _init_constraints_onchanges(cls) -> None: ... + @property + def _constraint_methods(self): ... + @property + def _onchange_methods(self): ... def __new__(cls) -> BaseModel: ... def __init__(self, pool: Any, cr: Any) -> None: ... + def _is_an_ordinary_table(self): ... + def __ensure_xml_id(self, skip: bool = ...): ... + def _export_rows(self, fields: Any, *, _is_toplevel_call: bool = ...): ... + __export_rows: Any = ... def export_data(self, fields_to_export: Any, raw_data: bool = ...): ... def load(self, fields: Any, data: Any): ... - def default_get(self, fields_list: List[str]) -> Dict[str, Any]: ... + def _add_fake_fields(self, fields: Any): ... + def _extract_records(self, fields_: Any, data: Any, log: Any = ...): ... + def _convert_records(self, records: Any, log: Any = ...) -> None: ... + def _validate_fields(self, field_names: Any) -> None: ... + def default_get(self, fields_list: Any): ... def fields_get_keys(self): ... + def _rec_name_fallback(self): ... def view_header_get(self, view_id: Optional[Any] = ..., view_type: str = ...): ... def user_has_groups(self, groups: Any): ... + def _get_default_form_view(self): ... + def _get_default_search_view(self): ... + def _get_default_tree_view(self): ... + def _get_default_activity_view(self): ... + def _get_default_pivot_view(self): ... + def _get_default_kanban_view(self): ... + def _get_default_graph_view(self): ... + def _get_default_calendar_view(self): ... def load_views(self, views: Any, options: Optional[Any] = ...): ... + def _fields_view_get(self, view_id: Optional[Any] = ..., view_type: str = ..., toolbar: bool = ..., submenu: bool = ...): ... def fields_view_get(self, view_id: Optional[Any] = ..., view_type: str = ..., toolbar: bool = ..., submenu: bool = ...): ... def get_formview_id(self, access_uid: Optional[Any] = ...): ... def get_formview_action(self, access_uid: Optional[Any] = ...): ... def get_access_action(self, access_uid: Optional[Any] = ...): ... - def search_count(self, args: Any) -> int: ... - def search(self, args: SearchDomain, offset: int = ..., limit: Optional[int] = ..., order: Optional[str] = ..., count: bool = ...) -> BaseModel: ... - def name_get(self) -> List[Tuple[int, str]]: ... + def search_count(self, args: Any): ... + def search(self, args: Any, offset: int = ..., limit: Optional[Any] = ..., order: Optional[Any] = ..., count: bool = ...): ... + def _compute_display_name(self) -> None: ... + def name_get(self): ... def name_create(self, name: Any): ... def name_search(self, name: str = ..., args: Optional[Any] = ..., operator: str = ..., limit: int = ...): ... + def _name_search(self, name: str = ..., args: Optional[Any] = ..., operator: str = ..., limit: int = ..., name_get_uid: Optional[Any] = ...): ... + def _add_missing_default_values(self, values: Any): ... @classmethod def clear_caches(cls) -> None: ... + def _read_group_fill_results(self, domain: Any, groupby: Any, remaining_groupbys: Any, aggregated_fields: Any, count_field: Any, read_group_result: Any, read_group_order: Optional[Any] = ...): ... + def _read_group_fill_temporal(self, data: Any, groupby: Any, aggregated_fields: Any, annotated_groupbys: Any, interval: Any = ...): ... + def _read_group_prepare(self, orderby: Any, aggregated_fields: Any, annotated_groupbys: Any, query: Any): ... + def _read_group_process_groupby(self, gb: Any, query: Any): ... + def _read_group_prepare_data(self, key: Any, value: Any, groupby_dict: Any): ... + def _read_group_format_result(self, data: Any, annotated_groupbys: Any, groupby: Any, domain: Any): ... def read_group(self, domain: Any, fields: Any, groupby: Any, offset: int = ..., limit: Optional[Any] = ..., orderby: bool = ..., lazy: bool = ...) -> List[Dict]: ... + def _read_group_raw(self, domain: Any, fields: Any, groupby: Any, offset: int = ..., limit: Optional[Any] = ..., orderby: bool = ..., lazy: bool = ...): ... + def _read_group_resolve_many2one_fields(self, data: Any, fields: Any) -> None: ... + def _inherits_join_add(self, current_model: Any, parent_model_name: Any, query: Any): ... + def _inherits_join_calc(self, alias: Any, fname: Any, query: Any, implicit: bool = ..., outer: bool = ...): ... + def _parent_store_compute(self): ... + def _check_removed_columns(self, log: bool = ...) -> None: ... + def _init_column(self, column_name: Any) -> None: ... + def _table_has_rows(self): ... + def _auto_init(self) -> None: ... def init(self) -> None: ... + def _create_parent_columns(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: ... + def _setup_base(self): ... + def _setup_fields(self) -> None: ... + def _setup_complete(self) -> None: ... def fields_get(self, allfields: Optional[Any] = ..., attributes: Optional[Any] = ...): ... def get_empty_list_help(self, help: Any): ... def check_field_access_rights(self, operation: Any, fields: Any): ... - def read(self, fields: Optional[List[str]] = ..., load: str = ...) -> List[Dict[str, Any]]: ... + def read(self, fields: Optional[Any] = ..., load: str = ...): ... + def _prefetch_field(self, field: Any) -> None: ... + def _read_from_database(self, field_names: Any, inherited_field_names: Any = ...): ... def get_metadata(self): ... + def _check_concurrency(self) -> None: ... def check_access_rights(self, operation: Any, raise_exception: bool = ...): ... def check_access_rule(self, operation: Any) -> None: ... + def _filter_access_rules(self, operation: Any): ... def unlink(self): ... - def write(self, vals: RecordValue): ... - def create(self, vals_list: Union[RecordValue, List[RecordValue]]) -> BaseModel: ... + def write(self, vals: Any): ... + def _write(self, vals: Any): ... + def create(self, vals_list: Any): ... + def _create(self, data_list: Any): ... + def _parent_store_create(self) -> None: ... + def _parent_store_update_prepare(self, vals: Any): ... + def _parent_store_update(self) -> None: ... + def _load_records_write(self, values: Any) -> None: ... + def _load_records_create(self, values: Any): ... + def _load_records(self, data_list: Any, update: bool = ...): ... + def _where_calc(self, domain: Any, active_test: bool = ...): ... + def _check_qorder(self, word: Any): ... + def _apply_ir_rules(self, query: Any, mode: str = ...) -> None: ... + def _generate_translated_field(self, table_alias: Any, field: Any, query: Any): ... + def _generate_m2o_order_by(self, alias: Any, order_field: Any, query: Any, reverse_direction: Any, seen: Any): ... + def _generate_order_by_inner(self, alias: Any, order_spec: Any, query: Any, reverse_direction: bool = ..., seen: Optional[Any] = ...): ... + def _generate_order_by(self, order_spec: Any, query: Any): ... + def _search(self, args: Any, offset: int = ..., limit: Optional[Any] = ..., order: Optional[Any] = ..., count: bool = ..., access_rights_uid: Optional[Any] = ...): ... def copy_data(self, default: Optional[Any] = ...): ... def copy_translations(old: Any, new: Any, excluded: Any = ...): ... - def copy(self, default: Optional[Any] = ...) -> BaseModel: ... - def exists(self) -> BaseModel: ... - def get_external_id(self) -> Dict[int, str]: ... + def copy(self, default: Optional[Any] = ...): ... + def exists(self): ... + def _check_recursion(self, parent: Optional[Any] = ...): ... + def _check_m2m_recursion(self, field_name: Any): ... + def _get_external_ids(self): ... + def get_external_id(self): ... get_xml_id: Any = ... + _get_xml_ids: Any = ... @classmethod def is_transient(cls): ... + def _transient_clean_rows_older_than(self, seconds: Any) -> None: ... + def _transient_clean_old_rows(self, max_count: Any) -> None: ... + def _transient_vacuum(self, force: bool = ...): ... def resolve_2many_commands(self, field_name: Any, commands: Any, fields: Optional[Any] = ...): ... resolve_o2m_commands_to_record_dicts: Any = ... def search_read(self, domain: Optional[Any] = ..., fields: Optional[Any] = ..., offset: int = ..., limit: Optional[Any] = ..., order: Optional[Any] = ...): ... def toggle_active(self) -> None: ... - def browse(self, arg: Optional[Any] = ..., prefetch: Optional[Any] = ...) -> BaseModel: ... + def _register_hook(self) -> None: ... + @classmethod + def _patch_method(cls, name: Any, method: Any) -> None: ... + @classmethod + def _revert_method(cls, name: Any) -> None: ... + @classmethod + def _browse(cls, ids: Any, env: Any, prefetch: Optional[Any] = ..., add_prefetch: bool = ...): ... + def browse(self, arg: Optional[Any] = ..., prefetch: Optional[Any] = ...): ... @property def ids(self) -> List[int]: ... + _cr: Cursor + _uid: int + _context: Dict def ensure_one(self): ... def with_env(self, env: Any) -> BaseModel: ... def sudo(self, user: Any = ...) -> BaseModel: ... def with_context(self, *args: Any, **kwargs: Any) -> BaseModel: ... def with_prefetch(self, prefetch: Optional[Any] = ...) -> BaseModel: ... + def _convert_to_cache(self, values: Any, update: bool = ..., validate: bool = ...): ... + def _convert_to_record(self, values: Any): ... + def _convert_to_write(self, values: Any): ... + def _mapped_func(self, func: Any): ... def mapped(self, func: Any): ... + def _mapped_cache(self, name_seq: Any): ... def filtered(self, func: Any) -> BaseModel: ... def sorted(self, key: Optional[Any] = ..., reverse: bool = ...) -> BaseModel: ... - def update(self, values: RecordValue) -> None: ... - def new(self, values: RecordValue = ..., ref: Optional[Any] = ...) -> BaseModel: ... + def update(self, values: Any) -> None: ... + def new(self, values: Any = ..., ref: Optional[Any] = ...) -> BaseModel: ... + def _is_dirty(self): ... + def _get_dirty(self): ... + def _set_dirty(self, field_name: Any) -> None: ... def __bool__(self) -> bool: ... __nonzero__: Any = ... def __len__(self) -> int: ... @@ -139,22 +263,33 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): def __gt__(self, other: Any) -> bool: ... def __ge__(self, other: Any) -> bool: ... def __int__(self): ... - def __hash__(self): ... + def __str__(self): ... + def __repr__(self): ... + def __hash__(self) -> Any: ... def __getitem__(self, key: Any): ... def __setitem__(self, key: Any, value: Any): ... + def _cache(self): ... + def _in_cache_without(self, field: Any, limit: Any = ...): ... def refresh(self) -> None: ... def invalidate_cache(self, fnames: Optional[Any] = ..., ids: Optional[Any] = ...): ... def modified(self, fnames: Any) -> None: ... + def _recompute_check(self, field: Any): ... + def _recompute_todo(self, field: Any) -> None: ... + def _recompute_done(self, field: Any) -> None: ... def recompute(self) -> None: ... + def _has_onchange(self, field: Any, other_fields: Any): ... + def _onchange_spec(self, view_info: Optional[Any] = ...): ... + def _onchange_eval(self, field_name: Any, onchange: Any, result: Any) -> None: ... def onchange(self, values: Any, field_name: Any, field_onchange: Any): ... class RecordCache(MutableMapping): + _record: Any = ... def __init__(self, record: Any) -> None: ... def __contains__(self, name: Any): ... def __getitem__(self, name: Any): ... def __setitem__(self, name: Any, value: Any) -> None: ... def __delitem__(self, name: Any) -> None: ... - def __iter__(self) -> None: ... + def __iter__(self) -> Any: ... def __len__(self): ... def has_value(self, name: Any): ... def get_value(self, name: Any, default: Optional[Any] = ...): ... @@ -162,13 +297,24 @@ class RecordCache(MutableMapping): def set_failed(self, names: Any, exception: Any) -> None: ... AbstractModel = BaseModel -class Model(AbstractModel): ... -class TransientModel(Model): ... +class Model(AbstractModel): + _auto: bool = ... + _register: bool = ... + _abstract: bool = ... + _transient: bool = ... + +class TransientModel(Model): + _auto: bool = ... + _register: bool = ... + _abstract: bool = ... + _transient: bool = ... def itemgetter_tuple(items: Any): ... def convert_pgerror_not_null(model: Any, fields: Any, info: Any, e: Any): ... def convert_pgerror_unique(model: Any, fields: Any, info: Any, e: Any): ... +def _get_translated_field_name(model: Any, field_name: Any): ... PGERROR_TO_OE: Any +def _normalize_ids(arg: Any, atoms: Any = ...): ... def lazy_name_get(self): ... diff --git a/odoo-stubs/netsvc.pyi b/odoo-stubs/netsvc.pyi new file mode 100644 index 0000000..c73e3c6 --- /dev/null +++ b/odoo-stubs/netsvc.pyi @@ -0,0 +1,45 @@ +import logging.handlers +from typing import Any, Optional + +_logger: Any + +def log(logger: Any, level: Any, prefix: Any, msg: Any, depth: Optional[Any] = ...) -> None: ... + +class PostgreSQLHandler(logging.Handler): + def emit(self, record: Any) -> None: ... + +BLACK: Any +RED: Any +GREEN: Any +YELLOW: Any +BLUE: Any +MAGENTA: Any +CYAN: Any +WHITE: Any +_NOTHING: Any +DEFAULT: Any +RESET_SEQ: str +COLOR_SEQ: str +BOLD_SEQ: str +COLOR_PATTERN: Any +LEVEL_COLOR_MAPPING: Any + +class PerfFilter(logging.Filter): + def format_perf(self, query_count: Any, query_time: Any, remaining_time: Any): ... + def filter(self, record: Any): ... + +class ColoredPerfFilter(PerfFilter): + def format_perf(self, query_count: Any, query_time: Any, remaining_time: Any): ... + +class DBFormatter(logging.Formatter): + def format(self, record: Any): ... + +class ColoredFormatter(DBFormatter): + def format(self, record: Any): ... + +_logger_init: bool + +def init_logger(): ... + +DEFAULT_LOG_CONFIGURATION: Any +PSEUDOCONFIG_MAPPER: Any diff --git a/odoo-stubs/release.pyi b/odoo-stubs/release.pyi new file mode 100644 index 0000000..2cf63c8 --- /dev/null +++ b/odoo-stubs/release.pyi @@ -0,0 +1,22 @@ +from typing import Any + +RELEASE_LEVELS: Any +ALPHA: Any +BETA: Any +RELEASE_CANDIDATE: Any +FINAL: Any +RELEASE_LEVELS_DISPLAY: Any +version_info: Any +version: Any +series: Any +serie: Any +major_version: Any +product_name: str +description: str +long_desc: str +classifiers: str +url: str +author: str +author_email: str +license: str +nt_service_name: Any diff --git a/odoo-stubs/sql_db.pyi b/odoo-stubs/sql_db.pyi new file mode 100644 index 0000000..ebaa51f --- /dev/null +++ b/odoo-stubs/sql_db.pyi @@ -0,0 +1,111 @@ +import psycopg2.extensions +from typing import Any, Optional + +_logger: Any + +def unbuffer(symb: Any, cr: Any): ... +def undecimalize(symb: Any, cr: Any): ... +def adapt_string(adapted: Any): ... + +re_from: Any +re_into: Any +sql_counter: int + +class Cursor: + IN_MAX: int = ... + def check(f: Any): ... + sql_from_log: Any = ... + sql_into_log: Any = ... + sql_log: Any = ... + sql_log_count: int = ... + _closed: bool = ... + __pool: Any = ... + dbname: Any = ... + _serialized: Any = ... + _cnx: Any = ... + _obj: Any = ... + __caller: Any = ... + __closer: bool = ... + _default_log_exceptions: bool = ... + cache: Any = ... + _event_handlers: Any = ... + def __init__(self, pool: Any, dbname: Any, dsn: Any, serialized: bool = ...) -> None: ... + def __build_dict(self, row: Any): ... + def dictfetchone(self): ... + def dictfetchmany(self, size: Any): ... + def dictfetchall(self): ... + def __del__(self) -> None: ... + def execute(self, query: Any, params: Optional[Any] = ..., log_exceptions: Optional[Any] = ...): ... + def split_for_in_conditions(self, ids: Any, size: Optional[Any] = ...): ... + def print_log(self): ... + def close(self): ... + def _close(self, leak: bool = ...) -> None: ... + def autocommit(self, on: Any) -> None: ... + def after(self, event: Any, func: Any) -> None: ... + def _pop_event_handlers(self): ... + def commit(self): ... + def rollback(self): ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: ... + def savepoint(self) -> None: ... + def __getattr__(self, name: Any): ... + @property + def closed(self): ... + +class TestCursor: + _savepoint_seq: Any = ... + _closed: bool = ... + _cursor: Any = ... + _lock: Any = ... + _savepoint: Any = ... + def __init__(self, cursor: Any, lock: Any) -> None: ... + def close(self) -> None: ... + def autocommit(self, on: Any) -> None: ... + def commit(self) -> None: ... + def rollback(self) -> None: ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: ... + def __getattr__(self, name: Any): ... + +class LazyCursor: + _dbname: Any = ... + _cursor: Any = ... + _depth: int = ... + def __init__(self, dbname: Optional[Any] = ...) -> None: ... + @property + def dbname(self): ... + def __getattr__(self, name: Any): ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: ... + +class PsycoConnection(psycopg2.extensions.connection): ... + +class ConnectionPool: + def locked(fun: Any): ... + _connections: Any = ... + _maxconn: Any = ... + _lock: Any = ... + def __init__(self, maxconn: int = ...) -> None: ... + def __repr__(self): ... + def _debug(self, msg: Any, *args: Any) -> None: ... + def borrow(self, connection_info: Any): ... + def give_back(self, connection: Any, keep_in_pool: bool = ...) -> None: ... + def close_all(self, dsn: Optional[Any] = ...) -> None: ... + +class Connection: + dbname: Any = ... + dsn: Any = ... + __pool: Any = ... + def __init__(self, pool: Any, dbname: Any, dsn: Any) -> None: ... + def cursor(self, serialized: bool = ...): ... + serialized_cursor: Any = ... + def __bool__(self) -> None: ... + __nonzero__: Any = ... + +def connection_info_for(db_or_uri: Any): ... + +_Pool: Any + +def db_connect(to: Any, allow_uri: bool = ...): ... +def close_db(db_name: Any) -> None: ... +def close_all() -> None: ... From 476ea45ee0c566d9e737a3caf2a208632931eee5 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Sun, 31 May 2020 08:48:20 +0700 Subject: [PATCH 04/12] Update stubs --- odoo-stubs/addons/__init__.pyi | 1 + odoo-stubs/cli/__init__.pyi | 2 + odoo-stubs/cli/command.pyi | 14 ++ odoo-stubs/cli/deploy.pyi | 10 ++ odoo-stubs/cli/scaffold.pyi | 25 ++++ odoo-stubs/cli/server.pyi | 18 +++ odoo-stubs/cli/shell.pyi | 22 +++ odoo-stubs/cli/start.pyi | 11 ++ odoo-stubs/conf/__init__.pyi | 4 + odoo-stubs/exceptions.pyi | 1 + odoo-stubs/modules/__init__.pyi | 3 + odoo-stubs/modules/db.pyi | 8 ++ odoo-stubs/modules/graph.pyi | 30 ++++ odoo-stubs/modules/loading.pyi | 15 ++ odoo-stubs/modules/migration.pyi | 16 +++ odoo-stubs/modules/module.pyi | 49 +++++++ odoo-stubs/modules/registry.pyi | 73 ++++++++++ odoo-stubs/netsvc.pyi | 1 + odoo-stubs/osv/__init__.pyi | 1 + odoo-stubs/osv/expression.pyi | 68 ++++++++++ odoo-stubs/osv/orm.pyi | 25 ++++ odoo-stubs/osv/osv.pyi | 7 + odoo-stubs/osv/query.pyi | 16 +++ odoo-stubs/service/__init__.pyi | 1 + odoo-stubs/service/common.pyi | 14 ++ odoo-stubs/service/db.pyi | 36 +++++ odoo-stubs/service/model.pyi | 16 +++ odoo-stubs/service/security.pyi | 6 + odoo-stubs/service/server.pyi | 177 ++++++++++++++++++++++++ odoo-stubs/service/wsgi_server.pyi | 18 +++ odoo-stubs/sql_db.pyi | 3 + odoo-stubs/tools/__init__.pyi | 14 ++ odoo-stubs/tools/appdirs.pyi | 39 ++++++ odoo-stubs/tools/assertion_report.pyi | 10 ++ odoo-stubs/tools/cache.pyi | 51 +++++++ odoo-stubs/tools/config.pyi | 47 +++++++ odoo-stubs/tools/convert.pyi | 64 +++++++++ odoo-stubs/tools/date_utils.pyi | 14 ++ odoo-stubs/tools/debugger.pyi | 6 + odoo-stubs/tools/float_utils.pyi | 15 ++ odoo-stubs/tools/func.pyi | 116 ++++++++++++++++ odoo-stubs/tools/graph.pyi | 54 ++++++++ odoo-stubs/tools/image.pyi | 16 +++ odoo-stubs/tools/lru.pyi | 33 +++++ odoo-stubs/tools/mail.pyi | 43 ++++++ odoo-stubs/tools/mimetypes.pyi | 26 ++++ odoo-stubs/tools/misc.pyi | 188 ++++++++++++++++++++++++++ odoo-stubs/tools/osutil.pyi | 15 ++ odoo-stubs/tools/parse_version.pyi | 8 ++ odoo-stubs/tools/pdf.pyi | 3 + odoo-stubs/tools/profiler.pyi | 15 ++ odoo-stubs/tools/pycompat.pyi | 30 ++++ odoo-stubs/tools/safe_eval.pyi | 26 ++++ odoo-stubs/tools/sql.pyi | 29 ++++ odoo-stubs/tools/test_config.pyi | 5 + odoo-stubs/tools/test_reports.pyi | 10 ++ odoo-stubs/tools/translate.pyi | 78 +++++++++++ odoo-stubs/tools/view_validation.pyi | 30 ++++ odoo-stubs/tools/which.pyi | 13 ++ odoo-stubs/tools/win32.pyi | 3 + odoo-stubs/tools/xml_utils.pyi | 8 ++ 61 files changed, 1700 insertions(+) create mode 100644 odoo-stubs/addons/__init__.pyi create mode 100644 odoo-stubs/cli/__init__.pyi create mode 100644 odoo-stubs/cli/command.pyi create mode 100644 odoo-stubs/cli/deploy.pyi create mode 100644 odoo-stubs/cli/scaffold.pyi create mode 100644 odoo-stubs/cli/server.pyi create mode 100644 odoo-stubs/cli/shell.pyi create mode 100644 odoo-stubs/cli/start.pyi create mode 100644 odoo-stubs/conf/__init__.pyi create mode 100644 odoo-stubs/modules/__init__.pyi create mode 100644 odoo-stubs/modules/db.pyi create mode 100644 odoo-stubs/modules/graph.pyi create mode 100644 odoo-stubs/modules/loading.pyi create mode 100644 odoo-stubs/modules/migration.pyi create mode 100644 odoo-stubs/modules/module.pyi create mode 100644 odoo-stubs/modules/registry.pyi create mode 100644 odoo-stubs/osv/__init__.pyi create mode 100644 odoo-stubs/osv/expression.pyi create mode 100644 odoo-stubs/osv/orm.pyi create mode 100644 odoo-stubs/osv/osv.pyi create mode 100644 odoo-stubs/osv/query.pyi create mode 100644 odoo-stubs/service/__init__.pyi create mode 100644 odoo-stubs/service/common.pyi create mode 100644 odoo-stubs/service/db.pyi create mode 100644 odoo-stubs/service/model.pyi create mode 100644 odoo-stubs/service/security.pyi create mode 100644 odoo-stubs/service/server.pyi create mode 100644 odoo-stubs/service/wsgi_server.pyi create mode 100644 odoo-stubs/tools/__init__.pyi create mode 100644 odoo-stubs/tools/appdirs.pyi create mode 100644 odoo-stubs/tools/assertion_report.pyi create mode 100644 odoo-stubs/tools/cache.pyi create mode 100644 odoo-stubs/tools/config.pyi create mode 100644 odoo-stubs/tools/convert.pyi create mode 100644 odoo-stubs/tools/date_utils.pyi create mode 100644 odoo-stubs/tools/debugger.pyi create mode 100644 odoo-stubs/tools/float_utils.pyi create mode 100644 odoo-stubs/tools/func.pyi create mode 100644 odoo-stubs/tools/graph.pyi create mode 100644 odoo-stubs/tools/image.pyi create mode 100644 odoo-stubs/tools/lru.pyi create mode 100644 odoo-stubs/tools/mail.pyi create mode 100644 odoo-stubs/tools/mimetypes.pyi create mode 100644 odoo-stubs/tools/misc.pyi create mode 100644 odoo-stubs/tools/osutil.pyi create mode 100644 odoo-stubs/tools/parse_version.pyi create mode 100644 odoo-stubs/tools/pdf.pyi create mode 100644 odoo-stubs/tools/profiler.pyi create mode 100644 odoo-stubs/tools/pycompat.pyi create mode 100644 odoo-stubs/tools/safe_eval.pyi create mode 100644 odoo-stubs/tools/sql.pyi create mode 100644 odoo-stubs/tools/test_config.pyi create mode 100644 odoo-stubs/tools/test_reports.pyi create mode 100644 odoo-stubs/tools/translate.pyi create mode 100644 odoo-stubs/tools/view_validation.pyi create mode 100644 odoo-stubs/tools/which.pyi create mode 100644 odoo-stubs/tools/win32.pyi create mode 100644 odoo-stubs/tools/xml_utils.pyi diff --git a/odoo-stubs/addons/__init__.pyi b/odoo-stubs/addons/__init__.pyi new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/odoo-stubs/addons/__init__.pyi @@ -0,0 +1 @@ + diff --git a/odoo-stubs/cli/__init__.pyi b/odoo-stubs/cli/__init__.pyi new file mode 100644 index 0000000..8377f1c --- /dev/null +++ b/odoo-stubs/cli/__init__.pyi @@ -0,0 +1,2 @@ +from . import deploy as deploy, scaffold as scaffold, server as server, shell as shell, start as start +from .command import Command as Command, main as main diff --git a/odoo-stubs/cli/command.pyi b/odoo-stubs/cli/command.pyi new file mode 100644 index 0000000..38f6399 --- /dev/null +++ b/odoo-stubs/cli/command.pyi @@ -0,0 +1,14 @@ +from odoo.modules import get_module_path as get_module_path, get_modules as get_modules +from typing import Any + +commands: Any + +class CommandType(type): + def __init__(cls, name: Any, bases: Any, attrs: Any) -> None: ... + +Command: Any + +class Help(Command): + def run(self, args: Any) -> None: ... + +def main() -> None: ... diff --git a/odoo-stubs/cli/deploy.pyi b/odoo-stubs/cli/deploy.pyi new file mode 100644 index 0000000..c8c29d6 --- /dev/null +++ b/odoo-stubs/cli/deploy.pyi @@ -0,0 +1,10 @@ +from . import Command as Command +from typing import Any + +class Deploy(Command): + session: Any = ... + def __init__(self) -> None: ... + def deploy_module(self, module_path: Any, url: Any, login: Any, password: Any, db: str = ..., force: bool = ...): ... + def login_upload_module(self, module_file: Any, url: Any, login: Any, password: Any, db: Any, force: bool = ...): ... + def zip_module(self, path: Any): ... + def run(self, cmdargs: Any) -> None: ... diff --git a/odoo-stubs/cli/scaffold.pyi b/odoo-stubs/cli/scaffold.pyi new file mode 100644 index 0000000..5b3053b --- /dev/null +++ b/odoo-stubs/cli/scaffold.pyi @@ -0,0 +1,25 @@ +from . import Command as Command +from typing import Any, Optional + +class Scaffold(Command): + def run(self, cmdargs: Any) -> None: ... + def epilog(self): ... + +builtins: Any + +def snake(s: Any): ... +def pascal(s: Any): ... +def directory(p: Any, create: bool = ...): ... + +env: Any + +class template: + id: Any = ... + path: Any = ... + def __init__(self, identifier: Any) -> None: ... + def __str__(self): ... + def files(self) -> None: ... + def render_to(self, modname: Any, directory: Any, params: Optional[Any] = ...) -> None: ... + +def die(message: Any, code: int = ...) -> None: ... +def warn(message: Any) -> None: ... diff --git a/odoo-stubs/cli/server.pyi b/odoo-stubs/cli/server.pyi new file mode 100644 index 0000000..cac3545 --- /dev/null +++ b/odoo-stubs/cli/server.pyi @@ -0,0 +1,18 @@ +from . import Command as Command +from typing import Any + +__author__: Any +__version__: Any +_logger: Any + +def check_root_user() -> None: ... +def check_postgres_user() -> None: ... +def report_configuration() -> None: ... +def rm_pid_file(main_pid: Any) -> None: ... +def setup_pid_file() -> None: ... +def export_translation() -> None: ... +def import_translation() -> None: ... +def main(args: Any) -> None: ... + +class Server(Command): + def run(self, args: Any) -> None: ... diff --git a/odoo-stubs/cli/shell.pyi b/odoo-stubs/cli/shell.pyi new file mode 100644 index 0000000..1d5b8c7 --- /dev/null +++ b/odoo-stubs/cli/shell.pyi @@ -0,0 +1,22 @@ +import code +from . import Command as Command +from odoo.tools import config as config +from typing import Any, Optional + +_logger: Any + +def raise_keyboard_interrupt(*a: Any) -> None: ... + +class Console(code.InteractiveConsole): + def __init__(self, locals: Optional[Any] = ..., filename: str = ...) -> None: ... + +class Shell(Command): + supported_shells: Any = ... + def init(self, args: Any) -> None: ... + def console(self, local_vars: Any): ... + def ipython(self, local_vars: Any) -> None: ... + def ptpython(self, local_vars: Any) -> None: ... + def bpython(self, local_vars: Any) -> None: ... + def python(self, local_vars: Any) -> None: ... + def shell(self, dbname: Any) -> None: ... + def run(self, args: Any): ... diff --git a/odoo-stubs/cli/start.pyi b/odoo-stubs/cli/start.pyi new file mode 100644 index 0000000..b13cc30 --- /dev/null +++ b/odoo-stubs/cli/start.pyi @@ -0,0 +1,11 @@ +from . import Command as Command +from .server import main as main +from odoo.modules.module import MANIFEST_NAMES as MANIFEST_NAMES, get_module_root as get_module_root +from odoo.service.db import DatabaseExists as DatabaseExists, _create_empty_database as _create_empty_database +from typing import Any + +class Start(Command): + def get_module_list(self, path: Any): ... + def run(self, cmdargs: Any): ... + +def die(message: Any, code: int = ...) -> None: ... diff --git a/odoo-stubs/conf/__init__.pyi b/odoo-stubs/conf/__init__.pyi new file mode 100644 index 0000000..4e0cedb --- /dev/null +++ b/odoo-stubs/conf/__init__.pyi @@ -0,0 +1,4 @@ +from typing import Any + +addons_paths: Any +server_wide_modules: Any diff --git a/odoo-stubs/exceptions.pyi b/odoo-stubs/exceptions.pyi index 979e56e..a027e7e 100644 --- a/odoo-stubs/exceptions.pyi +++ b/odoo-stubs/exceptions.pyi @@ -1,3 +1,4 @@ +from .tools.func import frame_codeinfo as frame_codeinfo from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/modules/__init__.pyi b/odoo-stubs/modules/__init__.pyi new file mode 100644 index 0000000..3e87be7 --- /dev/null +++ b/odoo-stubs/modules/__init__.pyi @@ -0,0 +1,3 @@ +from . import db as db, graph as graph, loading as loading, migration as migration, module as module, registry as registry +from odoo.modules.loading import load_modules as load_modules, reset_modules_state as reset_modules_state +from odoo.modules.module import adapt_version as adapt_version, get_module_path as get_module_path, get_module_resource as get_module_resource, get_modules as get_modules, get_modules_with_version as get_modules_with_version, get_resource_from_path as get_resource_from_path, get_resource_path as get_resource_path, initialize_sys_path as initialize_sys_path, load_information_from_description_file as load_information_from_description_file, load_openerp_module as load_openerp_module diff --git a/odoo-stubs/modules/db.pyi b/odoo-stubs/modules/db.pyi new file mode 100644 index 0000000..ef896c9 --- /dev/null +++ b/odoo-stubs/modules/db.pyi @@ -0,0 +1,8 @@ +from typing import Any + +_logger: Any + +def is_initialized(cr: Any): ... +def initialize(cr: Any) -> None: ... +def create_categories(cr: Any, categories: Any): ... +def has_unaccent(cr: Any): ... diff --git a/odoo-stubs/modules/graph.pyi b/odoo-stubs/modules/graph.pyi new file mode 100644 index 0000000..20a9621 --- /dev/null +++ b/odoo-stubs/modules/graph.pyi @@ -0,0 +1,30 @@ +from typing import Any, Optional + +_logger: Any + +class Graph(dict): + def add_node(self, name: Any, info: Any): ... + def update_from_db(self, cr: Any) -> None: ... + def add_module(self, cr: Any, module: Any, force: Optional[Any] = ...) -> None: ... + def add_modules(self, cr: Any, module_list: Any, force: Optional[Any] = ...): ... + def __iter__(self) -> Any: ... + def __str__(self): ... + +class Node: + def __new__(cls, name: Any, graph: Any, info: Any): ... + name: Any = ... + graph: Any = ... + info: Any = ... + children: Any = ... + depth: int = ... + def __init__(self, name: Any, graph: Any, info: Any) -> None: ... + @property + def data(self): ... + def add_child(self, name: Any, info: Any): ... + def __setattr__(self, name: Any, value: Any) -> None: ... + def __iter__(self) -> Any: ... + def __str__(self): ... + def _pprint(self, depth: int = ...): ... + def should_have_demo(self): ... + @property + def parents(self): ... diff --git a/odoo-stubs/modules/loading.pyi b/odoo-stubs/modules/loading.pyi new file mode 100644 index 0000000..708e68a --- /dev/null +++ b/odoo-stubs/modules/loading.pyi @@ -0,0 +1,15 @@ +from odoo import SUPERUSER_ID as SUPERUSER_ID, api as api +from odoo.modules.module import adapt_version as adapt_version, initialize_sys_path as initialize_sys_path, load_openerp_module as load_openerp_module +from typing import Any, Optional + +_logger: Any +_test_logger: Any + +def load_data(cr: Any, idref: Any, mode: Any, kind: Any, package: Any, report: Any): ... +def load_demo(cr: Any, package: Any, idref: Any, mode: Any, report: Optional[Any] = ...): ... +def force_demo(cr: Any) -> None: ... +def load_module_graph(cr: Any, graph: Any, status: Optional[Any] = ..., perform_checks: bool = ..., skip_modules: Optional[Any] = ..., report: Optional[Any] = ..., models_to_check: Optional[Any] = ...): ... +def _check_module_names(cr: Any, module_names: Any) -> None: ... +def load_marked_modules(cr: Any, graph: Any, states: Any, force: Any, progressdict: Any, report: Any, loaded_modules: Any, perform_checks: Any, models_to_check: Optional[Any] = ...): ... +def load_modules(db: Any, force_demo: bool = ..., status: Optional[Any] = ..., update_module: bool = ...): ... +def reset_modules_state(db_name: Any) -> None: ... diff --git a/odoo-stubs/modules/migration.pyi b/odoo-stubs/modules/migration.pyi new file mode 100644 index 0000000..1afed1a --- /dev/null +++ b/odoo-stubs/modules/migration.pyi @@ -0,0 +1,16 @@ +from odoo.modules.module import get_resource_path as get_resource_path +from odoo.tools import pycompat as pycompat +from odoo.tools.parse_version import parse_version as parse_version +from typing import Any + +def load_script(path: Any, module_name: Any): ... + +_logger: Any + +class MigrationManager: + cr: Any = ... + graph: Any = ... + migrations: Any = ... + def __init__(self, cr: Any, graph: Any) -> None: ... + def _get_files(self): ... + def migrate_module(self, pkg: Any, stage: Any): ... diff --git a/odoo-stubs/modules/module.pyi b/odoo-stubs/modules/module.pyi new file mode 100644 index 0000000..1fdec2c --- /dev/null +++ b/odoo-stubs/modules/module.pyi @@ -0,0 +1,49 @@ +from odoo import SUPERUSER_ID as SUPERUSER_ID, api as api +from odoo.tools import pycompat as pycompat +from operator import itemgetter as itemgetter +from typing import Any, Optional + +MANIFEST_NAMES: Any +README: Any +_logger: Any +ad_paths: Any +hooked: bool +loaded: Any + +class AddonsHook: + def find_module(self, name: Any, path: Optional[Any] = ...): ... + def load_module(self, name: Any): ... + +class OdooHook: + def find_module(self, name: Any, path: Optional[Any] = ...): ... + def load_module(self, name: Any): ... + +def initialize_sys_path() -> None: ... +def get_module_path(module: Any, downloaded: bool = ..., display_warning: bool = ...): ... +def get_module_filetree(module: Any, dir: str = ...): ... +def get_resource_path(module: Any, *args: Any): ... +get_module_resource = get_resource_path + +def get_resource_from_path(path: Any): ... +def get_module_icon(module: Any): ... +def module_manifest(path: Any): ... +def get_module_root(path: Any): ... +def load_information_from_description_file(module: Any, mod_path: Optional[Any] = ...): ... +def load_openerp_module(module_name: Any) -> None: ... +def get_modules(): ... +def get_modules_with_version(): ... +def adapt_version(version: Any): ... +def get_test_modules(module: Any): ... +def _get_tests_modules(path: Any, module: Any): ... + +class TestStream: + logger: Any = ... + r: Any = ... + def __init__(self, logger_name: str = ...) -> None: ... + def flush(self) -> None: ... + def write(self, s: Any) -> None: ... + +current_test: Any + +def run_unit_tests(module_name: Any, dbname: Any, position: str = ...): ... +def unwrap_suite(test: Any) -> None: ... diff --git a/odoo-stubs/modules/registry.pyi b/odoo-stubs/modules/registry.pyi new file mode 100644 index 0000000..8a11eb6 --- /dev/null +++ b/odoo-stubs/modules/registry.pyi @@ -0,0 +1,73 @@ +from .. import SUPERUSER_ID as SUPERUSER_ID +from collections import Mapping, defaultdict as defaultdict +from odoo.sql_db import TestCursor as TestCursor +from odoo.tools import OrderedSet as OrderedSet, assertion_report as assertion_report, config as config, existing_tables as existing_tables, lazy_classproperty as lazy_classproperty, lazy_property as lazy_property, table_exists as table_exists, topological_sort as topological_sort +from odoo.tools.lru import LRU as LRU +from typing import Any, Optional + +_logger: Any + +class Registry(Mapping): + _lock: Any = ... + _saved_lock: Any = ... + model_cache: Any = ... + def registries(cls): ... + def __new__(cls, db_name: Any): ... + @classmethod + def new(cls, db_name: Any, force_demo: bool = ..., status: Optional[Any] = ..., update_module: bool = ...): ... + models: Any = ... + _sql_error: Any = ... + _init: bool = ... + _assertion_report: Any = ... + _fields_by_model: Any = ... + _post_init_queue: Any = ... + _init_modules: Any = ... + updated_modules: Any = ... + loaded_xmlids: Any = ... + db_name: Any = ... + _db: Any = ... + test_cr: Any = ... + test_lock: Any = ... + loaded: bool = ... + ready: bool = ... + registry_sequence: Any = ... + cache_sequence: Any = ... + registry_invalidated: bool = ... + cache_invalidated: bool = ... + has_unaccent: Any = ... + def init(self, db_name: Any) -> None: ... + @classmethod + def delete(cls, db_name: Any) -> None: ... + @classmethod + def delete_all(cls) -> None: ... + def __len__(self): ... + def __iter__(self) -> Any: ... + def __getitem__(self, model_name: Any): ... + def __call__(self, model_name: Any): ... + def __setitem__(self, model_name: Any, model: Any) -> None: ... + def field_sequence(self): ... + def descendants(self, model_names: Any, *kinds: Any): ... + def load(self, cr: Any, module: Any): ... + _m2m: Any = ... + def setup_models(self, cr: Any) -> None: ... + def post_init(self, func: Any, *args: Any, **kwargs: Any) -> None: ... + def init_models(self, cr: Any, model_names: Any, context: Any) -> None: ... + def check_tables_exist(self, cr: Any) -> None: ... + def cache(self): ... + def _clear_cache(self) -> None: ... + def clear_caches(self) -> None: ... + def setup_signaling(self) -> None: ... + def check_signaling(self): ... + def signal_changes(self) -> None: ... + def reset_changes(self) -> None: ... + def manage_changes(self) -> None: ... + def in_test_mode(self): ... + def enter_test_mode(self, cr: Any) -> None: ... + def leave_test_mode(self) -> None: ... + def cursor(self): ... + +class DummyRLock: + def acquire(self) -> None: ... + def release(self) -> None: ... + def __enter__(self) -> None: ... + def __exit__(self, type: Any, value: Any, traceback: Any) -> None: ... diff --git a/odoo-stubs/netsvc.pyi b/odoo-stubs/netsvc.pyi index c73e3c6..dc4d7f7 100644 --- a/odoo-stubs/netsvc.pyi +++ b/odoo-stubs/netsvc.pyi @@ -1,4 +1,5 @@ import logging.handlers +from . import release as release, sql_db as sql_db, tools as tools from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/osv/__init__.pyi b/odoo-stubs/osv/__init__.pyi new file mode 100644 index 0000000..bc27fe7 --- /dev/null +++ b/odoo-stubs/osv/__init__.pyi @@ -0,0 +1 @@ +from . import osv as osv diff --git a/odoo-stubs/osv/expression.pyi b/odoo-stubs/osv/expression.pyi new file mode 100644 index 0000000..4b87055 --- /dev/null +++ b/odoo-stubs/osv/expression.pyi @@ -0,0 +1,68 @@ +from ..models import BaseModel as BaseModel, MAGIC_COLUMNS as MAGIC_COLUMNS +from functools import partial as partial +from odoo.tools import pycompat as pycompat +from typing import Any, Optional + +NOT_OPERATOR: str +OR_OPERATOR: str +AND_OPERATOR: str +DOMAIN_OPERATORS: Any +TERM_OPERATORS: Any +NEGATIVE_TERM_OPERATORS: Any +DOMAIN_OPERATORS_NEGATION: Any +TERM_OPERATORS_NEGATION: Any +TRUE_LEAF: Any +FALSE_LEAF: Any +TRUE_DOMAIN: Any +FALSE_DOMAIN: Any +_logger: Any + +def normalize_domain(domain: Any): ... +def is_false(model: Any, domain: Any): ... +def combine(operator: Any, unit: Any, zero: Any, domains: Any): ... +def AND(domains: Any): ... +def OR(domains: Any): ... +def distribute_not(domain: Any): ... +def _quote(to_quote: Any): ... +def generate_table_alias(src_table_alias: Any, joined_tables: Any = ...): ... +def get_alias_from_query(from_query: Any): ... +def normalize_leaf(element: Any): ... +def is_operator(element: Any): ... +def is_leaf(element: Any, internal: bool = ...): ... +def select_from_where(cr: Any, select_field: Any, from_table: Any, where_field: Any, where_ids: Any, where_operator: Any): ... +def select_distinct_from_where_not_null(cr: Any, select_field: Any, from_table: Any): ... +def get_unaccent_wrapper(cr: Any): ... + +class ExtendedLeaf: + join_context: Any = ... + leaf: Any = ... + model: Any = ... + _models: Any = ... + def __init__(self, leaf: Any, model: Any, join_context: Optional[Any] = ..., internal: bool = ...) -> None: ... + def __str__(self): ... + def generate_alias(self): ... + def add_join_context(self, model: Any, lhs_col: Any, table_col: Any, link: Any) -> None: ... + def get_join_conditions(self): ... + def get_tables(self): ... + def _get_context_debug(self): ... + def check_leaf(self, internal: bool = ...) -> None: ... + def is_operator(self): ... + def is_true_leaf(self): ... + def is_false_leaf(self): ... + def is_leaf(self, internal: bool = ...): ... + def normalize_leaf(self): ... + +def create_substitution_leaf(leaf: Any, new_elements: Any, new_model: Optional[Any] = ..., internal: bool = ...): ... + +class expression: + _unaccent: Any = ... + joins: Any = ... + root_model: Any = ... + expression: Any = ... + def __init__(self, domain: Any, model: Any) -> None: ... + def get_tables(self): ... + result: Any = ... + stack: Any = ... + def parse(self): ... + def __leaf_to_sql(self, eleaf: Any): ... + def to_sql(self): ... diff --git a/odoo-stubs/osv/orm.pyi b/odoo-stubs/osv/orm.pyi new file mode 100644 index 0000000..b04fae7 --- /dev/null +++ b/odoo-stubs/osv/orm.pyi @@ -0,0 +1,25 @@ +from ..exceptions import except_orm as except_orm +from ..models import AbstractModel as AbstractModel, BaseModel as BaseModel, LOG_ACCESS_COLUMNS as LOG_ACCESS_COLUMNS, MAGIC_COLUMNS as MAGIC_COLUMNS, MetaModel as MetaModel, Model as Model, TransientModel as TransientModel +from odoo.tools import pycompat as pycompat +from odoo.tools.safe_eval import safe_eval as safe_eval +from typing import Any, Optional + +browse_record_list = BaseModel + +class BRM(type): + def __instancecheck__(self, inst: Any): ... + +browse_record: Any + +class NBM(type): + def __instancecheck__(self, inst: Any): ... + +browse_null: Any + +def transfer_field_to_modifiers(field: Any, modifiers: Any) -> None: ... +def transfer_node_to_modifiers(node: Any, modifiers: Any, context: Optional[Any] = ..., in_tree_view: bool = ...) -> None: ... +def simplify_modifiers(modifiers: Any) -> None: ... +def transfer_modifiers_to_node(modifiers: Any, node: Any) -> None: ... +def setup_modifiers(node: Any, field: Optional[Any] = ..., context: Optional[Any] = ..., in_tree_view: bool = ...) -> None: ... +def test_modifiers(what: Any, expected: Any) -> None: ... +def modifiers_tests() -> None: ... diff --git a/odoo-stubs/osv/osv.pyi b/odoo-stubs/osv/osv.pyi new file mode 100644 index 0000000..7a9bbef --- /dev/null +++ b/odoo-stubs/osv/osv.pyi @@ -0,0 +1,7 @@ +from ..exceptions import except_orm as except_orm +from .orm import AbstractModel as AbstractModel, Model as Model, TransientModel as TransientModel + +except_osv = except_orm +osv = Model +osv_memory = TransientModel +osv_abstract = AbstractModel diff --git a/odoo-stubs/osv/query.pyi b/odoo-stubs/osv/query.pyi new file mode 100644 index 0000000..1d0dbdc --- /dev/null +++ b/odoo-stubs/osv/query.pyi @@ -0,0 +1,16 @@ +from typing import Any, Optional + +def _quote(to_quote: Any): ... + +class Query: + tables: Any = ... + where_clause: Any = ... + where_clause_params: Any = ... + joins: Any = ... + extras: Any = ... + def __init__(self, tables: Optional[Any] = ..., where_clause: Optional[Any] = ..., where_clause_params: Optional[Any] = ..., joins: Optional[Any] = ..., extras: Optional[Any] = ...) -> None: ... + def _get_table_aliases(self): ... + def _get_alias_mapping(self): ... + def add_join(self, connection: Any, implicit: bool = ..., outer: bool = ..., extra: Optional[Any] = ..., extra_params: Any = ...): ... + def get_sql(self): ... + def __str__(self): ... diff --git a/odoo-stubs/service/__init__.pyi b/odoo-stubs/service/__init__.pyi new file mode 100644 index 0000000..a2984f7 --- /dev/null +++ b/odoo-stubs/service/__init__.pyi @@ -0,0 +1 @@ +from . import common as common, db as db, model as model, server as server, wsgi_server as wsgi_server diff --git a/odoo-stubs/service/common.pyi b/odoo-stubs/service/common.pyi new file mode 100644 index 0000000..f1cf24d --- /dev/null +++ b/odoo-stubs/service/common.pyi @@ -0,0 +1,14 @@ +from . import security as security +from odoo.exceptions import AccessDenied as AccessDenied +from odoo.tools.translate import _ as _ +from typing import Any, Optional + +_logger: Any +RPC_VERSION_1: Any + +def exp_login(db: Any, login: Any, password: Any): ... +def exp_authenticate(db: Any, login: Any, password: Any, user_agent_env: Any): ... +def exp_version(): ... +def exp_about(extended: bool = ...): ... +def exp_set_loglevel(loglevel: Any, logger: Optional[Any] = ...): ... +def dispatch(method: Any, params: Any): ... diff --git a/odoo-stubs/service/db.pyi b/odoo-stubs/service/db.pyi new file mode 100644 index 0000000..c3e9280 --- /dev/null +++ b/odoo-stubs/service/db.pyi @@ -0,0 +1,36 @@ +from functools import wraps as wraps +from odoo import SUPERUSER_ID as SUPERUSER_ID +from odoo.exceptions import AccessDenied as AccessDenied +from odoo.release import version_info as version_info +from odoo.sql_db import db_connect as db_connect +from odoo.tools import pycompat as pycompat +from typing import Any, Optional + +_logger: Any + +class DatabaseExists(Warning): ... + +def check_db_management_enabled(method: Any): ... +def check_super(passwd: Any): ... +def _initialize_db(id: Any, db_name: Any, demo: Any, lang: Any, user_password: Any, login: str = ..., country_code: Optional[Any] = ..., phone: Optional[Any] = ...) -> None: ... +def _create_empty_database(name: Any) -> None: ... +def exp_create_database(db_name: Any, demo: Any, lang: Any, user_password: str = ..., login: str = ..., country_code: Optional[Any] = ..., phone: Optional[Any] = ...): ... +def exp_duplicate_database(db_original_name: Any, db_name: Any): ... +def _drop_conn(cr: Any, db_name: Any) -> None: ... +def exp_drop(db_name: Any): ... +def exp_dump(db_name: Any, format: Any): ... +def dump_db_manifest(cr: Any): ... +def dump_db(db_name: Any, stream: Any, backup_format: str = ...): ... +def exp_restore(db_name: Any, data: Any, copy: bool = ...): ... +def restore_db(db: Any, dump_file: Any, copy: bool = ...) -> None: ... +def exp_rename(old_name: Any, new_name: Any): ... +def exp_change_admin_password(new_password: Any): ... +def exp_migrate_databases(databases: Any): ... +def exp_db_exist(db_name: Any): ... +def list_dbs(force: bool = ...): ... +def list_db_incompatible(databases: Any): ... +def exp_list(document: bool = ...): ... +def exp_list_lang(): ... +def exp_list_countries(): ... +def exp_server_version(): ... +def dispatch(method: Any, params: Any): ... diff --git a/odoo-stubs/service/model.pyi b/odoo-stubs/service/model.pyi new file mode 100644 index 0000000..5ff70fd --- /dev/null +++ b/odoo-stubs/service/model.pyi @@ -0,0 +1,16 @@ +from . import security as security +from ..tools import lazy as lazy, traverse_containers as traverse_containers +from odoo.exceptions import QWebException as QWebException, UserError as UserError, ValidationError as ValidationError +from odoo.models import check_method_name as check_method_name +from odoo.tools.translate import _ as _, translate as translate +from typing import Any, Optional + +_logger: Any +PG_CONCURRENCY_ERRORS_TO_RETRY: Any +MAX_TRIES_ON_CONCURRENCY_FAILURE: int + +def dispatch(method: Any, params: Any): ... +def check(f: Any): ... +def execute_cr(cr: Any, uid: Any, obj: Any, method: Any, *args: Any, **kw: Any): ... +def execute_kw(db: Any, uid: Any, obj: Any, method: Any, args: Any, kw: Optional[Any] = ...): ... +def execute(db: Any, uid: Any, obj: Any, method: Any, *args: Any, **kw: Any): ... diff --git a/odoo-stubs/service/security.pyi b/odoo-stubs/service/security.pyi new file mode 100644 index 0000000..2465c63 --- /dev/null +++ b/odoo-stubs/service/security.pyi @@ -0,0 +1,6 @@ +from typing import Any + +def login(db: Any, login: Any, password: Any): ... +def check(db: Any, uid: Any, passwd: Any): ... +def compute_session_token(session: Any, env: Any): ... +def check_session(session: Any, env: Any): ... diff --git a/odoo-stubs/service/server.pyi b/odoo-stubs/service/server.pyi new file mode 100644 index 0000000..c466113 --- /dev/null +++ b/odoo-stubs/service/server.pyi @@ -0,0 +1,177 @@ +import werkzeug.serving +from odoo.modules import get_modules as get_modules +from odoo.modules.module import get_test_modules as get_test_modules, run_unit_tests as run_unit_tests +from odoo.modules.registry import Registry as Registry +from odoo.release import nt_service_name as nt_service_name +from odoo.tools import config as config, dumpstacks as dumpstacks, log_ormcache_stats as log_ormcache_stats, stripped_sys_argv as stripped_sys_argv +from typing import Any, Optional + +INOTIFY_LISTEN_EVENTS: Any +_logger: Any +SLEEP_INTERVAL: int + +def memory_info(process: Any): ... +def set_limit_memory_hard() -> None: ... +def empty_pipe(fd: Any) -> None: ... + +class LoggingBaseWSGIServerMixIn: + def handle_error(self, request: Any, client_address: Any) -> None: ... + +class BaseWSGIServerNoBind(LoggingBaseWSGIServerMixIn, werkzeug.serving.BaseWSGIServer): + def __init__(self, app: Any) -> None: ... + def server_activate(self) -> None: ... + +class RequestHandler(werkzeug.serving.WSGIRequestHandler): + timeout: int = ... + def setup(self) -> None: ... + +class ThreadedWSGIServerReloadable(LoggingBaseWSGIServerMixIn, werkzeug.serving.ThreadedWSGIServer): + max_http_threads: Any = ... + http_threads_sem: Any = ... + daemon_threads: bool = ... + def __init__(self, host: Any, port: Any, app: Any) -> None: ... + reload_socket: bool = ... + socket: Any = ... + def server_bind(self) -> None: ... + def server_activate(self) -> None: ... + def process_request(self, request: Any, client_address: Any) -> None: ... + def _handle_request_noblock(self) -> None: ... + def shutdown_request(self, request: Any) -> None: ... + +class FSWatcherBase: + def handle_file(self, path: Any): ... + +class FSWatcherWatchdog(FSWatcherBase): + observer: Any = ... + def __init__(self) -> None: ... + def dispatch(self, event: Any) -> None: ... + def start(self) -> None: ... + def stop(self) -> None: ... + +class FSWatcherInotify(FSWatcherBase): + started: bool = ... + watcher: Any = ... + def __init__(self) -> None: ... + def run(self) -> None: ... + thread: Any = ... + def start(self) -> None: ... + def stop(self) -> None: ... + +class CommonServer: + app: Any = ... + interface: Any = ... + port: Any = ... + pid: Any = ... + def __init__(self, app: Any) -> None: ... + def close_socket(self, sock: Any) -> None: ... + +class ThreadedServer(CommonServer): + main_thread_id: Any = ... + quit_signals_received: int = ... + httpd: Any = ... + limits_reached_threads: Any = ... + limit_reached_time: Any = ... + def __init__(self, app: Any) -> None: ... + def signal_handler(self, sig: Any, frame: Any) -> None: ... + def process_limit(self) -> None: ... + def cron_thread(self, number: Any) -> None: ... + def cron_spawn(self) -> None: ... + def http_thread(self): ... + def http_spawn(self) -> None: ... + def start(self, stop: bool = ...): ... + def stop(self) -> None: ... + def run(self, preload: Optional[Any] = ..., stop: bool = ...): ... + def reload(self) -> None: ... + +class GeventServer(CommonServer): + port: Any = ... + httpd: Any = ... + def __init__(self, app: Any) -> None: ... + def process_limits(self) -> None: ... + ppid: Any = ... + def watchdog(self, beat: int = ...) -> None: ... + def start(self) -> None: ... + def stop(self) -> None: ... + def run(self, preload: Any, stop: Any) -> None: ... + +class PreforkServer(CommonServer): + address: Any = ... + population: Any = ... + timeout: Any = ... + limit_request: Any = ... + cron_timeout: Any = ... + beat: int = ... + app: Any = ... + pid: Any = ... + socket: Any = ... + workers_http: Any = ... + workers_cron: Any = ... + workers: Any = ... + generation: int = ... + queue: Any = ... + long_polling_pid: Any = ... + def __init__(self, app: Any) -> None: ... + def pipe_new(self): ... + def pipe_ping(self, pipe: Any) -> None: ... + def signal_handler(self, sig: Any, frame: Any) -> None: ... + def worker_spawn(self, klass: Any, workers_registry: Any): ... + def long_polling_spawn(self) -> None: ... + def worker_pop(self, pid: Any) -> None: ... + def worker_kill(self, pid: Any, sig: Any) -> None: ... + def process_signals(self) -> None: ... + def process_zombie(self) -> None: ... + def process_timeout(self) -> None: ... + def process_spawn(self) -> None: ... + def sleep(self) -> None: ... + pipe: Any = ... + def start(self) -> None: ... + def stop(self, graceful: bool = ...) -> None: ... + def run(self, preload: Any, stop: Any): ... + +class Worker: + multi: Any = ... + watchdog_time: Any = ... + watchdog_pipe: Any = ... + eintr_pipe: Any = ... + watchdog_timeout: Any = ... + ppid: Any = ... + pid: Any = ... + alive: bool = ... + request_max: Any = ... + request_count: int = ... + def __init__(self, multi: Any) -> None: ... + def setproctitle(self, title: str = ...) -> None: ... + def close(self) -> None: ... + def signal_handler(self, sig: Any, frame: Any) -> None: ... + def signal_time_expired_handler(self, n: Any, stack: Any) -> None: ... + def sleep(self) -> None: ... + def check_limits(self) -> None: ... + def process_work(self) -> None: ... + def start(self) -> None: ... + def stop(self) -> None: ... + def run(self) -> None: ... + def _runloop(self) -> None: ... + +class WorkerHTTP(Worker): + def process_request(self, client: Any, addr: Any) -> None: ... + def process_work(self) -> None: ... + server: Any = ... + def start(self) -> None: ... + +class WorkerCron(Worker): + db_index: int = ... + watchdog_timeout: Any = ... + def __init__(self, multi: Any) -> None: ... + def sleep(self) -> None: ... + def _db_list(self): ... + def process_work(self) -> None: ... + def start(self) -> None: ... + +server: Any + +def load_server_wide_modules() -> None: ... +def _reexec(updated_modules: Optional[Any] = ...) -> None: ... +def load_test_file_py(registry: Any, test_file: Any) -> None: ... +def preload_registries(dbnames: Any): ... +def start(preload: Optional[Any] = ..., stop: bool = ...): ... +def restart() -> None: ... diff --git a/odoo-stubs/service/wsgi_server.pyi b/odoo-stubs/service/wsgi_server.pyi new file mode 100644 index 0000000..6fe12dd --- /dev/null +++ b/odoo-stubs/service/wsgi_server.pyi @@ -0,0 +1,18 @@ +from odoo.tools import config as config +from typing import Any + +_logger: Any +RPC_FAULT_CODE_CLIENT_ERROR: int +RPC_FAULT_CODE_APPLICATION_ERROR: int +RPC_FAULT_CODE_WARNING: int +RPC_FAULT_CODE_ACCESS_DENIED: int +RPC_FAULT_CODE_ACCESS_ERROR: int + +def xmlrpc_handle_exception_int(e: Any): ... +def xmlrpc_handle_exception_string(e: Any): ... +def _patch_xmlrpc_marshaller() -> None: ... +def application_unproxied(environ: Any, start_response: Any): ... + +ProxyFix: Any + +def application(environ: Any, start_response: Any): ... diff --git a/odoo-stubs/sql_db.pyi b/odoo-stubs/sql_db.pyi index ebaa51f..578aa92 100644 --- a/odoo-stubs/sql_db.pyi +++ b/odoo-stubs/sql_db.pyi @@ -1,4 +1,7 @@ import psycopg2.extensions +from . import tools as tools +from .tools import pycompat as pycompat, ustr as ustr +from .tools.func import frame_codeinfo as frame_codeinfo from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/tools/__init__.pyi b/odoo-stubs/tools/__init__.pyi new file mode 100644 index 0000000..0ad15d8 --- /dev/null +++ b/odoo-stubs/tools/__init__.pyi @@ -0,0 +1,14 @@ +from .misc import * +from .convert import * +from .translate import * +from .image import * +from .sql import * +from .float_utils import * +from .mail import * +from .func import * +from .debugger import * +from .xml_utils import * +from .date_utils import * +from . import appdirs as appdirs, pdf as pdf, pycompat as pycompat, win32 as win32 +from .config import config as config +from .graph import graph as graph diff --git a/odoo-stubs/tools/appdirs.pyi b/odoo-stubs/tools/appdirs.pyi new file mode 100644 index 0000000..7bcd861 --- /dev/null +++ b/odoo-stubs/tools/appdirs.pyi @@ -0,0 +1,39 @@ +from . import pycompat as pycompat +from typing import Any, Optional + +__version_info__: Any +__version__: Any + +def user_data_dir(appname: Optional[Any] = ..., appauthor: Optional[Any] = ..., version: Optional[Any] = ..., roaming: bool = ...): ... +def site_data_dir(appname: Optional[Any] = ..., appauthor: Optional[Any] = ..., version: Optional[Any] = ..., multipath: bool = ...): ... +def user_config_dir(appname: Optional[Any] = ..., appauthor: Optional[Any] = ..., version: Optional[Any] = ..., roaming: bool = ...): ... +def site_config_dir(appname: Optional[Any] = ..., appauthor: Optional[Any] = ..., version: Optional[Any] = ..., multipath: bool = ...): ... +def user_cache_dir(appname: Optional[Any] = ..., appauthor: Optional[Any] = ..., version: Optional[Any] = ..., opinion: bool = ...): ... +def user_log_dir(appname: Optional[Any] = ..., appauthor: Optional[Any] = ..., version: Optional[Any] = ..., opinion: bool = ...): ... + +class AppDirs: + appname: Any = ... + appauthor: Any = ... + version: Any = ... + roaming: Any = ... + multipath: Any = ... + def __init__(self, appname: Any, appauthor: Optional[Any] = ..., version: Optional[Any] = ..., roaming: bool = ..., multipath: bool = ...) -> None: ... + @property + def user_data_dir(self): ... + @property + def site_data_dir(self): ... + @property + def user_config_dir(self): ... + @property + def site_config_dir(self): ... + @property + def user_cache_dir(self): ... + @property + def user_log_dir(self): ... + +def _get_win_folder_from_registry(csidl_name: Any): ... +def _get_win_folder_with_pywin32(csidl_name: Any): ... +def _get_win_folder_with_ctypes(csidl_name: Any): ... +_get_win_folder = _get_win_folder_with_pywin32 +_get_win_folder = _get_win_folder_with_ctypes +_get_win_folder = _get_win_folder_from_registry diff --git a/odoo-stubs/tools/assertion_report.pyi b/odoo-stubs/tools/assertion_report.pyi new file mode 100644 index 0000000..ce60cb5 --- /dev/null +++ b/odoo-stubs/tools/assertion_report.pyi @@ -0,0 +1,10 @@ +from typing import Any + +class assertion_report: + successes: int = ... + failures: int = ... + def __init__(self) -> None: ... + def record_success(self) -> None: ... + def record_failure(self) -> None: ... + def record_result(self, result: Any) -> None: ... + def __str__(self): ... diff --git a/odoo-stubs/tools/cache.pyi b/odoo-stubs/tools/cache.pyi new file mode 100644 index 0000000..06a2f0e --- /dev/null +++ b/odoo-stubs/tools/cache.pyi @@ -0,0 +1,51 @@ +from . import pycompat as pycompat +from typing import Any, Optional + +unsafe_eval = eval +_logger: Any + +class ormcache_counter: + __slots__: Any = ... + hit: int = ... + miss: int = ... + err: int = ... + def __init__(self) -> None: ... + @property + def ratio(self): ... + +STAT: Any + +class ormcache: + args: Any = ... + skiparg: Any = ... + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + method: Any = ... + def __call__(self, method: Any): ... + key: Any = ... + def determine_key(self): ... + def lru(self, model: Any): ... + def lookup(self, method: Any, *args: Any, **kwargs: Any): ... + def clear(self, model: Any, *args: Any) -> None: ... + +class ormcache_context(ormcache): + keys: Any = ... + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + key: Any = ... + def determine_key(self) -> None: ... + +class ormcache_multi(ormcache): + multi: Any = ... + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + key_multi: Any = ... + multi_pos: Any = ... + def determine_key(self) -> None: ... + def lookup(self, method: Any, *args: Any, **kwargs: Any): ... + +class dummy_cache: + def __init__(self, *l: Any, **kw: Any) -> None: ... + def __call__(self, fn: Any): ... + def clear(self, *l: Any, **kw: Any) -> None: ... + +def log_ormcache_stats(sig: Optional[Any] = ..., frame: Optional[Any] = ...): ... +def get_cache_key_counter(bound_method: Any, *args: Any, **kwargs: Any): ... +cache = ormcache diff --git a/odoo-stubs/tools/config.pyi b/odoo-stubs/tools/config.pyi new file mode 100644 index 0000000..c42677c --- /dev/null +++ b/odoo-stubs/tools/config.pyi @@ -0,0 +1,47 @@ +import optparse +from . import appdirs as appdirs, pycompat as pycompat +from .. import conf as conf, loglevels as loglevels, release as release +from typing import Any, Optional + +crypt_context: Any + +class MyOption(optparse.Option): + my_default: Any = ... + def __init__(self, *opts: Any, **attrs: Any) -> None: ... + +DEFAULT_LOG_HANDLER: str + +def _get_default_datadir(): ... +def _deduplicate_loggers(loggers: Any): ... + +class configmanager: + options: Any = ... + blacklist_for_save: Any = ... + casts: Any = ... + misc: Any = ... + config_file: Any = ... + _LOGLEVELS: Any = ... + parser: Any = ... + def __init__(self, fname: Optional[Any] = ...) -> None: ... + def parse_config(self, args: Optional[Any] = ...) -> None: ... + rcfile: Any = ... + def _parse_config(self, args: Optional[Any] = ...) -> None: ... + def _is_addons_path(self, path: Any): ... + def _check_addons_path(self, option: Any, opt: Any, value: Any, parser: Any) -> None: ... + def _test_enable_callback(self, option: Any, opt: Any, value: Any, parser: Any) -> None: ... + def load(self) -> None: ... + def save(self) -> None: ... + def get(self, key: Any, default: Optional[Any] = ...): ... + def pop(self, key: Any, default: Optional[Any] = ...): ... + def get_misc(self, sect: Any, key: Any, default: Optional[Any] = ...): ... + def __setitem__(self, key: Any, value: Any) -> None: ... + def __getitem__(self, key: Any): ... + @property + def addons_data_dir(self): ... + @property + def session_dir(self): ... + def filestore(self, dbname: Any): ... + def set_admin_password(self, new_password: Any) -> None: ... + def verify_admin_password(self, password: Any): ... + +config: Any diff --git a/odoo-stubs/tools/convert.pyi b/odoo-stubs/tools/convert.pyi new file mode 100644 index 0000000..4e0ce60 --- /dev/null +++ b/odoo-stubs/tools/convert.pyi @@ -0,0 +1,64 @@ +from . import assertion_report as assertion_report, pycompat as pycompat +from .config import config as config +from .misc import SKIPPED_ELEMENT_TYPES as SKIPPED_ELEMENT_TYPES, file_open as file_open, unquote as unquote, ustr as ustr +from .translate import _ as _ +from odoo import SUPERUSER_ID as SUPERUSER_ID +from typing import Any, Optional + +_logger: Any +safe_eval: Any + +class ParseError(Exception): + msg: Any = ... + text: Any = ... + filename: Any = ... + lineno: Any = ... + def __init__(self, msg: Any, text: Any, filename: Any, lineno: Any) -> None: ... + def __str__(self): ... + +class RecordDictWrapper(dict): + record: Any = ... + def __init__(self, record: Any) -> None: ... + def __getitem__(self, key: Any): ... + +def _get_idref(self, env: Any, model_str: Any, idref: Any): ... +def _fix_multiple_roots(node: Any) -> None: ... +def _eval_xml(self, node: Any, env: Any): ... +def str2bool(value: Any): ... + +class xml_import: + @staticmethod + def nodeattr2bool(node: Any, attr: Any, default: bool = ...): ... + def isnoupdate(self, data_node: Optional[Any] = ...): ... + def get_context(self, data_node: Any, node: Any, eval_dict: Any): ... + def get_uid(self, data_node: Any, node: Any): ... + def make_xml_id(self, xml_id: Any): ... + def _test_xml_id(self, xml_id: Any) -> None: ... + def _tag_delete(self, rec: Any, data_node: Optional[Any] = ..., mode: Optional[Any] = ...) -> None: ... + def _tag_report(self, rec: Any, data_node: Optional[Any] = ..., mode: Optional[Any] = ...): ... + def _tag_function(self, rec: Any, data_node: Optional[Any] = ..., mode: Optional[Any] = ...) -> None: ... + def _tag_act_window(self, rec: Any, data_node: Optional[Any] = ..., mode: Optional[Any] = ...) -> None: ... + def _tag_menuitem(self, rec: Any, data_node: Optional[Any] = ..., mode: Optional[Any] = ...) -> None: ... + def _assert_equals(self, f1: Any, f2: Any, prec: int = ...): ... + def _tag_assert(self, rec: Any, data_node: Optional[Any] = ..., mode: Optional[Any] = ...) -> None: ... + def _tag_record(self, rec: Any, data_node: Optional[Any] = ..., mode: Optional[Any] = ...): ... + def _tag_template(self, el: Any, data_node: Optional[Any] = ..., mode: Optional[Any] = ...): ... + def id_get(self, id_str: Any, raise_if_not_found: bool = ...): ... + def model_id_get(self, id_str: Any, raise_if_not_found: bool = ...): ... + def parse(self, de: Any, mode: Optional[Any] = ...): ... + mode: Any = ... + module: Any = ... + env: Any = ... + cr: Any = ... + uid: Any = ... + idref: Any = ... + assertion_report: Any = ... + noupdate: Any = ... + xml_filename: Any = ... + _tags: Any = ... + def __init__(self, cr: Any, module: Any, idref: Any, mode: Any, report: Optional[Any] = ..., noupdate: bool = ..., xml_filename: Optional[Any] = ...) -> None: ... + +def convert_file(cr: Any, module: Any, filename: Any, idref: Any, mode: str = ..., noupdate: bool = ..., kind: Optional[Any] = ..., report: Optional[Any] = ..., pathname: Optional[Any] = ...) -> None: ... +def convert_sql_import(cr: Any, fp: Any) -> None: ... +def convert_csv_import(cr: Any, module: Any, fname: Any, csvcontent: Any, idref: Optional[Any] = ..., mode: str = ..., noupdate: bool = ...) -> None: ... +def convert_xml_import(cr: Any, module: Any, xmlfile: Any, idref: Optional[Any] = ..., mode: str = ..., noupdate: bool = ..., report: Optional[Any] = ...): ... diff --git a/odoo-stubs/tools/date_utils.pyi b/odoo-stubs/tools/date_utils.pyi new file mode 100644 index 0000000..eeab3b9 --- /dev/null +++ b/odoo-stubs/tools/date_utils.pyi @@ -0,0 +1,14 @@ +from . import ustr as ustr +from .func import lazy as lazy +from typing import Any + +def get_month(date: Any): ... +def get_quarter_number(date: Any): ... +def get_quarter(date: Any): ... +def get_fiscal_year(date: Any, day: int = ..., month: int = ...): ... +def start_of(value: Any, granularity: Any): ... +def end_of(value: Any, granularity: Any): ... +def add(value: Any, *args: Any, **kwargs: Any): ... +def subtract(value: Any, *args: Any, **kwargs: Any): ... +def json_default(obj: Any): ... +def date_range(start: Any, end: Any, step: Any = ...): ... diff --git a/odoo-stubs/tools/debugger.pyi b/odoo-stubs/tools/debugger.pyi new file mode 100644 index 0000000..2f36c55 --- /dev/null +++ b/odoo-stubs/tools/debugger.pyi @@ -0,0 +1,6 @@ +from typing import Any + +_logger: Any +SUPPORTED_DEBUGGER: Any + +def post_mortem(config: Any, info: Any) -> None: ... diff --git a/odoo-stubs/tools/float_utils.pyi b/odoo-stubs/tools/float_utils.pyi new file mode 100644 index 0000000..b0728ff --- /dev/null +++ b/odoo-stubs/tools/float_utils.pyi @@ -0,0 +1,15 @@ +from odoo.tools import pycompat as pycompat +from typing import Any, Optional + +def round(f: Any): ... +round = round + +def _float_check_precision(precision_digits: Optional[Any] = ..., precision_rounding: Optional[Any] = ...): ... +def float_round(value: Any, precision_digits: Optional[Any] = ..., precision_rounding: Optional[Any] = ..., rounding_method: str = ...): ... +def float_is_zero(value: Any, precision_digits: Optional[Any] = ..., precision_rounding: Optional[Any] = ...): ... +def float_compare(value1: Any, value2: Any, precision_digits: Optional[Any] = ..., precision_rounding: Optional[Any] = ...): ... +def float_repr(value: Any, precision_digits: Any): ... +_float_repr = float_repr + +def float_split_str(value: Any, precision_digits: Any): ... +def float_split(value: Any, precision_digits: Any): ... diff --git a/odoo-stubs/tools/func.pyi b/odoo-stubs/tools/func.pyi new file mode 100644 index 0000000..254edce --- /dev/null +++ b/odoo-stubs/tools/func.pyi @@ -0,0 +1,116 @@ +from json import JSONEncoder as JSONEncoder +from typing import Any + +__all__: Any + +class lazy_property: + fget: Any = ... + def __init__(self, fget: Any) -> None: ... + def __get__(self, obj: Any, cls: Any): ... + @property + def __doc__(self): ... + @staticmethod + def reset_all(obj: Any) -> None: ... + +class lazy_classproperty(lazy_property): + def __get__(self, obj: Any, cls: Any): ... + +def conditional(condition: Any, decorator: Any): ... +def synchronized(lock_attr: str = ...): ... +def frame_codeinfo(fframe: Any, back: int = ...): ... +def compose(a: Any, b: Any): ... + +class _ClassProperty(property): + def __get__(self, cls: Any, owner: Any): ... + +def classproperty(func: Any): ... + +class lazy: + __slots__: Any = ... + def __init__(self, func: Any, *args: Any, **kwargs: Any) -> None: ... + @property + def _value(self): ... + def __getattr__(self, name: Any): ... + def __setattr__(self, name: Any, value: Any): ... + def __delattr__(self, name: Any): ... + def __repr__(self): ... + def __str__(self): ... + def __bytes__(self): ... + def __format__(self, format_spec: Any): ... + def __lt__(self, other: Any) -> Any: ... + def __le__(self, other: Any) -> Any: ... + def __eq__(self, other: Any) -> Any: ... + def __ne__(self, other: Any) -> Any: ... + def __gt__(self, other: Any) -> Any: ... + def __ge__(self, other: Any) -> Any: ... + def __hash__(self) -> Any: ... + def __bool__(self): ... + def __call__(self, *args: Any, **kwargs: Any): ... + def __len__(self): ... + def __getitem__(self, key: Any): ... + def __missing__(self, key: Any): ... + def __setitem__(self, key: Any, value: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def __iter__(self) -> Any: ... + def __reversed__(self): ... + def __contains__(self, key: Any): ... + def __add__(self, other: Any): ... + def __sub__(self, other: Any): ... + def __mul__(self, other: Any): ... + def __matmul__(self, other: Any): ... + def __truediv__(self, other: Any): ... + def __floordiv__(self, other: Any): ... + def __mod__(self, other: Any): ... + def __divmod__(self, other: Any): ... + def __pow__(self, other: Any): ... + def __lshift__(self, other: Any): ... + def __rshift__(self, other: Any): ... + def __and__(self, other: Any): ... + def __xor__(self, other: Any): ... + def __or__(self, other: Any): ... + def __radd__(self, other: Any): ... + def __rsub__(self, other: Any): ... + def __rmul__(self, other: Any): ... + def __rmatmul__(self, other: Any): ... + def __rtruediv__(self, other: Any): ... + def __rfloordiv__(self, other: Any): ... + def __rmod__(self, other: Any): ... + def __rdivmod__(self, other: Any): ... + def __rpow__(self, other: Any): ... + def __rlshift__(self, other: Any): ... + def __rrshift__(self, other: Any): ... + def __rand__(self, other: Any): ... + def __rxor__(self, other: Any): ... + def __ror__(self, other: Any): ... + def __iadd__(self, other: Any): ... + def __isub__(self, other: Any): ... + def __imul__(self, other: Any): ... + def __imatmul__(self, other: Any): ... + def __itruediv__(self, other: Any): ... + def __ifloordiv__(self, other: Any): ... + def __imod__(self, other: Any): ... + def __ipow__(self, other: Any): ... + def __ilshift__(self, other: Any): ... + def __irshift__(self, other: Any): ... + def __iand__(self, other: Any): ... + def __ixor__(self, other: Any): ... + def __ior__(self, other: Any): ... + def __neg__(self): ... + def __pos__(self): ... + def __abs__(self): ... + def __invert__(self): ... + def __complex__(self): ... + def __int__(self): ... + def __float__(self): ... + def __index__(self): ... + def __round__(self): ... + def __trunc__(self): ... + def __floor__(self): ... + def __ceil__(self): ... + def __enter__(self): ... + def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any): ... + def __await__(self): ... + def __aiter__(self): ... + def __anext__(self): ... + def __aenter__(self): ... + def __aexit__(self, exc_type: Any, exc_value: Any, traceback: Any): ... diff --git a/odoo-stubs/tools/graph.pyi b/odoo-stubs/tools/graph.pyi new file mode 100644 index 0000000..a45974c --- /dev/null +++ b/odoo-stubs/tools/graph.pyi @@ -0,0 +1,54 @@ +from typing import Any, Optional + +class graph: + nodes: Any = ... + edges: Any = ... + no_ancester: Any = ... + transitions: Any = ... + result: Any = ... + def __init__(self, nodes: Any, transitions: Any, no_ancester: Optional[Any] = ...) -> None: ... + edge_wt: Any = ... + def init_rank(self) -> None: ... + reachable_nodes: Any = ... + tree_edges: Any = ... + def tight_tree(self): ... + def reachable_node(self, node: Any) -> None: ... + cut_edges: Any = ... + head_nodes: Any = ... + def init_cutvalues(self) -> None: ... + def head_component(self, node: Any, rest_edges: Any) -> None: ... + def process_ranking(self, node: Any, level: int = ...) -> None: ... + def make_acyclic(self, parent: Any, node: Any, level: Any, tree: Any): ... + def rev_edges(self, tree: Any): ... + def exchange(self, e: Any, f: Any) -> None: ... + def enter_edge(self, edge: Any): ... + def leave_edge(self): ... + def finalize_rank(self, node: Any, level: Any) -> None: ... + def normalize(self) -> None: ... + def make_chain(self) -> None: ... + def init_order(self, node: Any, level: Any) -> None: ... + def order_heuristic(self) -> None: ... + def wmedian(self) -> None: ... + def median_value(self, node: Any, adj_rank: Any): ... + def adj_position(self, node: Any, adj_rank: Any): ... + levels: Any = ... + def preprocess_order(self) -> None: ... + def graph_order(self) -> None: ... + def tree_order(self, node: Any, last: int = ...): ... + max_order: Any = ... + def process_order(self) -> None: ... + partial_order: Any = ... + def find_starts(self) -> None: ... + critical_edges: Any = ... + links: Any = ... + Is_Cyclic: bool = ... + def rank(self) -> None: ... + order: Any = ... + def order_in_rank(self): ... + start_nodes: Any = ... + tree_list: Any = ... + start: Any = ... + def process(self, starting_node: Any) -> None: ... + def __str__(self): ... + def scale(self, maxx: Any, maxy: Any, nwidth: int = ..., nheight: int = ..., margin: int = ...) -> None: ... + def result_get(self): ... diff --git a/odoo-stubs/tools/image.pyi b/odoo-stubs/tools/image.pyi new file mode 100644 index 0000000..5eae92b --- /dev/null +++ b/odoo-stubs/tools/image.pyi @@ -0,0 +1,16 @@ +from odoo.tools import pycompat as pycompat +from typing import Any, Optional + +FILETYPE_BASE64_MAGICWORD: Any + +def image_resize_image(base64_source: Any, size: Any = ..., encoding: str = ..., filetype: Optional[Any] = ..., avoid_if_small: bool = ..., upper_limit: bool = ...): ... +def image_resize_and_sharpen(image: Any, size: Any, preserve_aspect_ratio: bool = ..., factor: float = ..., upper_limit: bool = ...): ... +def image_save_for_web(image: Any, fp: Optional[Any] = ..., format: Optional[Any] = ...): ... +def image_resize_image_big(base64_source: Any, size: Any = ..., encoding: str = ..., filetype: Optional[Any] = ..., avoid_if_small: bool = ...): ... +def image_resize_image_medium(base64_source: Any, size: Any = ..., encoding: str = ..., filetype: Optional[Any] = ..., avoid_if_small: bool = ...): ... +def image_resize_image_small(base64_source: Any, size: Any = ..., encoding: str = ..., filetype: Optional[Any] = ..., avoid_if_small: bool = ...): ... +def crop_image(data: Any, type: str = ..., ratio: bool = ..., size: Optional[Any] = ..., image_format: Optional[Any] = ...): ... +def image_colorize(original: Any, randomize: bool = ..., color: Any = ...): ... +def image_get_resized_images(base64_source: Any, return_big: bool = ..., return_medium: bool = ..., return_small: bool = ..., big_name: str = ..., medium_name: str = ..., small_name: str = ..., avoid_resize_big: bool = ..., avoid_resize_medium: bool = ..., avoid_resize_small: bool = ..., sizes: Any = ...): ... +def image_resize_images(vals: Any, big_name: str = ..., medium_name: str = ..., small_name: str = ..., sizes: Any = ...) -> None: ... +def image_data_uri(base64_source: Any): ... diff --git a/odoo-stubs/tools/lru.pyi b/odoo-stubs/tools/lru.pyi new file mode 100644 index 0000000..b0ba743 --- /dev/null +++ b/odoo-stubs/tools/lru.pyi @@ -0,0 +1,33 @@ +from .func import synchronized as synchronized +from typing import Any, Optional + +__all__: Any + +class LRUNode: + __slots__: Any = ... + prev: Any = ... + me: Any = ... + next: Any = ... + def __init__(self, prev: Any, me: Any) -> None: ... + +class LRU: + _lock: Any = ... + count: Any = ... + d: Any = ... + first: Any = ... + last: Any = ... + def __init__(self, count: Any, pairs: Any = ...) -> None: ... + def __contains__(self, obj: Any): ... + def get(self, obj: Any, val: Optional[Any] = ...): ... + def __getitem__(self, obj: Any): ... + def __setitem__(self, obj: Any, val: Any) -> None: ... + def __delitem__(self, obj: Any) -> None: ... + def __iter__(self) -> Any: ... + def __len__(self): ... + def iteritems(self) -> None: ... + items: Any = ... + def iterkeys(self): ... + def itervalues(self): ... + def keys(self): ... + def pop(self, key: Any): ... + def clear(self) -> None: ... diff --git a/odoo-stubs/tools/mail.pyi b/odoo-stubs/tools/mail.pyi new file mode 100644 index 0000000..e772999 --- /dev/null +++ b/odoo-stubs/tools/mail.pyi @@ -0,0 +1,43 @@ +from lxml.html import clean +from odoo.loglevels import ustr as ustr +from odoo.tools import misc as misc, pycompat as pycompat +from typing import Any, Optional + +_logger: Any +tags_to_kill: Any +tags_to_remove: Any +allowed_tags: Any +safe_attrs: Any + +class _Cleaner(clean.Cleaner): + _style_re: Any = ... + _style_whitelist: Any = ... + strip_classes: bool = ... + sanitize_style: bool = ... + def __call__(self, doc: Any) -> None: ... + def tag_quote(self, el: Any): ... + def strip_class(self, el: Any) -> None: ... + def parse_style(self, el: Any) -> None: ... + def allow_element(self, el: Any): ... + +def html_sanitize(src: Any, silent: bool = ..., sanitize_tags: bool = ..., sanitize_attributes: bool = ..., sanitize_style: bool = ..., strip_style: bool = ..., strip_classes: bool = ...): ... +def html_keep_url(text: Any): ... +def html2plaintext(html: Any, body_id: Optional[Any] = ..., encoding: str = ...): ... +def plaintext2html(text: Any, container_tag: bool = ...): ... +def append_content_to_html(html: Any, content: Any, plaintext: bool = ..., preserve: bool = ..., container_tag: bool = ...): ... + +email_re: Any +single_email_re: Any +reference_re: Any +discussion_re: Any +mail_header_msgid_re: Any +email_addr_escapes_re: Any + +def generate_tracking_message_id(res_id: Any): ... +def email_send(email_from: Any, email_to: Any, subject: Any, body: Any, email_cc: Optional[Any] = ..., email_bcc: Optional[Any] = ..., reply_to: bool = ..., attachments: Optional[Any] = ..., message_id: Optional[Any] = ..., references: Optional[Any] = ..., openobject_id: bool = ..., debug: bool = ..., subtype: str = ..., headers: Optional[Any] = ..., smtp_server: Optional[Any] = ..., smtp_port: Optional[Any] = ..., ssl: bool = ..., smtp_user: Optional[Any] = ..., smtp_password: Optional[Any] = ..., cr: Optional[Any] = ..., uid: Optional[Any] = ...): ... +def email_split(text: Any): ... +def email_split_and_format(text: Any): ... +def email_escape_char(email_address: Any): ... +def email_references(references: Any): ... +def decode_smtp_header(smtp_header: Any): ... +def decode_message_header(message: Any, header: Any, separator: str = ...): ... diff --git a/odoo-stubs/tools/mimetypes.pyi b/odoo-stubs/tools/mimetypes.pyi new file mode 100644 index 0000000..040b181 --- /dev/null +++ b/odoo-stubs/tools/mimetypes.pyi @@ -0,0 +1,26 @@ +from collections import namedtuple +from typing import Any + +__all__: Any +_logger: Any +_ooxml_dirs: Any + +def _check_ooxml(data: Any): ... + +_mime_validator: Any + +def _check_open_container_format(data: Any): ... + +_xls_pattern: Any +_ppt_pattern: Any + +def _check_olecf(data: Any): ... +def _check_svg(data: Any): ... + +_Entry = namedtuple('_Entry', ['mimetype', 'signatures', 'discriminants']) +_mime_mappings: Any + +def guess_mimetype(bin_data: Any, default: str = ...): ... + +guess_mimetype: Any +ms: Any diff --git a/odoo-stubs/tools/misc.pyi b/odoo-stubs/tools/misc.pyi new file mode 100644 index 0000000..6e101e5 --- /dev/null +++ b/odoo-stubs/tools/misc.pyi @@ -0,0 +1,188 @@ +from .cache import * +import pickle as pickle_ +import xlsxwriter +import xlwt +from . import pycompat as pycompat +from .config import config as config +from .parse_version import parse_version as parse_version +from .which import which as which +from collections import Mapping, MutableMapping, MutableSet, defaultdict +from itertools import repeat as repeat +from odoo.loglevels import exception_to_unicode as exception_to_unicode, get_encodings as get_encodings, ustr as ustr +from typing import Any, Optional + +_logger: Any +SKIPPED_ELEMENT_TYPES: Any + +def find_in_path(name: Any): ... +def _exec_pipe(prog: Any, args: Any, env: Optional[Any] = ...): ... +def exec_command_pipe(name: Any, *args: Any): ... +def find_pg_tool(name: Any): ... +def exec_pg_environ(): ... +def exec_pg_command(name: Any, *args: Any) -> None: ... +def exec_pg_command_pipe(name: Any, *args: Any): ... +def file_open(name: Any, mode: str = ..., subdir: str = ..., pathinfo: bool = ...): ... +def _fileopen(path: Any, mode: Any, basedir: Any, pathinfo: Any, basename: Optional[Any] = ...): ... +def flatten(list: Any): ... +def reverse_enumerate(l: Any): ... +def partition(pred: Any, elems: Any): ... +def topological_sort(elems: Any): ... + +class PatchedWorkbook(xlwt.Workbook): + def add_sheet(self, name: Any, cell_overwrite_ok: bool = ...): ... + +class PatchedXlsxWorkbook(xlsxwriter.Workbook): + def add_worksheet(self, name: Optional[Any] = ..., **kw: Any): ... + +def to_xml(s: Any): ... +def get_iso_codes(lang: Any): ... +def scan_languages(): ... +def get_user_companies(cr: Any, user: Any): ... +def mod10r(number: Any): ... +def str2bool(s: Any, default: Optional[Any] = ...): ... +def human_size(sz: Any): ... +def logged(f: Any): ... + +class profile: + fname: Any = ... + def __init__(self, fname: Optional[Any] = ...) -> None: ... + def __call__(self, f: Any): ... + +def detect_ip_addr(): ... + +DEFAULT_SERVER_DATE_FORMAT: str +DEFAULT_SERVER_TIME_FORMAT: str +DEFAULT_SERVER_DATETIME_FORMAT: Any +DATE_LENGTH: Any +DATETIME_FORMATS_MAP: Any +POSIX_TO_LDML: Any + +def posix_to_ldml(fmt: Any, locale: Any): ... +def split_every(n: Any, iterable: Any, piece_maker: Any = ...) -> None: ... +def get_and_group_by_field(cr: Any, uid: Any, obj: Any, ids: Any, field: Any, context: Optional[Any] = ...): ... +def get_and_group_by_company(cr: Any, uid: Any, obj: Any, ids: Any, context: Optional[Any] = ...): ... +def resolve_attr(obj: Any, attr: Any): ... +def attrgetter(*items: Any): ... +def remove_accents(input_str: Any): ... + +class unquote(str): + def __repr__(self): ... + +class UnquoteEvalContext(defaultdict): + def __init__(self, *args: Any, **kwargs: Any) -> None: ... + def __missing__(self, key: Any): ... + +class mute_logger: + loggers: Any = ... + def __init__(self, *loggers: Any) -> None: ... + def filter(self, record: Any): ... + def __enter__(self) -> None: ... + def __exit__(self, exc_type: Optional[Any] = ..., exc_val: Optional[Any] = ..., exc_tb: Optional[Any] = ...) -> None: ... + def __call__(self, func: Any): ... + +_ph: Any + +class CountingStream: + stream: Any = ... + index: Any = ... + stopped: bool = ... + def __init__(self, stream: Any, start: int = ...) -> None: ... + def __iter__(self) -> Any: ... + def next(self): ... + __next__: Any = ... + +def stripped_sys_argv(*strip_args: Any): ... + +class ConstantMapping(Mapping): + __slots__: Any = ... + _value: Any = ... + def __init__(self, val: Any) -> None: ... + def __len__(self): ... + def __iter__(self) -> Any: ... + def __getitem__(self, item: Any): ... + +def dumpstacks(sig: Optional[Any] = ..., frame: Optional[Any] = ..., thread_idents: Optional[Any] = ...) -> None: ... +def freehash(arg: Any): ... +def clean_context(context: Any): ... + +class frozendict(dict): + def __delitem__(self, key: Any) -> None: ... + def __setitem__(self, key: Any, val: Any) -> None: ... + def clear(self) -> None: ... + def pop(self, key: Any, default: Optional[Any] = ...) -> None: ... + def popitem(self) -> None: ... + def setdefault(self, key: Any, default: Optional[Any] = ...) -> None: ... + def update(self, *args: Any, **kwargs: Any) -> None: ... + def __hash__(self) -> Any: ... + +class Collector(Mapping): + __slots__: Any = ... + _map: Any = ... + def __init__(self) -> None: ... + def add(self, key: Any, val: Any) -> None: ... + def __getitem__(self, key: Any): ... + def __iter__(self) -> Any: ... + def __len__(self): ... + +class StackMap(MutableMapping): + __slots__: Any = ... + _maps: Any = ... + def __init__(self, m: Optional[Any] = ...) -> None: ... + def __getitem__(self, key: Any): ... + def __setitem__(self, key: Any, val: Any) -> None: ... + def __delitem__(self, key: Any) -> None: ... + def __iter__(self) -> Any: ... + def __len__(self): ... + def __str__(self): ... + def pushmap(self, m: Optional[Any] = ...) -> None: ... + def popmap(self): ... + +class OrderedSet(MutableSet): + __slots__: Any = ... + _map: Any = ... + def __init__(self, elems: Any = ...) -> None: ... + def __contains__(self, elem: Any): ... + def __iter__(self) -> Any: ... + def __len__(self): ... + def add(self, elem: Any) -> None: ... + def discard(self, elem: Any) -> None: ... + +class LastOrderedSet(OrderedSet): + def add(self, elem: Any) -> None: ... + +def groupby(iterable: Any, key: Optional[Any] = ...): ... +def unique(it: Any) -> None: ... + +class Reverse: + __slots__: Any = ... + val: Any = ... + def __init__(self, val: Any) -> None: ... + def __eq__(self, other: Any) -> Any: ... + def __ne__(self, other: Any) -> Any: ... + def __ge__(self, other: Any) -> Any: ... + def __gt__(self, other: Any) -> Any: ... + def __le__(self, other: Any) -> Any: ... + def __lt__(self, other: Any) -> Any: ... + +def ignore(*exc: Any) -> None: ... +def html_escape(text: Any): ... +def formatLang(env: Any, value: Any, digits: Optional[Any] = ..., grouping: bool = ..., monetary: bool = ..., dp: bool = ..., currency_obj: bool = ...): ... +def format_date(env: Any, value: Any, lang_code: bool = ..., date_format: bool = ...): ... +def _consteq(str1: Any, str2: Any): ... + +consteq: Any + +class Unpickler(pickle_.Unpickler): + find_global: Any = ... + find_class: Any = ... + +def _pickle_load(stream: Any, encoding: str = ..., errors: bool = ...): ... + +pickle: Any + +def wrap_module(module: Any, attr_list: Any): ... + +class DotDict(dict): + def __getattr__(self, attrib: Any): ... + +def traverse_containers(val: Any, type_: Any) -> None: ... diff --git a/odoo-stubs/tools/osutil.pyi b/odoo-stubs/tools/osutil.pyi new file mode 100644 index 0000000..db8418f --- /dev/null +++ b/odoo-stubs/tools/osutil.pyi @@ -0,0 +1,15 @@ +import ctypes +from odoo.release import nt_service_name as nt_service_name +from typing import Any, Optional + +def listdir(dir: Any, recursive: bool = ...): ... +def walksymlinks(top: Any, topdown: bool = ..., onerror: Optional[Any] = ...) -> None: ... +def tempdir() -> None: ... +def zip_dir(path: Any, stream: Any, include_dir: bool = ..., fnct_sort: Optional[Any] = ...) -> None: ... + +getppid: Any +is_running_as_nt_service: Any +_TH32CS_SNAPPROCESS: int + +class _PROCESSENTRY32(ctypes.Structure): + _fields_: Any = ... diff --git a/odoo-stubs/tools/parse_version.pyi b/odoo-stubs/tools/parse_version.pyi new file mode 100644 index 0000000..822316b --- /dev/null +++ b/odoo-stubs/tools/parse_version.pyi @@ -0,0 +1,8 @@ +from odoo.tools import pycompat as pycompat +from typing import Any + +component_re: Any +replace: Any + +def _parse_version_parts(s: Any) -> None: ... +def parse_version(s: Any): ... diff --git a/odoo-stubs/tools/pdf.pyi b/odoo-stubs/tools/pdf.pyi new file mode 100644 index 0000000..f97987e --- /dev/null +++ b/odoo-stubs/tools/pdf.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def merge_pdf(pdf_data: Any): ... diff --git a/odoo-stubs/tools/profiler.pyi b/odoo-stubs/tools/profiler.pyi new file mode 100644 index 0000000..cbb1dea --- /dev/null +++ b/odoo-stubs/tools/profiler.pyi @@ -0,0 +1,15 @@ +from typing import Any, Optional + +_logger: Any + +class _LogTracer: + profiles: Any = ... + whitelist: Any = ... + blacklist: Any = ... + files: Any = ... + deep: Any = ... + first_frame: Any = ... + def __init__(self, whitelist: Optional[Any] = ..., blacklist: Optional[Any] = ..., files: Optional[Any] = ..., deep: bool = ...) -> None: ... + def tracer(self, frame: Any, event: Any, arg: Any): ... + +def profile(method: Optional[Any] = ..., whitelist: Optional[Any] = ..., blacklist: Any = ..., files: Optional[Any] = ..., minimum_time: int = ..., minimum_queries: int = ...): ... diff --git a/odoo-stubs/tools/pycompat.pyi b/odoo-stubs/tools/pycompat.pyi new file mode 100644 index 0000000..4a5830f --- /dev/null +++ b/odoo-stubs/tools/pycompat.pyi @@ -0,0 +1,30 @@ +from collections import namedtuple +from typing import Any, Optional + +PY2: Any + +_Writer = namedtuple('_Writer', 'writerow writerows') +unichr = unichr +text_type = unicode +string_types: Any + +def to_native(source: Any, encoding: str = ..., falsy_empty: bool = ...): ... + +integer_types: Any + +def implements_to_string(cls): ... +def implements_iterator(cls): ... +def csv_reader(stream: Any, **params: Any) -> None: ... +def csv_writer(stream: Any, **params: Any): ... +unichr = chr +text_type = str +imap = map +izip = zip +ifilter = filter + +def reraise(tp: Any, value: Any, tb: Optional[Any] = ...) -> None: ... + +_reader: Any +_writer: Any + +def to_text(source: Any): ... diff --git a/odoo-stubs/tools/safe_eval.pyi b/odoo-stubs/tools/safe_eval.pyi new file mode 100644 index 0000000..21a1392 --- /dev/null +++ b/odoo-stubs/tools/safe_eval.pyi @@ -0,0 +1,26 @@ +from . import pycompat as pycompat +from .misc import ustr as ustr +from typing import Any, Optional + +unsafe_eval = eval +__all__: Any +_ALLOWED_MODULES: Any +_UNSAFE_ATTRIBUTES: Any +_POSSIBLE_OPCODES_P3: Any +_CONST_OPCODES: Any +_EXPR_OPCODES: Any +_SAFE_OPCODES: Any +_logger: Any + +def _get_opcodes(codeobj: Any): ... +def assert_no_dunder_name(code_obj: Any, expr: Any) -> None: ... +def assert_valid_codeobj(allowed_codes: Any, code_obj: Any, expr: Any) -> None: ... +def test_expr(expr: Any, allowed_codes: Any, mode: str = ...): ... +def const_eval(expr: Any): ... +def expr_eval(expr: Any): ... +def _import(name: Any, globals: Optional[Any] = ..., locals: Optional[Any] = ..., fromlist: Optional[Any] = ..., level: int = ...): ... + +_BUILTINS: Any + +def safe_eval(expr: Any, globals_dict: Optional[Any] = ..., locals_dict: Optional[Any] = ..., mode: str = ..., nocopy: bool = ..., locals_builtins: bool = ...): ... +def test_python_expr(expr: Any, mode: str = ...): ... diff --git a/odoo-stubs/tools/sql.pyi b/odoo-stubs/tools/sql.pyi new file mode 100644 index 0000000..68bf9cb --- /dev/null +++ b/odoo-stubs/tools/sql.pyi @@ -0,0 +1,29 @@ +from typing import Any, Optional + +_schema: Any +_CONFDELTYPES: Any + +def existing_tables(cr: Any, tablenames: Any): ... +def table_exists(cr: Any, tablename: Any): ... +def table_kind(cr: Any, tablename: Any): ... +def create_model_table(cr: Any, tablename: Any, comment: Optional[Any] = ...) -> None: ... +def table_columns(cr: Any, tablename: Any): ... +def column_exists(cr: Any, tablename: Any, columnname: Any): ... +def create_column(cr: Any, tablename: Any, columnname: Any, columntype: Any, comment: Optional[Any] = ...) -> None: ... +def rename_column(cr: Any, tablename: Any, columnname1: Any, columnname2: Any) -> None: ... +def convert_column(cr: Any, tablename: Any, columnname: Any, columntype: Any) -> None: ... +def set_not_null(cr: Any, tablename: Any, columnname: Any) -> None: ... +def drop_not_null(cr: Any, tablename: Any, columnname: Any) -> None: ... +def constraint_definition(cr: Any, tablename: Any, constraintname: Any): ... +def add_constraint(cr: Any, tablename: Any, constraintname: Any, definition: Any) -> None: ... +def drop_constraint(cr: Any, tablename: Any, constraintname: Any) -> None: ... +def add_foreign_key(cr: Any, tablename1: Any, columnname1: Any, tablename2: Any, columnname2: Any, ondelete: Any): ... +def fix_foreign_key(cr: Any, tablename1: Any, columnname1: Any, tablename2: Any, columnname2: Any, ondelete: Any): ... +def index_exists(cr: Any, indexname: Any): ... +def create_index(cr: Any, indexname: Any, tablename: Any, expressions: Any) -> None: ... +def create_unique_index(cr: Any, indexname: Any, tablename: Any, expressions: Any) -> None: ... +def drop_index(cr: Any, indexname: Any, tablename: Any) -> None: ... +def drop_view_if_exists(cr: Any, viewname: Any) -> None: ... +def escape_psql(to_escape: Any): ... +def pg_varchar(size: int = ...): ... +def reverse_order(order: Any): ... diff --git a/odoo-stubs/tools/test_config.pyi b/odoo-stubs/tools/test_config.pyi new file mode 100644 index 0000000..3c43612 --- /dev/null +++ b/odoo-stubs/tools/test_config.pyi @@ -0,0 +1,5 @@ +from . import config as config +from typing import Any + +config_file_00: Any +conf: Any diff --git a/odoo-stubs/tools/test_reports.pyi b/odoo-stubs/tools/test_reports.pyi new file mode 100644 index 0000000..9bf4003 --- /dev/null +++ b/odoo-stubs/tools/test_reports.pyi @@ -0,0 +1,10 @@ +from . import config as config, pycompat as pycompat, ustr as ustr +from .. import api as api +from .safe_eval import safe_eval as safe_eval +from typing import Any, Optional + +_logger: Any +_test_logger: Any + +def try_report(cr: Any, uid: Any, rname: Any, ids: Any, data: Optional[Any] = ..., context: Optional[Any] = ..., our_module: Optional[Any] = ..., report_type: Optional[Any] = ...): ... +def try_report_action(cr: Any, uid: Any, action_id: Any, active_model: Optional[Any] = ..., active_ids: Optional[Any] = ..., wiz_data: Optional[Any] = ..., wiz_buttons: Optional[Any] = ..., context: Optional[Any] = ..., our_module: Optional[Any] = ...): ... diff --git a/odoo-stubs/tools/translate.pyi b/odoo-stubs/tools/translate.pyi new file mode 100644 index 0000000..b6dfc68 --- /dev/null +++ b/odoo-stubs/tools/translate.pyi @@ -0,0 +1,78 @@ +import csv +from . import config as config, pycompat as pycompat +from .misc import SKIPPED_ELEMENT_TYPES as SKIPPED_ELEMENT_TYPES, file_open as file_open, get_iso_codes as get_iso_codes +from .osutil import walksymlinks as walksymlinks +from typing import Any, Optional + +_logger: Any +WEB_TRANSLATION_COMMENT: str +SKIPPED_ELEMENTS: Any +_LOCALE2WIN32: Any +ENGLISH_SMALL_WORDS: Any + +class UNIX_LINE_TERMINATOR(csv.excel): + lineterminator: str = ... + +def encode(s: Any): ... + +TRANSLATED_ELEMENTS: Any +TRANSLATED_ATTRS: Any +avoid_pattern: Any +node_pattern: Any + +def translate_xml_node(node: Any, callback: Any, parse: Any, serialize: Any): ... +def parse_xml(text: Any): ... +def serialize_xml(node: Any): ... + +_HTML_PARSER: Any + +def parse_html(text: Any): ... +def serialize_html(node: Any): ... +def xml_translate(callback: Any, value: Any): ... +def html_translate(callback: Any, value: Any): ... +def translate(cr: Any, name: Any, source_type: Any, lang: Any, source: Optional[Any] = ...): ... + +class GettextAlias: + def _get_db(self): ... + def _get_cr(self, frame: Any, allow_create: bool = ...): ... + def _get_uid(self, frame: Any): ... + def _get_lang(self, frame: Any): ... + def __call__(self, source: Any): ... + +_: Any + +def quote(s: Any): ... + +re_escaped_char: Any +re_escaped_replacements: Any + +def _sub_replacement(match_obj: Any): ... +def unquote(str: Any): ... + +class PoFile: + buffer: Any = ... + def __init__(self, buffer: Any) -> None: ... + lines: Any = ... + lines_count: Any = ... + first: bool = ... + extra_lines: Any = ... + def __iter__(self) -> Any: ... + def _get_lines(self): ... + def cur_line(self): ... + def next(self): ... + __next__: Any = ... + def write_infos(self, modules: Any) -> None: ... + def write(self, modules: Any, tnrs: Any, source: Any, trad: Any, comments: Optional[Any] = ...) -> None: ... + +def trans_export(lang: Any, modules: Any, buffer: Any, format: Any, cr: Any) -> None: ... +def trans_parse_rml(de: Any): ... +def _push(callback: Any, term: Any, source_line: Any) -> None: ... +def in_modules(object_name: Any, modules: Any): ... +def _extract_translatable_qweb_terms(element: Any, callback: Any) -> None: ... +def babel_extract_qweb(fileobj: Any, keywords: Any, comment_tags: Any, options: Any): ... +def trans_generate(lang: Any, modules: Any, cr: Any): ... +def trans_load(cr: Any, filename: Any, lang: Any, verbose: bool = ..., module_name: Optional[Any] = ..., context: Optional[Any] = ...): ... +def trans_load_data(cr: Any, fileobj: Any, fileformat: Any, lang: Any, lang_name: Optional[Any] = ..., verbose: bool = ..., module_name: Optional[Any] = ..., context: Optional[Any] = ...) -> None: ... +def get_locales(lang: Optional[Any] = ...) -> None: ... +def resetlocale(): ... +def load_language(cr: Any, lang: Any) -> None: ... diff --git a/odoo-stubs/tools/view_validation.pyi b/odoo-stubs/tools/view_validation.pyi new file mode 100644 index 0000000..f74c775 --- /dev/null +++ b/odoo-stubs/tools/view_validation.pyi @@ -0,0 +1,30 @@ +from odoo import tools as tools +from typing import Any + +_logger: Any +_validators: Any +_relaxng_cache: Any + +def valid_view(arch: Any): ... +def validate(*view_types: Any): ... +def relaxng(view_type: Any): ... +def schema_valid(arch: Any): ... +def valid_page_in_book(arch: Any): ... +def valid_field_in_graph(arch: Any): ... +def valid_field_in_tree(arch: Any): ... +def valid_att_in_field(arch: Any): ... +def valid_att_in_label(arch: Any): ... +def valid_att_in_form(arch: Any): ... +def valid_type_in_colspan(arch: Any): ... +def valid_type_in_col(arch: Any): ... +def valid_alternative_image_text(arch: Any): ... +def valid_simili_button(arch: Any): ... +def valid_simili_dropdown(arch: Any): ... +def valid_simili_progressbar(arch: Any): ... +def valid_dialog(arch: Any): ... +def valid_simili_tabpanel(arch: Any): ... +def valid_simili_tab(arch: Any): ... +def valid_simili_tablist(arch: Any): ... +def valid_focusable_button(arch: Any): ... +def valid_prohibited_none_role(arch: Any): ... +def valid_alerts(arch: Any): ... diff --git a/odoo-stubs/tools/which.pyi b/odoo-stubs/tools/which.pyi new file mode 100644 index 0000000..d81ee28 --- /dev/null +++ b/odoo-stubs/tools/which.pyi @@ -0,0 +1,13 @@ +from os import R_OK as R_OK, W_OK as W_OK +from os.path import dirname as dirname +from typing import Any, Optional + +__docformat__: str +__all__: Any +ENOENT: int +windows: Any +seen: Any +defpathext: Any + +def which_files(file: Any, mode: Any = ..., path: Optional[Any] = ..., pathext: Optional[Any] = ...) -> None: ... +def which(file: Any, mode: Any = ..., path: Optional[Any] = ..., pathext: Optional[Any] = ...): ... diff --git a/odoo-stubs/tools/win32.pyi b/odoo-stubs/tools/win32.pyi new file mode 100644 index 0000000..784aa6d --- /dev/null +++ b/odoo-stubs/tools/win32.pyi @@ -0,0 +1,3 @@ +from typing import Any + +def nl_langinfo(param: Any): ... diff --git a/odoo-stubs/tools/xml_utils.pyi b/odoo-stubs/tools/xml_utils.pyi new file mode 100644 index 0000000..0e25aed --- /dev/null +++ b/odoo-stubs/tools/xml_utils.pyi @@ -0,0 +1,8 @@ +from odoo.exceptions import UserError as UserError +from odoo.tools.misc import file_open as file_open +from typing import Any, Optional + +def check_with_xsd(tree_or_str: Any, stream: Any) -> None: ... +def _check_with_xsd(tree_or_str: Any, stream: Any) -> None: ... +def create_xml_node_chain(first_parent_node: Any, nodes_list: Any, last_node_value: Optional[Any] = ...): ... +def create_xml_node(parent_node: Any, node_name: Any, node_value: Optional[Any] = ...): ... From 9b7a719cbe83014d681d2a3f2b37a3dde154a921 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Sun, 31 May 2020 10:28:59 +0700 Subject: [PATCH 05/12] Update stubs --- odoo-stubs/__init__.pyi | 19 ++++++++- odoo-stubs/api.pyi | 3 +- odoo-stubs/cli/command.pyi | 1 - odoo-stubs/cli/deploy.pyi | 2 +- odoo-stubs/cli/scaffold.pyi | 2 +- odoo-stubs/cli/server.pyi | 2 +- odoo-stubs/cli/shell.pyi | 3 +- odoo-stubs/cli/start.pyi | 5 +-- odoo-stubs/exceptions.pyi | 1 - odoo-stubs/fields.pyi | 5 ++- odoo-stubs/http.pyi | 17 ++++---- odoo-stubs/models.pyi | 15 ++++--- odoo-stubs/modules/loading.pyi | 2 - odoo-stubs/modules/migration.pyi | 3 -- odoo-stubs/modules/module.pyi | 1 - odoo-stubs/modules/registry.pyi | 5 +-- odoo-stubs/netsvc.pyi | 1 - odoo-stubs/osv/expression.pyi | 3 +- odoo-stubs/osv/orm.pyi | 4 +- odoo-stubs/osv/osv.pyi | 4 +- odoo-stubs/service/common.pyi | 3 -- odoo-stubs/service/db.pyi | 5 --- odoo-stubs/service/model.pyi | 5 --- odoo-stubs/service/server.pyi | 5 --- odoo-stubs/service/wsgi_server.pyi | 1 - odoo-stubs/sql_db.pyi | 3 -- odoo-stubs/tests/__init__.pyi | 4 +- odoo-stubs/tests/common.pyi | 63 ++++++++++++++++++++++++---- odoo-stubs/tools/appdirs.pyi | 1 - odoo-stubs/tools/cache.pyi | 1 - odoo-stubs/tools/config.pyi | 2 - odoo-stubs/tools/convert.pyi | 5 --- odoo-stubs/tools/date_utils.pyi | 2 - odoo-stubs/tools/float_utils.pyi | 1 - odoo-stubs/tools/image.pyi | 1 - odoo-stubs/tools/lru.pyi | 1 - odoo-stubs/tools/mail.pyi | 2 - odoo-stubs/tools/misc.pyi | 6 +-- odoo-stubs/tools/osutil.pyi | 1 - odoo-stubs/tools/parse_version.pyi | 1 - odoo-stubs/tools/safe_eval.pyi | 2 - odoo-stubs/tools/test_config.pyi | 1 - odoo-stubs/tools/test_reports.pyi | 4 +- odoo-stubs/tools/translate.pyi | 3 -- odoo-stubs/tools/view_validation.pyi | 1 - odoo-stubs/tools/xml_utils.pyi | 1 - 46 files changed, 111 insertions(+), 112 deletions(-) diff --git a/odoo-stubs/__init__.pyi b/odoo-stubs/__init__.pyi index a9c141d..bc1e04c 100644 --- a/odoo-stubs/__init__.pyi +++ b/odoo-stubs/__init__.pyi @@ -1 +1,18 @@ -def __getattr__(name): ... +from . import addons as addons, api as api, cli as cli, conf as conf, fields as fields, http as http, loglevels as loglevels, models as models, netsvc as netsvc, osv as osv, release as release, service as service, sql_db as sql_db, tools as tools +from odoo.tools.translate import _ as _ +from typing import Any, Optional + +__path__: Any +evented: bool + +def gevent_wait_callback(conn: Any, timeout: Optional[Any] = ...) -> None: ... + +multi_process: bool +_babelCoreParseLocale: Any + +def _babelCoreParseLocale_unitag(identifier: Any, sep: str = ...): ... +def _decompress(data: Any): ... + +SUPERUSER_ID: int + +def registry(database_name: Optional[Any] = ...): ... diff --git a/odoo-stubs/api.pyi b/odoo-stubs/api.pyi index 66ebbcf..df2b025 100644 --- a/odoo-stubs/api.pyi +++ b/odoo-stubs/api.pyi @@ -1,8 +1,7 @@ from collections import Mapping from typing import Any, Optional -from .sql_db import Cursor - +from odoo.sql_db import Cursor __all__: Any _logger: Any diff --git a/odoo-stubs/cli/command.pyi b/odoo-stubs/cli/command.pyi index 38f6399..55dafa6 100644 --- a/odoo-stubs/cli/command.pyi +++ b/odoo-stubs/cli/command.pyi @@ -1,4 +1,3 @@ -from odoo.modules import get_module_path as get_module_path, get_modules as get_modules from typing import Any commands: Any diff --git a/odoo-stubs/cli/deploy.pyi b/odoo-stubs/cli/deploy.pyi index c8c29d6..60145e7 100644 --- a/odoo-stubs/cli/deploy.pyi +++ b/odoo-stubs/cli/deploy.pyi @@ -1,4 +1,4 @@ -from . import Command as Command +from . import Command from typing import Any class Deploy(Command): diff --git a/odoo-stubs/cli/scaffold.pyi b/odoo-stubs/cli/scaffold.pyi index 5b3053b..1e69c37 100644 --- a/odoo-stubs/cli/scaffold.pyi +++ b/odoo-stubs/cli/scaffold.pyi @@ -1,4 +1,4 @@ -from . import Command as Command +from . import Command from typing import Any, Optional class Scaffold(Command): diff --git a/odoo-stubs/cli/server.pyi b/odoo-stubs/cli/server.pyi index cac3545..d11871d 100644 --- a/odoo-stubs/cli/server.pyi +++ b/odoo-stubs/cli/server.pyi @@ -1,4 +1,4 @@ -from . import Command as Command +from . import Command from typing import Any __author__: Any diff --git a/odoo-stubs/cli/shell.pyi b/odoo-stubs/cli/shell.pyi index 1d5b8c7..62e87e4 100644 --- a/odoo-stubs/cli/shell.pyi +++ b/odoo-stubs/cli/shell.pyi @@ -1,6 +1,5 @@ import code -from . import Command as Command -from odoo.tools import config as config +from . import Command from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/cli/start.pyi b/odoo-stubs/cli/start.pyi index b13cc30..c181305 100644 --- a/odoo-stubs/cli/start.pyi +++ b/odoo-stubs/cli/start.pyi @@ -1,7 +1,4 @@ -from . import Command as Command -from .server import main as main -from odoo.modules.module import MANIFEST_NAMES as MANIFEST_NAMES, get_module_root as get_module_root -from odoo.service.db import DatabaseExists as DatabaseExists, _create_empty_database as _create_empty_database +from . import Command from typing import Any class Start(Command): diff --git a/odoo-stubs/exceptions.pyi b/odoo-stubs/exceptions.pyi index a027e7e..979e56e 100644 --- a/odoo-stubs/exceptions.pyi +++ b/odoo-stubs/exceptions.pyi @@ -1,4 +1,3 @@ -from .tools.func import frame_codeinfo as frame_codeinfo from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/fields.pyi b/odoo-stubs/fields.pyi index 6d5433b..3574334 100644 --- a/odoo-stubs/fields.pyi +++ b/odoo-stubs/fields.pyi @@ -1,7 +1,9 @@ import datetime + +from dateutil.relativedelta import relativedelta as relativedelta from typing import Any, Optional -from .tools import date_utils +from odoo.tools import date_utils DATE_LENGTH: Any DATETIME_LENGTH: Any @@ -267,6 +269,7 @@ class Datetime(Field): def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... def convert_to_export(self, value: Any, record: Any): ... def convert_to_display_name(self, value: Any, record: Any): ... +_BINARY = memoryview class Binary(Field): type: str = ... diff --git a/odoo-stubs/http.pyi b/odoo-stubs/http.pyi index fb3d554..84ca81a 100644 --- a/odoo-stubs/http.pyi +++ b/odoo-stubs/http.pyi @@ -1,11 +1,13 @@ -from typing import Any, Optional, Union +import werkzeug.wsgi +import werkzeug.contrib.sessions +from datetime import date as date +from odoo import fields as fields +from typing import Any, Optional -from werkzeug.contrib.sessions import Session -import werkzeug.wrappers - -from .api import Environment -from .sql_db import Cursor +from odoo.api import Environment +from odoo.sql_db import Cursor +_logger: Any rpc_request: Any rpc_response: Any STATIC_CACHE: Any @@ -117,7 +119,7 @@ def routing_map(modules: Any, nodb_only: Any, converters: Optional[Any] = ...): class AuthenticationError(Exception): ... class SessionExpiredException(Exception): ... -class OpenERPSession(Session): +class OpenERPSession(werkzeug.contrib.sessions.Session): inited: bool = ... modified: bool = ... rotate: bool = ... @@ -165,7 +167,6 @@ class Root: def session_store(self): ... def nodb_routing_map(self): ... def __call__(self, environ: Any, start_response: Any): ... - dispatch: Any = ... def load_addons(self) -> None: ... def setup_session(self, httprequest: Any): ... def setup_db(self, httprequest: Any) -> None: ... diff --git a/odoo-stubs/models.pyi b/odoo-stubs/models.pyi index 8bb9777..898c154 100644 --- a/odoo-stubs/models.pyi +++ b/odoo-stubs/models.pyi @@ -1,12 +1,14 @@ -from collections import MutableMapping -from typing import Any, Optional, List, Dict, Generator - from . import api, fields from .api import Environment from .modules.registry import Registry from .sql_db import Cursor +from .tools.safe_eval import safe_eval as safe_eval +from collections import MutableMapping +from typing import Any, Optional, List, Dict, Generator - +_logger: Any +_schema: Any +_unlink: Any regex_order: Any regex_object_name: Any regex_pg_name: Any @@ -31,6 +33,7 @@ class MetaModel(api.Meta): def _get_addon_name(self, full_name: Any): ... class NewId: + __slots__: Any = ... ref: Any = ... def __init__(self, ref: Optional[Any] = ...) -> None: ... def __bool__(self): ... @@ -146,7 +149,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): def _read_group_process_groupby(self, gb: Any, query: Any): ... def _read_group_prepare_data(self, key: Any, value: Any, groupby_dict: Any): ... def _read_group_format_result(self, data: Any, annotated_groupbys: Any, groupby: Any, domain: Any): ... - def read_group(self, domain: Any, fields: Any, groupby: Any, offset: int = ..., limit: Optional[Any] = ..., orderby: bool = ..., lazy: bool = ...) -> List[Dict]: ... + def read_group(self, domain: Any, fields: Any, groupby: Any, offset: int = ..., limit: Optional[Any] = ..., orderby: bool = ..., lazy: bool = ...): ... def _read_group_raw(self, domain: Any, fields: Any, groupby: Any, offset: int = ..., limit: Optional[Any] = ..., orderby: bool = ..., lazy: bool = ...): ... def _read_group_resolve_many2one_fields(self, data: Any, fields: Any) -> None: ... def _inherits_join_add(self, current_model: Any, parent_model_name: Any, query: Any): ... @@ -227,7 +230,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): def ids(self) -> List[int]: ... _cr: Cursor _uid: int - _context: Dict + _context: dict def ensure_one(self): ... def with_env(self, env: Any) -> BaseModel: ... def sudo(self, user: Any = ...) -> BaseModel: ... diff --git a/odoo-stubs/modules/loading.pyi b/odoo-stubs/modules/loading.pyi index 708e68a..2b63c45 100644 --- a/odoo-stubs/modules/loading.pyi +++ b/odoo-stubs/modules/loading.pyi @@ -1,5 +1,3 @@ -from odoo import SUPERUSER_ID as SUPERUSER_ID, api as api -from odoo.modules.module import adapt_version as adapt_version, initialize_sys_path as initialize_sys_path, load_openerp_module as load_openerp_module from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/modules/migration.pyi b/odoo-stubs/modules/migration.pyi index 1afed1a..7a75a1b 100644 --- a/odoo-stubs/modules/migration.pyi +++ b/odoo-stubs/modules/migration.pyi @@ -1,6 +1,3 @@ -from odoo.modules.module import get_resource_path as get_resource_path -from odoo.tools import pycompat as pycompat -from odoo.tools.parse_version import parse_version as parse_version from typing import Any def load_script(path: Any, module_name: Any): ... diff --git a/odoo-stubs/modules/module.pyi b/odoo-stubs/modules/module.pyi index 1fdec2c..0e4d589 100644 --- a/odoo-stubs/modules/module.pyi +++ b/odoo-stubs/modules/module.pyi @@ -1,5 +1,4 @@ from odoo import SUPERUSER_ID as SUPERUSER_ID, api as api -from odoo.tools import pycompat as pycompat from operator import itemgetter as itemgetter from typing import Any, Optional diff --git a/odoo-stubs/modules/registry.pyi b/odoo-stubs/modules/registry.pyi index 8a11eb6..87ae725 100644 --- a/odoo-stubs/modules/registry.pyi +++ b/odoo-stubs/modules/registry.pyi @@ -1,8 +1,5 @@ -from .. import SUPERUSER_ID as SUPERUSER_ID from collections import Mapping, defaultdict as defaultdict -from odoo.sql_db import TestCursor as TestCursor -from odoo.tools import OrderedSet as OrderedSet, assertion_report as assertion_report, config as config, existing_tables as existing_tables, lazy_classproperty as lazy_classproperty, lazy_property as lazy_property, table_exists as table_exists, topological_sort as topological_sort -from odoo.tools.lru import LRU as LRU +from odoo.tools import table_exists as table_exists from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/netsvc.pyi b/odoo-stubs/netsvc.pyi index dc4d7f7..c73e3c6 100644 --- a/odoo-stubs/netsvc.pyi +++ b/odoo-stubs/netsvc.pyi @@ -1,5 +1,4 @@ import logging.handlers -from . import release as release, sql_db as sql_db, tools as tools from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/osv/expression.pyi b/odoo-stubs/osv/expression.pyi index 4b87055..1779980 100644 --- a/odoo-stubs/osv/expression.pyi +++ b/odoo-stubs/osv/expression.pyi @@ -1,6 +1,5 @@ -from ..models import BaseModel as BaseModel, MAGIC_COLUMNS as MAGIC_COLUMNS +from ..models import MAGIC_COLUMNS as MAGIC_COLUMNS from functools import partial as partial -from odoo.tools import pycompat as pycompat from typing import Any, Optional NOT_OPERATOR: str diff --git a/odoo-stubs/osv/orm.pyi b/odoo-stubs/osv/orm.pyi index b04fae7..f96607f 100644 --- a/odoo-stubs/osv/orm.pyi +++ b/odoo-stubs/osv/orm.pyi @@ -1,7 +1,5 @@ from ..exceptions import except_orm as except_orm -from ..models import AbstractModel as AbstractModel, BaseModel as BaseModel, LOG_ACCESS_COLUMNS as LOG_ACCESS_COLUMNS, MAGIC_COLUMNS as MAGIC_COLUMNS, MetaModel as MetaModel, Model as Model, TransientModel as TransientModel -from odoo.tools import pycompat as pycompat -from odoo.tools.safe_eval import safe_eval as safe_eval +from ..models import AbstractModel as AbstractModel, BaseModel, LOG_ACCESS_COLUMNS as LOG_ACCESS_COLUMNS, MAGIC_COLUMNS as MAGIC_COLUMNS, MetaModel as MetaModel, Model as Model, TransientModel as TransientModel from typing import Any, Optional browse_record_list = BaseModel diff --git a/odoo-stubs/osv/osv.pyi b/odoo-stubs/osv/osv.pyi index 7a9bbef..5055ed4 100644 --- a/odoo-stubs/osv/osv.pyi +++ b/odoo-stubs/osv/osv.pyi @@ -1,5 +1,5 @@ -from ..exceptions import except_orm as except_orm -from .orm import AbstractModel as AbstractModel, Model as Model, TransientModel as TransientModel +from ..exceptions import except_orm +from .orm import AbstractModel, Model, TransientModel except_osv = except_orm osv = Model diff --git a/odoo-stubs/service/common.pyi b/odoo-stubs/service/common.pyi index f1cf24d..adb7ea8 100644 --- a/odoo-stubs/service/common.pyi +++ b/odoo-stubs/service/common.pyi @@ -1,6 +1,3 @@ -from . import security as security -from odoo.exceptions import AccessDenied as AccessDenied -from odoo.tools.translate import _ as _ from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/service/db.pyi b/odoo-stubs/service/db.pyi index c3e9280..eff2a14 100644 --- a/odoo-stubs/service/db.pyi +++ b/odoo-stubs/service/db.pyi @@ -1,9 +1,4 @@ from functools import wraps as wraps -from odoo import SUPERUSER_ID as SUPERUSER_ID -from odoo.exceptions import AccessDenied as AccessDenied -from odoo.release import version_info as version_info -from odoo.sql_db import db_connect as db_connect -from odoo.tools import pycompat as pycompat from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/service/model.pyi b/odoo-stubs/service/model.pyi index 5ff70fd..9278f36 100644 --- a/odoo-stubs/service/model.pyi +++ b/odoo-stubs/service/model.pyi @@ -1,8 +1,3 @@ -from . import security as security -from ..tools import lazy as lazy, traverse_containers as traverse_containers -from odoo.exceptions import QWebException as QWebException, UserError as UserError, ValidationError as ValidationError -from odoo.models import check_method_name as check_method_name -from odoo.tools.translate import _ as _, translate as translate from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/service/server.pyi b/odoo-stubs/service/server.pyi index c466113..7a04eca 100644 --- a/odoo-stubs/service/server.pyi +++ b/odoo-stubs/service/server.pyi @@ -1,9 +1,4 @@ import werkzeug.serving -from odoo.modules import get_modules as get_modules -from odoo.modules.module import get_test_modules as get_test_modules, run_unit_tests as run_unit_tests -from odoo.modules.registry import Registry as Registry -from odoo.release import nt_service_name as nt_service_name -from odoo.tools import config as config, dumpstacks as dumpstacks, log_ormcache_stats as log_ormcache_stats, stripped_sys_argv as stripped_sys_argv from typing import Any, Optional INOTIFY_LISTEN_EVENTS: Any diff --git a/odoo-stubs/service/wsgi_server.pyi b/odoo-stubs/service/wsgi_server.pyi index 6fe12dd..c1944bb 100644 --- a/odoo-stubs/service/wsgi_server.pyi +++ b/odoo-stubs/service/wsgi_server.pyi @@ -1,4 +1,3 @@ -from odoo.tools import config as config from typing import Any _logger: Any diff --git a/odoo-stubs/sql_db.pyi b/odoo-stubs/sql_db.pyi index 578aa92..ebaa51f 100644 --- a/odoo-stubs/sql_db.pyi +++ b/odoo-stubs/sql_db.pyi @@ -1,7 +1,4 @@ import psycopg2.extensions -from . import tools as tools -from .tools import pycompat as pycompat, ustr as ustr -from .tools.func import frame_codeinfo as frame_codeinfo from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/tests/__init__.pyi b/odoo-stubs/tests/__init__.pyi index 11d90a7..fabbb63 100644 --- a/odoo-stubs/tests/__init__.pyi +++ b/odoo-stubs/tests/__init__.pyi @@ -1,2 +1,2 @@ -from . import common -from .common import * \ No newline at end of file +from .common import * +from . import common as common diff --git a/odoo-stubs/tests/common.pyi b/odoo-stubs/tests/common.pyi index 18a2653..485b8ce 100644 --- a/odoo-stubs/tests/common.pyi +++ b/odoo-stubs/tests/common.pyi @@ -2,10 +2,11 @@ import collections import unittest from typing import Any, Optional -from ..api import Environment -from ..modules.registry import Registry -from ..sql_db import Cursor +from odoo.api import Environment +from odoo.modules.registry import Registry +from odoo.sql_db import Cursor +_logger: Any ADDONS_PATH: Any HOST: str PORT: Any @@ -39,12 +40,12 @@ class BaseCase(TreeCase): def uid(self, user: Any) -> None: ... def ref(self, xid: Any): ... def browse_ref(self, xid: Any): ... + def _assertRaises(self, exception: Any) -> None: ... def assertRaises(self, exception: Any, func: Optional[Any] = ..., *args: Any, **kwargs: Any): ... def assertQueryCount(self, default: int = ..., **counters: Any): ... def assertRecordValues(self, records: Any, expected_values: Any): ... def shortDescription(self): ... def assertItemsEqual(self, a: Any, b: Any, msg: Optional[Any] = ...) -> None: ... - def __getattr__(self, item): ... class TransactionCase(BaseCase): def setUp(self): ... @@ -60,16 +61,18 @@ class SingleTransactionCase(BaseCase): savepoint_seq: Any class SavepointCase(SingleTransactionCase): + _savepoint_id: Any = ... def setUp(self) -> None: ... def tearDown(self) -> None: ... class ChromeBrowser: + _logger: Any = ... devtools_port: Any = ... ws_url: str = ... ws: Any = ... request_id: int = ... user_data_dir: Any = ... - chrome_process: Any = ... + chrome_pid: Any = ... screencast_frames: Any = ... sigxcpu_handler: Any = ... def __init__(self, logger: Any) -> None: ... @@ -77,10 +80,22 @@ class ChromeBrowser: def stop(self) -> None: ... @property def executable(self): ... + def _spawn_chrome(self, cmd: Any): ... + def _chrome_start(self) -> None: ... + def _find_websocket(self) -> None: ... + def _json_command(self, command: Any, timeout: int = ...): ... + def _open_websocket(self) -> None: ... + def _websocket_send(self, method: Any, params: Optional[Any] = ...): ... + def _websocket_wait_id(self, awaited_id: Any, timeout: int = ...): ... + def _websocket_wait_event(self, method: Any, params: Optional[Any] = ..., timeout: int = ...): ... + def _get_shotname(self, prefix: Any, ext: Any): ... def take_screenshot(self, prefix: str = ...) -> None: ... + def _save_screencast(self, prefix: str = ...) -> None: ... def start_screencast(self) -> None: ... def set_cookie(self, name: Any, value: Any, path: Any, domain: Any): ... def delete_cookie(self, name: Any, **kwargs: Any): ... + def _wait_ready(self, ready_code: Any, timeout: int = ...): ... + def _wait_code_ok(self, code: Any, timeout: Any): ... def navigate_to(self, url: Any, wait_stop: bool = ...) -> None: ... def clear(self) -> None: ... @@ -91,6 +106,7 @@ class HttpCase(TransactionCase): xmlrpc_common: Any = ... xmlrpc_db: Any = ... xmlrpc_object: Any = ... + _logger: Any = ... def __init__(self, methodName: str = ...) -> None: ... @classmethod def start_browser(cls, logger: Any) -> None: ... @@ -101,6 +117,7 @@ class HttpCase(TransactionCase): opener: Any = ... def setUp(self) -> None: ... def url_open(self, url: Any, data: Optional[Any] = ..., timeout: int = ...): ... + def _wait_remaining_requests(self) -> None: ... def authenticate(self, user: Any, password: Any) -> None: ... def browser_js(self, url_path: Any, code: Any, ready: str = ..., login: Optional[Any] = ..., timeout: int = ..., **kw: Any) -> None: ... phantom_js: Any = ... @@ -113,41 +130,73 @@ ref_re: Any class Form: def __init__(self, recordp: Any, view: Optional[Any] = ...) -> None: ... + def _o2m_set_edition_view(self, descr: Any, node: Any, level: Any) -> None: ... + def __str__(self): ... + def _process_fvg(self, model: Any, fvg: Any, level: int = ...) -> None: ... + def _init_from_defaults(self, model: Any): ... + def _init_from_values(self, values: Any) -> None: ... def __getattr__(self, field: Any): ... + def _get_modifier(self, field: Any, modifier: Any, default: bool = ..., modmap: Optional[Any] = ..., vals: Optional[Any] = ...): ... + _OPS: Any = ... + def _get_context(self, field: Any): ... def __setattr__(self, field: Any, value: Any) -> None: ... def __enter__(self): ... def __exit__(self, etype: Any, _evalue: Any, _etb: Any) -> None: ... def save(self): ... + def _values_to_save(self, all_fields: bool = ...): ... + def _perform_onchange(self, fields: Any) -> None: ... + def _onchange_values(self): ... + def _cleanup_onchange(self, descr: Any, value: Any, current: Any): ... class O2MForm(Form): def __init__(self, proxy: Any, index: Optional[Any] = ...) -> None: ... + def _get_modifier(self, field: Any, modifier: Any, default: bool = ..., modmap: Optional[Any] = ..., vals: Optional[Any] = ...): ... + def _onchange_values(self): ... def save(self) -> None: ... + def _values_to_save(self, all_fields: bool = ...): ... class UpdateDict(dict): + _changed: Any = ... def __init__(self, *args: Any, **kwargs: Any) -> None: ... def changed_items(self): ... def update(self, *args: Any, **kw: Any) -> None: ... -class X2MProxy: ... +class X2MProxy: + _parent: Any = ... + _field: Any = ... + def _assert_editable(self) -> None: ... class O2MProxy(X2MProxy): + _parent: Any = ... + _field: Any = ... + _records: Any = ... def __init__(self, parent: Any, field: Any) -> None: ... def __len__(self): ... + @property + def _model(self): ... + @property + def _descr(self): ... + def _command_index(self, for_record: Any): ... def new(self): ... def edit(self, index: Any): ... def remove(self, index: Any) -> None: ... class M2MProxy(X2MProxy, collections.Sequence): + _parent: Any = ... + _field: Any = ... def __init__(self, parent: Any, field: Any) -> None: ... def __getitem__(self, it: Any): ... def __len__(self): ... - def __iter__(self): ... + def __iter__(self) -> Any: ... def __contains__(self, record: Any): ... def add(self, record: Any) -> None: ... + def _get_ids(self): ... def remove(self, id: Optional[Any] = ..., index: Optional[Any] = ...) -> None: ... def clear(self) -> None: ... def record_to_values(fields: Any, record: Any): ... +def _cleanup_from_default(type_: Any, value: Any): ... +def _get_node(view: Any, f: Any, *arg: Any): ... def tagged(*tags: Any): ... class TagsSelector: diff --git a/odoo-stubs/tools/appdirs.pyi b/odoo-stubs/tools/appdirs.pyi index 7bcd861..840bd31 100644 --- a/odoo-stubs/tools/appdirs.pyi +++ b/odoo-stubs/tools/appdirs.pyi @@ -1,4 +1,3 @@ -from . import pycompat as pycompat from typing import Any, Optional __version_info__: Any diff --git a/odoo-stubs/tools/cache.pyi b/odoo-stubs/tools/cache.pyi index 06a2f0e..bd737cd 100644 --- a/odoo-stubs/tools/cache.pyi +++ b/odoo-stubs/tools/cache.pyi @@ -1,4 +1,3 @@ -from . import pycompat as pycompat from typing import Any, Optional unsafe_eval = eval diff --git a/odoo-stubs/tools/config.pyi b/odoo-stubs/tools/config.pyi index c42677c..571b6f2 100644 --- a/odoo-stubs/tools/config.pyi +++ b/odoo-stubs/tools/config.pyi @@ -1,6 +1,4 @@ import optparse -from . import appdirs as appdirs, pycompat as pycompat -from .. import conf as conf, loglevels as loglevels, release as release from typing import Any, Optional crypt_context: Any diff --git a/odoo-stubs/tools/convert.pyi b/odoo-stubs/tools/convert.pyi index 4e0ce60..9bf2bca 100644 --- a/odoo-stubs/tools/convert.pyi +++ b/odoo-stubs/tools/convert.pyi @@ -1,8 +1,3 @@ -from . import assertion_report as assertion_report, pycompat as pycompat -from .config import config as config -from .misc import SKIPPED_ELEMENT_TYPES as SKIPPED_ELEMENT_TYPES, file_open as file_open, unquote as unquote, ustr as ustr -from .translate import _ as _ -from odoo import SUPERUSER_ID as SUPERUSER_ID from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/tools/date_utils.pyi b/odoo-stubs/tools/date_utils.pyi index eeab3b9..b064cd9 100644 --- a/odoo-stubs/tools/date_utils.pyi +++ b/odoo-stubs/tools/date_utils.pyi @@ -1,5 +1,3 @@ -from . import ustr as ustr -from .func import lazy as lazy from typing import Any def get_month(date: Any): ... diff --git a/odoo-stubs/tools/float_utils.pyi b/odoo-stubs/tools/float_utils.pyi index b0728ff..d98f6cc 100644 --- a/odoo-stubs/tools/float_utils.pyi +++ b/odoo-stubs/tools/float_utils.pyi @@ -1,4 +1,3 @@ -from odoo.tools import pycompat as pycompat from typing import Any, Optional def round(f: Any): ... diff --git a/odoo-stubs/tools/image.pyi b/odoo-stubs/tools/image.pyi index 5eae92b..b88dea3 100644 --- a/odoo-stubs/tools/image.pyi +++ b/odoo-stubs/tools/image.pyi @@ -1,4 +1,3 @@ -from odoo.tools import pycompat as pycompat from typing import Any, Optional FILETYPE_BASE64_MAGICWORD: Any diff --git a/odoo-stubs/tools/lru.pyi b/odoo-stubs/tools/lru.pyi index b0ba743..cadd222 100644 --- a/odoo-stubs/tools/lru.pyi +++ b/odoo-stubs/tools/lru.pyi @@ -1,4 +1,3 @@ -from .func import synchronized as synchronized from typing import Any, Optional __all__: Any diff --git a/odoo-stubs/tools/mail.pyi b/odoo-stubs/tools/mail.pyi index e772999..989ab15 100644 --- a/odoo-stubs/tools/mail.pyi +++ b/odoo-stubs/tools/mail.pyi @@ -1,6 +1,4 @@ from lxml.html import clean -from odoo.loglevels import ustr as ustr -from odoo.tools import misc as misc, pycompat as pycompat from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/tools/misc.pyi b/odoo-stubs/tools/misc.pyi index 6e101e5..ff1a203 100644 --- a/odoo-stubs/tools/misc.pyi +++ b/odoo-stubs/tools/misc.pyi @@ -2,13 +2,9 @@ from .cache import * import pickle as pickle_ import xlsxwriter import xlwt -from . import pycompat as pycompat -from .config import config as config -from .parse_version import parse_version as parse_version -from .which import which as which from collections import Mapping, MutableMapping, MutableSet, defaultdict from itertools import repeat as repeat -from odoo.loglevels import exception_to_unicode as exception_to_unicode, get_encodings as get_encodings, ustr as ustr +from odoo.loglevels import exception_to_unicode as exception_to_unicode, get_encodings as get_encodings from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/tools/osutil.pyi b/odoo-stubs/tools/osutil.pyi index db8418f..f01cd0a 100644 --- a/odoo-stubs/tools/osutil.pyi +++ b/odoo-stubs/tools/osutil.pyi @@ -1,5 +1,4 @@ import ctypes -from odoo.release import nt_service_name as nt_service_name from typing import Any, Optional def listdir(dir: Any, recursive: bool = ...): ... diff --git a/odoo-stubs/tools/parse_version.pyi b/odoo-stubs/tools/parse_version.pyi index 822316b..51ebb8a 100644 --- a/odoo-stubs/tools/parse_version.pyi +++ b/odoo-stubs/tools/parse_version.pyi @@ -1,4 +1,3 @@ -from odoo.tools import pycompat as pycompat from typing import Any component_re: Any diff --git a/odoo-stubs/tools/safe_eval.pyi b/odoo-stubs/tools/safe_eval.pyi index 21a1392..6d0c36c 100644 --- a/odoo-stubs/tools/safe_eval.pyi +++ b/odoo-stubs/tools/safe_eval.pyi @@ -1,5 +1,3 @@ -from . import pycompat as pycompat -from .misc import ustr as ustr from typing import Any, Optional unsafe_eval = eval diff --git a/odoo-stubs/tools/test_config.pyi b/odoo-stubs/tools/test_config.pyi index 3c43612..413b925 100644 --- a/odoo-stubs/tools/test_config.pyi +++ b/odoo-stubs/tools/test_config.pyi @@ -1,4 +1,3 @@ -from . import config as config from typing import Any config_file_00: Any diff --git a/odoo-stubs/tools/test_reports.pyi b/odoo-stubs/tools/test_reports.pyi index 9bf4003..a98da49 100644 --- a/odoo-stubs/tools/test_reports.pyi +++ b/odoo-stubs/tools/test_reports.pyi @@ -1,6 +1,4 @@ -from . import config as config, pycompat as pycompat, ustr as ustr -from .. import api as api -from .safe_eval import safe_eval as safe_eval +from . import config as config from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/tools/translate.pyi b/odoo-stubs/tools/translate.pyi index b6dfc68..9499589 100644 --- a/odoo-stubs/tools/translate.pyi +++ b/odoo-stubs/tools/translate.pyi @@ -1,7 +1,4 @@ import csv -from . import config as config, pycompat as pycompat -from .misc import SKIPPED_ELEMENT_TYPES as SKIPPED_ELEMENT_TYPES, file_open as file_open, get_iso_codes as get_iso_codes -from .osutil import walksymlinks as walksymlinks from typing import Any, Optional _logger: Any diff --git a/odoo-stubs/tools/view_validation.pyi b/odoo-stubs/tools/view_validation.pyi index f74c775..efaf2d5 100644 --- a/odoo-stubs/tools/view_validation.pyi +++ b/odoo-stubs/tools/view_validation.pyi @@ -1,4 +1,3 @@ -from odoo import tools as tools from typing import Any _logger: Any diff --git a/odoo-stubs/tools/xml_utils.pyi b/odoo-stubs/tools/xml_utils.pyi index 0e25aed..66b60da 100644 --- a/odoo-stubs/tools/xml_utils.pyi +++ b/odoo-stubs/tools/xml_utils.pyi @@ -1,4 +1,3 @@ -from odoo.exceptions import UserError as UserError from odoo.tools.misc import file_open as file_open from typing import Any, Optional From 640535e472522d80c84f11adeafadebf8511c074 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Sun, 31 May 2020 10:58:56 +0700 Subject: [PATCH 06/12] Update stubs --- odoo-stubs/models.pyi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/odoo-stubs/models.pyi b/odoo-stubs/models.pyi index 898c154..d224546 100644 --- a/odoo-stubs/models.pyi +++ b/odoo-stubs/models.pyi @@ -53,10 +53,10 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): _name: str _description: str _custom: bool = ... - _inherit: List[str] + _inherit: Any _inherits: Dict[str, str] _constraints: Any = ... - _table: Any = ... + _table: str = ... _sequence: Any = ... _sql_constraints: list _rec_name: str From f939ddaa63d10bdab4f62efecc3e59fcd39635d9 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Mon, 1 Jun 2020 18:49:18 +0700 Subject: [PATCH 07/12] Fix env call --- odoo-stubs/api.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odoo-stubs/api.pyi b/odoo-stubs/api.pyi index df2b025..c833058 100644 --- a/odoo-stubs/api.pyi +++ b/odoo-stubs/api.pyi @@ -83,7 +83,7 @@ class Environment(Mapping): def __eq__(self, other: Any) -> Any: ... def __ne__(self, other: Any) -> Any: ... def __hash__(self) -> Any: ... - def __call__(self, cr: Optional[Any] = ..., user: Optional[Any] = ..., context: Optional[Any] = ...): ... + def __call__(self, cr: Optional[Any] = ..., user: Optional[Any] = ..., context: Optional[Any] = ...) -> Environment: ... def ref(self, xml_id: Any, raise_if_not_found: bool = ...): ... @property def user(self): From d5ccdc277c985c2aca749055fda4188305e5cc9b Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Mon, 1 Jun 2020 21:20:01 +0700 Subject: [PATCH 08/12] Update stubs --- odoo-stubs/models.pyi | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/odoo-stubs/models.pyi b/odoo-stubs/models.pyi index d224546..b0d8cf8 100644 --- a/odoo-stubs/models.pyi +++ b/odoo-stubs/models.pyi @@ -133,8 +133,8 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): def get_formview_id(self, access_uid: Optional[Any] = ...): ... def get_formview_action(self, access_uid: Optional[Any] = ...): ... def get_access_action(self, access_uid: Optional[Any] = ...): ... - def search_count(self, args: Any): ... - def search(self, args: Any, offset: int = ..., limit: Optional[Any] = ..., order: Optional[Any] = ..., count: bool = ...): ... + def search_count(self, args: Any) -> int: ... + def search(self, args: Any, offset: int = ..., limit: Optional[Any] = ..., order: Optional[Any] = ..., count: bool = ...) -> BaseModel: ... def _compute_display_name(self) -> None: ... def name_get(self): ... def name_create(self, name: Any): ... @@ -201,8 +201,8 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): def _search(self, args: Any, offset: int = ..., limit: Optional[Any] = ..., order: Optional[Any] = ..., count: bool = ..., access_rights_uid: Optional[Any] = ...): ... def copy_data(self, default: Optional[Any] = ...): ... def copy_translations(old: Any, new: Any, excluded: Any = ...): ... - def copy(self, default: Optional[Any] = ...): ... - def exists(self): ... + def copy(self, default: Optional[Any] = ...) -> BaseModel: ... + def exists(self) -> BaseModel: ... def _check_recursion(self, parent: Optional[Any] = ...): ... def _check_m2m_recursion(self, field_name: Any): ... def _get_external_ids(self): ... @@ -225,7 +225,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): def _revert_method(cls, name: Any) -> None: ... @classmethod def _browse(cls, ids: Any, env: Any, prefetch: Optional[Any] = ..., add_prefetch: bool = ...): ... - def browse(self, arg: Optional[Any] = ..., prefetch: Optional[Any] = ...): ... + def browse(self, arg: Optional[Any] = ..., prefetch: Optional[Any] = ...) -> BaseModel: ... @property def ids(self) -> List[int]: ... _cr: Cursor From cb31c4f580263a3ab2de598c0d9bdcc34d497a97 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Tue, 2 Jun 2020 20:49:56 +0700 Subject: [PATCH 09/12] Update stubs --- odoo-stubs/models.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/odoo-stubs/models.pyi b/odoo-stubs/models.pyi index b0d8cf8..416640c 100644 --- a/odoo-stubs/models.pyi +++ b/odoo-stubs/models.pyi @@ -183,7 +183,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): def unlink(self): ... def write(self, vals: Any): ... def _write(self, vals: Any): ... - def create(self, vals_list: Any): ... + def create(self, vals_list: Any) -> BaseModel: ... def _create(self, data_list: Any): ... def _parent_store_create(self) -> None: ... def _parent_store_update_prepare(self, vals: Any): ... From f618b52ab8fae8fd19db32bfbf5c0887f8360a94 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Tue, 16 Jun 2020 08:00:42 +0700 Subject: [PATCH 10/12] Update stubs --- odoo-stubs/fields.pyi | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/odoo-stubs/fields.pyi b/odoo-stubs/fields.pyi index 3574334..2e0ee4a 100644 --- a/odoo-stubs/fields.pyi +++ b/odoo-stubs/fields.pyi @@ -35,7 +35,9 @@ class Field(MetaField('DummyField', (object,), {})): _sequence: Any = ... args: Any = ... _setup_done: Any = ... - def __init__(self, string: Any = ..., **kwargs: Any) -> None: ... + def __init__(self, string: str, help: str, readonly: bool, required: bool, index: bool, default: Any, + states: dict, groups: str, copy: bool, oldname: bool, group_operator: str, + compute: Any, inverse: Any, search: Any, store: bool, compute_sudo: bool, **kwargs: Any) -> None: ... def new(self, **kwargs: Any): ... def __getattr__(self, name: Any): ... _attrs: Any = ... From 3def47b1378cda5d002bf1dbf1e4033840b29109 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Wed, 8 Jul 2020 18:48:36 +0700 Subject: [PATCH 11/12] Revert "Update stubs" This reverts commit f618b52a --- odoo-stubs/fields.pyi | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/odoo-stubs/fields.pyi b/odoo-stubs/fields.pyi index 2e0ee4a..3574334 100644 --- a/odoo-stubs/fields.pyi +++ b/odoo-stubs/fields.pyi @@ -35,9 +35,7 @@ class Field(MetaField('DummyField', (object,), {})): _sequence: Any = ... args: Any = ... _setup_done: Any = ... - def __init__(self, string: str, help: str, readonly: bool, required: bool, index: bool, default: Any, - states: dict, groups: str, copy: bool, oldname: bool, group_operator: str, - compute: Any, inverse: Any, search: Any, store: bool, compute_sudo: bool, **kwargs: Any) -> None: ... + def __init__(self, string: Any = ..., **kwargs: Any) -> None: ... def new(self, **kwargs: Any): ... def __getattr__(self, name: Any): ... _attrs: Any = ... From b3f2686910ba9ebc75f3953a507108a5c5c2e8ea Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Sun, 15 Nov 2020 16:44:03 +0700 Subject: [PATCH 12/12] Fix http request type --- odoo-stubs/http.pyi | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/odoo-stubs/http.pyi b/odoo-stubs/http.pyi index 84ca81a..0da09c7 100644 --- a/odoo-stubs/http.pyi +++ b/odoo-stubs/http.pyi @@ -2,7 +2,7 @@ import werkzeug.wsgi import werkzeug.contrib.sessions from datetime import date as date from odoo import fields as fields -from typing import Any, Optional +from typing import Any, Optional, Union from odoo.api import Environment from odoo.sql_db import Cursor @@ -12,7 +12,7 @@ rpc_request: Any rpc_response: Any STATIC_CACHE: Any _request_stack: Any -request: '__Request' +request: Union[HttpRequest, JsonRequest] def replace_request_password(args: Any): ... @@ -29,6 +29,7 @@ class WebRequest: endpoint: Any = ... endpoint_arguments: Any = ... auth_method: Any = ... + website = Environment()['website'] _cr: Cursor = ... _uid: int = ... _context: Any = ... @@ -65,6 +66,7 @@ class WebRequest: def db(self): ... def csrf_token(self, time_limit: int = ...): ... def validate_csrf(self, csrf: Any): ... + def redirect(self, url: str, code=302): ... def route(route: Optional[Any] = ..., **kw: Any): ... @@ -92,10 +94,6 @@ class HttpRequest(WebRequest): def render(self, template: Any, qcontext: Optional[Any] = ..., lazy: bool = ..., **kw: Any): ... def not_found(self, description: Optional[Any] = ...): ... -class __Request(HttpRequest, JsonRequest): - website = Environment()['website'] - def redirect(self, url: str, code=302): ... - addons_manifest: Any controllers_per_module: Any