From ff8b843b18e02cd9889eb08528f4e01e6a8b0820 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 11 Jun 2014 11:41:48 +0200 Subject: [PATCH] [FIX] base_action_rule: do not force registry reload when writing on a rule unless really needed Executing a rule always updates the `last_run` value, which would always force a useless registry reload to occur. Only signal the change if the rule applies to a model that was not previoulsy monitored for base action rules. --- addons/base_action_rule/base_action_rule.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/addons/base_action_rule/base_action_rule.py b/addons/base_action_rule/base_action_rule.py index 37c4980528e..988cff1b972 100644 --- a/addons/base_action_rule/base_action_rule.py +++ b/addons/base_action_rule/base_action_rule.py @@ -193,6 +193,7 @@ class base_action_rule(osv.osv): """ Wrap the methods `create` and `write` of the models specified by the rules given by `ids` (or all existing rules if `ids` is `None`.) """ + updated = False if ids is None: ids = self.search(cr, SUPERUSER_ID, []) for action_rule in self.browse(cr, SUPERUSER_ID, ids): @@ -202,20 +203,21 @@ class base_action_rule(osv.osv): model_obj.create = self._wrap_create(model_obj.create, model) model_obj.write = self._wrap_write(model_obj.write, model) model_obj.base_action_ruled = True - return True + updated = True + return updated def create(self, cr, uid, vals, context=None): res_id = super(base_action_rule, self).create(cr, uid, vals, context=context) - self._register_hook(cr, [res_id]) - openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) + if self._register_hook(cr, [res_id]): + openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return res_id def write(self, cr, uid, ids, vals, context=None): if isinstance(ids, (int, long)): ids = [ids] super(base_action_rule, self).write(cr, uid, ids, vals, context=context) - self._register_hook(cr, ids) - openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) + if self._register_hook(cr, ids): + openerp.modules.registry.RegistryManager.signal_registry_change(cr.dbname) return True def onchange_model_id(self, cr, uid, ids, model_id, context=None):