mirror of
https://github.com/ytdl-org/youtube-dl.git
synced 2024-11-25 19:52:11 +00:00
[compat] compat_etree_fromstring: only decode bytes objects
This commit is contained in:
parent
36e6f62cd0
commit
387db16a78
2 changed files with 5 additions and 4 deletions
|
@ -74,9 +74,10 @@ class TestCompat(unittest.TestCase):
|
||||||
self.assertEqual(compat_shlex_split('-option "one two"'), ['-option', 'one two'])
|
self.assertEqual(compat_shlex_split('-option "one two"'), ['-option', 'one two'])
|
||||||
|
|
||||||
def test_compat_etree_fromstring(self):
|
def test_compat_etree_fromstring(self):
|
||||||
xml = '<el foo="bar"></el>'
|
xml = '<el foo="bar" spam="中文"></el>'
|
||||||
doc = compat_etree_fromstring(xml.encode('utf-8'))
|
doc = compat_etree_fromstring(xml.encode('utf-8'))
|
||||||
self.assertTrue(isinstance(doc.attrib['foo'], compat_str))
|
self.assertTrue(isinstance(doc.attrib['foo'], compat_str))
|
||||||
|
self.assertTrue(isinstance(doc.attrib['spam'], compat_str))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -216,8 +216,7 @@ except ImportError: # Python 2.6
|
||||||
if sys.version_info[0] >= 3:
|
if sys.version_info[0] >= 3:
|
||||||
compat_etree_fromstring = xml.etree.ElementTree.fromstring
|
compat_etree_fromstring = xml.etree.ElementTree.fromstring
|
||||||
else:
|
else:
|
||||||
# on python 2.x the the attributes of a node are str objects instead of
|
# on python 2.x the the attributes of a node aren't always unicode objects
|
||||||
# unicode
|
|
||||||
etree = xml.etree.ElementTree
|
etree = xml.etree.ElementTree
|
||||||
|
|
||||||
# on 2.6 XML doesn't have a parser argument, function copied from CPython
|
# on 2.6 XML doesn't have a parser argument, function copied from CPython
|
||||||
|
@ -231,6 +230,7 @@ else:
|
||||||
def _element_factory(*args, **kwargs):
|
def _element_factory(*args, **kwargs):
|
||||||
el = etree.Element(*args, **kwargs)
|
el = etree.Element(*args, **kwargs)
|
||||||
for k, v in el.items():
|
for k, v in el.items():
|
||||||
|
if isinstance(v, bytes):
|
||||||
el.set(k, v.decode('utf-8'))
|
el.set(k, v.decode('utf-8'))
|
||||||
return el
|
return el
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue