diff options
author | Ian Bicking <ian@ianbicking.org> | 2005-08-22 21:25:25 +0000 |
---|---|---|
committer | Ian Bicking <ian@ianbicking.org> | 2005-08-22 21:25:25 +0000 |
commit | 5430301738f4acd92e77a0f5a49ec9e7cdd97744 (patch) | |
tree | 67b5204b9a03e2997c810fe3a7a096e0fd09a804 | |
parent | 9eda7b8dd739a698e7db1448315d32436b8e5041 (diff) | |
download | paste-git-5430301738f4acd92e77a0f5a49ec9e7cdd97744.tar.gz |
paste.deployified cascade
-rw-r--r-- | paste/cascade.py | 27 | ||||
-rw-r--r-- | setup.py | 1 |
2 files changed, 28 insertions, 0 deletions
diff --git a/paste/cascade.py b/paste/cascade.py index 300d787..ad3a36b 100644 --- a/paste/cascade.py +++ b/paste/cascade.py @@ -3,9 +3,36 @@ Cascades through several applications, so long as applications return ``404 Not Found``. """ import httpexceptions +from paste.deploy import converters __all__ = ['Cascade'] +def make_cascade(loader, global_conf, catch='404', **local_conf): + """ + Expects configuration like: + + [composit:cascade] + use = egg:Paste#cascade + # all start with 'app' and are sorted alphabetically + app1 = foo + app2 = bar + ... + catch = 404 500 ... + """ + catch = map(int, converters.aslist(catch)) + apps = [] + for name, value in local_conf.items(): + if not name.startswith('app'): + raise ValueError( + "Bad configuration key %r (=%r); all configuration keys " + "must start with 'app'" + % (name, value)) + app = loader.get_app(value, global_conf=global_conf) + apps.append((name, app)) + apps.sort() + apps = [app for name, app in apps] + return Cascade(apps, catch=catch) + class Cascade(object): """ @@ -50,6 +50,7 @@ functionality. """, 'paste.composit_factory1': """ urlmap=paste.urlmap:urlmap_factory + cascade=paste.cascade:make_cascade """, 'paste.filter_app_factory1': """ error_catcher=paste.exceptions.errormiddleware:ErrorMiddleware |