Update dependency click to ~=8.2.0 (#83) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [click](https://redirect.github.com/pallets/click) ([changelog](https://click.palletsprojects.com/changes/)) | minor | `~=8.1.8` -> `~=8.2.0` | --- ### Release Notes <details> <summary>pallets/click (click)</summary> ### [`v8.2.0`](https://redirect.github.com/pallets/click/blob/HEAD/CHANGES.rst#Version-820) [Compare Source](https://redirect.github.com/pallets/click/compare/8.1.8...8.2.0) Released 2025-05-10 - Drop support for Python 3.7, 3.8, and 3.9. :pr:`2588` :pr:`2893` - Use modern packaging metadata with `pyproject.toml` instead of `setup.cfg`. :pr:`2438` - Use `flit_core` instead of `setuptools` as build backend. :pr:`2543` - Deprecate the `__version__` attribute. Use feature detection, or `importlib.metadata.version("click")`, instead. :issue:`2598` - `BaseCommand` is deprecated. `Command` is the base class for all commands. :issue:`2589` - `MultiCommand` is deprecated. `Group` is the base class for all group commands. :issue:`2590` - The current parser and related classes and methods, are deprecated. :issue:`2205` - `OptionParser` and the `parser` module, which is a modified copy of `optparse` in the standard library. - `Context.protected_args` is unneeded. `Context.args` contains any remaining arguments while parsing. - `Parameter.add_to_parser` (on both `Argument` and `Option`) is unneeded. Parsing works directly without building a separate parser. - `split_arg_string` is moved from `parser` to `shell_completion`. - Enable deferred evaluation of annotations with `from __future__ import annotations`. :pr:`2270` - When generating a command's name from a decorated function's name, the suffixes `_command`, `_cmd`, `_group`, and `_grp` are removed. :issue:`2322` - Show the `types.ParamType.name` for `types.Choice` options within `--help` message if `show_choices=False` is specified. :issue:`2356` - Do not display default values in prompts when `Option.show_default` is `False`. :pr:`2509` - Add `get_help_extra` method on `Option` to fetch the generated extra items used in `get_help_record` to render help text. :issue:`2516` :pr:`2517` - Keep stdout and stderr streams independent in `CliRunner`. Always collect stderr output and never raise an exception. Add a new output stream to simulate what the user sees in its terminal. Removes the `mix_stderr` parameter in `CliRunner`. :issue:`2522` :pr:`2523` - `Option.show_envvar` now also shows environment variable in error messages. :issue:`2695` :pr:`2696` - `Context.close` will be called on exit. This results in all `Context.call_on_close` callbacks and context managers added via `Context.with_resource` to be closed on exit as well. :pr:`2680` - Add `ProgressBar(hidden: bool)` to allow hiding the progressbar. :issue:`2609` - A `UserWarning` will be shown when multiple parameters attempt to use the same name. :issue:`2396` - When using `Option.envvar` with `Option.flag_value`, the `flag_value` will always be used instead of the value of the environment variable. :issue:`2746` :pr:`2788` - Add `Choice.get_invalid_choice_message` method for customizing the invalid choice message. :issue:`2621` :pr:`2622` - If help is shown because `no_args_is_help` is enabled (defaults to `True` for groups, `False` for commands), the exit code is 2 instead of 0. :issue:`1489` :pr:`1489` - Contexts created during shell completion are closed properly, fixing a `ResourceWarning` when using `click.File`. :issue:`2644` :pr:`2800` :pr:`2767` - `click.edit(filename)` now supports passing an iterable of filenames in case the editor supports editing multiple files at once. Its return type is now also typed: `AnyStr` if `text` is passed, otherwise `None`. :issue:`2067` :pr:`2068` - Specialized typing of `progressbar(length=...)` as `ProgressBar[int]`. :pr:`2630` - Improve `echo_via_pager` behaviour in face of errors. :issue:`2674` - Terminate the pager in case a generator passed to `echo_via_pager` raises an exception. - Ensure to always close the pipe to the pager process and wait for it to terminate. - `echo_via_pager` will not ignore `KeyboardInterrupt` anymore. This allows the user to search for future output of the generator when using less and then aborting the program using ctrl-c. - `deprecated: bool | str` can now be used on options and arguments. This previously was only available for `Command`. The message can now also be customised by using a `str` instead of a `bool`. :issue:`2263` :pr:`2271` - `Command.deprecated` formatting in `--help` changed from `(Deprecated) help` to `help (DEPRECATED)`. - Parameters cannot be required nor prompted or an error is raised. - A warning will be printed when something deprecated is used. - Add a `catch_exceptions` parameter to `CliRunner`. If `catch_exceptions` is not passed to `CliRunner.invoke`, the value from `CliRunner` is used. :issue:`2817` :pr:`2818` - `Option.flag_value` will no longer have a default value set based on `Option.default` if `Option.is_flag` is `False`. This results in `Option.default` not needing to implement `__bool__`. :pr:`2829` - Incorrect `click.edit` typing has been corrected. :pr:`2804` - `Choice` is now generic and supports any iterable value. This allows you to use enums and other non-`str` values. :pr:`2796` :issue:`605` - Fix setup of help option's defaults when using a custom class on its decorator. Removes `HelpOption`. :issue:`2832` :pr:`2840` </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekday after 9am before 5pm" in timezone America/New_York, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://redirect.github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xMS44IiwidXBkYXRlZEluVmVyIjoiNDAuMTEuOCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiYXV0b21lcmdlIl19-->
An aspect to instrument py_* targets with mypy type-checking.
Compared to bazel-mypy-integration, this ruleset aims to make a couple of improvements:
[!WARNING]
rules_mypy's build actions produce mypy caches as outputs, and these may contain large file counts and that will only grow as a dependency chain grows. This may have an impact on the size and usage of build and/or remote caches.
This aspect will run over any py_binary, py_library or py_test.
Setup is significantly easier with bzlmod, we recommend and predominantly support bzlmod, though these rules should work without issue in non-bzlmod setups, albeit with more work to configure.
Add rules_mypy to your MODULE.bazel:
bazel_dep(name = "rules_mypy", version = "0.0.0")
Optionally, configure a types repository:
Many Python packages have separately published types/stubs packages. While mypy (and these rules) will work without including these types, this ruleset provides some utilities for leveraging these types to improve mypy's type checking.
types = use_extension("@rules_mypy//mypy:types.bzl", "types") types.requirements( name = "pip_types", # `@pip` in the next line corresponds to the `hub_name` when using # rules_python's `pip.parse(...)`. pip_requirements = "@pip//:requirements.bzl", # also legal to pass a `requirements.in` here requirements_txt = "//:requirements.txt", ) use_repo(types, "pip_types")
Configure mypy_aspect.
Define a new aspect in a .bzl file (such as ./tools/aspects.bzl):
load("@pip_types//:types.bzl", "types") load("@rules_mypy//mypy:mypy.bzl", "mypy") mypy_aspect = mypy(types = types)
Update your .bazelrc to include this new aspect:
# register mypy_aspect with Bazel build --aspects //tools:aspects.bzl%mypy_aspect # optionally, default enable the mypy checks build --output_groups=+mypy
mypy's behavior may be customized using a mypy config file file. To use a mypy config file, pass a label for a valid config file to the mypy aspect factory:
mypy_aspect = mypy( mypy_ini = "@@//:mypy.ini", types = types, )
[!NOTE] The label passed to
mypy_inineeds to be absolute (a prefix of@@means the root repo).
[!NOTE] mypy.ini files should likely contain the following lines to suppress type-checking 3rd party modules.
follow_imports = silent follow_imports_for_stubs = True
To customize the version of mypy, use rules_python's requirements resolution and construct a custom mypy CLI:
# in a BUILD file load("@pip//:requirements.bzl", "requirements") # '@pip' must match configured pip hub_name load("@rules_mypy//mypy:mypy.bzl", "mypy", "mypy_cli") mypy_cli( name = "mypy_cli", mypy_requirement = requirement("mypy"), )
And in your aspects.bzl (or similar) file:
load("@rules_mypy//mypy:mypy.bzl", "mypy") mypy_aspect = mypy( mypy_cli = ":mypy_cli", types = types, )
Further, to use mypy plugins referenced in any config file, use the deps attribute of mypy_cli:
# in a BUILD file load("@pip//:requirements.bzl", "requirement") # '@pip' must match configured pip hub_name load("@rules_mypy//mypy:mypy.bzl", "mypy", "mypy_cli") mypy_cli( name = "mypy_cli", mypy_requirement = requirement("mypy"), deps = [ requirement("pydantic"), ], )
Skip running mypy on targets by tagging with no-mypy, or customize the tags that will suppress mypy by providing a list to the suppression_tags argument of the mypy aspect initializer:
load("@rules_mypy//mypy:mypy.bzl", "mypy") mypy_aspect = mypy( suppression_tags = ["no-mypy", "no-checks"], types = types, )
To add type checking to a codebase incrementally, configure a list of opt-in tags that will suppress running mypy by default unless a target is tagged explicitly with one of the opt-in tags.
load("@rules_mypy//mypy:mypy.bzl", "mypy") mypy_aspect = mypy( opt_in_tags = ["typecheck"], types = types, )