No project description provided
Project description
combined_config
A Python library for stitching multiple configuration sources together in order or priority.
The intention of this library is to provide a type, CombinedConfig, that represents all of the
configuration options for a Python project in a format conversant with Python's
configparser and
argparse modules. A CombinedConfig instance
represents an ordering in which ingested configuration values should be searched, and optional
default values for configuration values that have not been provided. A CombinedConfig is
instantiated with one or more ConfigVar instances, which present fields corresponding to those
provided to
argparse.ArgumentParser.add_argument.
CombinedConfig
import configparser
from combined_config import CombinedConfig, ConfigVar
my_config = CombinedConfig(
ConfigVar(name="arg_with_default", shortname="a", default="my default"),
ConfigVar(name="switch", action="store_true", default=False, help="Turns on the frobnicator"),
ConfigVar(name="no_default", type=int),
)
# You can create a `ArgumentParser` from the `CombinedConfig`.
parser = my_config.make_parser()
parsed = parser.parse_args(["-a", "other value", "--no-default", "10", "--switch"])
# Appending a config gives it lower priority than those already added.
my_config.append(parsed)
print(my_config.values.arg_with_default) # => other value
print(my_config.values.no_default) # => 10
print(my_config.values.switch) # => True
config_parser = ConfigParser()
config_parser.read({"my_section": {"no_default": 35}})
# Example contents of "some-other-conf.ini"
# [my_section]
# no_default = 35
# Prepending a config gives it higher priority than those already added.
my_config.prepend(config_parser["my_section"])
print(my_config.values.no_default) # => 35
# We can also add dictionaries.
my_config.prepend({"arg_with_default": "another other value"})
print(my_config.values.arg_with_default) # => another other value
FileBackedConfigMixin
Commonly, you'll want to be able to easily read and write the configuration from/to file. This can
be done with a subclass of CombinedConfig that also subclasses FileBackedConfigMixin.
from combined_config import CombinedConfig, ConfigVar, FileBackedConfigMixin
class MyBackedConfig(CombinedConfig, FileBackedConfigMixin):
# Should be a mapping of ini section names to the `ConfigVar` names that will be stored there.
# Special value `"__ALL__"` means all keys.
ini_section_names = {"my_section": "__ALL__"}
filename = "/tmp/my-config.ini"
my_config = MyBackedConfig(
ConfigVar(name="arg_with_default", shortname="a", default="my default"),
ConfigVar(name="switch", action="store_true", default=False, help="Turns on the frobnicator"),
ConfigVar(name="no_default", type=int),
)
# Load the config from file.
my_config.read()
my_config.prepend({"switch": True})
# Write the config back to file. Only configuration values that differ from their defaults will be
# written.
my_config.write()
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 combined_config-0.1.0.tar.gz.
File metadata
- Download URL: combined_config-0.1.0.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.2 CPython/3.10.12 Linux/6.2.0-26-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24fc26a9b83db7615b298cfa093248632650ee08247271036a5517b955f2cf4a
|
|
| MD5 |
3326ae6edd5c0ac1e8ae72745e5bfa28
|
|
| BLAKE2b-256 |
0a21ed282f72b77c1735467447f65fc1ac00323514786ce92e530f37d0e969a8
|
File details
Details for the file combined_config-0.1.0-py3-none-any.whl.
File metadata
- Download URL: combined_config-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.2 CPython/3.10.12 Linux/6.2.0-26-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05501fd2f92f4b2f68479e2c8a7cf2c32f99d71d8a26701faa2a4b6b63598641
|
|
| MD5 |
0129e94eda739e3870df894b049b28fd
|
|
| BLAKE2b-256 |
065b312f7b3aba19eb07e157ec601eeadb3b4e20eb9dfd02a9a447409adf9cbb
|