Persistent setting groups allow settings that are not declared to survive normalization and other operations that would normally remove any unknown keys in a group. Calling normalize or get_namespace with persistent=False will remove unknown keys even from persistent groups. Currently the only way to retrieve the defaults for a config and preserve unknown keys is to manually get the defaults and update each existing group with the default values.
81 lines
2.3 KiB
Markdown
81 lines
2.3 KiB
Markdown
[](https://github.com/lordwelch/settngs/actions/workflows/build.yaml)
|
|
[](https://github.com/lordwelch/settngs/releases/latest)
|
|
[](https://pypi.org/project/settngs/)
|
|
[](https://pypistats.org/packages/settngs)
|
|
[](https://opensource.org/licenses/MIT)
|
|
|
|
# Settngs
|
|
|
|
This library is an attempt to merge reading flags/options from the commandline (argparse) and settings from a file (json).
|
|
|
|
It is a modified argparse inspired by how [flake8] loads their settings. Note that this does not attempt to be a drop-in replacement for argparse.
|
|
|
|
Install with pip
|
|
```console
|
|
pip install settngs
|
|
```
|
|
|
|
|
|
A trivial example is included at the bottom of settngs.py with the output below (using bash). For a more complete example see [ComicTagger].
|
|
```console
|
|
$ python -m settngs
|
|
Hello world
|
|
$ python -m settngs --hello lordwelch
|
|
Hello lordwelch
|
|
$ python -m settngs --hello lordwelch -s
|
|
Hello lordwelch
|
|
Successfully saved settings to settings.json
|
|
$ python -m settngs
|
|
Hello lordwelch
|
|
$ python -m settngs -v
|
|
Hello lordwelch
|
|
merged_namespace.values.example_verbose=True
|
|
$ python -m settngs -v -s
|
|
Hello lordwelch
|
|
Successfully saved settings to settings.json
|
|
merged_namespace.values.example_verbose=True
|
|
$ python -m settngs
|
|
Hello lordwelch
|
|
merged_namespace.values.example_verbose=True
|
|
$ cat >settings.json << EOF
|
|
{
|
|
"example": {
|
|
"hello": "lordwelch",
|
|
"verbose": true
|
|
},
|
|
"persistent": {
|
|
"test": false,
|
|
"hello": "world"
|
|
}
|
|
}
|
|
EOF
|
|
$ python -m settngs --no-verbose
|
|
Hello lordwelch
|
|
$ python -m settngs --no-verbose -s
|
|
Hello lordwelch
|
|
Successfully saved settings to settings.json
|
|
$ python -m settngs --hello world --no-verbose -s
|
|
Hello world
|
|
Successfully saved settings to settings.json
|
|
$ python -m settngs
|
|
Hello world
|
|
```
|
|
|
|
settngs.json at the end:
|
|
```json
|
|
{
|
|
"example": {
|
|
"hello": "world",
|
|
"verbose": false
|
|
},
|
|
"persistent": false,
|
|
"hello": "world"
|
|
}
|
|
```
|
|
|
|
## What happened to the 'i'?
|
|
PyPi wouldn't let me use 'settings'
|
|
|
|
[flake8]: https://github.com/PyCQA/flake8
|
|
[ComicTagger]: https://github.com/comictagger/comictagger
|