# (c) 2007 Philip Jenvey; written for Paste (http://pythonpaste.org) # Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php from nose.tools import assert_raises from paste.config import CONFIG, ConfigMiddleware from paste.fixture import TestApp import six test_key = 'test key' def reset_config(): while True: try: CONFIG._pop_object() except IndexError: break def app_with_config(environ, start_response): start_response('200 OK', [('Content-type','text/plain')]) lines = ['Variable is: %s\n' % CONFIG[test_key], 'Variable is (in environ): %s' % environ['paste.config'][test_key]] if six.PY3: lines = [line.encode('utf8') for line in lines] return lines class NestingAppWithConfig(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): response = self.app(environ, start_response) assert isinstance(response, list) supplement = ['Nesting variable is: %s' % CONFIG[test_key], 'Nesting variable is (in environ): %s' % \ environ['paste.config'][test_key]] if six.PY3: supplement = [line.encode('utf8') for line in supplement] response.extend(supplement) return response def test_request_config(): try: config = {test_key: 'test value'} app = ConfigMiddleware(app_with_config, config) res = TestApp(app).get('/') assert 'Variable is: test value' in res assert 'Variable is (in environ): test value' in res finally: reset_config() def test_request_config_multi(): try: config = {test_key: 'test value'} app = ConfigMiddleware(app_with_config, config) config = {test_key: 'nesting value'} app = ConfigMiddleware(NestingAppWithConfig(app), config) res = TestApp(app).get('/') assert 'Variable is: test value' in res assert 'Variable is (in environ): test value' in res assert 'Nesting variable is: nesting value' in res print(res) assert 'Nesting variable is (in environ): nesting value' in res finally: reset_config() def test_process_config(request_app=test_request_config): try: process_config = {test_key: 'bar', 'process_var': 'foo'} CONFIG.push_process_config(process_config) assert CONFIG[test_key] == 'bar' assert CONFIG['process_var'] == 'foo' request_app() assert CONFIG[test_key] == 'bar' assert CONFIG['process_var'] == 'foo' CONFIG.pop_process_config() assert_raises(AttributeError, lambda: 'process_var' not in CONFIG) assert_raises(IndexError, CONFIG.pop_process_config) finally: reset_config() def test_process_config_multi(): test_process_config(test_request_config_multi)