summaryrefslogtreecommitdiff
path: root/webob/compat.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-09-21 21:39:04 -0400
committerChris McDonough <chrism@plope.com>2011-09-21 21:39:04 -0400
commitbfa597146bc5dcecfcb5bc521a26f6cad01753ba (patch)
treee17fbba946db103c19be8583f412b2492818331d /webob/compat.py
parent1d760097f7beee1bfe6d0fb3618114d3b8d3cee1 (diff)
downloadwebob-bfa597146bc5dcecfcb5bc521a26f6cad01753ba.tar.gz
trim compat down to only necessary components; more direct imports; 100% test coverage for compat on py2
Diffstat (limited to 'webob/compat.py')
-rw-r--r--webob/compat.py45
1 files changed, 15 insertions, 30 deletions
diff --git a/webob/compat.py b/webob/compat.py
index 0d2f08c..f2bbe5c 100644
--- a/webob/compat.py
+++ b/webob/compat.py
@@ -8,7 +8,7 @@ import os
# True if we are running on Python 3.
PY3 = sys.version_info[0] == 3
-if PY3:
+if PY3: # pragma: no cover
string_types = str,
integer_types = int,
class_types = type,
@@ -36,17 +36,22 @@ def bytes_(s, encoding='latin-1', errors='strict'):
return s.encode(encoding, errors)
return s
+if PY3: # pragma: no cover
+ fsenc = sys.getfilesystemencoding()
+ def text_to_wsgi(u):
+ # On Python 3, convert an environment variable to a WSGI
+ # "bytes-as-unicode" string
+ return u.encode(fsenc, 'surrogateescape').decode('latin-1')
+else:
+ def text_to_wsgi(u):
+ return u.encode('latin-1', 'surrogateescape')
+
try:
from queue import Queue, Empty
except ImportError:
from Queue import Queue, Empty
try: # pragma: no cover
- from collections import MutableMapping as DictMixin
-except ImportError:
- from UserDict import DictMixin
-
-try: # pragma: no cover
from urllib import parse
urlparse = parse
from urllib.parse import quote as url_quote
@@ -65,12 +70,6 @@ try: # pragma: no cover
except ImportError: # pragma: no cover
from md5 import md5
-try:
- next = next
-except NameError:
- def next(v):
- return v.next()
-
if PY3: # pragma: no cover
import builtins
exec_ = getattr(builtins, "exec")
@@ -85,7 +84,7 @@ if PY3: # pragma: no cover
print_ = getattr(builtins, "print")
del builtins
-else:
+else: # pragma: no cover
def exec_(code, globs=None, locs=None):
"""Execute code in a namespace."""
if globs is None:
@@ -161,24 +160,9 @@ else:
return d.itervalues()
if PY3: # pragma: no cover
- enc = sys.getfilesystemencoding()
- def unicode_to_wsgi(u):
- # On Python 3, convert an environment variable to a WSGI
- # "bytes-as-unicode" string
- return u.encode(enc, 'surrogateescape').decode('latin-1')
- def wsgi_to_unicode(u):
- # Convert a "bytes-as-unicode" string to Unicode
- return u.encode('latin-1').decode(enc, 'surrogateescape')
-else:
- def unicode_to_wsgi(u):
- return u.encode('latin-1', 'surrogateescape')
- def wsgi_to_unicode(s):
- return s.decode('latin-1', 'surrogateescape')
-
-if PY3: # pragma: no cover
def parse_qsl_text(qs, keep_blank_values=False, strict_parsing=False,
encoding='utf-8', errors='replace'):
- source = wsgi_to_unicode(qs)
+ source = qs.encode('latin-1').decode(fsenc, 'surrogateescape')
decoded = urlparse.parse_qsl(
source,
keep_blank_values=keep_blank_values,
@@ -187,6 +171,7 @@ if PY3: # pragma: no cover
errors=errors,
)
return decoded
+
else:
def parse_qsl_text(qs, keep_blank_values=False, strict_parsing=False,
encoding='utf-8', errors='replace'):
@@ -198,7 +183,7 @@ else:
strict_parsing=strict_parsing)
]
return decoded
-
+
if PY3: # pragma: no cover
def multidict_from_bodyfile(fp=None, environ=os.environ,
keep_blank_values=False, encoding='utf-8',