diff options
author | Carl Suster <carl@contraflo.ws> | 2017-01-11 22:34:34 +1100 |
---|---|---|
committer | Carl Suster <carl@contraflo.ws> | 2017-01-12 12:24:34 +1100 |
commit | bb4f526aa0b6664b45d38c64b546e783407034b6 (patch) | |
tree | 4546b2cf440a1d380ce9106b808065d884e675ee | |
parent | db99bb2f8b4bc56c6ba91d5dab84ec042bb777ec (diff) |
give lxml etree BytesIO in Python 3
The lxml etree API changed in Python 3 to take BytesIO instead of
StringIO. This patch maintains the original behaviour in Python 2 but
switches to BytesIO in Python 3, decoding the XML data as UTF-8.
Forwarded: https://github.com/ericflo/pynzb/pull/6
-rw-r--r-- | pynzb/lxml_nzb.py | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/pynzb/lxml_nzb.py b/pynzb/lxml_nzb.py index 790671d..e74ba34 100644 --- a/pynzb/lxml_nzb.py +++ b/pynzb/lxml_nzb.py @@ -6,11 +6,17 @@ except ImportError: raise ImportError("You must have lxml installed before you can use the " + "lxml NZB parser.") -try: - from cStringIO import StringIO -except ImportError: - from StringIO import StringIO +import sys +if sys.version_info.major < 3: + try: + from cStringIO import StringIO + except ImportError: + from StringIO import StringIO + def as_io(xml): return StringIO(xml) +else: + from io import BytesIO + def as_io(xml): return BytesIO(bytes(xml, 'utf-8')) class LXMLNZBParser(BaseETreeNZBParser): def get_etree_iter(self, xml, et=etree): - return iter(et.iterparse(StringIO(xml), events=("start", "end")))
\ No newline at end of file + return iter(et.iterparse(as_io(xml), events=("start", "end"))) |