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 details)
Built Distribution
File details
Details for the file click-configfile-0.2.3.tar.gz
.
File metadata
- Download URL: click-configfile-0.2.3.tar.gz
- Upload date:
- Size: 62.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 95beec13bee950e98f43c81dcdabef4f644091559ea66298f9dadf59351d90d1 |
|
MD5 | f1871c54e0d3116ae55313120dde6597 |
|
BLAKE2b-256 | 5a2b722c718db0f44e6927767aa422c73a77eaf333138e0a4201ca9b1f72aa2d |
File details
Details for the file click_configfile-0.2.3-py2.py3-none-any.whl
.
File metadata
- Download URL: click_configfile-0.2.3-py2.py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | af2ae7123af57d850cd18edd915893e655b6b1bc30d1302fd040b1059bec073d |
|
MD5 | ba76d0ef57cab2c15e45607983ca6b87 |
|
BLAKE2b-256 | c4c4a2f9be9e758ec758542fc0348109c886bb840f88d25f05cb76ed01c07c84 |