Пример #1
0
    def _process_node(self, node, handler, params):
        old_include_root = None
        if self._has_attribute(node, "source"):
            source = self._get_attribute(node, "source")

            source_rp = RecipePath(self._include_root, source)

            old_include_root = self._include_root
            self._include_root = source_rp.get_root()
            xmlstr = source_rp.to_str()

            dom_init = XmlDomTreeInit()
            try:
                dom = dom_init.parse_string(xmlstr,
                                            filename=source_rp.abs_path())
            except IOError as err:
                msg = "Unable to resolve include: %s" % str(err)
                raise XmlProcessingError(msg, node)

            loaded_node = None
            try:
                loaded_node = dom.getElementsByTagName(node.nodeName)[0]
            except Exception:
                msg = ("No '%s' element present in included file '%s'." %
                       (node.nodeName, source_rp.abs_path()))
                raise XmlProcessingError(msg, node)

            old_attrs = self._get_all_attributes(node)

            parent = node.parentNode
            parent.replaceChild(loaded_node, node)
            node = loaded_node

            # copy all of the original attributes to the sourced node
            for name, value in old_attrs.iteritems():
                # do not overwrite sourced attributes
                if not node.hasAttribute(name):
                    node.setAttribute(name, value)

        parent = super(LnstParser, self)
        parent._process_node(node, handler, params)

        if old_include_root:
            self._include_root = old_include_root
Пример #2
0
    def __init__(self, recipe_filepath):
        super(RecipeParse, self).__init__()

        self._filepath = recipe_filepath
        self._rp = RecipePath(None, self._filepath)
        self._include_root = self._rp.get_root()