From 09e95fe6fa6791a2b85d1c39277127778cfb1be6 Mon Sep 17 00:00:00 2001 From: ianb Date: Wed, 4 May 2005 00:04:41 +0000 Subject: Added a globally accessible, threadsafe configuration object (paste.CONFIG) --- paste/configmiddleware.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'paste/configmiddleware.py') diff --git a/paste/configmiddleware.py b/paste/configmiddleware.py index 20226f6..bf4768a 100644 --- a/paste/configmiddleware.py +++ b/paste/configmiddleware.py @@ -1,7 +1,29 @@ +from paste.util import threadinglocal +from paste import CONFIG +from paste import wsgilib + def config_middleware(app, config): def replacement_app(environ, start_response): - environ['paste.config'] = config.copy() - return app(environ, start_response) + conf = environ['paste.config'] = config.copy() + app_iter = None + CONFIG.push_thread_config(conf) + try: + app_iter = app(environ, start_response) + finally: + if app_iter is None: + # An error occurred... + CONFIG.pop_thread_config(conf) + if type(app_iter) in (list, tuple): + # Because it is a concrete iterator (not a generator) we + # know the configuration for this thread is no longer + # needed: + CONFIG.pop_thread_config(conf) + return app_iter + else: + def close_config(): + CONFIG.pop_thread_config(conf) + new_app_iter = wsgilib.add_close(app_iter, close_config) + return new_app_iter return replacement_app -- cgit v1.2.1