summaryrefslogtreecommitdiff
path: root/webtest/compat.py
diff options
context:
space:
mode:
authorGael Pasgrimaud <gael@gawel.org>2012-12-05 13:19:05 +0100
committerGael Pasgrimaud <gael@gawel.org>2012-12-05 13:19:05 +0100
commit26655c765c3d11e1e4e09930f93fde953dea25e2 (patch)
tree73036ac592fb3f21d8ce1f60b7fe8293405ce1f4 /webtest/compat.py
parent4b8c15c08d48843cb64ff7ac0f0c0870c246890a (diff)
downloadwebtest-26655c765c3d11e1e4e09930f93fde953dea25e2.tar.gz
remove some ugly stuff by using future's literal and six. this mean we do no longer support python2.5
Diffstat (limited to 'webtest/compat.py')
-rw-r--r--webtest/compat.py96
1 files changed, 34 insertions, 62 deletions
diff --git a/webtest/compat.py b/webtest/compat.py
index b4d39ac..b651f70 100644
--- a/webtest/compat.py
+++ b/webtest/compat.py
@@ -1,13 +1,39 @@
# -*- coding: utf-8 -*-
import sys
+import six
+from six import PY3
+from six import text_type
+from six import binary_type
+from six.moves import http_client
+from six.moves import BaseHTTPServer
+from six.moves import SimpleHTTPServer
-if sys.version_info[0] > 2:
- PY3 = True
- string_types = (str,)
- text_type = str
- binary_type = bytes
+try:
from json import loads
from json import dumps
+except ImportError:
+ try:
+ from simplejson import loads
+ from simplejson import dumps
+ except ImportError:
+ loads = None
+ dumps = None
+
+
+def to_bytes(value, charset='latin1'):
+ if isinstance(value, text_type):
+ return value.encode(charset)
+ return value
+
+to_string = six.u
+
+
+def join_bytes(sep, l):
+ l = [to_bytes(e) for e in l]
+ return to_bytes(sep).join(l)
+
+if PY3:
+ string_types = (str,)
from html.entities import name2codepoint
from io import StringIO
from io import BytesIO
@@ -15,40 +41,16 @@ if sys.version_info[0] > 2:
from urllib.parse import splittype
from urllib.parse import splithost
import urllib.parse as urlparse
- from http.client import HTTPConnection
- from http.client import CannotSendRequest
- from http.server import HTTPServer
- from http.server import SimpleHTTPRequestHandler
from http.cookies import SimpleCookie, CookieError
from http.cookies import _quote as cookie_quote
- def to_bytes(s):
- if isinstance(s, bytes):
- return s
- return s.encode('latin1')
-
- def to_string(s):
- if isinstance(s, str):
- return s
- return str(s, 'latin1')
-
- def join_bytes(sep, l):
- l = [to_bytes(e) for e in l]
- return to_bytes(sep).join(l)
else:
- PY3 = False
string_types = basestring
- text_type = unicode
- binary_type = str
from htmlentitydefs import name2codepoint
from urllib import splittype
from urllib import splithost
from urllib import urlencode
- from httplib import HTTPConnection
- from httplib import CannotSendRequest
- from BaseHTTPServer import HTTPServer
- from SimpleHTTPServer import SimpleHTTPRequestHandler
from Cookie import SimpleCookie, CookieError
from Cookie import _quote as cookie_quote
try:
@@ -57,46 +59,16 @@ else:
from StringIO import StringIO
BytesIO = StringIO
import urlparse
- try:
- from json import loads
- from json import dumps
- except ImportError:
- try:
- from simplejson import loads
- from simplejson import dumps
- except ImportError:
- loads = None
- dumps = None
-
- def to_bytes(s):
- return str(s)
-
- def to_string(s):
- return str(s)
-
- def join_bytes(sep, l):
- l = [e for e in l]
- return sep.join(l)
def print_stderr(value):
- if PY3:
- exec('print(value, file=sys.stderr)')
- else:
+ if not PY3:
if isinstance(value, text_type):
- # not really clean but this must *never* fail
try:
- value = value.encode('utf-8')
+ value = value.encode('utf8')
except:
value = repr(value)
- sys.stderr.write(value)
-
-try:
- next = next
-except NameError:
- # python < 2.6
- def next(iterator):
- return iterator.next()
+ six.print_(value, file=sys.stderr)
try:
from collections import OrderedDict