A test of the decorator module:

>>> from doctest import ELLIPSIS
>>> from webob.dec import wsgify
>>> from webob import Response, Request
>>> from webob import exc
>>> @wsgify
... def test_app(req):
...     return 'hey, this is a test: %s' % req.url
>>> def testit(app, req):
...     if isinstance(req, basestring):
...         req = Request.blank(req)
...     resp = req.get_response(app)
...     print resp
>>> testit(test_app, '/a url')
200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 45

hey, this is a test: http://localhost/a%20url
>>> test_app
wsgify(test_app)

Now some middleware testing:

>>> @wsgify.middleware
... def set_urlvar(req, app, **vars):
...     req.urlvars.update(vars)
...     return app(req)
>>> @wsgify
... def show_vars(req):
...     return 'These are the vars: %r' % (sorted(req.urlvars.items()))
>>> show_vars2 = set_urlvar(show_vars, a=1, b=2)
>>> show_vars2
wsgify.middleware(set_urlvar)(wsgify(show_vars), a=1, b=2)
>>> testit(show_vars2, '/path')
200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 40

These are the vars: [('a', 1), ('b', 2)]

Some examples from Sergey:

>>> class HostMap(dict):
...     @wsgify
...     def __call__(self, req):
...         return self[req.host.split(':')[0]]
>>> app = HostMap()
>>> app['example.com'] = Response('1')
>>> app['other.com'] = Response('2')
>>> print Request.blank('http://example.com/').get_response(wsgify(app))
200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1

1

>>> @wsgify.middleware
... def override_https(req, normal_app, secure_app):
...     if req.scheme == 'https':
...         return secure_app
...     else:
...         return normal_app
>>> app = override_https(Response('http'), secure_app=Response('https'))
>>> print Request.blank('http://x.com/').get_response(app)
200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 4

http

A status checking middleware:

>>> @wsgify.middleware
... def catch(req, app, catchers):
...     resp = req.get_response(app)
...     return catchers.get(resp.status_int, resp)
>>> @wsgify
... def simple(req):
...     return other_app # Just to mess around
>>> @wsgify
... def other_app(req):
...     return Response('hey', status_int=int(req.path_info.strip('/')))
>>> app = catch(simple, catchers={500: Response('error!'), 404: Response('nothing')})
>>> print Request.blank('/200').get_response(app)
200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 3

hey
>>> print Request.blank('/500').get_response(app)
200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 6

error!
>>> print Request.blank('/404').get_response(app)
200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 7

nothing