[FIX] base_action_rule: do not force registry reload when writing on a rule unless...
authorOlivier Dony <odo@openerp.com>
Wed, 11 Jun 2014 09:41:48 +0000 (11:41 +0200)
committerOlivier Dony <odo@openerp.com>
Wed, 11 Jun 2014 16:42:18 +0000 (18:42 +0200)
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

index 37c4980..988cff1 100644 (file)
@@ -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):