lunaconf is a Python library to support easy-to-understand configuration for evaluations
Project description
lunaconf
lunaconf is a Python library to support easy-to-understand configuration for evaluations
Installation
pip install lunaconf
Usage
It provides the following interfaces:
-
lunaconf.LunaConf: A base class that every configuration class should inherit from. It is a subclass ofpydantic.BaseModeland thus Pydantic features can be used.import typing, lunaconf, pydantic class Config(lunaconf.LunaConf): require: int opt_int: int = 10 opt_str: str = "default" opt_list: list[int] = pydantic.Field(default_factory=lambda: [1, 2, 3]) @classmethod def __lunaconf_default__(cls) -> typing.Self: return cls(require=42)
Here
__lunaconf_default__is a class method that should be overloaded if the class has required fields. It should return a default instance of the class to set default values for the fields. -
lunaconf.lunaconf_cli: Construct a configuration from the CLI.# example.py import lunaconf config = lunaconf.lunaconf_cli(Config)
Some CLI arguments and their corresponding generated configurations are as follows.
$ python3 example.py # Config(require=42, opt_int=10, opt_str='default', opt_list=[1, 2, 3]) $ python3 example.py -J config.json # suppose config.json contains {"require": 100} # Config(require=100, opt_int=10, opt_str='default', opt_list=[1, 2, 3]) $ python3 example.py opt_int=233 # Config(require=42, opt_int=233, opt_str='default', opt_list=[1, 2, 3]) $ python3 example.py opt_list.0=4 # Config(require=42, opt_int=10, opt_str='default', opt_list=[4, 2, 3])
The
.in the CLI modifications can be used by nested fields and list indices:# config class Inner(lunaconf.LunaConf): a: int = 1 class Outer(lunaconf.LunaConf): inner: typing.Optional[Inner] = None lst: list[int] = lunaconf.Field(default_factory=lambda: [1, 2, 3])
$ python3 example.py # Outer(inner=None, lst=[1, 2, 3]) $ python3 example.py inner.a=10 lst.1=20 # Outer(inner=Inner(a=10), lst=[1, 20, 3])
Available command-line options:
commandpositional arguments: specify the modifications to the configuration in the form ofkey1.key2=value1; key3.key4=value2etc. The.can be used to access nested fields and list indices.-j <json_str> / -J <json_file>: specify the JSON to overload the configuration.-t <toml_str> / -T <toml_file>: specify the TOML to overload the configuration.-d <str> / -D <file>: detect the format of the string/file and parse it accordingly. It will first try to parse it as JSON, if it fails, it will try to parse it as TOML. If both fail, an error will be raised.-C <file>: the extra configuration file. This file contains command line arguments (one group per line) that will be parsed interleaved with the other command line arguments. Lines starting with#are treated as comments and ignored.-a: whether or not output all fields with-p / -Pflags, and also affect the application ofpost_action_with_allorpost_action_without_allcallables passed tolunaconf_cli.-p: print the final configuration in JSON and exit.-P: print the final configuration in TOML and exit.
Special Values
The following special values can be used in the command line arguments to represent certain Python values, and are output in some cases for unsupported values in JSON/TOML:
- Input
<null>leads toNone; TOML will output<null>forNone. - Input
<del>to delete element in an array, or reset the field to its default. - Input
<inf>,<-inf>,<nan>lead tofloat('inf'),float('-inf'),float('nan')respectively; JSON will output<inf>,<-inf>,<nan>for these values.
Strings inside the angle brackets are case-insensitive.
Examples
For more examples, please refer to the unit tests in the tests folder.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lunaconf-0.4.0.tar.gz.
File metadata
- Download URL: lunaconf-0.4.0.tar.gz
- Upload date:
- Size: 6.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
79e8dbb0ba38ad34eb0703820452c04e9b8a58cc4ce649f5a6aa3a05a9c8de38
|
|
| MD5 |
c6694788a9010a4aa1756ff78849d608
|
|
| BLAKE2b-256 |
283650880e813ac0559b0ac6494a12d297d1176cc0570b4861e4b3bd9a0b372d
|
File details
Details for the file lunaconf-0.4.0-py3-none-any.whl.
File metadata
- Download URL: lunaconf-0.4.0-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.17
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f1d6c80a0d83f6f32d3563f78679073636dafdacbc6a485b20bf5f36c4c7a8ac
|
|
| MD5 |
4f58d37c8087bb802d2407d2ec004e38
|
|
| BLAKE2b-256 |
702bb647d25c86d22cc327caac78002206cf2d3de2c2fadc339fb3bcd8bd5875
|