Using ChainMap for defaults and overrides
We'll often have a configuration file hierarchy. Previously, we listed several locations where configuration files can be installed. The
configparser module, for example, is designed to read a number of files in an order and integrate the settings by having later files override values from earlier files.
We can implement an elegant default-value processing using the
collections.ChainMap class. See Chapter 6, Creating Containers and Collections, for some background on this class. We'll need to keep the configuration parameters as
dict instances, which is something that works out well using
exec() to evaluate Python-language initialization files.
Using this will require us to design our configuration parameters ...