# coding: utf8 """ weasyprint.compat ----------------- Workarounds for compatibility with Python 2 and 3 in the same code base. :copyright: Copyright 2011-2012 Simon Sapin and contributors, see AUTHORS. :license: BSD, see LICENSE for details. """ from __future__ import division, unicode_literals import sys import email if sys.version_info[0] >= 3: # Python 3 from urllib.parse import ( urljoin, urlsplit, quote, unquote, unquote_to_bytes) from urllib.request import urlopen, Request, pathname2url from array import array basestring = str xrange = range iteritems = dict.items def urlopen_contenttype(url): """Return (file_obj, mime_type, encoding)""" result = urlopen(url) info = result.info() mime_type = info.get_content_type() charset = info.get_param('charset') # Using here result.fp gives 'ValueError: read of closed file' return result, mime_type, charset def parse_email(data): if isinstance(data, bytes): data = data.decode('utf8') return email.message_from_string(data) else: # Python 2 from urlparse import urljoin, urlsplit from urllib2 import urlopen, Request from urllib import pathname2url, quote, unquote from array import array as _array basestring = basestring xrange = xrange iteritems = dict.iteritems def array(typecode, initializer): return _array(typecode.encode('ascii'), initializer) def urlopen_contenttype(url): """Return (file_obj, mime_type, encoding)""" result = urlopen(url) info = result.info() mime_type = info.gettype() charset = info.getparam('charset') return result.fp, mime_type, charset def unquote_to_bytes(data): if isinstance(data, unicode): data = data.encode('ascii') return unquote(data) def parse_email(data): if isinstance(data, unicode): data = data.encode('utf8') return email.message_from_string(data)