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: ...