Monkey patch xml.etree.ElementTree to always return unicode
This commit is contained in:
parent
029123334b
commit
b4d036ed6b
2 changed files with 41 additions and 1 deletions
39
resources/lib/defused_etree.py
Normal file
39
resources/lib/defused_etree.py
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
xml.etree.ElementTree tries to encode with text.encode('ascii') - which is
|
||||||
|
just plain BS. This etree will always return unicode, not string
|
||||||
|
"""
|
||||||
|
from __future__ import absolute_import, division, unicode_literals
|
||||||
|
# Originally tried faster cElementTree, but does NOT work reliably with Kodi
|
||||||
|
from defusedxml.ElementTree import DefusedXMLParser, _generate_etree_functions
|
||||||
|
|
||||||
|
from xml.etree.ElementTree import TreeBuilder as _TreeBuilder
|
||||||
|
from xml.etree.ElementTree import parse as _parse
|
||||||
|
from xml.etree.ElementTree import iterparse as _iterparse
|
||||||
|
from xml.etree.ElementTree import tostring
|
||||||
|
|
||||||
|
|
||||||
|
class UnicodeXMLParser(DefusedXMLParser):
|
||||||
|
"""
|
||||||
|
PKC Hack to ensure we're always receiving unicode, not str
|
||||||
|
"""
|
||||||
|
@staticmethod
|
||||||
|
def _fixtext(text):
|
||||||
|
"""
|
||||||
|
Do NOT try to convert every entry to str with entry.encode('ascii')!
|
||||||
|
"""
|
||||||
|
return text
|
||||||
|
|
||||||
|
|
||||||
|
# aliases
|
||||||
|
XMLTreeBuilder = XMLParse = UnicodeXMLParser
|
||||||
|
|
||||||
|
parse, iterparse, fromstring = _generate_etree_functions(UnicodeXMLParser,
|
||||||
|
_TreeBuilder, _parse,
|
||||||
|
_iterparse)
|
||||||
|
XML = fromstring
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ['XML', 'XMLParse', 'XMLTreeBuilder', 'fromstring', 'iterparse',
|
||||||
|
'parse', 'tostring']
|
|
@ -12,7 +12,8 @@ from threading import Lock
|
||||||
import urllib
|
import urllib
|
||||||
# Originally tried faster cElementTree, but does NOT work reliably with Kodi
|
# Originally tried faster cElementTree, but does NOT work reliably with Kodi
|
||||||
import xml.etree.ElementTree as etree
|
import xml.etree.ElementTree as etree
|
||||||
import defusedxml.ElementTree as defused_etree # etree parse unsafe
|
# etree parse unsafe; make sure we're always receiving unicode
|
||||||
|
from . import defused_etree
|
||||||
from xml.etree.ElementTree import ParseError
|
from xml.etree.ElementTree import ParseError
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
Loading…
Reference in a new issue