diff options
author | ianb <devnull@localhost> | 2005-08-22 21:25:25 +0000 |
---|---|---|
committer | ianb <devnull@localhost> | 2005-08-22 21:25:25 +0000 |
commit | 9aab8336ba20636672d902dd33dbed62793eba2f (patch) | |
tree | 67b5204b9a03e2997c810fe3a7a096e0fd09a804 /paste/cascade.py | |
parent | 6d073dd0881252839b3d4730e857f7d1e24c97de (diff) | |
download | paste-9aab8336ba20636672d902dd33dbed62793eba2f.tar.gz |
paste.deployified cascade
Diffstat (limited to 'paste/cascade.py')
-rw-r--r-- | paste/cascade.py | 27 |
1 files changed, 27 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): """ |