[REM] models: remove _defaults

This commit is contained in:
Raphael Collet
2016-08-31 17:21:46 +02:00
parent 86599bcc5a
commit 6956696eb2
5 changed files with 10 additions and 76 deletions
+1 -1
View File
@@ -141,7 +141,7 @@ class HrEmployee(models.Model):
if column_name not in ["barcode", "pin"]:
super(HrEmployee, self)._init_column(column_name)
else:
default_compute = self._defaults.get(column_name)
default_compute = self._fields[column_name].default
query = 'SELECT id FROM "%s" WHERE "%s" is NULL' % (
self._table, column_name)
+1 -1
View File
@@ -14,7 +14,7 @@ class MailMessage(models.Model):
def default_get(self, fields_list):
defaults = super(MailMessage, self).default_get(fields_list)
# Note: explicitly implemented in default_get() instead of _defaults,
# Note: explicitly implemented in default_get() instead of field default,
# to avoid setting to True for all existing messages during upgrades.
# TODO: this default should probably be dynamic according to the model
# on which the messages are attached, thus moved to create().
+1 -1
View File
@@ -61,7 +61,7 @@ class Property(models.Model):
prop = self[0]
type_ = prop.type
else:
type_ = self._defaults['type']
type_ = self._fields['type'].default(self)
field = TYPE2FIELD.get(type_)
if not field:
+6 -60
View File
@@ -74,30 +74,6 @@ def resolve_mro(model, name, predicate):
return result
def default_new_to_new(field, value):
""" Convert the new-API default ``value`` to a callable. """
return value if callable(value) else lambda model: value
def default_new_to_old(field, value):
""" Convert the new-API default ``value`` to the old API. """
if callable(value):
from openerp import api
return api.model(lambda model: field.convert_to_write(value(model), model))
else:
return value
def default_old_to_new(field, value):
""" Convert the old-API default ``value`` to the new API. """
if callable(value):
return lambda model: value(model._model, model._cr, model._uid, model._context)
else:
return lambda model: value
def default_old_to_old(field, value):
""" Convert the old-API default ``value`` to the old API. """
return value
class MetaField(type):
""" Metaclass for field classes. """
by_type = {}
@@ -457,40 +433,10 @@ class Field(object):
# related fields get their string from their parent field
self.string = name.replace('_', ' ').capitalize()
self._setup_default(model, name)
def _setup_default(self, model, name):
""" Determine ``self.default`` and the corresponding ``model._defaults``. """
self.default = None
model._defaults.pop(name, None)
# traverse the class hierarchy upwards, and take the first field
# definition with a default or _defaults for self
for klass in type(model).__mro__:
if name in klass.__dict__:
field = klass.__dict__[name]
if not isinstance(field, type(self)):
# klass contains another value overridden by self
return
if 'default' in field.args:
# take the value, and adapt it for model._defaults
value = field.args['default']
if value is not None:
self.default = default_new_to_new(self, value)
model._defaults[name] = default_new_to_old(self, value)
return
# do not look up _defaults on model classes
if getattr(klass, 'pool', None):
continue
defaults = klass.__dict__.get('_defaults') or {}
if name in defaults:
# take the value from _defaults, and adapt it for self.default
value = defaults[name]
self.default = default_old_to_new(self, value)
model._defaults[name] = default_old_to_old(self, value)
return
# self.default must be a callable
if self.default is not None:
value = self.default
self.default = value if callable(value) else lambda model: value
############################################################################
#
@@ -1430,9 +1376,9 @@ class Datetime(Field):
@staticmethod
def context_timestamp(record, timestamp):
"""Returns the given timestamp converted to the client's timezone.
This method is *not* meant for use as a _defaults initializer,
This method is *not* meant for use as a default initializer,
because datetime fields are automatically converted upon
display on client side. For _defaults you :meth:`fields.datetime.now`
display on client side. For default values :meth:`fields.datetime.now`
should be used instead.
:param datetime timestamp: naive datetime value (expressed in UTC)
+1 -13
View File
@@ -317,7 +317,6 @@ class BaseModel(object):
_inherit = None # Python-inherited models ('model' or ['model'])
_inherits = {} # inherited models {'parent_model': 'm2o_field'}
_columns = {} # field definitions (old API)
_defaults = {} # field defaults (old API)
_constraints = [] # Python constraints (old API)
_table = None # SQL table name used by model
@@ -609,7 +608,6 @@ class BaseModel(object):
'_original_module': cls._module,
'_inherit_children': OrderedSet(), # names of children models
'_fields': {}, # populated in _setup_base()
'_defaults': {}, # populated in _setup_base()
})
check_parent = cls._build_model_check_parent
@@ -3021,17 +3019,13 @@ class BaseModel(object):
for name in set(cls._fields) - cls0._proper_fields:
delattr(cls, name)
cls._fields.pop(name, None)
cls._defaults.pop(name, None)
# collect proper fields on cls0, and add them on cls
for name in cls0._proper_fields:
field = cls0._fields[name]
# regular fields are shared, while related fields are setup from scratch
if not field.related:
# regular fields are shared, and their default value copied
self._add_field(name, field)
if name in cls0._defaults:
cls._defaults[name] = cls0._defaults[name]
else:
# related fields are copied, and setup from scratch
self._add_field(name, field.new(**field.args))
cls._proper_fields = set(cls._fields)
@@ -3041,7 +3035,6 @@ class BaseModel(object):
for name in cls._fields:
delattr(cls, name)
cls._fields = {}
cls._defaults = {}
for name, field in getmembers(cls, Field.__instancecheck__):
# do not retrieve magic, custom and inherited fields
if not any(field.args.get(k) for k in ('automatic', 'manual', 'inherited')):
@@ -3122,11 +3115,6 @@ class BaseModel(object):
# register constraints and onchange methods
cls._init_constraints_onchanges()
# check defaults
for name in cls._defaults:
assert name in cls._fields, \
"Model %s has a default for nonexiting field %s" % (cls._name, name)
# validate rec_name
if cls._rec_name:
assert cls._rec_name in cls._fields, \