v4.9.0
Features
-
Parameter.consume_multiplenow acceptsintortuple[int, int]for min/max element bounds.- An
intsets a minimum (e.g.consume_multiple=2requires at least 2 values). - A tuple sets both bounds (e.g.
consume_multiple=(1, 3)requires 1–3 values). - Violations raise
ConsumeMultipleError.
# Require 1–3 space-separated values: --files a.txt b.txt c.txt files: Annotated[list[str], Parameter(consume_multiple=(1, 3))]
By @BrianPugh in #764
- An
-
New field
Parameter.allow_repeatingcontrols whether an option can be specified multiple times.FalseraisesRepeatArgumentErroron repeat (useful withconsume_multiple).Trueallows repeats for any type; scalars use last-wins semantics.None(default) preserves existing behavior: lists accumulate, scalars error.
# Allow --files a b c, but not --files a --files b files: Annotated[list[str], Parameter(consume_multiple=True, allow_repeating=False)] # Last value wins: --color red --color blue → "blue" color: Annotated[str, Parameter(allow_repeating=True)]
By @BrianPugh in #768
-
New field
App.help_prologuedisplays text before the "Usage" line in help output.
Inherited by subcommands; override per-command or set to""to disable.app = App(help_prologue="myapp v1.0.0 — https://example.com")
Bug Fixes
- Positional-only list parameters no longer consume tokens that appear after interleaved keyword arguments.
a b --bar 8 dnow correctly errors instead of silently assigningdto the positional list. By @BrianPugh in #766
Other
- Added contributing guide. By @BrianPugh in #767
New Contributors
Full Changelog: v4.8.0...v4.9.0