summaryrefslogtreecommitdiff
path: root/wsgitools/filters.py
diff options
context:
space:
mode:
Diffstat (limited to 'wsgitools/filters.py')
-rw-r--r--wsgitools/filters.py34
1 files changed, 22 insertions, 12 deletions
diff --git a/wsgitools/filters.py b/wsgitools/filters.py
index 5821c00..5b97e27 100644
--- a/wsgitools/filters.py
+++ b/wsgitools/filters.py
@@ -11,9 +11,18 @@ import sys
import time
import gzip
try:
- import cStringIO as StringIO
-except ImportError:
- import StringIO
+ import io
+except NameError:
+ try:
+ import cStringIO as io
+ except ImportError:
+ import StringIO as io
+
+try:
+ next
+except NameError:
+ def next(it):
+ return it.next()
__all__.append("CloseableIterator")
class CloseableIterator:
@@ -26,7 +35,7 @@ class CloseableIterator:
"""
if close_function is not None:
self.close = close_function
- self.iterators = map(iter, iterators)
+ self.iterators = list(map(iter, iterators))
def __iter__(self):
"""iterator interface
@rtype: gen()
@@ -37,10 +46,10 @@ class CloseableIterator:
if not self.iterators:
raise StopIteration
try:
- return self.iterators[0].next()
+ return next(self.iterators[0])
except StopIteration:
self.iterators.pop(0)
- return self.next()
+ return next(self)
__all__.append("CloseableList")
class CloseableList(list):
@@ -165,7 +174,7 @@ class WSGIFilterMiddleware:
exc_info = reqfilter.filter_exc_info(exc_info)
status = reqfilter.filter_status(status)
headers = (reqfilter.filter_header(h, v) for h, v in headers)
- headers = filter(None, headers)
+ headers = [h for h in headers if h]
headers = reqfilter.filter_headers(headers)
write = start_response(status, headers, exc_info)
def modified_write(data):
@@ -180,7 +189,8 @@ class WSGIFilterMiddleware:
getattr(ret, "close", lambda:0)()
if isinstance(ret, list):
- return CloseableList(modified_close, map(reqfilter.filter_data, ret)
+ return CloseableList(modified_close,
+ list(map(reqfilter.filter_data, ret))
+ list(reqfilter.append_data()))
ret = iter(ret)
def late_append_data():
@@ -257,7 +267,7 @@ class RequestLogWSGIFilter(BaseWSGIFilter):
line = '%s "%s"' % (line, self.useragent)
else:
line += " -"
- print >> self.log, line
+ self.log.write("%s\n", line)
__all__.append("TimerWSGIFilter")
class TimerWSGIFilter(BaseWSGIFilter):
@@ -357,7 +367,7 @@ class GzipWSGIFilter(BaseWSGIFilter):
acceptenc = map(str.strip, acceptenc)
if "gzip" in acceptenc:
self.compress = True
- self.sio = StringIO.StringIO()
+ self.sio = io.StringIO()
self.gzip = gzip.GzipFile(fileobj=self.sio, mode="w")
return environ
def filter_header(self, headername, headervalue):
@@ -434,12 +444,12 @@ class ReusableWSGIInputFilter(BaseWSGIFilter):
@type environ: {str: str}
"""
- if isinstance(environ["wsgi.input"], StringIO):
+ if isinstance(environ["wsgi.input"], io.StringIO):
return environ # nothing to be done
# XXX: is this really a good idea? use with care
environ["wsgitools.oldinput"] = environ["wsgi.input"]
- data = StringIO(environ["wsgi.input"].read(self.maxrequestsize))
+ data = io.StringIO(environ["wsgi.input"].read(self.maxrequestsize))
environ["wsgi.input"] = data
return environ