Skip to main content

A configuration class that supports plugins, multiple file formats, heirarchical configuration, and more.

Project description

BYOConfig

Bring your own configuration

Tests Passing Build PyPi Version

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

byoconfig-1.2.1.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

byoconfig-1.2.1-py3-none-any.whl (24.0 kB view details)

Uploaded Python 3

File details

Details for the file byoconfig-1.2.1.tar.gz.

File metadata

  • Download URL: byoconfig-1.2.1.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for byoconfig-1.2.1.tar.gz
Algorithm Hash digest
SHA256 aa9690775e3ac472d8b495213b6417db44d595c3230c71a78f00c220cd17ed70
MD5 cc98543f81854da7abf07e20f150849a
BLAKE2b-256 9c218a217b3875751ef27c1286bdf0db40bd14b0609fa7bf239ad9462d4585d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for byoconfig-1.2.1.tar.gz:

Publisher: publish.yml on camratchford/byoconfig

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file byoconfig-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: byoconfig-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 24.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for byoconfig-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 eb1f1bdd8f0dc1c33c1a25a2b4eabcdd5a207d8e1ed77e12eaef9a8982e1c342
MD5 86c4cfe89136ad3c147df92feafe2304
BLAKE2b-256 9ab25e70fffb8ebe45c93b28eb6a6737c2c33b24bc9d711433d0521b899abc0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for byoconfig-1.2.1-py3-none-any.whl:

Publisher: publish.yml on camratchford/byoconfig

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page