In an effort to quell a warning from wsgiref's validator, QUERY_STRING will now default to an empty string if it doesn't exist in the environ. Despite not being required to always be present by the WSGI spec, it looks like the cgi module will assume sys.argv is the query string if QUERY_STRING isn't present in the environ.
Also, I changed the keyword parameters in GzipMiddleware a bit:
mimeTypes -> mime_types
compresslevel -> compress_level
Lastly, unless I hear from people otherwise, I will be removing flup.publisher and flup.resolver from flup.
And as far as flup.middleware goes, ErrorMiddleware will be disappearing as well. There are better options from Paste, especially paste.evalexception for development. GzipMiddleware and SessionMiddleware are now currently looking for a new home, as I would like to remove them from flup eventually too.
Paste has a gzipping middleware too. I don't know what more flup's does, though it has more code, so it does do more. If you think it has extra features, it could potentially move to Paste and replace the implementation currently there.
It seems like Luke Arno uses your session middleware in his stuff, he might be willing to take it on as a separate package.
Paradoxically, flup's gzip middleware has far more code so it can do less -- namely not buffer the output. The WSGI spec calls for wrapped iterators to yield at least 1 string whenever the underlying iterator yields a string (i.e. no buffering). In practice, though, I don't know how much it matters.
Feature-wise, flup's and Paste's implementations are pretty much the same. Paste's version, however, doesn't work with generators... probably a consequence of buffering? But I'm just not comfortable with the complexity of flup's middleware. Surely it will need more testing.