import typing
from _typeshed import Incomplete
from odoorpc.models import IncrementalRecords as IncrementalRecords, Model as Model

if typing.TYPE_CHECKING:
    from collections.abc import Iterable

def is_int(value) -> bool: ...
def is_string(value) -> bool: ...
def odoo_tuple_in(iterable: Iterable) -> bool: ...
def tuples2ids(tuples: Iterable[tuple], ids: list) -> list: ...
def records2ids(iterable: Iterable[Model]) -> list[int]: ...

class BaseField:
    name: str
    type: bool
    string: bool
    size: bool
    required: bool
    readonly: bool
    help: bool
    states: bool
    def __init__(self, name, data) -> None: ...
    def __get__(self, instance, owner) -> None: ...
    def __set__(self, instance, value) -> None: ...
    def check_required(self, value) -> bool: ...
    def check_value(self, value): ...
    def store(self, record, value) -> None: ...

class Binary(BaseField):
    def __init__(self, name: str, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...

class Boolean(BaseField):
    def __init__(self, name: str, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...

class Char(BaseField):
    def __init__(self, name: str, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...

class Date(BaseField):
    pattern: str
    def __init__(self, name: str, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def check_value(self, value): ...

class Datetime(BaseField):
    pattern: str
    def __init__(self, name: str, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def check_value(self, value): ...

class Float(BaseField):
    def __init__(self, name: str, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def check_required(self, value): ...

class Integer(BaseField):
    def __init__(self, name: str, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def check_required(self, value): ...

class Selection(BaseField):
    selection: Incomplete
    def __init__(self, name: str, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def check_value(self, value): ...

class Many2many(BaseField):
    relation: Incomplete
    context: Incomplete
    domain: Incomplete
    def __init__(self, name, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def check_value(self, value): ...
    def store(self, record, value) -> None: ...

class Many2one(BaseField):
    relation: Incomplete
    context: Incomplete
    domain: Incomplete
    def __init__(self, name, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def check_value(self, value): ...

class One2many(BaseField):
    relation: Incomplete
    context: Incomplete
    domain: Incomplete
    def __init__(self, name, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def check_value(self, value): ...
    def store(self, record, value) -> None: ...

class Reference(BaseField):
    context: Incomplete
    domain: Incomplete
    selection: Incomplete
    def __init__(self, name, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...
    def check_value(self, value): ...

class Text(BaseField):
    def __init__(self, name, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...

class Html(Text):
    def __init__(self, name, data) -> None: ...

class Unknown(BaseField):
    def __init__(self, name, data) -> None: ...
    def __get__(self, instance, owner): ...
    def __set__(self, instance, value) -> None: ...

TYPES_TO_FIELDS: Incomplete

def generate_field(name, data): ...
