summaryrefslogtreecommitdiff
path: root/repoze/bfg/router.py
blob: 68e85d50c42fc79d46d1fe96e720325cbad0cb90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from zope.component import getAdapter
from repoze.bfg.interfaces import IWSGIApplication

class Router:
    def __init__(self, app, root_policy, traversal_policy):
        self.app = app
        self.root_policy = root_policy
        self.traversal_policy = traversal_policy

    def __call__(self, environ, start_response):
        root = self.root_policy(environ)
        context, name, subpath = self.traversal_policy(root, environ)
        app = getAdapter(context, IWSGIApplication, name)
        environ['repoze.bfg.context'] = context
        environ['repoze.bfg.subpath'] = subpath
        return app(environ, start_response)