facho/facho.py: adiciona replacement_for para sustitucion.

FossilOrigin-Name: 5e9210afdf4577388a206310ded9abbcf129d02f3818671aba3aad1282726466
This commit is contained in:
bit4bit@riseup.net 2020-10-28 02:16:41 +00:00
parent 1a2bd38b35
commit e13d8a333b
2 changed files with 16 additions and 0 deletions

View File

@ -82,6 +82,9 @@ class LXMLBuilder:
def append(self, elem, child):
elem.append(child)
def remove(self, elem):
elem.getparent().remove(elem)
def set_text(self, elem, text):
elem.text = text
@ -164,6 +167,11 @@ class FachoXML:
def placeholder_for(self, xpath):
return self.find_or_create_element(xpath)
def replacement_for(self, xpath, new_xpath, content, **attrs):
elem = self.get_element(xpath)
self.builder.remove(elem)
return self.set_element(new_xpath, content, **attrs)
def find_or_create_element(self, xpath, append=False):
"""
@param xpath ruta xpath para crear o consultar de un solo elemendo

View File

@ -170,3 +170,11 @@ def test_facho_xml_fragment_relative():
invoice = xml.fragment('./Invoice')
invoice.set_element('./Id', 1)
assert xml.tostring() == '<root><Invoice><Id>1</Id></Invoice></root>'
def test_facho_xml_replacement_for():
xml = facho.FachoXML('root')
xml.placeholder_for('./child/type')
xml.replacement_for('./child/type',
'./child/code', 'test')
assert xml.tostring() == '<root><child><code>test</code></child></root>'