dotjson

Read key-value pairs from a settings.json file and set them as environment variables, dictionary or Pydantic models


Install
pip install dotjson==0.1.2

Documentation

python-dotjson

Installation

Sample usage:

pip install dotjson

Introduction

If you want your application to derive configuration using a json file, To help you with that, you can add python-dotjson to your application to make it load the configuration from a settings.json file when it is present (e.g. in development) while remaining configurable via the environment variables.

Sample usage:

from dotjson import load_dotjson()

load_dotjson()

Features

  • Sets config vars to env vars
  • Support for multiple settings.json files
  • Lets you deserialize settings.json file to a Pydantic Model or Dictionary
  • Auto picks the settings.json file from root directory
  • Ability to load settings from stream

load_dotjson

This method lets you flatten and load the settings.json file to env vars.

Load Env Vars from default settings.json

load_dotjson()

Load Env Vars using json path override

load_dotjson(json_path="settings/settings.dev.json")

Load Env Vars using stream

settings_content = '{"apple":1,"mango":5,"fruit":{"units":["kg","pound"]}}'
load_dotjson(stream=StringIO(settings_content))

Load Env Vars using multiple json paths

settings_paths = ["settings.json", "settings.dev.json"]
load_dotjson(json_paths_list=settings_paths)

dict_dotjson

This method lets you load a dictionary using the settings.json file.

Load dictionary from default settings.json

dict_output = dict_dotjson()

Load dictionary using json path override

dict_output = dict_dotjson(json_path="settings/settings.dev.json")

Load dictionary using stream

settings_content = '{"apple":1,"mango":5,"fruit":{"units":["kg","pound"]}}'
dict_output = dict_dotjson(stream=StringIO(settings_content))

Load dictionary using multiple json paths

settings_paths = ["settings.json", "settings.dev.json"]
dict_output = dict_dotjson(json_paths_list=settings_paths)

model_dotjson

This method lets you load a pydantic model using the settings.json file.

Load dictionary from default settings.json

class fruit_model(BaseModel):
    units: List[str]

class settings_model(BaseModel):
    apple: int
    mango: int
    fruit: fruit_model

model_output = model_dotjson(settings_model)

Load dictionary using json path override

class fruit_model(BaseModel):
    units: List[str]

class settings_model(BaseModel):
    apple: int
    mango: int
    fruit: fruit_model

model_output = model_dotjson(settings_model, json_path="settings/settings.dev.json")

Load dictionary using stream

class fruit_model(BaseModel):
    units: List[str]

class settings_model(BaseModel):
    apple: int
    mango: int
    fruit: fruit_model

settings_content = '{"apple":1,"mango":5,"fruit":{"units":["kg","pound"]}}'
model_output = model_dotjson(settings_model, stream=StringIO(settings_content))

Load dictionary using multiple json paths

class fruit_model(BaseModel):
    units: List[str]

class settings_model(BaseModel):
    apple: int
    mango: int
    fruit: fruit_model

settings_paths = ["settings.json", "settings.dev.json"]
model_output = model_dotjson(settings_model, json_paths_list=settings_paths)

Inspired by

References