facho/facho.py: maneja rutas relativas.
FossilOrigin-Name: cd97ead663dbbc1e2252f83da6e9cf17f9b3ae32e0ff411427ec62ad3658e89d
This commit is contained in:
		@@ -173,12 +173,17 @@ class FachoXML:
 | 
			
		||||
        xpath = self._path_xpath_for(xpath)
 | 
			
		||||
        node_paths = xpath.split('/')
 | 
			
		||||
        node_paths.pop(0) #remove empty /
 | 
			
		||||
        root_tag = node_paths.pop(0)
 | 
			
		||||
 | 
			
		||||
        root_node = self.builder.build_from_expression(root_tag)
 | 
			
		||||
        if xpath.startswith('.'):
 | 
			
		||||
            # restaurar ya que no es la raiz y asignar actual como raiz
 | 
			
		||||
            node_paths.insert(0, root_tag)
 | 
			
		||||
            root_node = self.root
 | 
			
		||||
            
 | 
			
		||||
        root_node = self.builder.build_from_expression(node_paths[0])
 | 
			
		||||
        if not self.builder.same_tag(root_node.tag, self.root.tag):
 | 
			
		||||
            
 | 
			
		||||
            raise ValueError('xpath %s must be absolute to /%s' % (xpath, self.root.tag))
 | 
			
		||||
        else:
 | 
			
		||||
            node_paths.pop(0)
 | 
			
		||||
 | 
			
		||||
        # crea jerarquia segun xpath indicado
 | 
			
		||||
        parent = None
 | 
			
		||||
 
 | 
			
		||||
@@ -150,3 +150,23 @@ def test_facho_xml_get_element_text_next_child():
 | 
			
		||||
    line = xml.fragment('/Invoice/Line', append=True)
 | 
			
		||||
    line.set_element('/Line/Quantity', 6)
 | 
			
		||||
    assert line.get_element_text('/Line[2]/Quantity', format_=int) == 6
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def test_facho_xml_set_element_relative():
 | 
			
		||||
    xml = facho.FachoXML('Invoice')
 | 
			
		||||
    xml.set_element('./ID', 'ABC123')
 | 
			
		||||
 | 
			
		||||
    assert xml.get_element_text('/Invoice/ID') == 'ABC123'
 | 
			
		||||
 | 
			
		||||
def test_facho_xml_set_element_relative_with_namespace():
 | 
			
		||||
    xml = facho.FachoXML('{%s}Invoice' % ('http://www.dian.gov.co/contratos/facturaelectronica/v1'),
 | 
			
		||||
                         nsmap={'fe': 'http://www.dian.gov.co/contratos/facturaelectronica/v1'})
 | 
			
		||||
    xml.set_element('./ID', 'ABC123')
 | 
			
		||||
 | 
			
		||||
    assert xml.get_element_text('/fe:Invoice/ID') == 'ABC123'
 | 
			
		||||
 | 
			
		||||
def test_facho_xml_fragment_relative():
 | 
			
		||||
    xml = facho.FachoXML('root')
 | 
			
		||||
    invoice = xml.fragment('./Invoice')
 | 
			
		||||
    invoice.set_element('./Id', 1)
 | 
			
		||||
    assert xml.tostring() == '<root><Invoice><Id>1</Id></Invoice></root>'
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user