summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael Collet <rco@odoo.com>2018-01-24 10:27:36 +0100
committerRaphael Collet <rco@odoo.com>2018-02-28 10:33:44 +0100
commit80f1ac3599ee630e7556ff4fcf3eb192931eccd8 (patch)
tree3d4e208ecab5c26e79a3ac6c60bf9d82e4cc81bf
parentaf05bf2027312e839a6451fd099c63d35bb626eb (diff)
[REF] never defer parent_store computation
Simplify the implementation of parent_left/parent_right by removing this optimization.
-rw-r--r--addons/base_import/models/base_import.py4
-rw-r--r--addons/point_of_sale/tests/test_frontend.py5
-rw-r--r--odoo/addons/base/tests/test_base.py3
-rw-r--r--odoo/addons/test_new_api/tests/test_new_fields.py4
-rw-r--r--odoo/models.py21
-rw-r--r--odoo/modules/registry.py19
-rw-r--r--odoo/osv/expression.py4
7 files changed, 7 insertions, 53 deletions
diff --git a/addons/base_import/models/base_import.py b/addons/base_import/models/base_import.py
index 7021f880917..e6c53740f73 100644
--- a/addons/base_import/models/base_import.py
+++ b/addons/base_import/models/base_import.py
@@ -677,10 +677,6 @@ class Import(models.TransientModel):
_logger.info('importing %d rows...', len(data))
model = self.env[self.res_model].with_context(import_file=True)
- defer_parent_store = self.env.context.get('defer_parent_store_computation', True)
- if defer_parent_store and model._parent_store:
- model = model.with_context(defer_parent_store_computation=True)
-
import_result = model.load(import_fields, data)
_logger.info('done')
diff --git a/addons/point_of_sale/tests/test_frontend.py b/addons/point_of_sale/tests/test_frontend.py
index 091d880bc6c..a8f213eda0a 100644
--- a/addons/point_of_sale/tests/test_frontend.py
+++ b/addons/point_of_sale/tests/test_frontend.py
@@ -12,11 +12,6 @@ class TestUi(odoo.tests.HttpCase):
def test_01_pos_basic_order(self):
env = self.env
- # By default parent_store computation is deferred until end of
- # tests. Pricelist items however are sorted based on these
- # fields, so they need to be computed.
- env['product.category']._parent_store_compute()
-
journal_obj = env['account.journal']
account_obj = env['account.account']
main_company = env.ref('base.main_company')
diff --git a/odoo/addons/base/tests/test_base.py b/odoo/addons/base/tests/test_base.py
index e70fea08338..5b8955828c0 100644
--- a/odoo/addons/base/tests/test_base.py
+++ b/odoo/addons/base/tests/test_base.py
@@ -442,9 +442,6 @@ class TestParentStore(TransactionCase):
def setUp(self):
super(TestParentStore, self).setUp()
- # pretend the pool has finished loading to avoid deferring parent_store computation
- self.patch(self.registry, '_init', False)
- self.registry.do_parent_store(self.cr)
# force res_partner_category.copy() to copy children
category = self.env['res.partner.category']
diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py
index 4e37d81385f..c1bf14fd05c 100644
--- a/odoo/addons/test_new_api/tests/test_new_fields.py
+++ b/odoo/addons/test_new_api/tests/test_new_fields.py
@@ -996,10 +996,6 @@ class TestParentStore(common.TransactionCase):
def setUp(self):
super(TestParentStore, self).setUp()
- # pretend the pool has finished loading to avoid deferring parent_store
- # computation
- self.patch(self.registry, '_init', False)
-
# make a tree of categories:
# 0
# /|\
diff --git a/odoo/models.py b/odoo/models.py
index 3fdcaaf573e..2a00a8297ff 100644
--- a/odoo/models.py
+++ b/odoo/models.py
@@ -809,9 +809,6 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
cr.execute('ROLLBACK TO SAVEPOINT model_load')
ids = False
- if ids and self._context.get('defer_parent_store_computation'):
- self._parent_store_compute()
-
return {'ids': ids, 'messages': messages}
def _add_fake_fields(self, fields):
@@ -2114,7 +2111,6 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
self.pool.post_init(self._reflect)
cr = self._cr
- parent_store_compute = False
update_custom_fields = self._context.get('update_custom_fields', False)
must_create_table = not tools.table_exists(cr, self._table)
@@ -2125,7 +2121,6 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
if self._parent_store:
if not tools.column_exists(cr, self._table, 'parent_left'):
self._create_parent_columns()
- parent_store_compute = True
self._check_removed_columns(log=False)
@@ -2154,9 +2149,6 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
if must_create_table:
self._execute_sql()
- if parent_store_compute:
- self._parent_store_compute()
-
@api.model_cr
def init(self):
""" This method is called after :meth:`~._auto_init`, and may be
@@ -3344,11 +3336,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
""" Prepare the creation of a record, and return whether its
parent_left/parent_right fields must be updated after creation.
"""
- if not self._parent_store or self._context.get('defer_parent_store_computation'):
- return False
-
- if self.pool._init:
- self.pool._init_parent.add(self._name)
+ if not self._parent_store:
return False
# temporarily put the node at the top-level rightmost position
@@ -3365,12 +3353,7 @@ class BaseModel(MetaModel('DummyModel', (object,), {'_register': False})):
parent_right fields, in their sibling order. This must be called
before updating the parent field.
"""
- if not self._parent_store or self._parent_name not in vals or \
- self._context.get('defer_parent_store_computation'):
- return self.browse()
-
- if self.pool._init:
- self.pool._init_parent.add(self._name)
+ if not self._parent_store or self._parent_name not in vals:
return self.browse()
# The parent_left/right computation may take up to 5 seconds. No need to
diff --git a/odoo/modules/registry.py b/odoo/modules/registry.py
index 6dd6556298b..fb568185d9a 100644
--- a/odoo/modules/registry.py
+++ b/odoo/modules/registry.py
@@ -95,16 +95,11 @@ class Registry(Mapping):
# load_modules() above can replace the registry by calling
# indirectly new() again (when modules have to be uninstalled).
# Yeah, crazy.
- init_parent = registry._init_parent
registry = cls.registries[db_name]
- registry._init_parent.update(init_parent)
- with closing(registry.cursor()) as cr:
- registry.do_parent_store(cr)
- cr.commit()
-
- registry.ready = True
- registry.registry_invalidated = bool(update_module)
+ registry._init = False
+ registry.ready = True
+ registry.registry_invalidated = bool(update_module)
return registry
@@ -112,7 +107,6 @@ class Registry(Mapping):
self.models = {} # model name/model instance mapping
self._sql_error = {}
self._init = True
- self._init_parent = set()
self._assertion_report = assertion_report.assertion_report()
self._fields_by_model = None
self._post_init_queue = deque()
@@ -209,13 +203,6 @@ class Registry(Mapping):
}
return mapping.get
- def do_parent_store(self, cr):
- env = odoo.api.Environment(cr, SUPERUSER_ID, {})
- for model_name in self._init_parent:
- if model_name in env:
- env[model_name]._parent_store_compute()
- self._init = False
-
def descendants(self, model_names, *kinds):
""" Return the models corresponding to ``model_names`` and all those
that inherit/inherits from them.
diff --git a/odoo/osv/expression.py b/odoo/osv/expression.py
index 07d7f4c574f..d9719740edb 100644
--- a/odoo/osv/expression.py
+++ b/odoo/osv/expression.py
@@ -741,7 +741,7 @@ class expression(object):
(when available), or as an expanded [(left,in,child_ids)] """
if not ids:
return FALSE_DOMAIN
- if left_model._parent_store and (not left_model.pool._init) and (not context.get('defer_parent_store_computation')):
+ if left_model._parent_store:
# TODO: Improve where joins are implemented for many with '.', replace by:
# doms += ['&',(prefix+'.parent_left','<',rec.parent_right),(prefix+'.parent_left','>=',rec.parent_left)]
doms = []
@@ -764,7 +764,7 @@ class expression(object):
""" Return a domain implementing the parent_of operator for [(left,parent_of,ids)],
either as a range using the parent_left/right tree lookup fields
(when available), or as an expanded [(left,in,parent_ids)] """
- if left_model._parent_store and (not left_model.pool._init) and (not context.get('defer_parent_store_computation')):
+ if left_model._parent_store:
doms = []
for rec in left_model.browse(ids):
if doms: