added tests and small fixes for config
This commit is contained in:
parent
04798cbf5b
commit
a550b5c112
|
@ -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
76
tests/test_config.py
Normal 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
|
Loading…
Reference in New Issue
Block a user