Easily parse configurations across various formats (YAML, JSON, etc.) with recursive class binding, environment variables resolution and type safety.
Project description
config-binder
Simple configuration parsing with recursive class binding, environment variables resolution and types safety.
Installation
pip install config-binder
Simple example
input.yaml
host: ${MYAPP_HOST:localhost}
port: 5432
username: admin
password: ${MYAPP_PASSWORD}
ENV exposure
export MYAPP_PASSWORD=123
With binding:
class MySettings:
host: str
port: int
username: str
password: str
source_urls: List[str]
config = ConfigBinder.load('input.yaml')
print(f"type: {type(config).__name__}, config: host:{config.host} port:{config.port} source_urls:{config.source_urls}")
# Output:
# type: MySettings, config: host:localhost port:5432 source_urls:['some-url.com', 'another-url.com']
Without binding
in this case data will be returned in dict with just all the environment variables resolved
config = ConfigBinder.load('input.yaml')
print(f"type: {type(config).__name__}, config: {config}")
# Output:
# type: dict, config: {'host': 'localhost', 'port': 5432, 'username': 'admin', 'password': '123', 'source_urls': ['some-url.com', 'another-url.com']}
More complex example
input.yaml
name: MyApplication
logging_level: INFO
redis_config:
host: ${MYAPP_REDIS_HOST:127.0.0.1}
post: ${MYAPP_REDIS_PORT:6379}
password: ${MYAPP_REDIS_PASS}
encryption_Key: ${MYAPP_REDIS_ENCRYPTION_KEY}
sources_configs:
orders:
url: some-url.com/orders
token: ${MYAPP_ORDERS_SOURCE_TOKEN}
retry_policy:
max_attempts: 5
backoff_seconds: 10
products:
url: another-url.com/products
token: ${MYAPP_ORDERS_products_TOKEN}
retry_policy:
max_attempts: 3
backoff_seconds: 5
ENV exposure
export MYAPP_REDIS_PASS=redis_pass
export MYAPP_REDIS_ENCRYPTION_KEY=very_strong_key
export MYAPP_ORDERS_SOURCE_TOKEN=orders_token
export MYAPP_ORDERS_PRODUCTS_TOKEN=products_token
Config classes definition
class RedisConfig:
host: str
port: int
password: str
encryption_key: str
class RetryPolicy:
max_attempts: int
backoff_seconds: int
class SourceConfig:
url: str
token: str
retry_policy: RetryPolicy
class AppConfig:
name: str
logging_level: Literal['DEBUG', 'INFO', 'ERROR']
redis_config: RedisConfig
sources_configs: Dict[str, SourceConfig]
Binding from file
config = ConfigBinder.load('input.yaml', AppConfig)
Binding from str
variable
input_yaml is variable with the same yaml specified above
config = ConfigBinder.read(ConfigType.yaml, input_yaml, AppConfig)
Results
input yaml is now bound to AppConfig class with env variables resolution and types validation
print(config.name)
print(config.logging_level)
print(f"type: {type(config.redis_config).__name__}, config: {str(vars(config.redis_config))}")
print(f"type: {type(config.sources_configs['orders']).__name__}, config: {str(vars(config.sources_configs['orders']))}")
print(f"type: {type(config.sources_configs['products']).__name__}, config: {str(vars(config.sources_configs['products']))}")
# Output:
# MyApplication
# INFO
# type: RedisConfig, config: {'host': '127.0.0.1', 'port': 6379, 'password': 'redis_pass', 'encryption_key': 'None'}
# type: SourceConfig, config: {'url': 'some-url.com/orders', 'token': 'orders_token', 'retry_policy': <__main__.RetryPolicy object at 0x7f268fe2fe00>}
# type: SourceConfig, config: {'url': 'another-url.com/products', 'token': 'products_token', 'retry_policy': <__main__.RetryPolicy object at 0x7f268fe2fe30>}
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
config_binder-0.3.0.tar.gz
(5.3 kB
view details)
Built Distribution
File details
Details for the file config_binder-0.3.0.tar.gz
.
File metadata
- Download URL: config_binder-0.3.0.tar.gz
- Upload date:
- Size: 5.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.5 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f56ae39ee75b8337873fd34d076689f4a35ec9e1bb6c357f4dfafe3bb2dc1b42 |
|
MD5 | ff3b33f24d0c979a9d7f13f149adcc40 |
|
BLAKE2b-256 | 75220fff2105a53f37b8430e597995cea821eadab4707023595477281a3d2618 |
File details
Details for the file config_binder-0.3.0-py3-none-any.whl
.
File metadata
- Download URL: config_binder-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.5 Linux/6.5.0-1025-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c09d2b69080e965d49a16ea1c89e56898097c0686bce39238be346a17f56386 |
|
MD5 | 0cba4b64a55f29c106f55f4f275b5eaa |
|
BLAKE2b-256 | 2f88356bc8f9784a58e213e227afdbe5bb96a6a3b5d09f2de92829290eb30978 |