Exemple #1
0
    def close(self):
        """Closes the builder and returns the created tree.

        The builder should not be used after this call any more!

        Raises:
            HSDException: If there were some open elements.
        """
        if len(self.path) != 1:
            raise hsd.HSDException("Open elements remained")
        return self.path[0]
Exemple #2
0
    def data(self, data):
        """Adds text to the current element.

        Args:
            data: Text to be added.
        """
        elem = self.path[-1]
        if len(elem):
            msg = "No data allowed, as element already contains children"
            raise hsd.HSDException(msg)
        elem.text = data
Exemple #3
0
    def close(self):
        """Closes the builder and returns the created tree.

        The builder should not be used after this call any more!

        Raises:
            HSDException: If there were some open elements.
        """
        if len(self._builders) > 1:
            raise hsd.HSDException("Unclosed variable defintion")
        builder = self._builders[0]
        elem = builder.close()
        return elem
Exemple #4
0
    def end(self, tag):
        """Closes the current element.

        Args:
            tag: Name of element.

        Returns:
            The closed element.
        """
        elem = self.path[-1]
        if elem.tag != tag:
            raise hsd.HSDException("Invalid closing tag name")
        del self.path[-1]
        self.path[-1].append(elem)
        return elem
Exemple #5
0
    def start(self, tag, attribs, hsdattribs):
        """Opens a new element.

        Args:
            tag: Name of element.
            attribs: Dictionary with element attributes.
            hsdattribs: Dictionary with HSD attributes.

        Returns:
            The opened element.
        """
        if self.path[-1].text is not None:
            msg = "No children allowed, as element already contains data"
            raise hsd.HSDException(msg)
        elem = self._element_factory(tag, attribs, hsdattribs)
        self.path.append(elem)
        return elem
Exemple #6
0
    def data(self, data):
        """Adds text to the current element.

        Args:
            data: Text to be added.
        """
        builder = self._builders[-1]
        elem = builder.path[-1]
        if self._is_variable(data):
            varname = self._convert_variable_to_tag_name(data.strip())
            vardef = self._lookup_variable(varname)
            if vardef is None:
                msg = "Undefined variable '" + data.strip() + "'"
                raise hsd.HSDException(msg)
            elem.text = vardef.text
            for child in vardef:
                elem.append(child)
        else:
            elem.text = data
Exemple #7
0
 def set(self, key, value):
     if key.startswith(HSD_ATTRIB_PREFIX):
         msg = "Invalid attribute name '{}'".format(key)
         raise hsd.HSDException(msg)
     super().set(key, value)
Exemple #8
0
 def get(self, key, default=None):
     if key.startswith(HSD_ATTRIB_PREFIX):
         msg = "Invalid attribute name '{}'".format(key)
         raise hsd.HSDException(msg)
     return super().get(key, default)