From a6dd052dd62ee38d9b8de0444512431129b5a01e Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Thu, 5 Jan 2017 15:30:24 +0100 Subject: [PATCH 1/4] factorize WorklowStatusItem.compute() --- wcs/qommon/misc.py | 30 ++++++++++++++++++++++++++++++ wcs/workflows.py | 28 ++-------------------------- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/wcs/qommon/misc.py b/wcs/qommon/misc.py index ee5f6f1..4bc95f0 100644 --- a/wcs/qommon/misc.py +++ b/wcs/qommon/misc.py @@ -500,3 +500,33 @@ def json_response(data): def parse_isotime(s): t = time.strptime(s, '%Y-%m-%dT%H:%M:%SZ') return calendar.timegm(t) + + +def compute(expr, do_ezt=True, raises=False, context=None): + if not isinstance(expr, basestring): + return expr + + if not expr.startswith('=') and not do_ezt: + return expr + + vars = get_publisher().substitutions.get_context_variables() + vars.update(context or {}) + + if not expr.startswith('='): + try: + processor = ezt.Template(compress_whitespace=False) + processor.parse(expr) + fd = StringIO() + processor.generate(fd, vars) + return fd.getvalue() + except ezt.EZTException: + if raises: + raise + return expr + + try: + return eval(expr[1:], get_publisher().get_global_eval_dict(), vars) + except: + if raises: + raise + return expr diff --git a/wcs/workflows.py b/wcs/workflows.py index f26d02d..0b6022f 100644 --- a/wcs/workflows.py +++ b/wcs/workflows.py @@ -29,7 +29,7 @@ import uuid from quixote import get_request, redirect -from qommon.misc import C_, get_as_datetime +from qommon.misc import C_, get_as_datetime, compute from qommon.storage import StorableObject from qommon.form import * from qommon.humantime import seconds2humanduration @@ -1600,31 +1600,7 @@ class WorkflowStatusItem(XmlSerialisable): @classmethod def compute(cls, var, do_ezt=True, raises=False): - if not isinstance(var, basestring): - return var - - if not var.startswith('=') and not do_ezt: - return var - - vars = get_publisher().substitutions.get_context_variables() - if not var.startswith('='): - try: - processor = ezt.Template(compress_whitespace=False) - processor.parse(var) - fd = StringIO() - processor.generate(fd, vars) - return fd.getvalue() - except ezt.EZTException: - if raises: - raise - return var - - try: - return eval(var[1:], get_publisher().get_global_eval_dict(), vars) - except: - if raises: - raise - return var + return compute(var, do_ezt=do_ezt, raises=raises) def get_substitution_variables(self, formdata): return {} -- 2.1.4