diff options
| author | Amit Mendapara <ame@tinyerp.com> | 2008-09-18 14:56:33 +0530 |
|---|---|---|
| committer | Amit Mendapara <ame@tinyerp.com> | 2008-09-18 14:56:33 +0530 |
| commit | c3b7950df1bebcb58037e6d0ded620e56e1a4976 (patch) | |
| tree | 63872c905117e39d62744379f4d4ee6291e85cd6 /addons/process | |
| parent | fe17e91254d2230f913d5107173ecedf0517c726 (diff) | |
Process expr evaluation with user and object.
bzr revid: ame@tinyerp.com-20080918092633-zmknerljoio2qbd1
Diffstat (limited to 'addons/process')
| -rw-r--r-- | addons/process/process.py | 31 |
1 files 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 |
