mirror of
https://github.com/sartography/spiff-arena.git
synced 2025-02-24 15:18:27 +00:00
git-subtree-dir: SpiffWorkflow git-subtree-split: 63db3e45947ec66b8d0efc2c74064004f8ff482c
20 lines
1.0 KiB
Python
20 lines
1.0 KiB
Python
from SpiffWorkflow.bpmn.parser.BpmnParser import BpmnParser
|
|
from SpiffWorkflow.bpmn.parser.ValidationException import ValidationException
|
|
from SpiffWorkflow.bpmn.parser.util import xpath_eval
|
|
|
|
class SignavioBpmnParser(BpmnParser):
|
|
|
|
def add_bpmn_xml(self, bpmn, filename=None):
|
|
# signavio sometimes disconnects a BoundaryEvent from it's owning task
|
|
# They then show up as intermediateCatchEvents without any incoming
|
|
# sequence flows. Check for this case before parsing the XML.
|
|
xpath = xpath_eval(bpmn)
|
|
for catch_event in xpath('.//bpmn:intermediateCatchEvent'):
|
|
incoming = xpath('.//bpmn:sequenceFlow[@targetRef="%s"]' % catch_event.get('id'))
|
|
if not incoming:
|
|
raise ValidationException(
|
|
'Intermediate Catch Event has no incoming sequences. '
|
|
'This might be a Boundary Event that has been '
|
|
'disconnected.',
|
|
node=catch_event, filename=filename)
|
|
return super().add_bpmn_xml(bpmn, filename) |