Inverting The Order Of Environmental Variables In Configs

Playing with the idea of switching the heierarchy of environments and their variables in config files. For example, I'm doing this:

  "envars": {
    "database_host": {
      "dev": "",
      "prod": ""
    "database_name": {
      "dev": "gibson",
      "prod": "mcp"
    "database_password": {
      "dev": "wintermute",
      "prod": "chess"
    "database_username": {
      "dev": "william",
      "prod": "alan1"
    "debug": {
      "dev": true,
      "prod": false
    "log_level": {
      "dev": "INFO",
      "prod": "ERROR"

Instead of this:

  "envs": {
    "dev": {
      "database_host": "",
      "database_name": "gibson",
      "database_password": "wintermute",
      "database_username": "william",
      "debug": true,
      "log_level": "INFO"
    "prod": {
      "database_host": "",
      "database_name": "mcp",
      "database_password": "chess",
      "database_username": "alan1",
      "debug": false,
      "log_level": "ERROR"

It's an interesting experiment. It makes things more verbose though. First, there's a lot more lines in the config itself for the same info. Then, in the code, you can't simply do config_data = config['dev'] to get an environment loaded. Each call has to have the env defined in it. For example:

config = # Load the data
env = 'dev'


instead of just being able to hit it with:

config = # Load the data for just 'dev'