2022-10-12 14:19:53 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
from SpiffWorkflow.bpmn.specs.ExclusiveGateway import ExclusiveGateway
|
|
|
|
from SpiffWorkflow.bpmn.specs.UserTask import UserTask
|
|
|
|
from SpiffWorkflow.bpmn.parser.BpmnParser import BpmnParser
|
|
|
|
from SpiffWorkflow.bpmn.parser.task_parsers import ExclusiveGatewayParser, UserTaskParser
|
|
|
|
from SpiffWorkflow.bpmn.parser.util import full_tag
|
|
|
|
|
|
|
|
from SpiffWorkflow.bpmn.serializer.bpmn_converters import BpmnTaskSpecConverter
|
|
|
|
|
|
|
|
# Many of our tests relied on the Packager to set the calledElement attribute on
|
|
|
|
# Call Activities. I've moved that code to a customized parser.
|
2022-11-04 13:33:42 +00:00
|
|
|
from SpiffWorkflow.signavio.parser.tasks import CallActivityParser
|
2022-10-12 14:19:53 +00:00
|
|
|
from SpiffWorkflow.bpmn.specs.SubWorkflowTask import CallActivity
|
|
|
|
|
|
|
|
__author__ = 'matth'
|
|
|
|
|
|
|
|
# This provides some extensions to the BPMN parser that make it easier to
|
|
|
|
# implement testcases
|
|
|
|
|
|
|
|
|
|
|
|
class TestUserTask(UserTask):
|
|
|
|
|
|
|
|
def get_user_choices(self):
|
|
|
|
if not self.outputs:
|
|
|
|
return []
|
|
|
|
assert len(self.outputs) == 1
|
|
|
|
next_node = self.outputs[0]
|
|
|
|
if isinstance(next_node, ExclusiveGateway):
|
|
|
|
return next_node.get_outgoing_sequence_names()
|
|
|
|
return self.get_outgoing_sequence_names()
|
|
|
|
|
|
|
|
def do_choice(self, task, choice):
|
|
|
|
task.set_data(choice=choice)
|
|
|
|
task.complete()
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
def deserialize(self, serializer, wf_spec, s_state):
|
|
|
|
return serializer.deserialize_generic(wf_spec, s_state, TestUserTask)
|
|
|
|
|
|
|
|
class TestExclusiveGatewayParser(ExclusiveGatewayParser):
|
|
|
|
|
|
|
|
def parse_condition(self, sequence_flow_node):
|
|
|
|
cond = super().parse_condition(sequence_flow_node)
|
|
|
|
if cond is not None:
|
|
|
|
return cond
|
|
|
|
return "choice == '%s'" % sequence_flow_node.get('name', None)
|
|
|
|
|
|
|
|
class TestUserTaskConverter(BpmnTaskSpecConverter):
|
|
|
|
|
|
|
|
def __init__(self, data_converter=None):
|
|
|
|
super().__init__(TestUserTask, data_converter)
|
|
|
|
|
|
|
|
def to_dict(self, spec):
|
|
|
|
dct = self.get_default_attributes(spec)
|
|
|
|
dct.update(self.get_bpmn_attributes(spec))
|
|
|
|
return dct
|
|
|
|
|
|
|
|
def from_dict(self, dct):
|
|
|
|
return self.task_spec_from_dict(dct)
|
|
|
|
|
|
|
|
|
|
|
|
class TestBpmnParser(BpmnParser):
|
|
|
|
OVERRIDE_PARSER_CLASSES = {
|
|
|
|
full_tag('userTask'): (UserTaskParser, TestUserTask),
|
|
|
|
full_tag('exclusiveGateway'): (TestExclusiveGatewayParser, ExclusiveGateway),
|
|
|
|
full_tag('callActivity'): (CallActivityParser, CallActivity)
|
|
|
|
}
|
|
|
|
|