Skip to main content

Merge your config files and set parameters from the command line in a simple way.

Project description

CLI Config

Lightweight library to merge your configs (optionally nested) and set parameters from command line.

Documentation :memo: here

PyPI version PythonVersion License

Ruff_logo Black_logo

Ruff Flake8 Pydocstyle MyPy PyLint

Tests Coverage Documentation Status

Installation

In a new virtual environment, install the package with:

pip install cliconfig

Quick start

First create a default config that can be split in multiple files that will be merged (from left to right in make_config function):

# default1.yaml
param1: 1
param2: 0
letters:
  letter1: a
  letter2: b
# default2.yaml
param1: 1
param2: 2  # will override param2 from default1.yaml
letters.letter3: c  # add a new parameter

Now you can set up your program to use the config:

# main.py
from cliconfig import make_config, show_config

config = make_config('default1.yaml', 'default2.yaml')
show_config(config)

Then add one or multiple additional config files that will override the default values. Be careful, the additional config files cannot bring new parameters by default. If you want to add new parameters (not advised for retro-compatibility, readability and security), you can add allow_new_keys=True in make_config function.

# exp1.yaml
letters:
  letter3: C
# exp2.yaml
param1: -1
letters.letter1: A

Now you can launch the program with additional configurations and parameters. The additional configurations are indicated with --config (separate with comma, without space) and the parameters with --<param_name>. The default configuration will be merged with the additional configurations (from left to right), then the parameters will be set.

python main.py --config exp1.yaml,exp2.yaml --param2=-2 --letters.letter2='B'

Will show:

[CONFIG] Merge 2 default configs, 2 additional configs and 2 CLI parameter(s).

Config:
    param1: -1
    param2: -2
    letters:
        letter1: A
        letter2: B
        letter3: C

Note that the configurations are native python dicts.

Manipulate configs

To merge configs, you can use cliconfig.merge_config function. It supports unflatten (or nested) dicts like {'a': {'b': 1, 'c': 2}}, flatten dicts like {'a.b': 1, 'a.c': 2}, and a mix of both. The dicts will be flatten before merging. Sometimes you can have conflicts in flatten operation for instance with {'a.b': 1, 'a': {'b': 2}} that have two different values for a.b. That's why you can use a priority parameter to choose which value to keep before merging.

You can also save, load and display configs with cliconfig.save_config, cliconfig.load_config and cliconfig.show_config functions.

How to contribute

For development, install the package dynamically and dev requirements with:

pip install -e .
pip install -r requirements-dev.txt

Everyone can contribute to CLI Config, and we value everyone’s contributions. Please see our contributing guidelines for more information 🤗

Todo

To do:

  • add json and ini support
  • avoid changing keys order in merge_config

License

Copyright (C) 2023 Valentin Goldité

This program is free software: you can redistribute it and/or modify it under the terms of the MIT License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

This project is free to use for COMMERCIAL USE, MODIFICATION, DISTRIBUTION and PRIVATE USE as long as the original license is include as well as this copy right notice at the top of the modified files.

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

cliconfig-0.1.4.tar.gz (27.1 kB view hashes)

Uploaded Source

Built Distribution

cliconfig-0.1.4-py3-none-any.whl (8.2 kB view hashes)

Uploaded Python 3

Supported by

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