view wsgintegrate/dispatcher.py @ 15:1a7bbd97dda4

work around a horrible downstream issue
author Jeff Hammel <jhammel@mozilla.com>
date Thu, 17 Nov 2011 11:49:41 -0800
parents e07b0f675c17
children d742aff49859
line wrap: on
line source

"""
multi-application dispatcher for WSGI apps
"""

from webob import Request
from webob import exc

class Dispatcher(object):

    def __init__(self, *apps):
        self.apps = apps
        self.codes = set([404])

    def __call__(self, environ, start_response):
        request = Request(environ)
        for app in self.apps:
            try:
                response = request.get_response(app)
                if response.status_int in self.codes:
                    continue
                break
            except exc.HTTPNotFound:
                continue
            except:
                print app
                raise
        else:
            response = exc.HTTPNotFound()
        try:
            return response(environ, start_response)
        except:
            response.headerlist = [(i,str(j)) for i, j in response.headerlist]
            return response(environ, start_response)