Skip to main content

Drop-in substitute for argparse that reads config files

Project description

configparse

Build Status Code style: black

Summary

configparse is a drop-in-place replacement for python's argparse module which reads configuration files in addition to command line arguments.

Features

If the configuration directory exists, all of files in <config_directory>/<prog>/ are read. All files matching ~/.<prog>* are read.

Files are treated according to their extension: config.json will be parsed as JSON, myconf.yml will be parsed as YAML.

If a file does not have an extension, it will be parsed according to the default file format. This is preset to JSON, but can be changed by applications.

Configuration Directory

On Windows, the configuration directory looked up in %AppData%. On any other OS, it is looked up from $XDG_CONFIG_HOME. If the variable is not present (on any OS), files are read from ~/.config.

Supported Formats

The following file formats are currently supported:

  • JSON (.json)
  • YAML (.yml)
  • INI (.ini)
  • TOML (.toml)

Feel free to submit a pull request adding more formats. See CONTRIBUTING.md for an overview, if you already have a parser it should be very simple.

Using configparse

As a library

If you are an application developer who wants to use the library, there is one entry point: the ConfigParser class, which is also aliased to Parser for convenience. You can treat a ConfigParser instance exactly as you would an ArgumentParser instance (as long as you pass prog to the constructor).

Note that this means that parse_args will parse sys.argv in addition to parsing configuration files. If you don't want this behavior, pass an empty list to parse_args like this: args = parser.parse_args([]).

If you want to change the default file format (e.g. for files named ~/.myprog without an extension), use parser.set_default_ext(ext), where 'ext' is the file extension for your format.

Differences from argparse

The only API differences are as follows:

  • the name of the parser is ConfigParser, not ArgumentParser
  • the prog keyword is required for initializing ConfigParser (so that it knows where to look for configuration files)

That's it. Everything else is done automatically.

Example

from configparse import Parser

parser = Parser(prog='myprogram')
parser.add_argument('--short', '-s', help='use short format')
args = parser.parse_args()

As an end user

You can put a configuration file in any of the following locations:

  • ~/.config/<prog>/
  • ~/.<prog>*

See Features for a full overview.

Example

Assume that the program basic takes the arguments '--short' and '--long'.

$ cat ~/.config/basic/config.yml
short: true
$ basic
You chose the 'short' option.
$ rm ~/.config/basic/config.yml
$ echo 'long: true' > ~/.basic.yml
$ basic
You chose the 'long' option.

Limitations

  • Only long options will be applied. If a short option is present in a config file, it will be treated as if it were a long option, i.e. not looked up. For example, assuming some backend returns the dictionary {'s': 'some value'}:
from configparse import Parser

p = Parser(prog='myprog')
p.add_argument('-s', '--short')
args = p.parse_args()
assert args.short is None
assert args.s == 'some value'

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

configparse-0.1.2.tar.gz (5.8 kB view details)

Uploaded Source

Built Distribution

configparse-0.1.2-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file configparse-0.1.2.tar.gz.

File metadata

  • Download URL: configparse-0.1.2.tar.gz
  • Upload date:
  • Size: 5.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.1 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for configparse-0.1.2.tar.gz
Algorithm Hash digest
SHA256 ff13388abd82d0039f3f58b17b16de6355e94f5f12f9f6697f4d0c3848a8ab06
MD5 5d27f30d47e3b1cfba207e101814e0a0
BLAKE2b-256 e1c5aa435f441cd2ff372a0bfb538be355121792432ad88531007311256af048

See more details on using hashes here.

File details

Details for the file configparse-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: configparse-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 7.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.1 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

File hashes

Hashes for configparse-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 93774ad4e85a5d634e57f6dca59010f74902cca1ac82e2c5d5771cbcdc16dbcd
MD5 6d58f7b4fc9751ea9f494f31314b3f74
BLAKE2b-256 1c53e7ace8d3b335b26bf98def70973c48d571fdb3386d421b8f7ea0047aecad

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page