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]
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
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
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
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
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
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)
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)