supersettings

Super settings config. Merge many settings config files into one configuration!


License
Other
Install
pip install supersettings==0.3.0

Documentation

Super Settings

Multi file config parser for projects. Although this library was specifically designed to fix issues with large django deployments with many, many settings, this can be used outside of django to setup settings for any python project. It does not rely on any outside libraries.

The Problem

Django settings are great but as projects get big, settings management gets crazy. You end up with:

  • development settings
  • app settings
  • system settings
  • production settings
  • and the wonderful local settings

These become impossible to maintain over many environments and machines.
This small library was made to solve this problem.

How it works

Behind the scenes we use the configparser library to parse many files to render settings depending on the local config files.

You pass in a file_name and a default config file and it merges three files together in the following order:

default file: loaded first and should provide default values for all settings. This is usually part of your code repo.

/etc/default/{{file_name}}: Adds system wide defaults, different from the values in the repo.

~/.{{file_name}}: These are user values that override the system defaults.

You can add extra config files by calling add_config_file on a MultiFileConfigParser. Anything you add will override values from the previous files. The add_config_file method takes in the kwarg required. By default config files are not required and will just be skipped if they don't exist (program shouldn't fail because you don't create a ~/.{{file_name}}).
If you make the config file required, it will raise a ValueError if the file doesn't exist.

Configuration Files

For help with config files please see: https://docs.python.org/3.4/library/configparser.html

By default we use the ExtendedInterpolation so you can reference other variables and sections.

Code Example

Below would load the following configuration files:

/path/to/my/default.config

/etc/default/mysettings

~/.mysettings

import os
from supersettings import MultiFileConfigParser
parser = MultiFileConfigParser('mysettings', '/path/to/my/default.config')