A configuration management library
Project description
CatenaConf
Introduction
CatenaConf is a lightweight Python library designed for managing and operating configurations. It extends the Python dictionary type to manage configurations using key-value pairs and provides flexible operation functionalities.
Features
- Lightweight: The code size is small and no third-party dependencies need to be installed (if you need to create a configuration from a Pydantic model or a yaml file, you need to install the corresponding dependencies).
- Dictionary based: Use Python dictionaries to create and manage configurations.
- Attribute access: Access and modify configuration values through attributes, which is convenient and intuitive.
- Flexible update mechanism: Provides flexible update function and supports merging dictionaries.
- Reference resolution: Supports referencing other configuration values in configuration values and being able to resolve these references.
Installation
Install using pip:
pip install catenaconf
Usage
Creating Configuration
Create from dictionary
Catenaconf.create(config)
Description: Create a KvConfig
instance (a built-in type of the library) from a dictionary.
Parameters:
config (dict)
: A dictionary containing the configuration data.
Returns:
- Returns a
KvConfig
object created from the dictionary.
Usage:
from catenaconf import Catenaconf
config = {
"database": {
"host": "localhost",
"port": 3306
}
}
cfg = Catenaconf.create(config)
Load from file
Catenaconf.load(file)
Description: Load a KvConfig instance from a file. Supports JSON, YAML, and XML formats.
Parameters:
file (str | pathlib.Path)
: Path to the configuration file.
Returns:
- Returns a
KvConfig
object created from the loaded data.
Usage:
cfg = Catenaconf.load("config.json")
Create from Pydantic Model
Catenaconf.structured(model)
Description: Creates a KvConfig
instance from a Pydantic model.
Parameters:
model (pydantic.BaseModel)
: A Pydantic model object to construct the configuration.
Returns:
- A
KvConfig
object containing the structured configuration.
Usage:
from pydantic import BaseModel
class MyModel(BaseModel):
field: str
cfg = Catenaconf.structured(MyModel(field="value"))
Accessing Configuration
After creating a configuration, you can access configuration values using attribute access:
from catenaconf import Catenaconf
config = {
"database": {
"host": "localhost",
"port": 3306
}
}
cfg = Catenaconf.create(config)
# Accessing via attribute
host = cfg.database.host
port = cfg.database.port
print(host) # Output: localhost
print(port) # Output: 3306
Selecting Configuration Values
Catenaconf.select(cfg, key, *, default="NOT FOUND", throw_on_resolution_failure=True, throw_on_missing=False)
Description: Selects a value from the configuration by key, with options for default values and error handling.
Parameters:
cfg (KvConfig)
: The configuration instance to select from.key (str)
: The key to locate within the configuration.default (Any, optional)
: The default value to return if the key is not found. Defaults to"NOT FOUND"
.throw_on_resolution_failure (bool, optional)
: Whether to raise an error if key resolution fails. Defaults toTrue
.throw_on_missing (bool, optional)
: Whether to raise an error for missing keys. Defaults toFalse
.
Returns:
- The selected value, or the default value if the key is not found.
Usage:
value = Catenaconf.select(cfg, "database.user", default=None, throw_on_resolution_failure=False)
Updating Configuration
Catenaconf.update(cfg, key, value=None, *, merge=True)
Description: Updates the value of a specified key in the configuration.
Parameters:
cfg (KvConfig)
: The configuration instance to update.key (str)
: The location of the value to be updated, specified as a dotted string.value (Any, optional)
: The new value to set.merge (bool, optional)
: Whether to merge dictionaries. Defaults toTrue
.
Usage:
Catenaconf.update(cfg, "database.user", "root")
Catenaconf.update(cfg, "database", {"root": "root"})
Catenaconf.update(cfg, "database", {"root": "root"}, merge=True)
Notes:
-
If
merge=True
, existing dictionaries are merged with the new value. -
If
merge=False
, the new value replaces the existing one.
Merging Configurations
Catenaconf.merge(*configs)
Description: Merges multiple configurations into one.
Parameters:
*configs (KvConfig or dict)
: The configurations to merge, passed as positional arguments.
Returns:
- A merged
KvConfig
instance.
Usage:
config1 = {"database": {"host": "localhost"}}
config2 = {"database": {"port": 3306}}
merged_cfg = Catenaconf.merge(config1, config2)
References and Resolving References
Catenaconf.resolve(cfg)
Description: Resolve all references in the configuration. The reference is defined in the @{}
format.
-
@{a.b.c}
: Reference keys in configuration. wherea
is the top-level key of the configuration,b
is the sub-key ofa
, andc
is the sub-key ofb
. -
@{a.b.1}
: Reference elements in the list. wherea
is the top-level key of the configuration,b
is the sub-key ofa
, and1
is the index ofb
. -
@{env:VAR_NAME}
: Reference environment variables.
Parameter:
cfg (KvConfig)
: Contains the referenced configuration instance.
Usage:
config = {
"config": {
"database": {
"host": "localhost",
"port": 5432
},
"connection": "Host: @{config.database.host}, Port: @{config.database.port}"
},
"app":[
"11",
"22",
"33",
"@{env:MY_VARIABLE}"
],
"list":[
{"a": 1, "b": "@{app.1}"},
{"ref": "@{config.database.host}"}
]
}
cfg = Catenaconf.create(config)
Catenaconf.resolve(cfg)
Notes:
- Resolves references by replacing placeholders with their actual values.
Converting to Dictionary
Catenaconf.to_container(cfg, resolve=True)
Description: Converts a KvConfig
instance into a standard dictionary.
Parameters:
cfg (KvConfig)
: The configuration instance to convert.resolve (bool, optional)
: Whether to resolve references in the dictionary. Defaults toTrue
.
Returns:
- A standard dictionary containing the configuration data.
Usage:
dict_config = Catenaconf.to_container(cfg, resolve=True)
dict_config = Catenaconf.to_container(cfg, resolve=False)
Notes:
- When
resolve=True
, all references in the configuration are resolved. - When
resolve=False
, references remain unresolved.
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
File details
Details for the file catenaconf-0.1.8.tar.gz
.
File metadata
- Download URL: catenaconf-0.1.8.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
15cb33c663eee0c7e6509aa0554844595f3b1e967d3af8a6eb4eff240bf59dcc
|
|
MD5 |
db83df94cfca9ac1f1d6b630b4beddfb
|
|
BLAKE2b-256 |
999330be9a84479cf8ea3dab1dd8427e090c3deed74ee90c7539ca71f462c0c8
|
File details
Details for the file catenaconf-0.1.8-py3-none-any.whl
.
File metadata
- Download URL: catenaconf-0.1.8-py3-none-any.whl
- Upload date:
- Size: 18.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 |
edf3893c698dbbd5e9a4f8d5560fba984a63980bd9787212d751b393a9a7ddd3
|
|
MD5 |
5e08c7701c50940e5f22bf5869ca01fd
|
|
BLAKE2b-256 |
baaf72d0d520345c3b35e67025b937ef1dc3605b6f105990ea1bc8d353295e2d
|