Skip to content

Protype click option groups

Stefan Scherfke requested to merge option-groups into main

If click-option-group is available, this will automatically create option groups:

import click
import typed_settings as ts


@ts.settings
class Coverage:
    """
    Coverage settings
    """
    src: str = ts.option(default="", click={"param_decls": ("--cov", "src")})
    report: str = ""


@ts.settings
class Emoji:
    """
    Emoji settings
    """
    enable: bool = True


@ts.settings
class Main:
    """
    Main settings
    """
    a: int = 0
    b: int = 0
    cov: Coverage = Coverage()
    emoji: Emoji = Emoji()


@click.command()
@ts.click_options(Main, "pytest")
def cli(settings: Main):
    print(settings)


if __name__ == "__main__":
    cli()
❯❯❯ python optgrouptest.py --help
Usage: optgrouptest.py [OPTIONS]

Options:
  Main settings:
    --a INTEGER                   [default: 0]
    --b INTEGER                   [default: 0]
  Coverage settings:
    --cov TEXT
    --cov-report TEXT
  Emoji settings:
    --emoji-enable / --no-emoji-enable
                                  [default: emoji-enable]
  --help                          Show this message and exit.

The behavior can be customized by passing a DecoratorFactory to click_utils(). This MR contains two - normal click options and option groups, but users can implement and pass their own.

See: #15 (closed)

Edited by Stefan Scherfke

Merge request reports