From ca29ec59f13b0e2a6ec60bf347327e2c8e61b0a9 Mon Sep 17 00:00:00 2001 From: Trinh Anh Ngoc Date: Sun, 22 Mar 2020 16:22:11 +0700 Subject: [PATCH] Update odoo 13 stubs --- odoo-stubs/api.pyi | 73 ++++++++++++------------------------- odoo-stubs/fields.pyi | 58 ++++++++++++++++------------- odoo-stubs/http.pyi | 19 +++------- odoo-stubs/models.pyi | 35 +++++++++++------- odoo-stubs/tests/common.pyi | 30 +++++++++++---- 5 files changed, 105 insertions(+), 110 deletions(-) diff --git a/odoo-stubs/api.pyi b/odoo-stubs/api.pyi index 371ac72..219d097 100644 --- a/odoo-stubs/api.pyi +++ b/odoo-stubs/api.pyi @@ -16,23 +16,6 @@ def onchange(*args: Any): ... def depends(*args: Any): ... def returns(model: Any, downgrade: Optional[Any] = ..., upgrade: Optional[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): ... -def cr(method: Any): ... -def cr_context(method: Any): ... -def cr_uid(method: Any): ... -def cr_uid_context(method: Any): ... -def cr_uid_id(method: Any): ... -def cr_uid_id_context(method: Any): ... -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 noguess(method: Any): ... -def guess(method: Any): ... def call_kw(model: Any, name: Any, args: Any, kwargs: Any): ... class Environment(Mapping): @@ -47,7 +30,6 @@ class Environment(Mapping): def reset(cls) -> None: ... registry: Any = ... cache: Any = ... - dirty: Any = ... all: Any = ... def __new__(cls, cr: Any, uid: Any, context: Any) -> Environment: ... def __contains__(self, model_name: Any): ... @@ -59,61 +41,54 @@ class Environment(Mapping): def __hash__(self): ... def __call__(self, cr: Optional[Any] = ..., user: Optional[Any] = ..., context: Optional[Any] = ...) -> Environment: ... def ref(self, xml_id: Any, raise_if_not_found: bool = ...): ... + def is_superuser(self): ... + def is_admin(self): ... + def is_system(self): ... @property def user(self): return self['res.users'] @property + def company(self): + return self['res.company'] + @property + def companies(self): + return self['res.company'] + @property def lang(self) -> str: ... - def do_in_draft(self): ... - @property - def in_draft(self): ... - def do_in_onchange(self): ... - @property - def in_onchange(self): ... def clear(self) -> None: ... def clear_upon_failure(self) -> None: ... + def is_protected(self, field: Any, record: Any): ... def protected(self, field: Any): ... def protecting(self, what: Any, records: Optional[Any] = ...) -> None: ... - def field_todo(self, field: Any): ... - def check_todo(self, field: Any, record: Any): ... - def add_todo(self, field: Any, records: Any) -> None: ... - def remove_todo(self, field: Any, records: Any) -> None: ... - def has_todo(self): ... - def get_todo(self): ... - @property - def recompute(self): ... + def fields_to_compute(self): ... + def records_to_compute(self, field: Any): ... + def is_to_compute(self, field: Any, record: Any): ... + def not_to_compute(self, field: Any, records: Any): ... + def add_to_compute(self, field: Any, records: Any): ... + def remove_to_compute(self, field: Any, records: Any) -> None: ... def norecompute(self) -> None: ... - def cache_key(self, field: Any): ... class Environments: envs: Any = ... cache: Any = ... - todo: Any = ... - mode: bool = ... - recompute: bool = ... - def __init__(self) -> None: ... + protected: Any = ... + tocompute: Any = ... + towrite: Any = ... + def __init__(self): ... def add(self, env: Any) -> None: ... - def __iter__(self): ... + def __iter__(self) -> Any: ... class Cache: def __init__(self) -> None: ... def contains(self, record: Any, field: Any): ... - def get(self, record: Any, field: Any): ... + def get(self, record: Any, field: Any, default: Any = ...): ... def set(self, record: Any, field: Any, value: Any) -> None: ... def update(self, records: Any, field: Any, values: Any) -> None: ... def remove(self, record: Any, field: Any) -> None: ... - def contains_value(self, record: Any, field: Any): ... - def get_value(self, record: Any, field: Any, default: Optional[Any] = ...): ... - def get_special(self, record: Any, field: Any, default: Optional[Any] = ...): ... - def set_special(self, record: Any, field: Any, getter: Any) -> None: ... - def set_failed(self, records: Any, fields: Any, exception: Any) -> None: ... + def get_values(self, records: Any, field: Any) -> None: ... + def get_records_different_from(self, records: Any, field: Any, value: Any): ... def get_fields(self, record: Any) -> None: ... def get_records(self, model: Any, field: Any): ... def get_missing_ids(self, records: Any, field: Any) -> None: ... - def copy(self, records: Any, env: Any) -> None: ... def invalidate(self, spec: Optional[Any] = ...) -> None: ... def check(self, env: Any) -> None: ... - -class SpecialValue: - get: Any = ... - def __init__(self, getter: Any) -> None: ... diff --git a/odoo-stubs/fields.pyi b/odoo-stubs/fields.pyi index 256706a..bfb2fd6 100644 --- a/odoo-stubs/fields.pyi +++ b/odoo-stubs/fields.pyi @@ -9,7 +9,6 @@ EMPTY_DICT: Any RENAMED_ATTRS: Any Default: Any -def copy_cache(records: Any, env: Any) -> None: ... def first(records: Any): ... def resolve_mro(model: Any, name: Any, predicate: Any): ... @@ -37,9 +36,9 @@ class Field(MetaField('DummyField', (object,), {})): def traverse_related(self, record: Any): ... @property def base_field(self): ... - def resolve_deps(self, model: Any, path0: Any = ..., seen: Any = ...): ... + def cache_key(self, env: Any): ... recursive: bool = ... - def setup_triggers(self, model: Any) -> None: ... + def resolve_depends(self, model: Any) -> None: ... def get_description(self, env: Any): ... def null(self, record: Any): ... def convert_to_column(self, value: Any, record: Any, values: Optional[Any] = ..., validate: bool = ...): ... @@ -57,14 +56,11 @@ class Field(MetaField('DummyField', (object,), {})): def read(self, records: Any): ... def create(self, record_values: Any) -> None: ... def write(self, records: Any, value: Any): ... - # def __get__(self, record: Any, owner: Any): ... - def __set__(self, record: Any, value: Any) -> None: ... + # def __get__(self, records: Any, owner: Any): ... + def __set__(self, records: Any, value: Any) -> None: ... def compute_value(self, records: Any) -> None: ... - def determine_value(self, record: Any) -> None: ... - def determine_draft_value(self, record: Any): ... def determine_inverse(self, records: Any) -> None: ... def determine_domain(self, records: Any, operator: Any, value: Any): ... - def modified_draft(self, records: Any): ... class Boolean(Field): type: str = ... @@ -78,6 +74,7 @@ class Integer(Field): column_type: 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_record(self, value: Any, record: Any): ... def convert_to_read(self, value: Any, record: Any, use_name_get: bool = ...): ... def convert_to_export(self, value: Any, record: Any): ... @@ -87,10 +84,10 @@ class Float(Field): def __init__(self, string: Any = ..., digits: Any = ..., **kwargs: Any) -> None: ... @property def column_type(self): ... - @property - def digits(self): ... + def get_digits(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 = ...): ... + def convert_to_record(self, value: Any, record: Any): ... def convert_to_export(self, value: Any, record: Any): ... class Monetary(Field): @@ -100,6 +97,7 @@ class Monetary(Field): def __init__(self, string: Any = ..., currency_field: Any = ..., **kwargs: 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): ... def convert_to_read(self, value: Any, record: Any, use_name_get: bool = ...): ... def convert_to_write(self, value: Any, record: Any): ... @@ -108,6 +106,7 @@ class _String(Field): def get_trans_terms(self, value: Any): ... def get_trans_func(self, records: Any): ... def check_trans_value(self, value: Any): ... + def write(self, records: Any, value: Any): ... class Char(_String): type: str = ... @@ -179,15 +178,20 @@ class Binary(Field): def column_type(self): ... 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): ... + def compute_value(self, records: Any) -> None: ... def read(self, records: Any) -> None: ... + def create(self, record_values: Any) -> None: ... + def write(self, records: Any, value: Any): ... + +class Image(Binary): def create(self, record_values: Any) -> None: ... def write(self, records: Any, value: Any) -> None: ... class Selection(Field): type: str = ... + column_type: Any = ... def __init__(self, selection: Any = ..., string: Any = ..., **kwargs: Any) -> None: ... - @property - def column_type(self): ... 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,13 +210,14 @@ class Reference(Selection): class _Relational(Field): relational: bool = ... + def __get__(self, records: Any, owner: Any): ... + def get_domain_list(self, model: Any): ... def null(self, record: Any): ... class Many2one(_Relational): type: str = ... column_type: Any = ... def __init__(self, comodel_name: Any = ..., string: Any = ..., **kwargs: 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: ... @@ -224,31 +229,31 @@ class Many2one(_Relational): def convert_to_export(self, value: Any, record: Any): ... def convert_to_display_name(self, value: Any, record: Any): ... def convert_to_onchange(self, value: Any, record: Any, names: Any): ... + def write(self, records: Any, value: Any): ... -class _RelationalMultiUpdate: - record: Any = ... - field: Any = ... - value: Any = ... - def __init__(self, record: Any, field: Any, value: Any) -> None: ... - def __call__(self): ... +class Many2oneReference(Integer): + type: str = ... + def convert_to_cache(self, value: Any, record: Any, validate: bool = ...): ... class _RelationalMulti(_Relational): 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 = ...): ... def convert_to_write(self, value: Any, record: Any): ... - 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 create(self, record_values: Any) -> None: ... + def write(self, records: Any, value: Any): ... + def write_batch(self, records_commands_list: Any, create: bool = ...): ... class One2many(_RelationalMulti): type: str = ... def __init__(self, comodel_name: Any = ..., inverse_name: Any = ..., string: Any = ..., **kwargs: Any) -> None: ... - def convert_to_onchange(self, value: Any, record: Any, names: Any): ... def update_db(self, model: Any, columns: Any) -> None: ... + def get_domain_list(self, records: Any): ... def read(self, records: Any): ... - def create(self, record_values: Any) -> None: ... - def write(self, records: Any, value: Any) -> None: ... + def write_real(self, records_commands_list: Any, create: bool = ...): ... + def write_new(self, records_commands_list: Any): ... class Many2many(_RelationalMulti): type: str = ... @@ -256,8 +261,8 @@ class Many2many(_RelationalMulti): def update_db(self, model: Any, columns: Any): ... def update_db_foreign_keys(self, model: Any) -> None: ... def read(self, records: Any) -> None: ... - def create(self, record_values: Any) -> None: ... - def write(self, records: Any, value: Any) -> None: ... + def write_real(self, records_commands_list: Any, create: bool = ...): ... + def write_new(self, records_commands_list: Any): ... class Id(Field): type: str = ... @@ -265,3 +270,6 @@ class Id(Field): def update_db(self, model: Any, columns: Any) -> None: ... def __get__(self, record: Any, owner: Any): ... def __set__(self, record: Any, value: Any) -> None: ... + +def prefetch_many2one_ids(record: Any, field: Any): ... +def prefetch_x2many_ids(record: Any, field: Any): ... diff --git a/odoo-stubs/http.pyi b/odoo-stubs/http.pyi index 71c3aff..52a9aa6 100644 --- a/odoo-stubs/http.pyi +++ b/odoo-stubs/http.pyi @@ -9,6 +9,8 @@ from .sql_db import Cursor rpc_request: Any rpc_response: Any STATIC_CACHE: Any +STATIC_CACHE_LONG: Any +ALLOWED_DEBUG_MODES: Any request: '__Request' def replace_request_password(args: Any): ... @@ -16,7 +18,7 @@ def replace_request_password(args: Any): ... NO_POSTMORTEM: Any def dispatch_rpc(service_name: Any, method: Any, params: Any): ... -def local_redirect(path: Any, query: Optional[Any] = ..., keep_hash: bool = ..., forward_debug: bool = ..., code: int = ...): ... +def local_redirect(path: Any, query: Optional[Any] = ..., keep_hash: bool = ..., code: int = ...): ... def redirect_with_hash(url: Any, code: int = ...): ... class WebRequest: @@ -39,16 +41,11 @@ class WebRequest: def context(self, val: Any) -> None: ... @property def env(self) -> Environment: ... - context: Any = ... - @property - def lang(self): ... @property def session(self) -> OpenERPSession: ... 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: ... - @property - def debug(self): ... def registry_cr(self) -> None: ... @property def registry(self): ... @@ -60,9 +57,7 @@ class WebRequest: def route(route: Optional[Any] = ..., **kw: Any): ... class JsonRequest(WebRequest): - jsonp_handler: Any = ... params: Any = ... - jsonp: Any = ... jsonrequest: Any = ... context: Any = ... def __init__(self, *args: Any) -> None: ... @@ -100,8 +95,6 @@ class EndPoint: def first_arg_is_req(self): ... def __call__(self, *args: Any, **kw: Any): ... -def routing_map(modules: Any, nodb_only: Any, converters: Optional[Any] = ...): ... - class AuthenticationError(Exception): ... class SessionExpiredException(Exception): ... @@ -150,7 +143,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: ... @@ -165,8 +157,7 @@ def db_filter(dbs: Any, httprequest: Optional[Any] = ...): ... def db_monodb(httprequest: Optional[Any] = ...): ... def send_file(filepath_or_fp: Any, mimetype: Optional[Any] = ..., as_attachment: bool = ..., filename: Optional[Any] = ..., mtime: Optional[Any] = ..., add_etags: bool = ..., cache_timeout: Any = ..., conditional: bool = ...): ... def content_disposition(filename: Any): ... - -class CommonController(Controller): - def gen_session_id(self): ... +def set_safe_image_headers(headers: Any, content: Any): ... +def set_header_field(headers: Any, name: Any, value: Any): ... root: Any diff --git a/odoo-stubs/models.pyi b/odoo-stubs/models.pyi index 8bade19..3cf9cf8 100644 --- a/odoo-stubs/models.pyi +++ b/odoo-stubs/models.pyi @@ -24,16 +24,21 @@ regex_private: Any def check_method_name(name: Any) -> None: ... def same_name(f: Any, g: Any): ... def fix_import_export_id_paths(fieldname: Any): ... +def trigger_tree_merge(node1: Any, node2: Any) -> None: ... class MetaModel(api.Meta): module_to_models: Any = ... def __init__(self, name: Any, bases: Any, attrs: Any) -> None: ... class NewId: + origin: Any = ... ref: Any = ... - def __init__(self, ref: Optional[Any] = ...) -> None: ... + def __init__(self, origin: Optional[Any] = ..., ref: Optional[Any] = ...) -> None: ... def __bool__(self): ... - __nonzero__: Any = ... + def __eq__(self, other: Any) -> Any: ... + def __hash__(self) -> Any: ... + +def origin_ids(ids: Any): ... IdType: Any PREFETCH_MAX: int @@ -67,7 +72,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): def compute_concurrency_field_with_access(self) -> None: ... def __new__(cls) -> BaseModel: ... def __init__(self, pool: Any, cr: Any) -> None: ... - def export_data(self, fields_to_export: Any, raw_data: bool = ...): ... + def export_data(self, fields_to_export: Any): ... def load(self, fields: Any, data: Any): ... def default_get(self, fields_list: List[str]) -> Dict[str, Any]: ... def fields_get_keys(self): ... @@ -109,19 +114,24 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})): 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 action_archive(self): ... + def action_unarchive(self): ... def browse(self, arg: Optional[Any] = ..., prefetch: Optional[Any] = ...) -> BaseModel: ... @property def ids(self) -> List[int]: ... def ensure_one(self): ... def with_env(self, env: Any) -> BaseModel: ... - def sudo(self, user: Any = ...) -> BaseModel: ... + def sudo(self, flag: bool = ...) -> BaseModel: ... + def with_user(self, user: Any): ... def with_context(self, *args: Any, **kwargs: Any) -> BaseModel: ... - def with_prefetch(self, prefetch: Optional[Any] = ...) -> BaseModel: ... + def with_prefetch(self, prefetch_ids: Optional[Any] = ...) -> BaseModel: ... def mapped(self, func: Any): ... def filtered(self, func: Any) -> BaseModel: ... + def filtered_domain(self, domain: Any): ... 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 flush(self, fnames: Optional[Any] = ..., records: Optional[Any] = ...) -> None: ... + def new(self, values: RecordValue = ..., origin: Optional[Any] = ..., ref: Optional[Any] = ...) -> BaseModel: ... def __bool__(self) -> bool: ... __nonzero__: Any = ... def __len__(self) -> int: ... @@ -139,13 +149,13 @@ 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 __hash__(self) -> Any: ... def __getitem__(self, key: Any): ... def __setitem__(self, key: Any, value: Any): ... def refresh(self) -> None: ... def invalidate_cache(self, fnames: Optional[Any] = ..., ids: Optional[Any] = ...): ... - def modified(self, fnames: Any) -> None: ... - def recompute(self) -> None: ... + def modified(self, fnames: Any, create: bool = ...) -> None: ... + def recompute(self, fnames: Optional[Any] = ..., records: Optional[Any] = ...) -> None: ... def onchange(self, values: Any, field_name: Any, field_onchange: Any): ... class RecordCache(MutableMapping): @@ -154,12 +164,8 @@ class RecordCache(MutableMapping): 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] = ...): ... - def set_special(self, name: Any, getter: Any) -> None: ... - def set_failed(self, names: Any, exception: Any) -> None: ... AbstractModel = BaseModel class Model(AbstractModel): ... @@ -168,6 +174,7 @@ class TransientModel(Model): ... 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 convert_pgerror_constraint(model: Any, fields: Any, info: Any, e: Any): ... PGERROR_TO_OE: Any diff --git a/odoo-stubs/tests/common.pyi b/odoo-stubs/tests/common.pyi index 18a2653..befa7bd 100644 --- a/odoo-stubs/tests/common.pyi +++ b/odoo-stubs/tests/common.pyi @@ -40,9 +40,9 @@ class BaseCase(TreeCase): def ref(self, xid: Any): ... def browse_ref(self, xid: Any): ... def assertRaises(self, exception: Any, func: Optional[Any] = ..., *args: Any, **kwargs: Any): ... - def assertQueryCount(self, default: int = ..., **counters: Any): ... + def assertQueryCount(self, default: int = ..., flush: bool = ..., **counters: Any): ... def assertRecordValues(self, records: Any, expected_values: Any): ... - def shortDescription(self): ... + def shortDescription(self) -> None: ... def assertItemsEqual(self, a: Any, b: Any, msg: Optional[Any] = ...) -> None: ... def __getattr__(self, item): ... @@ -54,6 +54,7 @@ class TransactionCase(BaseCase): class SingleTransactionCase(BaseCase): @classmethod def setUpClass(cls) -> None: ... + def setUp(self) -> None: ... @classmethod def tearDownClass(cls) -> None: ... @@ -63,46 +64,59 @@ class SavepointCase(SingleTransactionCase): def setUp(self) -> None: ... def tearDown(self) -> None: ... +class ChromeBrowserException(Exception): ... + class ChromeBrowser: + test_class: Any = ... devtools_port: Any = ... ws_url: str = ... ws: Any = ... request_id: int = ... user_data_dir: Any = ... - chrome_process: Any = ... + chrome_pid: Any = ... + screenshots_dir: Any = ... + screencasts_dir: Any = ... screencast_frames: Any = ... + window_size: Any = ... sigxcpu_handler: Any = ... - def __init__(self, logger: Any) -> None: ... + def __init__(self, logger: Any, window_size: Any, test_class: Any) -> None: ... def signal_handler(self, sig: Any, frame: Any) -> None: ... def stop(self) -> None: ... @property def executable(self): ... - def take_screenshot(self, prefix: str = ...) -> None: ... + def take_screenshot(self, prefix: str = ..., suffix: Optional[Any] = ...) -> None: ... + screencasts_frames_dir: Any = ... 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 navigate_to(self, url: Any, wait_stop: bool = ...) -> None: ... def clear(self) -> None: ... + LINE_PATTERN: str = ... + def console_formatter(self, args: Any): ... class HttpCase(TransactionCase): registry_test_mode: bool = ... browser: Any = ... + browser_size: str = ... xmlrpc_url: Any = ... xmlrpc_common: Any = ... xmlrpc_db: Any = ... xmlrpc_object: Any = ... def __init__(self, methodName: str = ...) -> None: ... @classmethod - def start_browser(cls, logger: Any) -> None: ... + def start_browser(cls) -> None: ... + @classmethod + def terminate_browser(cls) -> None: ... @classmethod def tearDownClass(cls) -> None: ... session: Any = ... session_id: Any = ... opener: Any = ... def setUp(self) -> None: ... - def url_open(self, url: Any, data: Optional[Any] = ..., timeout: int = ...): ... + def url_open(self, url: Any, data: Optional[Any] = ..., files: Optional[Any] = ..., timeout: int = ..., headers: Optional[Any] = ...): ... 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: ... + def start_tour(self, url_path: Any, tour_name: Any, step_delay: Optional[Any] = ..., **kwargs: Any): ... phantom_js: Any = ... def users(*logins: Any): ... @@ -141,7 +155,7 @@ class M2MProxy(X2MProxy, collections.Sequence): 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 remove(self, id: Optional[Any] = ..., index: Optional[Any] = ...) -> None: ...