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 <BLANKLINE> 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 <BLANKLINE> 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 <BLANKLINE> 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 <BLANKLINE> 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 <BLANKLINE> hey >>> print Request.blank('/500').get_response(app) 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 6 <BLANKLINE> error! >>> print Request.blank('/404').get_response(app) 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 7 <BLANKLINE> nothing