Skip to main content
Donate to the Python Software Foundation or Purchase a PyCharm License to Benefit the PSF! Donate Now

YAML for application configuration, lite version (inspired by Ruby gem "config")

Project description

Simplify usage of YAML files for application configuration.

Inspired by Ruby Gem “config” But not all features implemented yet.

Usage example

Installation: pip install app_settings

Create sample app with following structure:

    settings.yml  # at least one *.yml file required
    /settings  # use this only in case if you need different settings for your environments

AppSettings – singleton, so it is not possible to create more than one instance of config object.

By default, script will try to load all ./config/*.yml and, if exist ./config/settings/${APP_ENV}*.yml configuration files.

Take note, that all variables defined in ./config/*.yml files will be overridden by variables from ./config/settings/${APP_ENV}.yml.

Also, ./config/*.yml loaded in alphabetical order, so if you will define variable VAR in additional_settings.yml it will be redefined by VAR from settings.yml.

If you have settings, which not depends on the environment, simply use ./config/{file name}.yml; In case, when you need settings, which depends on the environment, use ./config/settings/{ENV}.yml.

Environment (development/stage/production etc)

If your application use more than one environment, for example development and production, you can specify what config file to load by setting env variable

# before your application starts
# export APP_ENV='production' or APP_ENV='production' python

from app_settings import AppSettings

cfg = AppSettings()

By default, if no APP_ENV is given, file ./config/settings/development.yml will be loaded, that’s why this file is required.

Also it is possible to redefine name of variable.

# export TEST_ENV='production'

from app_settings import AppSettings

cfg = AppSettings(env_name='TEST_ENV')

Working with environment variables

It is possible to redefine or set settings from environment variables. AppSettings will read all env variables with SETTINGS prefix (by default).

# settings.yml
  redefined: 'redefined'
  not_redefined: 'not redefined'
# export SETTINGS__MY_VAR='test'

from app_settings import AppSettings

cfg = AppSettings()
print(cfg.my_var)  # 'test'
print(cfg.level1.redefined)  # 'val'
print(cfg.level1.not_redefined)  # 'not redefined'

You can setup your own prefix:

# export MYPREFIX__MY_VAR='test'

from app_settings import AppSettings

cfg = AppSettings(prefix='myprefix')
print(cfg.my_var)  # 'test'
print(cfg.level1.redefined)  # 'val'

Also it is possible to setup environment variable splitter (default: __).

# export SETTINGS.MY_VAR='test'

from app_settings import AppSettings

cfg = AppSettings(splitter='.')
print(cfg.my_var)  # 'test'
print(cfg.level1.redefined)  # 'val'

If you don’t need to set/redefine settings from environment variables, use use_env flag.

from app_settings import AppSettings
cfg = AppSettings(use_env=False)

Config path

You can redefine default config path

from app_settings import AppSettings

cfg = AppSettings(configs_path='my_config_path')

Run tests

cd app_settings
python -m pytest -v --alluredir=./tests/results -n `nproc` --cov=app_settings --cov-config .coveragerc ./tests


  1. Add reload feature
  2. Do not raise error if setting not found in dictionary

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
app_settings-1.2.tar.gz (6.8 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page