click 8.5.0

8.5.0
Added 3
  • Add built-in shell completion support for PowerShell (Windows PowerShell 5.1+ and pwsh 7+) alongside the existing bash, zsh, and fish completers
  • Argument accepts a help parameter, and help output includes a Positional arguments section when argument help is available
  • Add custom_version_option, a --version option whose output is produced by a callback
Changed 7
  • Supported versions of Windows enable ANSI terminal styles by default, and Colorama is no longer a dependency
  • unstyle and the ANSI handling behind help-text wrapping now strip the full CSI escape-sequence grammar
  • Streamline Option flag handling with focused helpers and lazy resolution of flag_value and default
  • prompt() is now generically typed and returns the type produced by type, value_proc, or a matching default
  • Command.get_help_option_names returns the help option names in the order they were declared
  • The temporary file the pager writes to on Windows is opened with the encoding get_pager_file picked for the output stream and with errors='replace'
  • The temporary file pager backend forwards parameters the user set in PAGER to the pager command instead of silently dropping them
Fixed 7
  • confirm() and prompt() strip ANSI color and style codes from the prompt when the output stream does not support them
  • Path with allow_dash=True no longer triggers a BytesWarning when checking a value against the - convention
  • style() and secho() no longer silently drop the 256-color index 0 (black) and now validate color arguments
  • The automatic help option stores its value under the reserved name _click_default_help instead of help, so a parameter named help no longer breaks parsing
  • get_pager_file yields a text stream on Windows again, fixing a regression from 8.4.0
  • progressbar settles on its final position when update_min_steps does not divide the total
  • An error raised while writing to the pager no longer gets replaced by PermissionError on Windows
Deprecated 3
  • get_binary_stream and get_text_stream are deprecated and will be removed in Click 9.0
  • The click.utils names LazyFile, KeepOpenFile, make_default_short_help, PacifyFlushWrapper, and safecall are now private and deprecated
  • Deprecate CliRunner.isolated_filesystem in favor of temporary directories or pytest fixtures

From click

This is the Click 8.5.0 feature release. A feature release may include new features, remove previously deprecated code, add new deprecation, or introduce potentially breaking changes.

We encourage everyone to upgrade. You can read more about our Version Support Policy on our website.

PyPI: https://pypi.org/project/click/8.5.0/ Changes: https://click.palletsprojects.com/page/changes/#version-8-5-0 Milestone https://github.com/pallets/click/milestone/33

  • Add built-in shell completion support for PowerShell (Windows PowerShell 5.1+ and pwsh 7+) alongside the existing bash, zsh, and fish completers. Use _FOO_BAR_COMPLETE=powershell_source foo-bar to generate the completion script. #2672 #3637
  • Supported versions of Windows enable ANSI terminal styles by default. Colorama is no longer a dependency and is not used. #2986 #3505
  • {class}Argument accepts a help parameter, and help output includes a Positional arguments section when argument help is available. #2983 #3473
  • confirm() and prompt() strip ANSI color and style codes from the prompt when the output stream does not support them, matching echo(). This stripping was lost in 8.4.0 when #2969 began writing the prompt with input() directly. #3572 #3653
  • {class}Path with allow_dash=True no longer triggers a BytesWarning, an error under python -bb, when checking a value against the - convention. #2877 #3642
  • Add {func}custom_version_option, a --version option whose output is produced by a callback, covering cases {func}version_option intentionally does not. The feature set of {func}version_option is now frozen; see discussion #3527. #3581
  • style() and secho() no longer silently drop the 256-color index 0 (black) passed as fg or bg, and now validate color arguments. Invalid colors raise a ValueError instead of a TypeError. #3677
  • The automatic help option stores its value under the reserved name _click_default_help instead of help, so a parameter named help no longer breaks parsing. The new name is visible in {meth}Command.to_info_dict output. Parameters that overwrite each other's value trigger a warning: an argument sharing its name with another parameter, or any parameter claiming the reserved name. Options may still share a name to compete for the same value (feature switches). #2819 #3678
  • unstyle and the ANSI handling behind help-text wrapping now strip the full CSI escape-sequence grammar. #3681
  • Streamline Option flag handling: the flag-kind, type, lazy-default and validation steps in Option.__init__ move into focused helpers, and flag_value and default keep their unset sentinel at construction (resolved lazily on read) so is UNSET reliably tells a user-supplied value from an auto-derived one. Runtime behavior is unchanged, but {meth}Parameter.to_info_dict now resolves default=True on a feature switch to its flag_value, matching what the function receives at call time. #3641
  • {func}get_binary_stream and {func}get_text_stream are deprecated and will be removed in Click 9.0. #3481 #3695
  • The following click.utils names were never intentionally public and are now private (_-prefixed). The old names remain available with a DeprecationWarning until Click 9.0: LazyFile, KeepOpenFile, make_default_short_help, PacifyFlushWrapper, and safecall. #3099 #3695
  • Deprecate {meth}CliRunner.isolated_filesystem. It relies on {func}os.chdir, which mutates process-global state and is not thread-safe. The helper predates Python 3 and modern pytest: use a temporary directory ({class}tempfile.TemporaryDirectory or pytest's tmp_path fixture) with absolute paths instead. For running tests in parallel, use process-based isolation (such as pytest-xdist) rather than threads, since {meth}CliRunner.invoke also redirects the process-global standard streams. #3501 #3700 #3704
  • prompt() is now generically typed and returns the type produced by type, value_proc, or a matching default instead of Any. {class}ParamType takes a second optional type parameter describing the input value it accepts (ParamType[int, str] for a type converting strings to integers), defaulting to Any. #3407
  • {meth}Command.get_help_option_names returns the help option names in the order they were declared. #3728
  • {func}get_pager_file yields a text stream on Windows again. The temporary file backend opened its file in binary mode, so writing a str to the pager raised TypeError: a bytes-like object is required, not 'str', and the color argument was ignored on that path. Regression introduced in 8.4.0 by #1572. #3731 #3732 #3740 #3739
  • {func}progressbar settles on its final position when update_min_steps does not divide the total. Steps below that threshold are applied when the bar finishes, so show_pos renders 20/20 rather than the last multiple it reached. #3571 #3769
  • An error raised while writing to the pager no longer gets replaced by PermissionError: [WinError 32] on Windows. The temporary file backend unlinked its file without closing it first, and Windows refuses to remove a file the process still holds open, so the cleanup failure masked the real exception. #3731 #3764
  • The temporary file the pager writes to on Windows is opened with the encoding {func}get_pager_file picked for the output stream, and with errors="replace" to match the pipe backend. Any text stdout can encode reaches the pager.
  • The temporary file pager backend forwards any parameters the user set in PAGER to the pager command instead of silently dropping them. On Windows, PAGER="less -R" now invokes less -R on the temporary file rather than bare less. #3777
  • Improve raw mode detection by parsing the option tokens. #3416 #3777
  • {func}edit accepts os.PathLike values for filename, in addition to strings. #2869 #3781
View original

Upgraded? How did it go?

Discussion