1b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# (c) 2007 Philip Jenvey; written for Paste (http://pythonpaste.org) 2b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php 3b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfrom nose.tools import assert_raises 4b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfrom paste.config import CONFIG, ConfigMiddleware 5b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikfrom paste.fixture import TestApp 6b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikimport six 7b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 8b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craiktest_key = 'test key' 9b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 10b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef reset_config(): 11b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik while True: 12b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 13b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik CONFIG._pop_object() 14b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik except IndexError: 15b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik break 16b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 17b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef app_with_config(environ, start_response): 18b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik start_response('200 OK', [('Content-type','text/plain')]) 19b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik lines = ['Variable is: %s\n' % CONFIG[test_key], 20b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'Variable is (in environ): %s' % environ['paste.config'][test_key]] 21b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if six.PY3: 22b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik lines = [line.encode('utf8') for line in lines] 23b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return lines 24b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 25b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikclass NestingAppWithConfig(object): 26b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __init__(self, app): 27b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik self.app = app 28b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 29b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik def __call__(self, environ, start_response): 30b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik response = self.app(environ, start_response) 31b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert isinstance(response, list) 32b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik supplement = ['Nesting variable is: %s' % CONFIG[test_key], 33b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 'Nesting variable is (in environ): %s' % \ 34b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik environ['paste.config'][test_key]] 35b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik if six.PY3: 36b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik supplement = [line.encode('utf8') for line in supplement] 37b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik response.extend(supplement) 38b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik return response 39b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 40b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef test_request_config(): 41b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 42b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik config = {test_key: 'test value'} 43b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik app = ConfigMiddleware(app_with_config, config) 44b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik res = TestApp(app).get('/') 45b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert 'Variable is: test value' in res 46b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert 'Variable is (in environ): test value' in res 47b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik finally: 48b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik reset_config() 49b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 50b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef test_request_config_multi(): 51b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 52b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik config = {test_key: 'test value'} 53b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik app = ConfigMiddleware(app_with_config, config) 54b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik config = {test_key: 'nesting value'} 55b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik app = ConfigMiddleware(NestingAppWithConfig(app), config) 56b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik res = TestApp(app).get('/') 57b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert 'Variable is: test value' in res 58b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert 'Variable is (in environ): test value' in res 59b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert 'Nesting variable is: nesting value' in res 60b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik print(res) 61b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert 'Nesting variable is (in environ): nesting value' in res 62b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik finally: 63b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik reset_config() 64b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 65b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef test_process_config(request_app=test_request_config): 66b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik try: 67b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik process_config = {test_key: 'bar', 'process_var': 'foo'} 68b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik CONFIG.push_process_config(process_config) 69b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 70b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert CONFIG[test_key] == 'bar' 71b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert CONFIG['process_var'] == 'foo' 72b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 73b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik request_app() 74b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 75b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert CONFIG[test_key] == 'bar' 76b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert CONFIG['process_var'] == 'foo' 77b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik CONFIG.pop_process_config() 78b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 79b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert_raises(AttributeError, lambda: 'process_var' not in CONFIG) 80b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik assert_raises(IndexError, CONFIG.pop_process_config) 81b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik finally: 82b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik reset_config() 83b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik 84b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craikdef test_process_config_multi(): 85b2cbf1594f8d6e4ba32d384cf379f62a74ed7654Chris Craik test_process_config(test_request_config_multi) 86