mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:35:12 +00:00 
			
		
		
		
	[utils] Support list of xpath in xpath_element
This commit is contained in:
		@@ -275,9 +275,16 @@ class TestUtil(unittest.TestCase):
 | 
			
		||||
        p = xml.etree.ElementTree.SubElement(div, 'p')
 | 
			
		||||
        p.text = 'Foo'
 | 
			
		||||
        self.assertEqual(xpath_element(doc, 'div/p'), p)
 | 
			
		||||
        self.assertEqual(xpath_element(doc, ['div/p']), p)
 | 
			
		||||
        self.assertEqual(xpath_element(doc, ['div/bar', 'div/p']), p)
 | 
			
		||||
        self.assertEqual(xpath_element(doc, 'div/bar', default='default'), 'default')
 | 
			
		||||
        self.assertEqual(xpath_element(doc, ['div/bar'], default='default'), 'default')
 | 
			
		||||
        self.assertTrue(xpath_element(doc, 'div/bar') is None)
 | 
			
		||||
        self.assertTrue(xpath_element(doc, ['div/bar']) is None)
 | 
			
		||||
        self.assertTrue(xpath_element(doc, ['div/bar'], 'div/baz') is None)
 | 
			
		||||
        self.assertRaises(ExtractorError, xpath_element, doc, 'div/bar', fatal=True)
 | 
			
		||||
        self.assertRaises(ExtractorError, xpath_element, doc, ['div/bar'], fatal=True)
 | 
			
		||||
        self.assertRaises(ExtractorError, xpath_element, doc, ['div/bar', 'div/baz'], fatal=True)
 | 
			
		||||
 | 
			
		||||
    def test_xpath_text(self):
 | 
			
		||||
        testxml = '''<root>
 | 
			
		||||
 
 | 
			
		||||
@@ -178,10 +178,19 @@ def xpath_with_ns(path, ns_map):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def xpath_element(node, xpath, name=None, fatal=False, default=NO_DEFAULT):
 | 
			
		||||
    if sys.version_info < (2, 7):  # Crazy 2.6
 | 
			
		||||
        xpath = xpath.encode('ascii')
 | 
			
		||||
    def _find_xpath(xpath):
 | 
			
		||||
        if sys.version_info < (2, 7):  # Crazy 2.6
 | 
			
		||||
            xpath = xpath.encode('ascii')
 | 
			
		||||
        return node.find(xpath)
 | 
			
		||||
 | 
			
		||||
    if isinstance(xpath, (str, compat_str)):
 | 
			
		||||
        n = _find_xpath(xpath)
 | 
			
		||||
    else:
 | 
			
		||||
        for xp in xpath:
 | 
			
		||||
            n = _find_xpath(xp)
 | 
			
		||||
            if n is not None:
 | 
			
		||||
                break
 | 
			
		||||
 | 
			
		||||
    n = node.find(xpath)
 | 
			
		||||
    if n is None:
 | 
			
		||||
        if default is not NO_DEFAULT:
 | 
			
		||||
            return default
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user