summaryrefslogtreecommitdiff
path: root/wsgitools/filters.py
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2009-03-29 17:42:48 +0200
committerHelmut Grohne <helmut@subdivi.de>2009-03-29 17:42:48 +0200
commit5c0a3965cdb9cac87d0b0ea773a6276c73a27ba6 (patch)
tree56619fbd0631ae08e01adca15e2994c689dfe8b4 /wsgitools/filters.py
parentac99754f5e68f3731b7bdd7c8070c58346983bf4 (diff)
downloadwsgitools-5c0a3965cdb9cac87d0b0ea773a6276c73a27ba6.tar.gz
quite some changes for py3
These changes introduce some compatibility code. They don't make wsgitools usable with Python 3.0, but they also don't break compatibility with Python 2.5.
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