Source code for ferris.core.settings
from webapp2 import get_request
from . import events
_defaults = {}
class ConfigurationError(Exception):
pass
def defaults(dict=None):
[docs] """
Adds a set of default values to the settings registry. These can and will be updated
by any settings modules in effect, such as the Settings Manager.
If dict is None, it'll return the current defaults.
"""
if dict:
_defaults.update(dict)
else:
return _defaults
def settings():
[docs] """
Returns the entire settings registry
"""
# Check local request storage for the completed settings registry
try:
request = get_request()
except AssertionError:
request = None
if request and 'ferris-settings' in request.registry:
return request.registry['ferris-settings']
# If it's not there, do the normal thing
settings = {}
settings.update(_defaults)
events.fire('build_settings', settings=settings)
# Try to store it back in the request
if request:
request.registry['ferris-settings'] = settings
return settings
def get(key, default=None):
[docs] """
Returns the setting at key, if available, raises an ConfigurationError if default is none, otherwise
returns the default
"""
_settings = settings()
if not key in _settings:
if default is None:
raise ConfigurationError("Missing setting %s" % key)
else:
return default
return _settings[key]