# This file is part of Beremiz.
# See COPYING file for copyrights details.
from __future__ import absolute_import
import util.paths as paths
from plcopen.structures import StdBlckLibs
ScriptDirectory = paths.AbsDir(__file__)
class XSLTModelQuery(object):
""" a class to handle XSLT queries on project and libs """
def __init__(self, controller, xsltpath, ext=None):
# arbitrary set debug to false, updated later
# merge xslt extensions for library access to query specific ones
("GetProject", lambda *_ignored:
[controller.GetProject(self.debug)]),
("GetStdLibs", lambda *_ignored:
[lib for lib in StdBlckLibs.values()]),
("GetExtensions", lambda *_ignored:
[ctn["types"] for ctn in controller.ConfNodeTypes])
# parse and compile. "beremiz" arbitrary namespace for extensions
os.path.join(ScriptDirectory, xsltpath),
extensions={("beremiz", name): call for name, call in xsltext})
def _process_xslt(self, root, debug, **kwargs):
res = self.xslt(root, **{k: etree.XSLT.strparam(v) for k, v in kwargs.iteritems()})
# print(self.xslt.error_log)
# -------------------------------------------------------------------------------
# Helpers functions for translating list of arguments
# from xslt to valid arguments
# -------------------------------------------------------------------------------
return x in ["true", "0"]
def _translate_args(translations, args):
return [translate(arg[0]) if len(arg) > 0 else None