[IMP] ir_values: ormcache method get_actions

On the Customer list, the request on `fields_view_get` takes 12 queries instead
of 62.  Overall, it saves queries on every call to `fields_view_get`.

The cache is invalidated upon any creation/modification/deletion on models
'ir.values', 'ir.actions' and 'res.groups'.
This commit is contained in:
Raphael Collet
2015-04-10 18:23:32 +02:00
committed by Olivier Dony
parent 20b6003dce
commit 6d239190ba
3 changed files with 26 additions and 4 deletions
+16 -1
View File
@@ -61,6 +61,18 @@ class actions(osv.osv):
'usage': lambda *a: False,
}
def create(self, cr, uid, vals, context=None):
res = super(actions, self).create(cr, uid, vals, context=context)
# ir_values.get_actions() depends on action records
self.pool['ir.values'].clear_caches()
return res
def write(self, cr, uid, ids, vals, context=None):
res = super(actions, self).write(cr, uid, ids, vals, context=context)
# ir_values.get_actions() depends on action records
self.pool['ir.values'].clear_caches()
return res
def unlink(self, cr, uid, ids, context=None):
"""unlink ir.action.todo which are related to actions which will be deleted.
NOTE: ondelete cascade will not work on ir.actions.actions so we will need to do it manually."""
@@ -71,7 +83,10 @@ class actions(osv.osv):
ids = [ids]
todo_ids = todo_obj.search(cr, uid, [('action_id', 'in', ids)], context=context)
todo_obj.unlink(cr, uid, todo_ids, context=context)
return super(actions, self).unlink(cr, uid, ids, context=context)
res = super(actions, self).unlink(cr, uid, ids, context=context)
# ir_values.get_actions() depends on action records
self.pool['ir.values'].clear_caches()
return res
def _get_eval_context(self, cr, uid, action=None, context=None):
""" evaluation context to pass to safe_eval """
+4 -3
View File
@@ -192,17 +192,17 @@ class ir_values(osv.osv):
def create(self, cr, uid, vals, context=None):
res = super(ir_values, self).create(cr, uid, vals, context=context)
self.get_defaults_dict.clear_cache(self)
self.clear_caches()
return res
def write(self, cr, uid, ids, vals, context=None):
res = super(ir_values, self).write(cr, uid, ids, vals, context=context)
self.get_defaults_dict.clear_cache(self)
self.clear_caches()
return res
def unlink(self, cr, uid, ids, context=None):
res = super(ir_values, self).unlink(cr, uid, ids, context=context)
self.get_defaults_dict.clear_cache(self)
self.clear_caches()
return res
def set_default(self, cr, uid, model, field_name, value, for_all_users=True, company_id=False, condition=False):
@@ -387,6 +387,7 @@ class ir_values(osv.osv):
'value': action,
})
@tools.ormcache_context(accepted_keys=('lang',))
def get_actions(self, cr, uid, action_slot, model, res_id=False, context=None):
"""Retrieves the list of actions bound to the given model's action slot.
See the class description for more details about the various action
+6
View File
@@ -718,16 +718,22 @@ class groups_view(osv.osv):
def create(self, cr, uid, values, context=None):
res = super(groups_view, self).create(cr, uid, values, context)
self.update_user_groups_view(cr, uid, context)
# ir_values.get_actions() depends on action records
self.pool['ir.values'].clear_caches()
return res
def write(self, cr, uid, ids, values, context=None):
res = super(groups_view, self).write(cr, uid, ids, values, context)
self.update_user_groups_view(cr, uid, context)
# ir_values.get_actions() depends on action records
self.pool['ir.values'].clear_caches()
return res
def unlink(self, cr, uid, ids, context=None):
res = super(groups_view, self).unlink(cr, uid, ids, context)
self.update_user_groups_view(cr, uid, context)
# ir_values.get_actions() depends on action records
self.pool['ir.values'].clear_caches()
return res
def update_user_groups_view(self, cr, uid, context=None):