Projet

Général

Profil

0001-workflow-display-role-details-on-inspect-page-48829.patch

Lauréline Guérin, 26 novembre 2020 16:51

Télécharger (5,59 ko)

Voir les différences:

Subject: [PATCH] workflow: display role details on inspect page (#48829)

 tests/admin_pages/test_workflow.py | 23 ++++++++++++++++++++++-
 wcs/wf/dispatch.py                 | 13 ++++++++++++-
 wcs/workflows.py                   | 26 ++++++++++++--------------
 3 files changed, 46 insertions(+), 16 deletions(-)
tests/admin_pages/test_workflow.py
16 16
from wcs.workflows import (
17 17
    Workflow, WorkflowCriticalityLevel, DisplayMessageWorkflowStatusItem,
18 18
    WorkflowBackofficeFieldsFormDef, CommentableWorkflowStatusItem)
19
from wcs.wf.dispatch import DispatchWorkflowStatusItem
19 20
from wcs.wf.export_to_model import ExportToModel
20 21
from wcs.wf.jump import JumpWorkflowStatusItem
21 22
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
......
1708 1709
    wscall.parent = baz_status
1709 1710
    baz_status.items.append(wscall)
1710 1711

  
1712
    dispatch1 = DispatchWorkflowStatusItem()
1713
    dispatch1.dispatch_type = 'automatic'
1714
    dispatch1.rules = [
1715
        {'role_id': role.id, 'value': 'foo'},
1716
    ]
1717
    baz_status.items.append(dispatch1)
1718
    dispatch2 = DispatchWorkflowStatusItem()
1719
    dispatch2.dispatch_type = 'manual'
1720
    dispatch2.role_key = '_receiver'
1721
    dispatch2.role_id = role.id
1722
    baz_status.items.append(dispatch2)
1723

  
1711 1724
    baz_status.backoffice_info_text = '<p>Hello</p>'
1712 1725

  
1713 1726
    display_form = FormWorkflowStatusItem()
......
1748 1761
    workflow.store()
1749 1762

  
1750 1763
    app = login(get_app(pub))
1751
    app.get('/backoffice/workflows/%s/inspect' % workflow.id)
1764
    resp = app.get('/backoffice/workflows/%s/inspect' % workflow.id)
1765
    assert (
1766
        '<li><span class="parameter">Dispatch Type:</span> Multiple</li>'
1767
        '<li><span class="parameter">Rules:</span> '
1768
        '<ul class="rules"><li>foo → foobar</li></ul>'
1769
        '</li>') in resp.text
1770
    assert (
1771
        '<li><span class="parameter">Dispatch Type:</span> Simple</li>'
1772
        '<li><span class="parameter">Role:</span> foobar</li>') in resp.text
1752 1773

  
1753 1774

  
1754 1775
def test_workflows_unused(pub):
wcs/wf/dispatch.py
17 17
import collections
18 18
import xml.etree.ElementTree as ET
19 19

  
20
from quixote.html import htmltext
21

  
20 22
from ..qommon import _, N_
21 23
from ..qommon.form import *
22 24
from ..qommon.template import Template
23 25
from ..qommon import get_logger
24 26
from wcs.roles import Role, get_user_roles
25
from wcs.workflows import XmlSerialisable, WorkflowStatusItem, register_item_class
27
from wcs.workflows import XmlSerialisable, WorkflowStatusItem, register_item_class, get_role_name
26 28

  
27 29

  
28 30
class AutomaticDispatchRowWidget(CompositeWidget):
......
177 179
                        }
178 180
                    )
179 181

  
182
    def get_role_id_parameter_view_value(self):
183
        return get_role_name(self.role_id)
184

  
185
    def get_rules_parameter_view_value(self):
186
        result = []
187
        for rule in self.rules or []:
188
            result.append(htmltext('<li>%s → %s</li>') % (rule.get('value'), get_role_name(rule.get('role_id'))))
189
        return htmltext('<ul class="rules">%s</ul>') % htmltext('').join(result)
190

  
180 191
    def perform(self, formdata):
181 192
        if not formdata.workflow_roles:
182 193
            formdata.workflow_roles = {}
wcs/workflows.py
961 961
            if role_id is None:
962 962
                continue
963 963
            role_id = str(role_id)
964
            if role_id.startswith('_') or role_id == 'logged-users':
965
                role = force_text(role_id, charset)
966
            else:
967
                try:
968
                    role = force_text(Role.get(role_id).name, charset)
969
                except KeyError:
970
                    role = force_text(role_id, charset)
964
            role = get_role_name(role_id, charset)
971 965
            sub = ET.SubElement(el, 'item')
972 966
            sub.attrib['role_id'] = role_id
973 967
            sub.text = role
......
986 980
        if not hasattr(self, attribute) or not getattr(self, attribute):
987 981
            return
988 982
        role_id = str(getattr(self, attribute))
989
        if role_id.startswith('_') or role_id == 'logged-users':
990
            role = force_text(role_id, charset)
991
        else:
992
            try:
993
                role = force_text(Role.get(role_id).name, charset)
994
            except KeyError:
995
                role_id = role = force_text(role_id, charset)
983
        role = get_role_name(role_id, charset)
996 984
        sub = ET.SubElement(item, attribute)
997 985
        if include_id:
998 986
            sub.attrib['role_id'] = role_id
......
2289 2277
            return
2290 2278

  
2291 2279

  
2280
def get_role_name(role_id, charset=None):
2281
    role_id = str(role_id)
2282
    if role_id.startswith('_') or role_id == 'logged-users':
2283
        return force_text(role_id, charset)
2284
    try:
2285
        return force_text(Role.get(role_id).name, charset)
2286
    except KeyError:
2287
        return force_text(role_id, charset)
2288

  
2289

  
2292 2290
def render_list_of_roles(workflow, roles):
2293 2291
    t = []
2294 2292
    for r in roles:
2295
-