Config Settings¶
The app uses config settings to control its behavior at runtime.
The term “config setting” may be thought of as a combination of these terms:
It really refers to the value of such a config setting, when you get right down to it. The app uses a config object to keep track of its config settings.
Reading Values via Python¶
Call the config object’s get()
method to retrieve a value based on the setting name.
Note that raw values are always strings. The config object has other methods if you want to interpret the value as a particular type:
from wuttjamaican.conf import make_config
config = make_config()
config.get('foo.bar')
config.get_int('foo.baz')
config.get_bool('foo.feature')
config.get_list('foo.words')
See WuttaConfig
for full details.
Where Values Come From¶
Config settings usually come from either a config file or a settings table. The config object is ultimately responsible for sorting out which value to return.
Technically the app may also specify some fallback/default values; for sake of this discussion we’ll treat those as if they come from config file.
All apps are expected to use config file(s), but not all will have a settings table. The config file(s) may specify whether a settings table should be used.
There are only 2 config settings which control this behavior. For a typical example which enables both:
[wutta.config]
usedb = true
preferdb = true
[wutta.db]
default.url = sqlite://
Note that to use a settings table you must of course define a DB connection.
So the usedb
and preferdb
flags may be set to accomplish any
of these scenarios:
enable both - settings table is checked first, config files used as fallback
enable
usedb
but notpreferdb
- config files are checked first, settings table used as fallbackdisable
usedb
- config files only; do not use settings table
Most apps will want to enable both flags so that when the settings table is updated, it will immediately affect app behavior regardless of what values are in the config files.
The values for these flags is available at runtime as:
Regardless of what the “normal” behavior is for the config object (per
those flags), you can explcitly request other behavior by passing
similar flags to the config object’s
get()
method:
config.get('foo.bar', usedb=True, preferdb=True)
config.get('foo.baz', usedb=False)
Some of the “core” settings in the framework are fetched with
usedb=False
so they will never be read from the settings table.
Canonical example of this would be the setting(s) which defines the DB
connection itself.