summaryrefslogtreecommitdiff
path: root/paste
diff options
context:
space:
mode:
Diffstat (limited to 'paste')
-rw-r--r--paste/exceptions/collector.py2
-rw-r--r--paste/exceptions/formatter.py4
-rw-r--r--paste/fixture.py4
-rw-r--r--paste/request.py11
-rw-r--r--paste/util/template.py11
-rw-r--r--paste/wsgilib.py4
-rw-r--r--paste/wsgiwrappers.py3
7 files changed, 23 insertions, 16 deletions
diff --git a/paste/exceptions/collector.py b/paste/exceptions/collector.py
index 8867bf7..632ce06 100644
--- a/paste/exceptions/collector.py
+++ b/paste/exceptions/collector.py
@@ -266,7 +266,7 @@ class ExceptionCollector(object):
name = co.co_name
globals = f.f_globals
locals = f.f_locals
- if not hasattr(locals, 'has_key'):
+ if not hasattr(locals, 'keys'):
# Something weird about this frame; it's not a real dict
warnings.warn(
"Frame %s has an invalid locals(): %r" % (
diff --git a/paste/exceptions/formatter.py b/paste/exceptions/formatter.py
index c83ab50..09309de 100644
--- a/paste/exceptions/formatter.py
+++ b/paste/exceptions/formatter.py
@@ -217,7 +217,7 @@ class TextFormatter(AbstractFormatter):
elif isinstance(value, dict):
lines = ['\n', title, '-'*len(title)]
items = value.items()
- items.sort()
+ items = sorted(items)
for n, v in items:
try:
v = repr(v)
@@ -303,7 +303,7 @@ class HTMLFormatter(TextFormatter):
def zebra_table(self, title, rows, table_class="variables"):
if isinstance(rows, dict):
rows = rows.items()
- rows.sort()
+ rows = sorted(rows)
table = ['<table class="%s">' % table_class,
'<tr class="header"><th colspan="2">%s</th></tr>'
% self.quote(title)]
diff --git a/paste/fixture.py b/paste/fixture.py
index df1c75d..363f119 100644
--- a/paste/fixture.py
+++ b/paste/fixture.py
@@ -226,8 +226,8 @@ class TestApp(object):
if hasattr(params, 'items'):
# Some other multi-dict like format
params = urlencode(params.items())
- if six.PY3:
- params = params.encode('utf8')
+ if six.PY3 and isinstance(params, six.text_type):
+ params = params.encode('utf8')
if upload_files:
params = urlparse.parse_qsl(params, keep_blank_values=True)
content_type, params = self.encode_multipart(
diff --git a/paste/request.py b/paste/request.py
index f0d91c1..8d5e5c3 100644
--- a/paste/request.py
+++ b/paste/request.py
@@ -140,7 +140,7 @@ def parse_dict_querystring(environ):
environ['paste.parsed_dict_querystring'] = (multi, source)
return multi
-def parse_formvars(environ, include_get_vars=True):
+def parse_formvars(environ, include_get_vars=True, encoding=None, errors=None):
"""Parses the request, returning a MultiDict of form variables.
If ``include_get_vars`` is true then GET (query string) variables
@@ -182,9 +182,16 @@ def parse_formvars(environ, include_get_vars=True):
environ['CONTENT_TYPE'] = ''
else:
input = environ['wsgi.input']
+ kwparms = {}
+ if six.PY3:
+ if encoding:
+ kwparms['encoding'] = encoding
+ if errors:
+ kwparms['errors'] = errors
fs = cgi.FieldStorage(fp=input,
environ=environ,
- keep_blank_values=1)
+ keep_blank_values=1,
+ **kwparms)
environ['QUERY_STRING'] = old_query_string
if fake_out_cgi:
environ['CONTENT_TYPE'] = old_content_type
diff --git a/paste/util/template.py b/paste/util/template.py
index f0826af..5a63664 100644
--- a/paste/util/template.py
+++ b/paste/util/template.py
@@ -318,28 +318,27 @@ def html_quote(value):
if value is None:
return ''
if not isinstance(value, six.string_types):
- if hasattr(value, '__unicode__'):
+ if six.PY2 and hasattr(value, '__unicode__'):
value = unicode(value)
else:
value = str(value)
value = cgi.escape(value, 1)
- if isinstance(value, unicode):
+ if six.PY2 and isinstance(value, unicode):
value = value.encode('ascii', 'xmlcharrefreplace')
return value
def url(v):
if not isinstance(v, six.string_types):
- if hasattr(v, '__unicode__'):
+ if six.PY2 and hasattr(v, '__unicode__'):
v = unicode(v)
else:
v = str(v)
- if isinstance(v, unicode):
+ if six.PY2 and isinstance(v, unicode):
v = v.encode('utf8')
return quote(v)
def attr(**kw):
- kw = kw.items()
- kw.sort()
+ kw = sorted(kw.items())
parts = []
for name, value in kw:
if value is None:
diff --git a/paste/wsgilib.py b/paste/wsgilib.py
index 116f47b..772e090 100644
--- a/paste/wsgilib.py
+++ b/paste/wsgilib.py
@@ -47,8 +47,8 @@ class add_close(object):
return self.app_iter.next()
# Python 3 uses __next__ instead of next
- def __next__(self):
- return bytes(next(self.app_iter), encoding='ascii')
+ # def __next__(self):
+ # return bytes(next(self.app_iter), encoding='ascii')
def close(self):
self._closed = True
diff --git a/paste/wsgiwrappers.py b/paste/wsgiwrappers.py
index 7b8f6de..674054f 100644
--- a/paste/wsgiwrappers.py
+++ b/paste/wsgiwrappers.py
@@ -199,7 +199,8 @@ class WSGIRequest(object):
GET = property(GET, doc=GET.__doc__)
def _POST(self):
- return parse_formvars(self.environ, include_get_vars=False)
+ return parse_formvars(self.environ, include_get_vars=False,
+ encoding=self.charset, errors=self.errors)
def POST(self):
"""Dictionary-like object representing the POST body.