blob: bf4768a6d2a0a5afdf6f4a354db9d89bb9bb317c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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):
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
|