Configpile: get clean configuration out of a pile of arguments

Configpile: get clean configuration out of a pile of arguments

Configpile is a replacement for the argparse module of the Python standard library.

It is written in clean, modern Python with extensive support of PEP 484 type hints and dataclasses.

It processes configuration settings coming from a variety of sources:

  • Environment variables

  • Command-line parameters

  • Configuration files (INI)

Its best selling points are:

  • Code compactness; from the same dataclass declaration, we derive a configuration parser, a command-line usage description and a Sphinx documentation block.

  • Compatibility with IDEs (due to typed dataclasses as configuration results)

  • Error reporting: Instead of crashing at the first parse error, configpile collects all the errors encountered and reports all of them.

How to use

configpile is easily installed through pip:

pip install configpile

It supports Python >= 3.8, depends only on class-doc and typing_extensions.

Optionally, it supports parsy (to define more complicated parsers) and rich (for pretty-printing error information).

You can do:

pip install configpile[parsy,rich]

Code example

(taken from Step 2: Reuse defaults, short flags)

"""
Calculator tutorial, step 2
"""
from dataclasses import dataclass

from typing_extensions import Annotated

from configpile import Config, Param, parsers


@dataclass(frozen=True)
class Calc(Config):
    """
    Command-line tool that sums two floating point numbers
    """

    #: First argument
    x: Annotated[float, Param.store(parsers.float_parser, short_flag_name="-x")]

    #: Second argument
    y: Annotated[float, Param.store(parsers.float_parser, short_flag_name="-y")]


c = Calc.from_command_line_()
print(f"{c.x} + {c.y} = {c.x+c.y}")

Execution result

$ python ../../examples/calculator2.py --help
usage: ../../examples/calculator2.py [-x X] [-y Y]

Command-line tool that sums two floating point numbers

required arguments:
  -x X, --x X  First argument
  -y Y, --y Y  Second argument
$ python ../../examples/calculator2.py -x 1 -y 2
1.0 + 2.0 = 3.0