Browse Source

[compat] Introduce compat_etree_Element

Sergey M․ 6 years ago
parent
commit
399f76870d
2 changed files with 17 additions and 0 deletions
  1. 7 0
      test/test_compat.py
  2. 10 0
      youtube_dl/compat.py

+ 7 - 0
test/test_compat.py

@@ -13,6 +13,7 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 from youtube_dl.compat import (
 from youtube_dl.compat import (
     compat_getenv,
     compat_getenv,
     compat_setenv,
     compat_setenv,
+    compat_etree_Element,
     compat_etree_fromstring,
     compat_etree_fromstring,
     compat_expanduser,
     compat_expanduser,
     compat_shlex_split,
     compat_shlex_split,
@@ -90,6 +91,12 @@ class TestCompat(unittest.TestCase):
         self.assertEqual(compat_shlex_split('-option "one\ntwo" \n -flag'), ['-option', 'one\ntwo', '-flag'])
         self.assertEqual(compat_shlex_split('-option "one\ntwo" \n -flag'), ['-option', 'one\ntwo', '-flag'])
         self.assertEqual(compat_shlex_split('-val 中文'), ['-val', '中文'])
         self.assertEqual(compat_shlex_split('-val 中文'), ['-val', '中文'])
 
 
+    def test_compat_etree_Element(self):
+        try:
+            compat_etree_Element.text
+        except AttributeError:
+            self.fail('compat_etree_Element is not a type')
+
     def test_compat_etree_fromstring(self):
     def test_compat_etree_fromstring(self):
         xml = '''
         xml = '''
             <root foo="bar" spam="中文">
             <root foo="bar" spam="中文">

+ 10 - 0
youtube_dl/compat.py

@@ -2508,6 +2508,15 @@ class _TreeBuilder(etree.TreeBuilder):
         pass
         pass
 
 
 
 
+try:
+    # xml.etree.ElementTree.Element is a method in Python <=2.6 and
+    # the following will crash with:
+    #  TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
+    isinstance(None, xml.etree.ElementTree.Element)
+    from xml.etree.ElementTree import Element as compat_etree_Element
+except TypeError:  # Python <=2.6
+    from xml.etree.ElementTree import _ElementInterface as compat_etree_Element
+
 if sys.version_info[0] >= 3:
 if sys.version_info[0] >= 3:
     def compat_etree_fromstring(text):
     def compat_etree_fromstring(text):
         return etree.XML(text, parser=etree.XMLParser(target=_TreeBuilder()))
         return etree.XML(text, parser=etree.XMLParser(target=_TreeBuilder()))
@@ -2969,6 +2978,7 @@ __all__ = [
     'compat_cookiejar',
     'compat_cookiejar',
     'compat_cookies',
     'compat_cookies',
     'compat_ctypes_WINFUNCTYPE',
     'compat_ctypes_WINFUNCTYPE',
+    'compat_etree_Element',
     'compat_etree_fromstring',
     'compat_etree_fromstring',
     'compat_etree_register_namespace',
     'compat_etree_register_namespace',
     'compat_expanduser',
     'compat_expanduser',