""" return the null value for this field in the given environment """
return False
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
""" convert `value` to the cache level in `env`; `value` may come from
an assignment, or have the format of methods :meth:`BaseModel.read`
or :meth:`BaseModel.write`
+ :param record: the target record for the assignment, or an empty recordset
+
:param bool validate: when True, field-specific validation of
`value` will be performed
"""
record.ensure_one()
# adapt value to the cache level
- value = self.convert_to_cache(value, env)
+ value = self.convert_to_cache(value, record)
if env.in_draft or not record.id:
# determine dependent fields
""" Boolean field. """
type = 'boolean'
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
return bool(value)
def convert_to_export(self, value, env):
""" Integer field. """
type = 'integer'
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
return int(value or 0)
def convert_to_read(self, value, use_name_get=True):
_column_digits = property(lambda self: not callable(self._digits) and self._digits)
_column_digits_compute = property(lambda self: callable(self._digits) and self._digits)
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
# apply rounding here, otherwise value in cache may be wrong!
if self.digits:
return float_round(float(value or 0.0), precision_digits=self.digits[1])
_related_size = property(attrgetter('size'))
_description_size = property(attrgetter('size'))
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
return bool(value) and ustr(value)[:self.size]
"""
type = 'text'
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
return bool(value) and ustr(value)
""" Html field. """
type = 'html'
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
return bool(value) and html_sanitize(value)
""" Convert a :class:`date` value into the format expected by the ORM. """
return value.strftime(DATE_FORMAT)
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
if not value:
return False
if isinstance(value, basestring):
""" Convert a :class:`datetime` value into the format expected by the ORM. """
return value.strftime(DATETIME_FORMAT)
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
if not value:
return False
if isinstance(value, basestring):
selection = selection(env[self.model_name])
return [value for value, _ in selection]
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
if not validate:
return value or False
- if value in self.get_values(env):
+ if value in self.get_values(record.env):
return value
elif not value:
return False
_column_size = property(attrgetter('size'))
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
if isinstance(value, BaseModel):
- if ((not validate or value._name in self.get_values(env))
+ if ((not validate or value._name in self.get_values(record.env))
and len(value) <= 1):
- return value.with_env(env) or False
+ return value.with_env(record.env) or False
elif isinstance(value, basestring):
res_model, res_id = value.split(',')
- return env[res_model].browse(int(res_id))
+ return record.env[res_model].browse(int(res_id))
elif not value:
return False
raise ValueError("Wrong value for %s: %r" % (self, value))
""" Update the cached value of `self` for `records` with `value`. """
records._cache[self] = value
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
if isinstance(value, (NoneType, int)):
- return env[self.comodel_name].browse(value)
+ return record.env[self.comodel_name].browse(value)
if isinstance(value, BaseModel):
if value._name == self.comodel_name and len(value) <= 1:
- return value.with_env(env)
+ return value.with_env(record.env)
raise ValueError("Wrong value for %s: %r" % (self, value))
elif isinstance(value, tuple):
- return env[self.comodel_name].browse(value[0])
+ return record.env[self.comodel_name].browse(value[0])
elif isinstance(value, dict):
- return env[self.comodel_name].new(value)
+ return record.env[self.comodel_name].new(value)
else:
- return env[self.comodel_name].browse(value)
+ return record.env[self.comodel_name].browse(value)
def convert_to_read(self, value, use_name_get=True):
if use_name_get and value:
for record in records:
record._cache[self] = record[self.name] | value
- def convert_to_cache(self, value, env, validate=True):
+ def convert_to_cache(self, value, record, validate=True):
if isinstance(value, BaseModel):
if value._name == self.comodel_name:
- return value.with_env(env)
+ return value.with_env(record.env)
elif isinstance(value, list):
# value is a list of record ids or commands
- result = env[self.comodel_name]
+ if not record.id:
+ record = record.browse() # new record has no value
+ result = record[self.name]
+ # modify result with the commands;
+ # beware to not introduce duplicates in result
for command in value:
if isinstance(command, (tuple, list)):
if command[0] == 0:
result += result.new(command[2])
elif command[0] == 1:
- record = result.browse(command[1])
- record.update(command[2])
- result += record
+ result.browse(command[1]).update(command[2])
elif command[0] == 2:
- pass
+ # note: the record will be deleted by write()
+ result -= result.browse(command[1])
elif command[0] == 3:
- pass
+ result -= result.browse(command[1])
elif command[0] == 4:
- result += result.browse(command[1])
+ result += result.browse(command[1]) - result
elif command[0] == 5:
result = result.browse()
elif command[0] == 6:
elif isinstance(command, dict):
result += result.new(command)
else:
- result += result.browse(command)
+ result += result.browse(command) - result
return result
elif not value:
- return self.null(env)
+ return self.null(record.env)
raise ValueError("Wrong value for %s: %s" % (self, value))
def convert_to_read(self, value, use_name_get=True):