Smart configuration framework
Project description
Confit
Confit is a complete and easy-to-use configuration framework aimed at improving the reproducibility of experiments by relying on the Python typing system, minimal configuration files and command line interfaces.
Getting started
Install the library with pip:
pip install confit
Confit only abstracts the boilerplate code related to configuration and leaves the rest of your code unchanged.
Here is an example:
script.py
+ from confit import Cli, Registry, RegistryCollection
+ class registry(RegistryCollection):
+ factory = Registry(("test_cli", "factory"), entry_points=True)
+ @registry.factory.register("submodel")
class SubModel:
# Type hinting is optional but recommended !
def __init__(self, value: float, desc: str = ""):
self.value = value
self.desc = desc
+ @registry.factory.register("bigmodel")
class BigModel:
def __init__(self, date: datetime.date, submodel: SubModel):
self.date = date
self.submodel = submodel
+ app = Cli(pretty_exceptions_show_locals=False)
+ @app.command(name="script", registry=registry)
def func(modelA: BigModel, modelB: BigModel, other: int, seed: int):
assert modelA.submodel is modelB.submodel
assert modelA.date == datetime.date(2010, 10, 10)
print("Other:", other)
+ if __name__ == "__main__":
+ app()
Create a new config file
config.cfg
# CLI sections
[script]
modelA = ${modelA}
modelB = ${modelB}
# CLI common parameters
[modelA]
@factory = "bigmodel"
date = "2003-02-01"
[modelA.submodel]
@factory = "submodel"
value = 12
[modelB]
date = "2003-04-05"
submodel = ${modelA.submodel}
and run the following command from the terminal
python script.py --config config.cfg --seed 42
You can still call the function
method from your code, but now also benefit from
argument validation !
from script import func, BigModel, SubModel
# To seed before creating the models
from confit.utils.random import set_seed
seed = 42
set_seed(seed)
submodel = SubModel(value=12)
# BigModel will cast date strings as datetime.date objects
modelA = BigModel(date="2003-02-01", submodel=submodel)
modelB = BigModel(date="2003-04-05", submodel=submodel)
func(
modelA=modelA,
modelB=modelA,
seed=seed,
)
Visit the documentation for more information!
Acknowledgement
We would like to thank Assistance Publique – Hôpitaux de Paris and AP-HP Foundation for funding this project.
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
File details
Details for the file confit-0.3.0.tar.gz
.
File metadata
- Download URL: confit-0.3.0.tar.gz
- Upload date:
- Size: 23.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.17
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b1e3b4d466ea51251d1b5dd0a3a25314ca27d092d5ae907cad3364f1ad048e7d |
|
MD5 | 794078e2f35c50f234a7c6e9cb84f34a |
|
BLAKE2b-256 | 8723a12530b26d33d7c38ef5444e2469ffe5f44e8949d5645dca759b5463fe34 |