summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Suster <carl@contraflo.ws>2017-01-11 22:34:34 +1100
committerCarl Suster <carl@contraflo.ws>2017-01-12 12:24:34 +1100
commitbb4f526aa0b6664b45d38c64b546e783407034b6 (patch)
tree4546b2cf440a1d380ce9106b808065d884e675ee
parentdb99bb2f8b4bc56c6ba91d5dab84ec042bb777ec (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.py16
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")))