Skip to main content

UpsilonConf

UpsilonConf is a simple configuration library written in Python.

A few features that you might find interesting/useful:

  • dict-like configuration object with attribute access (cf. attrdict)
  • hierarchical indexing by means of tuples or dot-strings (cf. omegaconf)
  • read from/write to various file formats
  • use hierarchical configs with options (cf. config groups in hydra)
  • retrieve and manipulate config using CLI (cf. omegaconf)
  • minimal dependencies (cf. attrdict)
  • configs with overwriting protection to prevent unexplainable bugs

pypi badge conda badge docs badge licencse badge


How to install

Using pip to install from PyPI:

python -m pip install upsilonconf

Optional dependencies (e.g. pyyaml) can be included using

python -m pip install upsilonconf[YAML]

Using conda to install from Anaconda:

conda install hoedt::upsilonconf

Optional dependencies (e.g. pyyaml) have to be installed separately.


How to Use

>>> import upsilonconf
>>> from upsilonconf import PlainConfiguration as Configuration
Creation

load config from file

>>> conf = upsilonconf.load("my_config.yml")

or directly create config object

>>> conf = Configuration(key1="value1", sub={"key1": 1, "key2": 2})
Indexing

Access values the way you like

>>> assert conf["key1"] == conf.key1
>>> assert conf.sub.key2 == conf["sub", "key2"]
>>> assert conf["sub", "key1"] == conf["sub.key1"]
>>> assert conf["sub.key2"] == conf.sub.key2
Cool Tricks

unpack configurations to function arguments

>>> def test(key1, key2):
...    return key1 + key2
>>> test(**conf.sub)
3

convert config to flat dict

>>> conf.to_dict(flat=True)
{'key1': 'value1', 'sub.key1': 1, 'sub.key2': 2}

merge configurations with |

>>> merged = conf | {"sub.key2": 3, "sub.key3": 2}
>>> merged.sub.key2
3
>>> merged.sub.key3
2

More details can be found in the documentation

flexible I/O

support for different file formats

>>> conf = upsilonconf.load("config.yaml")  # with patched float parsing
>>> upsilonconf.save(conf, "config.json")  # with indentation by default

transform non-identifier keys in files on-the-fly

>>> conf = upsilonconf.load("config.yaml", key_mods={" ": "_"})
>>> upsilonconf.save(conf, "config.json", key_mods={"_": " "})

organise hierarchical configs in directories

>>> upsilonconf.save({"key": "option1"}, "config_dir/config.json")
>>> upsilonconf.save({"foo": 1, "bar": 2}, "config_dir/key/option1.json")
>>> upsilonconf.save({"foo": 2, "baz": 3}, "config_dir/key/option2.json")

load arbitrary parts of hierarchy

>>> conf = upsilonconf.load("config_dir/key")
>>> conf == Configuration(
...     option1={"foo": 1, "bar": 2},
...     option2={"foo": 2, "baz": 3}
... )

hierarchies enable option feature

>>> conf = upsilonconf.load("config_dir")
>>> conf == Configuration(key={"foo": 1, "bar": 2})

store hierarchy to directory with a default file format

>>> upsilonconf.save(conf, "backup")
CLI helper

read command-line arguments

>>> conf = upsilonconf.from_cli()

parse arbitrary arguments to construct config

>>> conf = upsilonconf.from_cli(["key=1", "sub.test=2"])
>>> assert conf == Configuration(key=1, sub={"test": 2})

use file as base config

>>> conf = upsilonconf.from_cli(["--config", "config.yaml", "key=1", "sub.test=2"])
>>> result = upsilonconf.load("config.yaml")
>>> result.overwrite_all(key=1, sub={"test": 2})
>>> assert conf == result

enhance existing argparser

>>> from argparse import ArgumentParser
>>> parser = ArgumentParser()
>>> # add other arguments...
>>> conf, args = upsilonconf.from_cli(parser=parser)

Feedback

This library is very much a work in progress. I welcome any feedback, especially in shaping the interface. Of course, also bug reports and feature requests are very useful feedback. Just create an issue on github.

Metadata

Release files for upsilonconf 0.7.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for upsilonconf 0.7.0
File Size Uploaded
upsilonconf-0.7.0.tar.gz 31.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for upsilonconf 0.7.0
File Interpreter ABI Platform
upsilonconf-0.7.0-py3-none-any.whl Python 3 none any Details

Total release size: 54.5 kB

Release files / upsilonconf-0.7.0.tar.gz

Download URL upsilonconf-0.7.0.tar.gz
Size 31.0 kB
Tags Source
SHA-256 checksum
How to use checksums
1193c6d24ced4ffbc5a6c3a4068d405aca34212acb846de4be27894ff9b2cbfe
BLAKE2b-256 checksum
How to use checksums
9551267eb42f728913316708e24db733391d5057cb790fd00e73222fc636a8f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16

Release files / upsilonconf-0.7.0-py3-none-any.whl

Download URL upsilonconf-0.7.0-py3-none-any.whl
Size 23.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1ad07186c2411153f870bf7caeba36bb2cf0dd73e60d0945efd4d1656727d6dd
BLAKE2b-256 checksum
How to use checksums
f3e685adcd3086cddd474d8f82a9d24aea43d9c5013c8e3d12bccb2c13166d96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.16
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page