Hacker News new | ask | show | jobs
by kdeldycke 1093 days ago
If you maintain a Python CLI, you can use Click-Extra [1].

It provides a ready-to-use --config option which reports how it sources the configuration file [2]:

  $ my-cli --verbosity DEBUG subcommand
  debug: Load configuration matching ~/.config/my-cli/*.{toml,yaml,yml,json,ini,xml}
  debug: Pattern is not an URL.
  debug: Search local file system.
  debug: No configuration file found.
  (...)
It also adds an auto-magic --show-params [3] to help you see where parameters are coming from:

  $ cli --int-param1 3 --show-params
  ╭─────────────────┬─────────────────────────────────────────┬─────────────────────────────────────────┬──────┬──────────────────┬─────────┬─────────────────┬─────────────────────────────────────────────────────────┬─────────────────────────────────────────────────────────┬─────────────╮
  │ ID              │ Class                                   │ Spec.                                   │ Type │ Allowed in conf? │ Exposed │ Env. vars.      │ Default                                                 │ Value                                                   │ Source      │
  ├─────────────────┼─────────────────────────────────────────┼─────────────────────────────────────────┼──────┼──────────────────┼─────────┼─────────────────┼─────────────────────────────────────────────────────────┼─────────────────────────────────────────────────────────┼─────────────┤
  │ cli.color       │ click_extra.colorize.ColorOption        │ --color, --ansi / --no-color, --no-ansi │ bool │                 │        │ CLI_COLOR       │ True                                                    │ True                                                    │ DEFAULT     │
  │ cli.config      │ click_extra.config.ConfigOption         │ -C, --config CONFIG_PATH                │ str  │                 │        │ CLI_CONFIG      │ /home/runner/.config/cli/*.{toml,yaml,yml,json,ini,xml} │ /home/runner/.config/cli/*.{toml,yaml,yml,json,ini,xml} │ DEFAULT     │
  │ cli.help        │ click_extra.colorize.HelpOption         │ -h, --help                              │ bool │                 │        │ CLI_HELP        │ False                                                   │ False                                                   │ DEFAULT     │
  │ cli.int_param1  │ cloup._params.Option                    │ --int-param1 INTEGER                    │ int  │                 │        │ CLI_INT_PARAM1  │ 10                                                      │ 3                                                       │ COMMANDLINE │
  │ cli.int_param2  │ cloup._params.Option                    │ --int-param2 INTEGER                    │ int  │                 │        │ CLI_INT_PARAM2  │ 555                                                     │ 555                                                     │ DEFAULT     │
  │ cli.show_params │ click_extra.parameters.ShowParamsOption │ --show-params                           │ bool │                 │        │ CLI_SHOW_PARAMS │ False                                                   │ True                                                    │ COMMANDLINE │
  │ cli.time        │ click_extra.timer.TimerOption           │ --time / --no-time                      │ bool │                 │        │ CLI_TIME        │ False                                                   │ False                                                   │ DEFAULT     │
  │ cli.verbosity   │ click_extra.logging.VerbosityOption     │ -v, --verbosity LEVEL                   │ str  │                 │        │ CLI_VERBOSITY   │ WARNING                                                 │ Debug                                                   │ COMMANDLINE │
  │ cli.version     │ click_extra.version.VersionOption       │ --version                               │ bool │                 │        │ CLI_VERSION     │ False                                                   │ False                                                   │ DEFAULT     │
  ╰─────────────────┴─────────────────────────────────────────┴─────────────────────────────────────────┴──────┴──────────────────┴─────────┴─────────────────┴─────────────────────────────────────────────────────────┴─────────────────────────────────────────────────────────┴─────────────╯
[1]: https://github.com/kdeldycke/click-extra

[2]: https://kdeldycke.github.io/click-extra/config.html

[3]: https://kdeldycke.github.io/click-extra/parameters.html#show...