53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
"""
|
|
A (contrived) example of how to use bison
|
|
"""
|
|
|
|
import bison
|
|
|
|
# the scheme for the configuration. this allows us to set defaults
|
|
# and validate configuration data
|
|
config_scheme = bison.Scheme(
|
|
bison.Option('log', default='info', choices=['debug', 'info', 'warn', 'error']),
|
|
bison.Option('port', field_type=int),
|
|
bison.DictOption('settings', scheme=bison.Scheme(
|
|
bison.DictOption('requests', scheme=bison.Scheme(
|
|
bison.Option('timeout', field_type=int)
|
|
))
|
|
)),
|
|
bison.ListOption('backends', member_scheme=bison.Scheme(
|
|
bison.Option('host', field_type=str),
|
|
bison.Option('port', field_type=int)
|
|
))
|
|
)
|
|
|
|
# create a new Bison instance to store and manage configuration data
|
|
config = bison.Bison(scheme=config_scheme)
|
|
|
|
# set the config file name to 'app' (default is 'config') and set the
|
|
# search paths to '.' and '/tmp/app/config'
|
|
config.config_name = 'app'
|
|
config.add_config_paths('.', '/tmp/app/config')
|
|
|
|
# set the environment variable prefix and enable auto-env
|
|
config.env_prefix = 'MY_APP'
|
|
config.auto_env = True
|
|
|
|
# finally, parse the config sources to build the unified configuration
|
|
config.parse()
|
|
|
|
|
|
# now, for examples sake, lets see how data can be accessed
|
|
|
|
print('Unified configuration: {}'.format(config.config))
|
|
|
|
print('Getting values:')
|
|
print('\tlog: {}'.format(config.get('log')))
|
|
print('\tport: {}'.format(config.get('port')))
|
|
print('\tsettings: {}'.format(config.get('settings')))
|
|
print('\tsettings.requests.timeout: {}'.format(config.get('settings.requests.timeout')))
|
|
|
|
print('Setting values:')
|
|
print('\tlog (pre): {}'.format(config.get('log')))
|
|
config.set('log', 'warn')
|
|
print('\tlog (post): {}'.format(config.get('log')))
|