workflow: display role details on inspect page (#48829)

This commit is contained in:
Lauréline Guérin 2020-11-26 16:51:07 +01:00
parent b723546cf5
commit 3f3bfeda73
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 46 additions and 16 deletions

View File

@ -16,6 +16,7 @@ from wcs.roles import Role
from wcs.workflows import (
Workflow, WorkflowCriticalityLevel, DisplayMessageWorkflowStatusItem,
WorkflowBackofficeFieldsFormDef, CommentableWorkflowStatusItem)
from wcs.wf.dispatch import DispatchWorkflowStatusItem
from wcs.wf.export_to_model import ExportToModel
from wcs.wf.jump import JumpWorkflowStatusItem
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
@ -1708,6 +1709,18 @@ def test_workflows_inspect_view(pub):
wscall.parent = baz_status
baz_status.items.append(wscall)
dispatch1 = DispatchWorkflowStatusItem()
dispatch1.dispatch_type = 'automatic'
dispatch1.rules = [
{'role_id': role.id, 'value': 'foo'},
]
baz_status.items.append(dispatch1)
dispatch2 = DispatchWorkflowStatusItem()
dispatch2.dispatch_type = 'manual'
dispatch2.role_key = '_receiver'
dispatch2.role_id = role.id
baz_status.items.append(dispatch2)
baz_status.backoffice_info_text = '<p>Hello</p>'
display_form = FormWorkflowStatusItem()
@ -1748,7 +1761,15 @@ def test_workflows_inspect_view(pub):
workflow.store()
app = login(get_app(pub))
app.get('/backoffice/workflows/%s/inspect' % workflow.id)
resp = app.get('/backoffice/workflows/%s/inspect' % workflow.id)
assert (
'<li><span class="parameter">Dispatch Type:</span> Multiple</li>'
'<li><span class="parameter">Rules:</span> '
'<ul class="rules"><li>foo → foobar</li></ul>'
'</li>') in resp.text
assert (
'<li><span class="parameter">Dispatch Type:</span> Simple</li>'
'<li><span class="parameter">Role:</span> foobar</li>') in resp.text
def test_workflows_unused(pub):

View File

@ -17,12 +17,14 @@
import collections
import xml.etree.ElementTree as ET
from quixote.html import htmltext
from ..qommon import _, N_
from ..qommon.form import *
from ..qommon.template import Template
from ..qommon import get_logger
from wcs.roles import Role, get_user_roles
from wcs.workflows import XmlSerialisable, WorkflowStatusItem, register_item_class
from wcs.workflows import XmlSerialisable, WorkflowStatusItem, register_item_class, get_role_name
class AutomaticDispatchRowWidget(CompositeWidget):
@ -177,6 +179,15 @@ class DispatchWorkflowStatusItem(WorkflowStatusItem):
}
)
def get_role_id_parameter_view_value(self):
return get_role_name(self.role_id)
def get_rules_parameter_view_value(self):
result = []
for rule in self.rules or []:
result.append(htmltext('<li>%s%s</li>') % (rule.get('value'), get_role_name(rule.get('role_id'))))
return htmltext('<ul class="rules">%s</ul>') % htmltext('').join(result)
def perform(self, formdata):
if not formdata.workflow_roles:
formdata.workflow_roles = {}

View File

@ -961,13 +961,7 @@ class XmlSerialisable(object):
if role_id is None:
continue
role_id = str(role_id)
if role_id.startswith('_') or role_id == 'logged-users':
role = force_text(role_id, charset)
else:
try:
role = force_text(Role.get(role_id).name, charset)
except KeyError:
role = force_text(role_id, charset)
role = get_role_name(role_id, charset)
sub = ET.SubElement(el, 'item')
sub.attrib['role_id'] = role_id
sub.text = role
@ -986,13 +980,7 @@ class XmlSerialisable(object):
if not hasattr(self, attribute) or not getattr(self, attribute):
return
role_id = str(getattr(self, attribute))
if role_id.startswith('_') or role_id == 'logged-users':
role = force_text(role_id, charset)
else:
try:
role = force_text(Role.get(role_id).name, charset)
except KeyError:
role_id = role = force_text(role_id, charset)
role = get_role_name(role_id, charset)
sub = ET.SubElement(item, attribute)
if include_id:
sub.attrib['role_id'] = role_id
@ -2289,6 +2277,16 @@ def get_role_translation_label(workflow, role_id):
return
def get_role_name(role_id, charset=None):
role_id = str(role_id)
if role_id.startswith('_') or role_id == 'logged-users':
return force_text(role_id, charset)
try:
return force_text(Role.get(role_id).name, charset)
except KeyError:
return force_text(role_id, charset)
def render_list_of_roles(workflow, roles):
t = []
for r in roles: