A simple configuration interface with plaintext and encrypted file support.
Project description
figtion
.---.
.-. |~~~|
|~| |~~~|--.
.---!-| .--| C |--|
|===|*|--|%%| f | |
| |*|__| | g | |
|===|*|==| | | |
| |_|__| |~~~|__|
|===|~|--|%%|~~~|--|
`---^-^--^--^---`--' hjw
A simple configuration interface with plaintext and encrypted file support.
Benefits
- seemless Python
dict
interface- unified config definition and defaults
- YAML text file source for file-system input & serialization
- nested entries supported
- simple precedence
defaults
keys define config keys- YAML values override
defaults
values
- secrets support
- secrets saved to private YAML file
- secrets encrypted at rest via environment variable
- update & mask from public YAML file
Examples
Config Definition and Defaults
import figtion
defaults = {'my server' : 'www.bestsite.web'
,'number of nodes' : 5
,'password' : 'huduyutakeme4'
,'nested stuff' : {'breakfast' : 'coffee'}
,'listed stuff' : ['a','b','c']}
cfg = figtion.Config(defaults=defaults,filepath='./conf.yml')
print(cfg['my server'])
This will print either 'www.bestsite.web' or the value of 'my server' in ./conf.yml
if it is something else.
defaults strictly defines the schema. Only keys present in defaults from a serial file will be retained. If you want to risk unspecified input keys and load everything from the YAML file, you can either omit the defaults parameter or set promiscuous=True
when constructing Config
.
Self-Documenting Plaintext
Specify if/when you want to update stored plaintext file.
cfg = figtion.Config(..., promiscuous=True)
...
cfg.dump()
If concise=True
, only modified values are stored in text file.
If promiscuous=False
(default behavior), deprecated values are quietly removed.
Otherwise, serialized YAML will clarify default, modified, and deprecated values:
##############################
#### Modified ####
##############################
my server: www.newsite.web
##############################
#### Default ####
##############################
number of nodes: 5
##############################
#### Deprecated ####
##############################
fave cat: Zelda
Config Secrets
When you want a public config file and a separate secret one. To keep secret encrypted "at rest", set a secret key environment variable FIGKEY.
os.environ["FIGKEY"] = "seepost-itnote"
cfg = figtion.Config(defaults=defaults,filepath='./conf.yml',secretpath='./creds.yml')
cfg.mask('password')
print(cfg['password'])
This will print the value of 'password'
, which is stored in ./creds.yml
and not ./conf.yml
. If the value of 'password'
is changed in either YAML file, the password will be updated in ./creds.yml
and masked from ./conf.yml
the next time the class is loaded in Python. If a secret key is present via environment variable FIGKEY, the values in ./creds.yml
will be encrypted using that key.
The dictionary object returned for cfg
contains the true value.
If you want everything treated as secret, provide a secretpath
and omit filepath
:
cfg = figtion.Config(secretpath='./creds.yml')
In this case, no call to mask
is needed and everything is encrypted at rest.
Encryption Details
This uses the pynacl bindings to the libsodium library, which uses the XSalsa20 algorithm for encryption. The encryption key provided by the FIGKEY environment variable is truncated to a 32-byte string.
Roadmap
- 0.9 - secrets store in separate location
- 1.0 - secrets store in encrypted location
- 1.1 - make default, modified, and unused properties explicit in plaintext
- 1.? - automatic/dynamic reloading of YAML files
- 1.? - support cascading configuration files
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file figtion-1.1.1.tar.gz
.
File metadata
- Download URL: figtion-1.1.1.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 42698a96d1e0078a67033499fa4d1f9f2fbcf6292998a26d48a66d7c105893f0 |
|
MD5 | 4466095329599edb32bda1780ec929eb |
|
BLAKE2b-256 | cb3b1df9a21810c38dfe4db6bb21909ca395a16584be4bb84177358527878c4f |
File details
Details for the file figtion-1.1.1-py3-none-any.whl
.
File metadata
- Download URL: figtion-1.1.1-py3-none-any.whl
- Upload date:
- Size: 8.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e44bb230307b953d3b3cf5a72e55c9b1ed5a91ad1ea456459238dc0cb6feab08 |
|
MD5 | a1ff9a7cc939fe3aed1d33144ba28346 |
|
BLAKE2b-256 | d821016de1e0799cfa68b99b0ed061258a5d925ac03b351fde4cf3c0fad265f6 |