projects
/
youtube-dl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[compat] Fix for XML with <!DOCTYPE> in Python 2.7 and 3.2
[youtube-dl]
/
youtube_dl
/
compat.py
diff --git
a/youtube_dl/compat.py
b/youtube_dl/compat.py
index 1392361a1636b4943b4083237c1704372f7065b7..06e5f3ff63ee644807fac38bb1859eb5b17ed75b 100644
(file)
--- a/
youtube_dl/compat.py
+++ b/
youtube_dl/compat.py
@@
-245,13
+245,20
@@
try:
except ImportError: # Python 2.6
from xml.parsers.expat import ExpatError as compat_xml_parse_error
except ImportError: # Python 2.6
from xml.parsers.expat import ExpatError as compat_xml_parse_error
+
+etree = xml.etree.ElementTree
+
+
+class _TreeBuilder(etree.TreeBuilder):
+ def doctype(self, name, pubid, system):
+ pass
+
if sys.version_info[0] >= 3:
if sys.version_info[0] >= 3:
- compat_etree_fromstring = xml.etree.ElementTree.fromstring
+ def compat_etree_fromstring(text):
+ return etree.XML(text, parser=etree.XMLParser(target=_TreeBuilder()))
else:
# python 2.x tries to encode unicode strings with ascii (see the
# XMLParser._fixtext method)
else:
# python 2.x tries to encode unicode strings with ascii (see the
# XMLParser._fixtext method)
- etree = xml.etree.ElementTree
-
try:
_etree_iter = etree.Element.iter
except AttributeError: # Python <=2.6
try:
_etree_iter = etree.Element.iter
except AttributeError: # Python <=2.6
@@
-265,7
+272,7
@@
else:
# 2.7 source
def _XML(text, parser=None):
if not parser:
# 2.7 source
def _XML(text, parser=None):
if not parser:
- parser = etree.XMLParser(target=
etree.
TreeBuilder())
+ parser = etree.XMLParser(target=
_
TreeBuilder())
parser.feed(text)
return parser.close()
parser.feed(text)
return parser.close()
@@
-277,7
+284,7
@@
else:
return el
def compat_etree_fromstring(text):
return el
def compat_etree_fromstring(text):
- doc = _XML(text, parser=etree.XMLParser(target=
etree.
TreeBuilder(element_factory=_element_factory)))
+ doc = _XML(text, parser=etree.XMLParser(target=
_
TreeBuilder(element_factory=_element_factory)))
for el in _etree_iter(doc):
if el.text is not None and isinstance(el.text, bytes):
el.text = el.text.decode('utf-8')
for el in _etree_iter(doc):
if el.text is not None and isinstance(el.text, bytes):
el.text = el.text.decode('utf-8')