From 5bb9aae805947e77215ff8c433d52a987dbf75a0 Mon Sep 17 00:00:00 2001 From: Carl Suster Date: Wed, 11 Jan 2017 22:34:34 +1100 Subject: 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. --- pynzb/lxml_nzb.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/pynzb/lxml_nzb.py b/pynzb/lxml_nzb.py index 790671d..b1d0dc6 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 io(xml): return StringIO(xml) +else: + from BytesIO import BytesIO + def 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(io(xml), events=("start", "end"))) -- cgit v1.2.3