Package: jsonconfig-tool
Configuration doesn’t get any easier than this …pip install jsonconfig-toolWhat’s it Used For?Managing settings, configuration information, application data, etc.Managing secrets, tokens, keys, passwords, etc.Managing environment settings.Basic Examplewith Config('myapp') as cfg:
    cfg.data = 'Any JSON serializable object ...'
    cfg.pwd.a_secret = 'Encrypted data ...'
    cfg.env.a_variable = 'Environment variables.'Additional Examples can be found in thedocumentation[1].Simply SaneNo magic here…In the context manager above:Thedatais stored in the user’s local application directory.Thepwddata is encrypted and stored in a keyring vault.Theenvdata is stored in environment variables.Configuration File LocationsClick[2]is the package used to determine the default application directory.The default behavior is to return whatever is most appropriate for the
operating system. To give you an idea, an app calledFoo Barwould
likely return the following:Mac OS X:
~/Library/Application Support/Foo Bar

Mac OS X (POSIX):
~/.foo-bar

Unix:
~/.config/foo-bar

Unix (POSIX):
~/.foo-bar

Win XP (roaming):
C:\Documents and Settings\<user>\Local Settings\Application Data\Foo Bar

Win XP (not roaming):
C:\Documents and Settings\<user>\Application Data\Foo Bar

Win 7+ (roaming):
C:\Users\<user>\AppData\Roaming\Foo Bar

Win 7+ (not roaming):
C:\Users\<user>\AppData\Local\Foo BarOf course, you or the user are free to override this behavior and set the
location to wherever you want.Encryption BackendsKeyring[3]is the package used to manage encryption.The default behavior is to select the most secure backend supported by the
user’s platform. To give you an idea, the following Keyring backends would
likely be returned:Mac OS X:Keychain[5]Unix (with secretstorage installed):Secret Service[6]Unix (with dbus installed):kwallet[7]Windows:Windows Credential Locker[8]Of course, you or the user are free to override the defaults. The user can
also change their Keyring backend preferences system-wide from the
command-line or via configuration files.  JSON Config will then use the
user’s preferred Keyring backend unless told otherwise.How Do You Want Your Data Served?Box[4]is the package used to handle the data access wrappers.PLAINNo wrapping.  Organic, free-ranging data.  If it’s JSON serializable
we’ll work with it.  This is the default.BOXEDDelivers your data in aBox[4]; a Python dictionary that supports both
recursive dot notation access and standard dictionary key access. If
you have a fear of beingboxed-in, don’t panic!  You can get in and
out of the box at anytime, see the data conversion section below.FROZENIces the data in aFrozen Box, same as BOXED except immutable; will
also be hashable if all objects in it are immutable.NESTEDNests the data in a default dictionary that can automatically create
missing intermediary keys. It’s also very forgiving when retrieving
data from the dictionary; for example, it won’t throw an error if a key
doesn’t exist.  Instead, it’ll return None; even if the key’s nested
and multiple keys are missing.Data ConversionBOXED,FROZENandNESTEDare all subclasses of dicts or
defaultdicts.  You can convert back-and-forth between any of them at any
time.The objects listed above are Mappings, if your data object is not
a Mapping then usePLAINto free yourself of all of the trappings.
WithPLAINit’s just you and your buddy Python; we get out of the way.JSON Config Frees You to Do What You Do BestSpend more time solving real-world problems, less time coding, testing &
troubleshooting configuration issues.References[1]https://jsonconfig.readthedocs.io/en/latest/config/examples.html[2]http://github.com/pallets/click[3]https://github.com/jaraco/keyring[4](1,2)http://github.com/cdgriffith/Box[5]https://en.wikipedia.org/wiki/Keychain_%28software%29[6]http://standards.freedesktop.org/secret-service[7]https://en.wikipedia.org/wiki/KWallet[8]https://technet.microsoft.com/en-us/library/jj554668.aspx