Skip to main content

version-badge coverage-badge

conficus is a python toml configuration wrapper. providing some extra type coercions (e.g. str -> Path) easier access and section inheritance.

conficus python 3.11+.

Installation

Install conficus with pip.

pip install conficus

Quick Start

Basic usage

>>>
>>> import conficus
>>>

Configurations can be loaded directly from a string variable or read via file path string or Path object:

>>> config = conficus.load('/Users/mgemmill/config.ini', toml=True)
>>>

Easier Selection

Accessing nested sections is made easier with chained selectors:

>>> # regular dictionary access:
...
>>> config['app']['debug']
True
>>>
>>> # chained selector access:
...
>>> config['app.debug']
True

Inheritance

Inheritance pushes parent values down to any child section:

# config.ini

[app]
debug = true

[email]
_inherit = 0
host = "smtp.mailhub.com"
port = 2525
sender = "emailerdude@mailhub.com"

[email.alert]
to = ["alert-handler@service.com"]
subject = "THIS IS AN ALERT"
body = "Alerting!"

It is turned on via the inheritance option:

>>> config = conficus.load("config.ini", inheritance=True)

Sub-sections will now contain parent values:

>>> alert_config = config["email.alert"]
>>> alert_config["host"]
>>> "smtp.mailhub.com"
>>> alert_config["subject"]
>>> "THIS IS AN ALERT"

Inheritence can be controled per section via the _inherit option. _inherit = 0 will block the section from inheriting parent values. _inherit = 1 would only allow inheritance from the sections immediate parent; _inherit = 2 would allow both the immediate parent and grandparent inheritance.

_inherit values are stripped from the resulting configuration dictionary.

Additional Conversion Options

In addition to toml’s standard type conversions, conficus has two builtin conversion options and also allows for adding custom conversions.

Conversions only work with string values.

Path Conversions

The pathlib option will convert any toml string value that looks like a path to a python pathlib.Path object:

>>> config = conficus.load("path = '/home/user/.dir'", pathlib=True)
>>> isinstance(config["path"], Path)
>>> True

Decimal Conversions

The decimal option will convert any toml string value that matches \d+\.\d+ to a python Decimal object:

>>> config = conficus.load("number = '12.22'", decimal=True)
>>> isinstance(config["number"], Decimal)
>>> True

Custom Conversions

A custom coercer consists of 3 valus:

  1. a name string

  2. a regular expression string

  3. a conversion function that takes a string value and returns the coerced value

This a contrived example, where we’re defining a notation (“upper::”) to identify a custom value we want to convert. You could easily take this example and do something similar that decrypts an encrypted value.

>>> def convert_to_caps(raw_value: str) -> str:
...     return raw_value.upper()
>>> config = conficus.load("address = 'upper::121 fleet street'", coercers=[("upper-case", (r"^upper::(?P<value>.*)$", convert_to_caps))])
>>> config["address"]
... "121 FLEET STREET"

Release files for conficus 1.0.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 conficus 1.0.0
File Size Uploaded
conficus-1.0.0.tar.gz 7.3 kB Details

Built distribution (wheel)

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

Total release size: 16.9 kB

Release files / conficus-1.0.0.tar.gz

Download URL conficus-1.0.0.tar.gz
Size 7.3 kB
Tags Source
SHA-256 checksum
How to use checksums
11dd676ca8dca2bd80820d13048568480ebaeee7f0d117dc4a49bb2b1292eba4
BLAKE2b-256 checksum
How to use checksums
dac17ac0e78672854e8e88c68a093ec4ac63e26d371c0cb0d9914d3155065d11
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.3 CPython/3.10.6 Darwin/24.6.0

Release files / conficus-1.0.0-py3-none-any.whl

Download URL conficus-1.0.0-py3-none-any.whl
Size 9.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8c9d368d4bdbe744372718075a3b9942abf5730e2e3ed6ac7a47d2f3a48305f7
BLAKE2b-256 checksum
How to use checksums
6db46d8821d2d7286035b3df001fd962382062e66f23f44a8fad4c7003a65a49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.3 CPython/3.10.6 Darwin/24.6.0

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

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