Projet

Général

Profil

0001-factorize-WorklowStatusItem.compute-.-14510.patch

Benjamin Dauvergne, 16 mars 2017 16:24

Télécharger (4,83 ko)

Voir les différences:

Subject: [PATCH 1/4] factorize WorklowStatusItem.compute(..) (#14510)

 wcs/qommon/misc.py | 30 ++++++++++++++++++++++++++++++
 wcs/workflows.py   | 28 ++--------------------------
 wcs/wscalls.py     |  8 ++++----
 3 files changed, 36 insertions(+), 30 deletions(-)
wcs/qommon/misc.py
520 520
    for chunk in iter(read_chunk, ''):
521 521
        digest.update(chunk)
522 522
    return digest.hexdigest()
523

  
524

  
525
def compute(expr, do_ezt=True, raises=False, context=None):
526
    if not isinstance(expr, basestring):
527
        return expr
528

  
529
    if not expr.startswith('=') and not do_ezt:
530
        return expr
531

  
532
    vars = get_publisher().substitutions.get_context_variables()
533
    vars.update(context or {})
534

  
535
    if not expr.startswith('='):
536
        try:
537
            processor = ezt.Template(compress_whitespace=False)
538
            processor.parse(expr)
539
            fd = StringIO()
540
            processor.generate(fd, vars)
541
            return fd.getvalue()
542
        except ezt.EZTException:
543
            if raises:
544
                raise
545
            return expr
546

  
547
    try:
548
        return eval(expr[1:], get_publisher().get_global_eval_dict(), vars)
549
    except:
550
        if raises:
551
            raise
552
        return expr
wcs/workflows.py
31 31
from quixote import get_request, redirect
32 32

  
33 33
from qommon import _
34
from qommon.misc import C_, get_as_datetime, file_digest
34
from qommon.misc import C_, get_as_datetime, file_digest, compute
35 35
from qommon.storage import StorableObject, atomic_write
36 36
from qommon.form import *
37 37
from qommon.humantime import seconds2humanduration
......
1605 1605

  
1606 1606
    @classmethod
1607 1607
    def compute(cls, var, do_ezt=True, raises=False):
1608
        if not isinstance(var, basestring):
1609
            return var
1610

  
1611
        if not var.startswith('=') and not do_ezt:
1612
            return var
1613

  
1614
        vars = get_publisher().substitutions.get_context_variables()
1615
        if not var.startswith('='):
1616
            try:
1617
                processor = ezt.Template(compress_whitespace=False)
1618
                processor.parse(var)
1619
                fd = StringIO()
1620
                processor.generate(fd, vars)
1621
                return fd.getvalue()
1622
            except ezt.EZTException:
1623
                if raises:
1624
                    raise
1625
                return var
1626

  
1627
        try:
1628
            return eval(var[1:], get_publisher().get_global_eval_dict(), vars)
1629
        except:
1630
            if raises:
1631
                raise
1632
            return var
1608
        return compute(var, do_ezt=do_ezt, raises=raises)
1633 1609

  
1634 1610
    def get_substitution_variables(self, formdata):
1635 1611
        return {}
wcs/wscalls.py
25 25

  
26 26
from qommon import _
27 27
from qommon.misc import (simplify, http_get_page, http_post_request,
28
        get_variadic_url, JSONEncoder, json_loads)
28
        get_variadic_url, JSONEncoder, json_loads, compute)
29 29
from qommon.xml_storage import XmlStorableObject
30 30
from qommon.form import (CompositeWidget, StringWidget, WidgetDict,
31 31
        ComputedExpressionWidget, RadiobuttonsWidget, CheckboxWidget)
......
60 60
        qs = list(urlparse.parse_qsl(parsed.query))
61 61
        for key, value in qs_data.iteritems():
62 62
            try:
63
                value = WorkflowStatusItem.compute(value, raises=True)
63
                value = compute(value, raises=True)
64 64
                value = str(value)
65 65
            except:
66 66
                get_publisher().notify_of_exception(sys.exc_info())
......
72 72
        url = urlparse.urlunparse(parsed[:4] + (qs,) + parsed[5:6])
73 73

  
74 74
    if request_signature_key:
75
        signature_key = WorkflowStatusItem.compute(request_signature_key)
75
        signature_key = compute(request_signature_key)
76 76
        if signature_key:
77 77
            url = sign_url(url, signature_key)
78 78

  
......
84 84
        payload = {}
85 85
        for (key, value) in post_data.items():
86 86
            try:
87
                payload[key] = WorkflowStatusItem.compute(value, raises=True)
87
                payload[key] = compute(value, raises=True)
88 88
            except:
89 89
                get_publisher().notify_of_exception(sys.exc_info())
90 90

  
91
-