[IMP] models: convert deprecated model._all_columns into a dynamic property
The mappings model._all_columns takes quite some memory (around 2MB per registry) because of the numerous dictionaries (one per model) and inefficient memory storage of column_info. Since it is deprecated and almost no longer used, it can be computed on demand.
This commit is contained in:
parent
e2ea691cef
commit
0f9b452c33
|
@ -111,9 +111,6 @@ class TestPropertyField(common.TransactionCase):
|
|||
self.partner._columns.update({
|
||||
'property_country': fields.property(type='many2one', relation="res.country", string="Country by company"),
|
||||
})
|
||||
self.partner._all_columns.update({
|
||||
'property_country': fields.column_info('property_country', self.partner._columns['property_country'], None, None, None),
|
||||
})
|
||||
self.partner._field_create(cr)
|
||||
|
||||
partner_id = self.partner.create(cr, alice, {
|
||||
|
|
|
@ -341,7 +341,7 @@ class BaseModel(object):
|
|||
# 1. includes self fields,
|
||||
# 2. uses column_info instead of a triple.
|
||||
# Warning: _all_columns is deprecated, use _fields instead
|
||||
_all_columns = {}
|
||||
# _all_columns = {}
|
||||
|
||||
_table = None
|
||||
_log_create = False
|
||||
|
@ -491,7 +491,6 @@ class BaseModel(object):
|
|||
"""
|
||||
field = cls._fields.pop(name)
|
||||
cls._columns.pop(name, None)
|
||||
cls._all_columns.pop(name, None)
|
||||
if hasattr(cls, name):
|
||||
delattr(cls, name)
|
||||
return field
|
||||
|
@ -2898,7 +2897,7 @@ class BaseModel(object):
|
|||
|
||||
@classmethod
|
||||
def _inherits_reload(cls):
|
||||
""" Recompute the _inherit_fields and _all_columns mappings. """
|
||||
""" Recompute the _inherit_fields mapping. """
|
||||
cls._inherit_fields = struct = {}
|
||||
for parent_model, parent_field in cls._inherits.iteritems():
|
||||
parent = cls.pool[parent_model]
|
||||
|
@ -2908,19 +2907,17 @@ class BaseModel(object):
|
|||
for name, source in parent._inherit_fields.iteritems():
|
||||
struct[name] = (parent_model, parent_field, source[2], source[3])
|
||||
|
||||
# old-api stuff
|
||||
cls._all_columns = cls._get_column_infos()
|
||||
|
||||
@classmethod
|
||||
def _get_column_infos(cls):
|
||||
"""Returns a dict mapping all fields names (direct fields and
|
||||
inherited field via _inherits) to a ``column_info`` struct
|
||||
giving detailed columns """
|
||||
@property
|
||||
def _all_columns(self):
|
||||
""" Returns a dict mapping all fields names (direct fields and inherited
|
||||
field via _inherits) to a ``column_info`` struct giving detailed columns.
|
||||
Deprecated.
|
||||
"""
|
||||
result = {}
|
||||
# do not inverse for loops, since local fields may hide inherited ones!
|
||||
for k, (parent, m2o, col, original_parent) in cls._inherit_fields.iteritems():
|
||||
for k, (parent, m2o, col, original_parent) in self._inherit_fields.iteritems():
|
||||
result[k] = fields.column_info(k, col, parent, m2o, original_parent)
|
||||
for k, col in cls._columns.iteritems():
|
||||
for k, col in self._columns.iteritems():
|
||||
result[k] = fields.column_info(k, col)
|
||||
return result
|
||||
|
||||
|
@ -3024,7 +3021,7 @@ class BaseModel(object):
|
|||
field = model._fields[field_name]
|
||||
field._triggers.update(triggers)
|
||||
|
||||
# determine old-api cls._inherit_fields and cls._all_columns
|
||||
# determine old-api structures about inherited fields
|
||||
cls._inherits_reload()
|
||||
|
||||
# register stuff about low-level function fields
|
||||
|
|
|
@ -1681,6 +1681,8 @@ class column_info(object):
|
|||
contains it i.e in case of multilevel inheritance, ``None`` for
|
||||
local columns.
|
||||
"""
|
||||
__slots__ = ['name', 'column', 'parent_model', 'parent_column', 'original_parent']
|
||||
|
||||
def __init__(self, name, column, parent_model=None, parent_column=None, original_parent=None):
|
||||
self.name = name
|
||||
self.column = column
|
||||
|
|
Loading…
Reference in New Issue