diff options
| author | Raphael Collet <rco@odoo.com> | 2018-01-24 10:27:36 +0100 |
|---|---|---|
| committer | Raphael Collet <rco@odoo.com> | 2018-02-28 10:33:44 +0100 |
| commit | 80f1ac3599ee630e7556ff4fcf3eb192931eccd8 (patch) | |
| tree | 3d4e208ecab5c26e79a3ac6c60bf9d82e4cc81bf | |
| parent | af05bf2027312e839a6451fd099c63d35bb626eb (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.py | 4 | ||||
| -rw-r--r-- | addons/point_of_sale/tests/test_frontend.py | 5 | ||||
| -rw-r--r-- | odoo/addons/base/tests/test_base.py | 3 | ||||
| -rw-r--r-- | odoo/addons/test_new_api/tests/test_new_fields.py | 4 | ||||
| -rw-r--r-- | odoo/models.py | 21 | ||||
| -rw-r--r-- | odoo/modules/registry.py | 19 | ||||
| -rw-r--r-- | odoo/osv/expression.py | 4 |
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: |
