105 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			105 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
|   | 
 | ||
|  | Config Settings
 | ||
|  | ===============
 | ||
|  | 
 | ||
|  | The app uses :term:`config settings<config setting>` to control its
 | ||
|  | behavior at runtime.
 | ||
|  | 
 | ||
|  | The term "config setting" may be thought of as a combination of these
 | ||
|  | terms:
 | ||
|  | 
 | ||
|  | * :term:`config file`
 | ||
|  | * :term:`settings table`
 | ||
|  | 
 | ||
|  | It really refers to the **value** of such a config setting, when you
 | ||
|  | get right down to it.  The app uses a :term:`config object` to keep
 | ||
|  | track of its config settings.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. _reading-config-settings:
 | ||
|  | 
 | ||
|  | Reading Values via Python
 | ||
|  | -------------------------
 | ||
|  | 
 | ||
|  | Call the config object's :meth:`~wuttjamaican.conf.WuttaConfig.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 :class:`~wuttjamaican.conf.WuttaConfig` for full details.
 | ||
|  | 
 | ||
|  | 
 | ||
|  | .. _where-config-settings-come-from:
 | ||
|  | 
 | ||
|  | Where Values Come From
 | ||
|  | ----------------------
 | ||
|  | 
 | ||
|  | Config settings usually come from either a :term:`config file` or a
 | ||
|  | :term:`settings table`.  The :term:`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:
 | ||
|  | 
 | ||
|  | .. code-block:: ini
 | ||
|  | 
 | ||
|  |    [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 not ``preferdb`` - config files are checked
 | ||
|  |   first, settings table used as fallback
 | ||
|  | * disable ``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:
 | ||
|  | 
 | ||
|  | * :attr:`~wuttjamaican.conf.WuttaConfig.usedb`
 | ||
|  | * :attr:`~wuttjamaican.conf.WuttaConfig.preferdb`
 | ||
|  | 
 | ||
|  | 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
 | ||
|  | :meth:`~wuttjamaican.conf.WuttaConfig.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.
 |