Skip to main content

Turns TOML files and command-line arguments into dataclasses for config

Project description

xconf - Dataclasses and TOML for command configuration

Demo

An example of how to use xconf.Command, xconf.field, and xconf.config is in demo.py. Run it to see its configuration keys.

$ python demo.py demo_command -h
demo_command: Demo command
usage: demo.py demo_command [-c CONFIG_FILE] [-h] [-v] [--dump-config] [vars ...]

positional arguments:
  vars                  Config variables set with 'key.key.key=value' notation

optional arguments:
  -c CONFIG_FILE, --config-file CONFIG_FILE
                        Path to config file (default: demo_command.conf.toml)
  -h, --help            Print usage information
  -v, --verbose         Enable debug logging
  --dump-config         Dump final configuration state as TOML and exit
configuration keys:
  collections
      dict[str, ExtendedThingie]
  collections.<str>.name
      str
  collections.<str>.extended
      bool
  either_one
      [int, str]
  should_bar
      bool
     (default: False)
  should_foo
      bool
    Whether demo should foo
  number_list
      list[int]
    List of favorite numbers
  sequence
      list[ExtendedThingie]

Default config file

The command name, demo_command, is generated from the class name and used to find a default configuration file (demo_command.conf.toml) in the current directory.

Providing arguments at the command line

Any configuration key from the help output can be supplied on the command line in a dotted.name=value format.

For lists of primitive types (str, int, float), you can just use commas to separate the values on the right hand side of the =. Example: number_list=1,2,3.

To override a single entry in a list, use some_name[#] or dotted[#].name=value where # is an integer index will work. Example: number_list[0]=99

String values are bare (i.e. no quotation marks around value). Boolean values are case-insensitive true, t, or 1 for True, false, f, or 0 for False.

Structuring the command

See demo.py for an example. Note that commands must subclass xconf.Command and apply the @xconf.config decorator. Options are defined by a hierarchy of dataclasses. (For uninteresting reasons, they aren't strictly speaking import dataclass dataclasses.)

License

All code outside xconf/vendor/ is provided under the terms of the MIT License, except for demo.py and demo_command.conf.toml, which are released into the public domain for you to build off of.

Note that code under xconf/vendor/ is used under the terms of the licenses listed there.

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

xconf-0.0.1.tar.gz (27.4 kB view hashes)

Uploaded Source

Built Distribution

xconf-0.0.1-py3-none-any.whl (28.8 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