A configuration class that supports plugins, multiple file formats, heirarchical configuration, and more.
Project description
BYOConfig
Bring your own configuration
Features
- Loading/Dumping configuration data from/to:
- YAML
- TOML
- JSON
- File format auto-detect and override options
- Ability to load configuration data from environment variables
- Allows hierarchical data to be loaded, then updated according to precedence rules.
- Extensible via plugins, allowing your own arbitrary data sources to be merged with config file and environment data.
- Configuration data available as class attributes (ex.
config.variable_1)
Installing
pip install byconfig
Usage
From file
from pathlib import Path
from byoconfig import Config
"""
# path/to/config.yaml
important_path: path/that/must/exists
"""
# Auto-detects the file type based on file extension suffix, assigns all top-level configuration data as object attributes.
conf = Config(file_path='path/to/config.yaml')
# Alternatively, specify a forced_file_type argument (One of 'YAML', 'TOML', or 'JSON'
# conf = Config("path/to/config", forced_file_extension="YAML")
def ensure_file(path: str):
Path(path).mkdir(parents=True)
if __name__ == "__main__":
# The configuration variable is accessible by the instance attribute conf.important_path
ensure_file(conf.get("important_path"))
From Environment Variables
from os import environ
from byoconfig import Config
# Environment variables are always stored as strings
environ.update({"MY_APP_VAR_1": "1", "TEST_SOMETHING_SOMETHING": "2"})
conf = Config(env_prefix="MY_APP")
print(conf.get("var_1"))
# > "1"
# To run the environment loader again
conf.load_from_environment(prefix="TEST")
print(conf.get("something_something"))
# > "2"
# If you want to load all the environment variables, use the '*' wildcard as env_prefix
conf2 = Config(env_prefix="*")
print(conf2.PATH)
From AWS Secrets Manager
from byoconfig import Config
# ~/.aws/credentials (Where the values provided are not foo, bar, baz but actual authentication parameters)
# See https://boto3.amazonaws.com/v1/documentation/api/1.9.46/guide/configuration.html#configuring-credentials
"""
[default]
aws_access_key_id=foo
aws_secret_access_key=bar
aws_session_token=baz
"""
# AWS Secrets Manager secrets, using the JSON option.
# Try not to let your top-level JSON keys overlap, as the two resulting dicts will be merged.
"""
# Where the name of the secret is api_keys/important
{
"important_api_key": "B3U1+L/ZLKfFfdLf+cdx/7f9HhMjiL6meZlS11RlojQ",
}
# Where the name of the secret is api_keys/different
{
"different_api_key": "Jc6Qq37sV+3SidDmkQ42RXtq1x7qEAQUZKCVr7JzADM",
}
"""
class ImportantAPIClient:
def __init__(self, config: Config):
self.api_key = config.get("important_api_key")
class DifferentAPIClient:
def __init__(self, config: Config):
self.api_key = config.get("different_api_key")
def main():
config = Config(aws_secret_name="api_keys/important")
important_api_client = ImportantAPIClient(config)
# Should you need to load more than 1 secret, there's a method available.
config.load_from_secrets_manager("api_keys/different")
different_api_client = DifferentAPIClient(config)
Loading Arbitrary Values
from byoconfig import Config
# Via kwargs
conf = Config(my_var="abc", my_var_2=123)
# Via the set_data method / data property
conf.set({"my_var": "abc"})
# Equivalent to
conf.data = {"my_var": "abc"}
Dumping Data
from byoconfig import Config
conf = Config()
# We can pretend that you've loaded your configuration data in conf, and you'd like it output to a file
# to be used later
...
# Auto-detects the file-type based on file extension suffix
conf.dump_to_file("running_config.yml")
# Overriding the auto-detect in case you have no extension
conf.dump_to_file("running_config", forced_type="TOML")
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 byoconfig-1.2.2.tar.gz.
File metadata
- Download URL: byoconfig-1.2.2.tar.gz
- Upload date:
- Size: 29.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e11f635d5c9e321e47fe44bc7dfe6dca02b2f9c866c69ac7e7abd44355c744b
|
|
| MD5 |
2c921060b77b0452ef4e6209ed273ad9
|
|
| BLAKE2b-256 |
0e480bb9031d692f1ec113fe5423429e48739478962df8d9893ebed37f7fc2d7
|
Provenance
The following attestation bundles were made for byoconfig-1.2.2.tar.gz:
Publisher:
publish.yml on camratchford/byoconfig
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
byoconfig-1.2.2.tar.gz -
Subject digest:
0e11f635d5c9e321e47fe44bc7dfe6dca02b2f9c866c69ac7e7abd44355c744b - Sigstore transparency entry: 868817844
- Sigstore integration time:
-
Permalink:
camratchford/byoconfig@b660c739946ab072b055b4a667bc808dc6da29c4 -
Branch / Tag:
refs/pull/19/merge - Owner: https://github.com/camratchford
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b660c739946ab072b055b4a667bc808dc6da29c4 -
Trigger Event:
pull_request
-
Statement type:
File details
Details for the file byoconfig-1.2.2-py3-none-any.whl.
File metadata
- Download URL: byoconfig-1.2.2-py3-none-any.whl
- Upload date:
- Size: 24.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4afb8418de7cd6579e082d023ab06817df38e613160ba12d5a034dfd799f5b0
|
|
| MD5 |
38b7e6f1e91f753c060f772dd6de4024
|
|
| BLAKE2b-256 |
96bcc87742dd6801b9a98d4473864b8585d0e1a37f207145de65b65ea1cd07b2
|
Provenance
The following attestation bundles were made for byoconfig-1.2.2-py3-none-any.whl:
Publisher:
publish.yml on camratchford/byoconfig
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
byoconfig-1.2.2-py3-none-any.whl -
Subject digest:
b4afb8418de7cd6579e082d023ab06817df38e613160ba12d5a034dfd799f5b0 - Sigstore transparency entry: 868817850
- Sigstore integration time:
-
Permalink:
camratchford/byoconfig@b660c739946ab072b055b4a667bc808dc6da29c4 -
Branch / Tag:
refs/pull/19/merge - Owner: https://github.com/camratchford
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b660c739946ab072b055b4a667bc808dc6da29c4 -
Trigger Event:
pull_request
-
Statement type: