diff options
author | Helmut Grohne <helmut@subdivi.de> | 2009-03-29 17:42:48 +0200 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2009-03-29 17:42:48 +0200 |
commit | 5c0a3965cdb9cac87d0b0ea773a6276c73a27ba6 (patch) | |
tree | 56619fbd0631ae08e01adca15e2994c689dfe8b4 /wsgitools/filters.py | |
parent | ac99754f5e68f3731b7bdd7c8070c58346983bf4 (diff) | |
download | wsgitools-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.py | 34 |
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 |