configuration with click builder
Project description
Cock
Cock stands for «configuration file with click». It is a configuration aggregator, which stands on shiny click library.
Reason
No module for click with flat configuration file, which will mimic actual click options. There are click-config and click-config-file, but they targets another goals.
Features
- Aggregate configuration file and cli options into flat configuration object.
- Respect all click checks and conversions.
- Flat dot-accessed (
addictwrapped) configuration. - Entrypoint builder.
License
cock is offered under MIT license.
Requirements
- python 3.7+
Usage
example.py:
import click
from cock import build_entrypoint
def main(config):
print(config)
options = [
click.option("--a-b-c", default="foo"),
click.option("--b-c-d", default="bar"),
]
entrypoint = build_entrypoint(main, options, auto_envvar_prefix="EXAMPLE", show_default=True)
if __name__ == "__main__":
entrypoint(prog_name="example")
This is almost pure click setup
$ python example.py --help
Usage: example [OPTIONS] [CONFIGURATION_FILE]
Options:
--a-b-c TEXT [default: foo]
--b-c-d TEXT [default: bar]
--help Show this message and exit. [default: False]
But there is a CONFIGURATION_FILE argument. Lets see use cases.
All deafults
$ python example.py
{'configuration_file': None, 'a_b_c': 'foo', 'b_c_d': 'bar'}
From environment variable
$ EXAMPLE_A_B_C=foo-env python example.py
{'configuration_file': None, 'a_b_c': 'foo-env', 'b_c_d': 'bar'}
From cli arguments
$ EXAMPLE_A_B_C=foo-env python example.py --a-b-c foo-cli
{'a_b_c': 'foo-cli', 'configuration_file': None, 'b_c_d': 'bar'}
From configuration
config-example.yml:
a-b-c: foo-file
$ EXAMPLE_A_B_C=foo-env python example.py --a-b-c foo-cli config-example.yml
{'a_b_c': 'foo-file', 'configuration_file': '/absolute/path/to/config-example.yml', 'b_c_d': 'bar'}
Priority is obvious: file > cli arguments > env variables
As described in features paragraph, configuration is flattened before chaining with click options. So all configuration files listed below are equal:
a-b-c: foo-file
a:
b:
c: foo-file
a-b:
c: foo-file
If provided file have key crossings:
a-b-c: foo-file1
a:
b-c: foo-file2
Then ValueError will be raised.
cock uses pyyaml library for config loading, so it supports yaml and json formats, but this can be improved later if someone will need more configuration file types.
API
def build_entrypoint(
main: Callable[[AdDict], Any],
options: List[click.option],
**context_settings
) -> Callable[..., Any]:
mainis a user-space function of exactly one argument, a dot-accessed config wrapper.optionsis an iterable ofclick.optiondecorators.**context_settingsis a dict passed through tocommanddecorator.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cock-0.3.0.tar.gz.
File metadata
- Download URL: cock-0.3.0.tar.gz
- Upload date:
- Size: 4.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bddbb8091c946457bfc1c929d5efa99b81da05e46172465cde872f0a7ad2055d
|
|
| MD5 |
a4f0fcdf9c8133b9cfaeb87f2aadef70
|
|
| BLAKE2b-256 |
f9d216d4d7708b538990eaf424becb0d958f1d5de98a863135a1a6635d739455
|
File details
Details for the file cock-0.3.0-py3-none-any.whl.
File metadata
- Download URL: cock-0.3.0-py3-none-any.whl
- Upload date:
- Size: 4.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98a2cd3f7ab24adcfdd5bc8eb6f8a7eefc178e245ff25a50648dbe76d4d65de0
|
|
| MD5 |
16174c9fc986f96f2a5ae67a9f7c810c
|
|
| BLAKE2b-256 |
e57754f43cd0f8c80864a3025856c7606e0b51ee94c2bd84f9c5bb6e8b1e659c
|