added tests and small fixes for config

This commit is contained in:
Tim Mundt 2016-12-16 18:46:07 +01:00
parent 04798cbf5b
commit a550b5c112
2 changed files with 81 additions and 2 deletions

View File

@ -4,7 +4,7 @@ import types
class Config(dict): class Config(dict):
def __init__(self, defaults=None): def __init__(self, defaults=None):
dict.__init__(self, defaults or {}) super().__init__(defaults or {})
self.LOGO = """ self.LOGO = """
_______________ _______________
@ -31,7 +31,10 @@ class Config(dict):
self.ROUTER_CACHE_SIZE = 1024 self.ROUTER_CACHE_SIZE = 1024
def __getattr__(self, attr): def __getattr__(self, attr):
return self[attr] try:
return self[attr]
except KeyError as ke:
raise AttributeError("Config has no '{}'".format(ke.args[0]))
def __setattr__(self, attr, value): def __setattr__(self, attr, value):
self[attr] = value self[attr] = value

76
tests/test_config.py Normal file
View File

@ -0,0 +1,76 @@
from os import environ
import pytest
from tempfile import NamedTemporaryFile
from sanic import Sanic
def test_load_from_object():
app = Sanic('test_load_from_object')
class Config:
not_for_config = 'should not be used'
CONFIG_VALUE = 'should be used'
app.config.from_object(Config)
assert 'CONFIG_VALUE' in app.config
assert app.config.CONFIG_VALUE == 'should be used'
assert 'not_for_config' not in app.config
def test_load_from_file():
app = Sanic('test_load_from_file')
config = b"""
VALUE = 'some value'
condition = 1 == 1
if condition:
CONDITIONAL = 'should be set'
"""
with NamedTemporaryFile() as config_file:
config_file.write(config)
config_file.seek(0)
app.config.from_pyfile(config_file.name)
assert 'VALUE' in app.config
assert app.config.VALUE == 'some value'
assert 'CONDITIONAL' in app.config
assert app.config.CONDITIONAL == 'should be set'
assert 'condition' not in app.config
def test_load_from_missing_file():
app = Sanic('test_load_from_missing_file')
with pytest.raises(IOError):
app.config.from_pyfile('non-existent file')
def test_load_from_envvar():
app = Sanic('test_load_from_envvar')
config = b"VALUE = 'some value'"
with NamedTemporaryFile() as config_file:
config_file.write(config)
config_file.seek(0)
environ['APP_CONFIG'] = config_file.name
app.config.from_envvar('APP_CONFIG')
assert 'VALUE' in app.config
assert app.config.VALUE == 'some value'
def test_load_from_missing_envvar():
app = Sanic('test_load_from_missing_envvar')
with pytest.raises(RuntimeError):
app.config.from_envvar('non-existent variable')
def test_overwrite_exisiting_config():
app = Sanic('test_overwrite_exisiting_config')
app.config.DEFAULT = 1
class Config:
DEFAULT = 2
app.config.from_object(Config)
assert app.config.DEFAULT == 2
def test_missing_config():
app = Sanic('test_missing_config')
with pytest.raises(AttributeError):
app.config.NON_EXISTENT