From c3b7950df1bebcb58037e6d0ded620e56e1a4976 Mon Sep 17 00:00:00 2001 From: Amit Mendapara Date: Thu, 18 Sep 2008 14:56:33 +0530 Subject: [PATCH] Process expr evaluation with user and object. bzr revid: ame@tinyerp.com-20080918092633-zmknerljoio2qbd1 --- addons/process/process.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/addons/process/process.py b/addons/process/process.py index 2ac778df760..ea83ba52873 100644 --- a/addons/process/process.py +++ b/addons/process/process.py @@ -32,15 +32,23 @@ import pooler, tools from osv import fields, osv class Env(dict): - - def __init__(self, parent): - self.__parent = parent - + + def __init__(self, obj, user): + self.__obj = obj + self.__usr = user + def __getitem__(self, name): - if name == '__parent': - return super(Env, self).__getitem__(name) - - return self.__parent[name] + + if name in ('__obj', '__user'): + return super(ExprContext, self).__getitem__(name) + + if name == 'user': + return self.__user + + if name == 'object': + return self.__obj + + return self.__obj[name] class process_process(osv.osv): _name = "process.process" @@ -60,6 +68,9 @@ class process_process(osv.osv): process = pool.get('process.process').browse(cr, uid, [id])[0] current_object = pool.get(res_model).browse(cr, uid, [res_id])[0] + current_user = pool.get('res.users').browse(cr, uid, [uid])[0] + + expr_context = Env(current_object, current_user) nodes = {} start = [] @@ -77,7 +88,7 @@ class process_process(osv.osv): if node.kind == "state" and node.model_id and node.model_id.model == res_model: try: - data['active'] = eval(node.model_states, Env(current_object)); + data['active'] = eval(node.model_states, expr_context); except Exception, e: # waring: invalid state expression pass @@ -87,7 +98,7 @@ class process_process(osv.osv): gray = False for cond in node.condition_ids: if cond.model_id and cond.model_id.model == res_model: - gray = gray or eval(cond.model_states, Env(current_object)) + gray = gray or eval(cond.model_states, expr_context) data['gray'] = gray except: pass