This package supports click commands that use configuration files.
Project description
click is a framework to simplify writing composable commands for command-line tools. This package extends the click functionality by adding support for commands that use configuration files.
EXAMPLE:
A configuration file, like:
# -- FILE: foo.ini [foo] flag = yes name = Alice and Bob numbers = 1 4 9 16 25 filenames = foo/xxx.txt bar/baz/zzz.txt [person.alice] name = Alice birthyear = 1995 [person.bob] name = Bob birthyear = 2001
can be processed with:
# EXAMPLE: # -- FILE: example_command_with_configfile.py (ALL PARTS: simplified) from click_configfile import ConfigFileReader, Param, SectionSchema from click_configfile import matches_section import click class ConfigSectionSchema(object): """Describes all config sections of this configuration file.""" @matches_section("foo") class Foo(SectionSchema): name = Param(type=str) flag = Param(type=bool, default=True) numbers = Param(type=int, multiple=True) filenames = Param(type=click.Path(), multiple=True) @matches_section("person.*") # Matches multiple sections class Person(SectionSchema): name = Param(type=str) birthyear = Param(type=click.IntRange(1990, 2100)) class ConfigFileProcessor(ConfigFileReader): config_files = ["foo.ini", "foo.cfg"] config_section_schemas = [ ConfigSectionSchema.Foo, # PRIMARY SCHEMA ConfigSectionSchema.Person, ] # -- SIMPLIFIED STORAGE-SCHEMA: # section:person.* -> storage:person.* # section:person.alice -> storage:person.alice # section:person.bob -> storage:person.bob # -- ALTERNATIVES: Override ConfigFileReader methods: # * process_config_section(config_section, storage) # * get_storage_name_for(section_name) # * get_storage_for(section_name, storage) # -- COMMAND: CONTEXT_SETTINGS = dict(default_map=ConfigFileProcessor.read_config()) @click.command(context_settings=CONTEXT_SETTINGS) @click.option("-n", "--number", "numbers", type=int, multiple=True) @click.pass_context def command_with_config(ctx, numbers): # -- ACCESS ADDITIONAL DATA FROM CONFIG FILES: Using ctx.default_map for person_data_key in ctx.default_map.keys(): if not person_data_key.startswith("person."): continue person_data = ctx.default_map[person_data_key] process_person_data(person_data) # as dict.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
click-configfile-0.2.3.tar.gz
(62.5 kB
view hashes)
Built Distribution
Close
Hashes for click_configfile-0.2.3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | af2ae7123af57d850cd18edd915893e655b6b1bc30d1302fd040b1059bec073d |
|
MD5 | ba76d0ef57cab2c15e45607983ca6b87 |
|
BLAKE2-256 | c4c4a2f9be9e758ec758542fc0348109c886bb840f88d25f05cb76ed01c07c84 |