summaryrefslogtreecommitdiff
path: root/openerp/tools/safe_eval.py
diff options
context:
space:
mode:
authorVo Minh Thu <vmt@openerp.com>2013-02-20 11:22:59 +0100
committerVo Minh Thu <vmt@openerp.com>2013-02-20 11:22:59 +0100
commit0de24bf983bbed6bcf544571bbdfef6d6ff802b0 (patch)
treef19e01d833067794845aae3f1edf3554a0b0f9fc /openerp/tools/safe_eval.py
parent1f269d0d93e684945f37cbe60ed53bc9fad41eb2 (diff)
[IMP] safe_eval: do not log exceptions, when re-raising a new exception, make the stacktrace complete.
bzr revid: vmt@openerp.com-20130220102259-avee8fx2a1kpdog3
Diffstat (limited to 'openerp/tools/safe_eval.py')
-rw-r--r--openerp/tools/safe_eval.py15
1 files changed, 6 insertions, 9 deletions
diff --git a/openerp/tools/safe_eval.py b/openerp/tools/safe_eval.py
index b99de385af3..c56c94efdfd 100644
--- a/openerp/tools/safe_eval.py
+++ b/openerp/tools/safe_eval.py
@@ -106,11 +106,11 @@ def test_expr(expr, allowed_codes, mode="eval"):
expr = expr.strip()
code_obj = compile(expr, "", mode)
except (SyntaxError, TypeError):
- _logger.debug('Invalid eval expression', exc_info=True)
raise
- except Exception:
- _logger.debug('Disallowed or invalid eval expression', exc_info=True)
- raise ValueError("%s is not a valid expression" % expr)
+ except Exception, e:
+ import sys
+ exc_info = sys.exc_info()
+ raise ValueError, '"%s" while compiling\n%s' % (str(e), expr), exc_info[2]
for code in _get_opcodes(code_obj):
if code not in allowed_codes:
raise ValueError("opcode %s not allowed (%r)" % (opname[code], expr))
@@ -237,10 +237,7 @@ def safe_eval(expr, globals_dict=None, locals_dict=None, mode="eval", nocopy=Fal
'set' : set
}
)
- try:
- return eval(test_expr(expr, _SAFE_OPCODES, mode=mode), globals_dict, locals_dict)
- except Exception:
- _logger.exception('Cannot eval %r', expr)
- raise
+ c = test_expr(expr, _SAFE_OPCODES, mode=mode)
+ return eval(c, globals_dict, locals_dict)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: