276 lines
9.2 KiB
Python
276 lines
9.2 KiB
Python
import os
|
|
import sys
|
|
from unittest import TestCase
|
|
|
|
__here__ = os.path.dirname(__file__)
|
|
|
|
|
|
class TestConf(TestCase):
|
|
|
|
def test_update_config_fail_identifier(self):
|
|
"""Fail when naming does not pass correctness"""
|
|
from pecan import configuration
|
|
bad_dict = {'bad name': 'value'}
|
|
self.assertRaises(ValueError, configuration.Config, bad_dict)
|
|
|
|
def test_update_set_config(self):
|
|
"""Update an empty configuration with the default values"""
|
|
from pecan import configuration
|
|
|
|
conf = configuration.initconf()
|
|
conf.update(configuration.conf_from_file(os.path.join(
|
|
__here__,
|
|
'test_config/config.py'
|
|
)))
|
|
|
|
self.assertEqual(conf.app.root, None)
|
|
self.assertEqual(conf.app.template_path, 'myproject/templates')
|
|
self.assertEqual(conf.app.static_root, 'public')
|
|
|
|
self.assertEqual(conf.server.host, '1.1.1.1')
|
|
self.assertEqual(conf.server.port, '8081')
|
|
|
|
def test_update_set_default_config(self):
|
|
"""Update an empty configuration with the default values"""
|
|
from pecan import configuration
|
|
|
|
conf = configuration.initconf()
|
|
conf.update(configuration.conf_from_file(os.path.join(
|
|
__here__,
|
|
'test_config/empty.py'
|
|
)))
|
|
|
|
self.assertEqual(conf.app.root, None)
|
|
self.assertEqual(conf.app.template_path, '')
|
|
self.assertEqual(conf.app.static_root, 'public')
|
|
|
|
self.assertEqual(conf.server.host, '0.0.0.0')
|
|
self.assertEqual(conf.server.port, '8080')
|
|
|
|
def test_update_force_dict(self):
|
|
"""Update an empty configuration with the default values"""
|
|
from pecan import configuration
|
|
conf = configuration.initconf()
|
|
conf.update(configuration.conf_from_file(os.path.join(
|
|
__here__,
|
|
'test_config/forcedict.py'
|
|
)))
|
|
|
|
self.assertEqual(conf.app.root, None)
|
|
self.assertEqual(conf.app.template_path, '')
|
|
self.assertEqual(conf.app.static_root, 'public')
|
|
|
|
self.assertEqual(conf.server.host, '0.0.0.0')
|
|
self.assertEqual(conf.server.port, '8080')
|
|
|
|
self.assertTrue(isinstance(conf.beaker, dict))
|
|
self.assertEqual(conf.beaker['session.key'], 'key')
|
|
self.assertEqual(conf.beaker['session.type'], 'cookie')
|
|
self.assertEqual(
|
|
conf.beaker['session.validate_key'],
|
|
'1a971a7df182df3e1dec0af7c6913ec7'
|
|
)
|
|
self.assertEqual(conf.beaker.get('__force_dict__'), None)
|
|
|
|
def test_update_config_with_dict(self):
|
|
from pecan import configuration
|
|
conf = configuration.initconf()
|
|
d = {'attr': True}
|
|
conf['attr'] = d
|
|
self.assertTrue(conf.attr.attr)
|
|
|
|
def test_config_repr(self):
|
|
from pecan import configuration
|
|
conf = configuration.Config({'a': 1})
|
|
self.assertEqual(repr(conf), "Config({'a': 1})")
|
|
|
|
def test_config_from_dict(self):
|
|
from pecan import configuration
|
|
conf = configuration.conf_from_dict({})
|
|
conf['path'] = '%(confdir)s'
|
|
self.assertTrue(os.path.samefile(conf['path'], os.getcwd()))
|
|
|
|
def test_config_from_file(self):
|
|
from pecan import configuration
|
|
path = os.path.join(
|
|
os.path.dirname(__file__), 'test_config', 'config.py'
|
|
)
|
|
conf = configuration.conf_from_file(path)
|
|
|
|
def test_config_illegal_ids(self):
|
|
from pecan import configuration
|
|
conf = configuration.Config({})
|
|
conf.update(configuration.conf_from_file(os.path.join(
|
|
__here__,
|
|
'test_config/bad/module_and_underscore.py'
|
|
)))
|
|
self.assertEqual([], list(conf))
|
|
|
|
def test_config_missing_file(self):
|
|
from pecan import configuration
|
|
path = ('doesnotexist.py',)
|
|
configuration.Config({})
|
|
self.assertRaises(IOError, configuration.conf_from_file, os.path.join(
|
|
__here__,
|
|
'test_config',
|
|
*path
|
|
))
|
|
|
|
def test_config_missing_file_on_path(self):
|
|
from pecan import configuration
|
|
path = ('bad', 'bad', 'doesnotexist.py',)
|
|
configuration.Config({})
|
|
|
|
self.assertRaises(IOError, configuration.conf_from_file, os.path.join(
|
|
__here__,
|
|
'test_config',
|
|
*path
|
|
))
|
|
|
|
def test_config_with_syntax_error(self):
|
|
from pecan import configuration
|
|
path = ('bad', 'syntaxerror.py')
|
|
configuration.Config({})
|
|
|
|
self.assertRaises(
|
|
SyntaxError,
|
|
configuration.conf_from_file,
|
|
os.path.join(__here__, 'test_config', *path)
|
|
)
|
|
|
|
def test_config_with_bad_import(self):
|
|
from pecan import configuration
|
|
path = ('bad', 'importerror.py')
|
|
configuration.Config({})
|
|
|
|
self.assertRaises(
|
|
ImportError,
|
|
configuration.conf_from_file,
|
|
os.path.join(
|
|
__here__,
|
|
'test_config',
|
|
*path
|
|
)
|
|
)
|
|
|
|
def test_config_dir(self):
|
|
from pecan import configuration
|
|
if sys.version_info >= (2, 6):
|
|
conf = configuration.Config({})
|
|
self.assertEqual([], dir(conf))
|
|
conf = configuration.Config({'a': 1})
|
|
self.assertEqual(['a'], dir(conf))
|
|
|
|
def test_config_bad_key(self):
|
|
from pecan import configuration
|
|
conf = configuration.Config({'a': 1})
|
|
assert conf.a == 1
|
|
self.assertRaises(AttributeError, getattr, conf, 'b')
|
|
|
|
def test_config_get_valid_key(self):
|
|
from pecan import configuration
|
|
conf = configuration.Config({'a': 1})
|
|
assert conf.get('a') == 1
|
|
|
|
def test_config_get_invalid_key(self):
|
|
from pecan import configuration
|
|
conf = configuration.Config({'a': 1})
|
|
assert conf.get('b') is None
|
|
|
|
def test_config_get_invalid_key_return_default(self):
|
|
from pecan import configuration
|
|
conf = configuration.Config({'a': 1})
|
|
assert conf.get('b', True) is True
|
|
|
|
def test_config_as_dict(self):
|
|
from pecan import configuration
|
|
conf = configuration.initconf()
|
|
|
|
assert isinstance(conf, configuration.Config)
|
|
|
|
as_dict = conf.as_dict()
|
|
|
|
assert isinstance(as_dict, dict)
|
|
assert as_dict['server']['host'] == '0.0.0.0'
|
|
assert as_dict['server']['port'] == '8080'
|
|
assert as_dict['app']['modules'] == []
|
|
assert as_dict['app']['root'] == None
|
|
assert as_dict['app']['static_root'] == 'public'
|
|
assert as_dict['app']['template_path'] == ''
|
|
|
|
def test_config_as_dict_nested(self):
|
|
from pecan import configuration
|
|
"""have more than one level nesting and convert to dict"""
|
|
conf = configuration.initconf()
|
|
nested = {'one': {'two': 2}}
|
|
conf['nested'] = nested
|
|
|
|
as_dict = conf.as_dict()
|
|
|
|
assert isinstance(as_dict, dict)
|
|
assert as_dict['server']['host'] == '0.0.0.0'
|
|
assert as_dict['server']['port'] == '8080'
|
|
assert as_dict['app']['modules'] == []
|
|
assert as_dict['app']['root'] == None
|
|
assert as_dict['app']['static_root'] == 'public'
|
|
assert as_dict['app']['template_path'] == ''
|
|
assert as_dict['nested']['one']['two'] == 2
|
|
|
|
def test_config_as_dict_prefixed(self):
|
|
from pecan import configuration
|
|
"""Add a prefix for keys"""
|
|
conf = configuration.initconf()
|
|
|
|
assert isinstance(conf, configuration.Config)
|
|
|
|
as_dict = conf.as_dict('prefix_')
|
|
|
|
assert isinstance(as_dict, dict)
|
|
assert as_dict['prefix_server']['prefix_host'] == '0.0.0.0'
|
|
assert as_dict['prefix_server']['prefix_port'] == '8080'
|
|
assert as_dict['prefix_app']['prefix_modules'] == []
|
|
assert as_dict['prefix_app']['prefix_root'] == None
|
|
assert as_dict['prefix_app']['prefix_static_root'] == 'public'
|
|
assert as_dict['prefix_app']['prefix_template_path'] == ''
|
|
|
|
|
|
class TestGlobalConfig(TestCase):
|
|
|
|
def tearDown(self):
|
|
from pecan import configuration
|
|
configuration.set_config(dict(configuration.initconf()), overwrite=True)
|
|
|
|
def test_paint_from_dict(self):
|
|
from pecan import configuration
|
|
configuration.set_config({'foo': 'bar'})
|
|
assert dict(configuration._runtime_conf) != {'foo': 'bar'}
|
|
self.assertEqual(configuration._runtime_conf.foo, 'bar')
|
|
|
|
def test_overwrite_from_dict(self):
|
|
from pecan import configuration
|
|
configuration.set_config({'foo': 'bar'}, overwrite=True)
|
|
assert dict(configuration._runtime_conf) == {'foo': 'bar'}
|
|
|
|
def test_paint_from_file(self):
|
|
from pecan import configuration
|
|
configuration.set_config(os.path.join(
|
|
__here__,
|
|
'test_config/foobar.py'
|
|
))
|
|
assert dict(configuration._runtime_conf) != {'foo': 'bar'}
|
|
assert configuration._runtime_conf.foo == 'bar'
|
|
|
|
def test_overwrite_from_file(self):
|
|
from pecan import configuration
|
|
configuration.set_config(os.path.join(
|
|
__here__,
|
|
'test_config/foobar.py',
|
|
),
|
|
overwrite=True
|
|
)
|
|
assert dict(configuration._runtime_conf) == {'foo': 'bar'}
|
|
|
|
def test_set_config_invalid_type(self):
|
|
from pecan import configuration
|
|
self.assertRaises(TypeError, configuration.set_config, None)
|