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.
							 |