Skip to main content

Standardised settings loader

Project description

pyStandardSettings

Standardised settings loader

a port of nodejs standard-settings

Why

No more cp config.sample.json config.json.

Your app presents a settings/settings.default.json which is always included. User, or other developer needing custom settings, loads his custom settings, overriding default settings. If a key is missing in user settings, it won’t trigger any error, as a default value is in settings.default.json. standard-settings offers multiple ways to change settings: settings.json file, command line arguments, environment variables. Check below examples for usage and priority order.

Installation

pip install pyStandardSettings

Usage

This module loads settings from a file, from commandline arguments, and environment variables. It should be required at the very beginning of your project:

from pyStandardSettings import settings

Then your settings are accessible using:

print settings.server.port

Priority order

  1. Environment variables

Example:

SERVER_PORT=2500 python main.py
service_spacebro_inputMessage=new-media python main.py
  1. Command line parameters (argv)

Example:

python main.py --server.port 2000 # to specify a field
python main.py --settings settings/settings.prod.json # to specify a settings file

NB: To use a key with argv, it needs to be present in settings.default.json

  1. Files

These files are always loaded if present:

settings/settings.json first

settings/settings.default.json

Working all together with different settings

On your project, you may have other developers working with different settings. Pushing them in the repo is annoying. We know you’ve seen that before. Using standard-settings, developers can share common default settings, AND load custom settings.

Best practice is to add settings/settings.default.json in your repo, this file covers default settings, common for each developer. And .gitignore settings/settings.json, this file has custom settings inside.

Schema

The following schema is an example of settings used in Soixante circuits apps:

{
  "server": {
      "host" : "myip",
      "port" : 3333
  },
  "timeout": {
    "lookbook": 5,
    "popup": 4
  },
  "folder": {
    "kcDownloader": "path-to/data",
    "lookbook": "path-to/lookbook"
  },
  "flag": {
    "stabalize": true,
    "devMode": true
  },
  "customKey": {
    "maxImageNumber": 64
  },
  "meta": {
      "title": "",
      "description": "",
      "message": "...",
      "source": ""
  },
  "service": {
    "altruist": {
      "host" : "192.168.1.6",
      "port" : 6666
    },
    "spacebro": {
      "host" : "192.168.1.6",
      "port" : 8888,
      "channelName": "my-channel",
      "client" : {
        "name" : "my-app"
      }
    }
  }
}

See soixantecircuits/standard

Goodies

To list all settings keys available in your project, use

python main.py -h

and it will display

usage: main.py [-h] [-s SETTINGS] [--recipe RECIPE]
               [--server.host SERVER.HOST] [--server.port SERVER.PORT]

optional arguments:
  -h, --help            show this help message and exit
  -s SETTINGS, --settings SETTINGS
                        settings file in json format
  --recipe RECIPE
  --server.host SERVER.HOST
  --server.port SERVER.PORT

test command

python -m tests.test

Project details


Download files

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

Source Distribution

pyStandardSettings-0.0.1.tar.gz (6.5 kB view hashes)

Uploaded Source

Built Distribution

pyStandardSettings-0.0.1-py2-none-any.whl (7.4 kB view hashes)

Uploaded Python 2

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page