mirror of
https://github.com/status-im/spiff-arena.git
synced 2025-01-28 18:55:14 +00:00
7c219fd731
git-subtree-dir: SpiffWorkflow git-subtree-split: 63db3e45947ec66b8d0efc2c74064004f8ff482c
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright (C) 2012 Matthew Hampton
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
# 02110-1301 USA
|
|
|
|
|
|
BPMN_MODEL_NS = 'http://www.omg.org/spec/BPMN/20100524/MODEL'
|
|
DIAG_INTERCHANGE_NS = "http://www.omg.org/spec/BPMN/20100524/DI"
|
|
DIAG_COMMON_NS = "http://www.omg.org/spec/DD/20100524/DC"
|
|
|
|
DEFAULT_NSMAP = {
|
|
'bpmn': BPMN_MODEL_NS,
|
|
'dc': DIAG_COMMON_NS,
|
|
'bpmndi': DIAG_INTERCHANGE_NS,
|
|
}
|
|
|
|
def one(nodes, or_none=False):
|
|
"""
|
|
Assert that there is exactly one node in the give list, and return it.
|
|
"""
|
|
if not nodes and or_none:
|
|
return None
|
|
assert len(
|
|
nodes) == 1, 'Expected 1 result. Received %d results.' % (len(nodes))
|
|
return nodes[0]
|
|
|
|
|
|
def first(nodes):
|
|
"""
|
|
Return the first node in the given list, or None, if the list is empty.
|
|
"""
|
|
if len(nodes) >= 1:
|
|
return nodes[0]
|
|
else:
|
|
return None
|
|
|
|
|
|
def xpath_eval(node, extra_ns=None):
|
|
"""
|
|
Returns an XPathEvaluator, with namespace prefixes 'bpmn' for
|
|
http://www.omg.org/spec/BPMN/20100524/MODEL, and additional specified ones
|
|
"""
|
|
namespaces = DEFAULT_NSMAP.copy()
|
|
if extra_ns:
|
|
namespaces.update(extra_ns)
|
|
return lambda path: node.xpath(path, namespaces=namespaces)
|
|
|
|
|
|
def full_tag(tag):
|
|
"""
|
|
Return the full tag name including namespace for the given BPMN tag. In
|
|
other words, the name with namespace
|
|
http://www.omg.org/spec/BPMN/20100524/MODEL
|
|
"""
|
|
return '{%s}%s' % (BPMN_MODEL_NS, tag)
|