Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def __getattr__(self, method):
"""Provide a dynamic access to a RPC *instance* method (which applies
on the current recordset).
.. doctest::
>>> Partner = odoo.env['res.partner']
>>> Partner.write([1], {'name': 'YourCompany'}) # Class method
True
>>> partner = Partner.browse(1)
>>> partner.write({'name': 'YourCompany'}) # Instance method
True
"""
if method.startswith('_'):
return super(Model, self).__getattr__(method)
def rpc_method(*args, **kwargs):
"""Return the result of the RPC request."""
args = tuple([self.ids]) + args
if self._odoo.config['auto_context'] and 'context' not in kwargs:
kwargs['context'] = self.env.context
result = self._odoo.execute_kw(self._name, method, args, kwargs)
return result
return rpc_method
if isinstance(cls_name, unicode): # noqa: F821
cls_name = cls_name.encode('utf-8')
# Retrieve server fields info and generate corresponding local fields
attrs = {
'_env': self,
'_odoo': self._odoo,
'_name': model,
'_columns': {},
}
fields_get = self._odoo.execute(model, 'fields_get')
for field_name, field_data in fields_get.items():
if field_name not in FIELDS_RESERVED:
Field = fields.generate_field(field_name, field_data)
attrs['_columns'][field_name] = Field
attrs[field_name] = Field
return type(cls_name, (Model,), attrs)
'_columns': {},
}
fields_get = self._odoo.execute(model, 'fields_get')
for field_name, field_data in fields_get.items():
if field_name not in FIELDS_RESERVED:
Field = fields.generate_field(field_name, field_data)
attrs['_columns'][field_name] = Field
attrs[field_name] = Field
# Case where no field 'name' exists, we generate one (which will be
# in readonly mode) in purpose to be filled with the 'name_get' method
if 'name' not in attrs['_columns']:
field_data = {'type': 'text', 'string': 'Name', 'readonly': True}
Field = fields.generate_field('name', field_data)
attrs['_columns']['name'] = Field
attrs['name'] = Field
return type(cls_name, (Model,), attrs)
def record2id(elt):
"""If `elt` is a record, return its ID."""
if isinstance(elt, Model):
return elt.id
return elt
return [record2id(elt) for elt in iterable]
def check_value(self, value):
if value:
if (
not isinstance(value, list)
and not isinstance(value, Model)
and not isinstance(value, IncrementalRecords)
):
raise ValueError(
"The value supplied has to be a list, a recordset "
"or 'False'"
)
return super(Many2many, self).check_value(value)
def __init__(self):
super(Model, self).__init__()
self._env_local = None
self._from_record = None
self._ids = []
self._values = {} # {field: {ID: value}}
self._values_to_write = {} # {field: {ID: value}}
for field in self._columns:
self._values[field] = {}
self._values_to_write[field] = {}