From 54e8ca5d781c284626fc1089d612d29b1329596b Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Fri, 19 May 2023 16:06:53 +0800 Subject: [PATCH 1/9] style: import anntations __future__ and replace Optional, List, Unino to their new counterpart --- commitizen/bump.py | 31 +++++----- commitizen/changelog.py | 72 ++++++++++++------------ commitizen/changelog_parser.py | 18 +++--- commitizen/cli.py | 9 +-- commitizen/commands/bump.py | 20 +++---- commitizen/commands/changelog.py | 23 ++++---- commitizen/commands/check.py | 14 +++-- commitizen/commands/init.py | 16 +++--- commitizen/config/__init__.py | 5 +- commitizen/config/base_config.py | 11 ++-- commitizen/config/json_config.py | 7 ++- commitizen/config/toml_config.py | 7 ++- commitizen/config/yaml_config.py | 7 ++- commitizen/cz/__init__.py | 4 +- commitizen/cz/base.py | 36 ++++++------ commitizen/cz/customize/customize.py | 11 ++-- commitizen/defaults.py | 46 +++++++-------- commitizen/git.py | 20 +++---- commitizen/providers.py | 6 +- commitizen/version_types.py | 17 +++--- tests/commands/test_bump_command.py | 5 +- tests/commands/test_changelog_command.py | 4 -- tests/commands/test_check_command.py | 6 +- tests/commands/test_init_command.py | 6 +- tests/conftest.py | 5 +- tests/test_git.py | 7 ++- tests/test_version_providers.py | 6 +- tests/utils.py | 5 +- 28 files changed, 224 insertions(+), 200 deletions(-) diff --git a/commitizen/bump.py b/commitizen/bump.py index ed410bbcc1..e8e9dcedc3 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import os import re import sys @@ -5,7 +7,6 @@ from collections import OrderedDict from itertools import zip_longest from string import Template -from typing import List, Optional, Tuple, Type, Union from packaging.version import Version @@ -21,15 +22,15 @@ def find_increment( - commits: List[GitCommit], regex: str, increments_map: Union[dict, OrderedDict] -) -> Optional[str]: + commits: list[GitCommit], regex: str, increments_map: dict | OrderedDict +) -> str | None: if isinstance(increments_map, dict): increments_map = OrderedDict(increments_map) # Most important cases are major and minor. # Everything else will be considered patch. select_pattern = re.compile(regex) - increment: Optional[str] = None + increment: str | None = None for commit in commits: for message in commit.message.split("\n"): @@ -54,7 +55,7 @@ def find_increment( def prerelease_generator( - current_version: str, prerelease: Optional[str] = None, offset: int = 0 + current_version: str, prerelease: str | None = None, offset: int = 0 ) -> str: """Generate prerelease @@ -123,11 +124,11 @@ def semver_generator(current_version: str, increment: str = None) -> str: def generate_version( current_version: str, increment: str, - prerelease: Optional[str] = None, + prerelease: str | None = None, prerelease_offset: int = 0, - devrelease: Optional[int] = None, + devrelease: int | None = None, is_local_version: bool = False, - version_type_cls: Optional[Type[VersionProtocol]] = None, + version_type_cls: type[VersionProtocol] | None = None, ) -> VersionProtocol: """Based on the given increment a proper semver will be generated. @@ -163,7 +164,7 @@ def generate_version( def update_version_in_files( - current_version: str, new_version: str, files: List[str], *, check_consistency=False + current_version: str, new_version: str, files: list[str], *, check_consistency=False ) -> None: """Change old version to the new one in every file given. @@ -197,7 +198,7 @@ def update_version_in_files( def _bump_with_regex( version_filepath: str, current_version: str, new_version: str, regex: str -) -> Tuple[bool, str]: +) -> tuple[bool, str]: current_version_found = False lines = [] pattern = re.compile(regex) @@ -218,9 +219,9 @@ def _version_to_regex(version: str) -> str: def normalize_tag( - version: Union[VersionProtocol, str], - tag_format: Optional[str] = None, - version_type_cls: Optional[Type[VersionProtocol]] = None, + version: VersionProtocol | str, + tag_format: str | None = None, + version_type_cls: type[VersionProtocol] | None = None, ) -> str: """The tag and the software version might be different. @@ -254,8 +255,8 @@ def normalize_tag( def create_commit_message( - current_version: Union[Version, str], - new_version: Union[Version, str], + current_version: Version | str, + new_version: Version | str, message_template: str = None, ) -> str: if message_template is None: diff --git a/commitizen/changelog.py b/commitizen/changelog.py index 74cee3260a..91b605b5ad 100644 --- a/commitizen/changelog.py +++ b/commitizen/changelog.py @@ -25,13 +25,15 @@ - [x] add support for change_type maps """ +from __future__ import annotations + import os import re import sys import typing from collections import OrderedDict, defaultdict from datetime import date -from typing import Callable, Dict, Iterable, List, Optional, Tuple, Type +from typing import Callable, Iterable from jinja2 import Environment, PackageLoader from packaging.version import InvalidVersion, Version @@ -48,11 +50,11 @@ VersionProtocol = typing.Any -def get_commit_tag(commit: GitCommit, tags: List[GitTag]) -> Optional[GitTag]: +def get_commit_tag(commit: GitCommit, tags: list[GitTag]) -> GitTag | None: return next((tag for tag in tags if tag.rev == commit.rev), None) -def get_version(tag: GitTag) -> Optional[Version]: +def get_version(tag: GitTag) -> Version | None: version = None try: version = Version(tag.name) @@ -62,7 +64,7 @@ def get_version(tag: GitTag) -> Optional[Version]: def tag_included_in_changelog( - tag: GitTag, used_tags: List, merge_prerelease: bool + tag: GitTag, used_tags: list, merge_prerelease: bool ) -> bool: if tag in used_tags: return False @@ -78,19 +80,19 @@ def tag_included_in_changelog( def generate_tree_from_commits( - commits: List[GitCommit], - tags: List[GitTag], + commits: list[GitCommit], + tags: list[GitTag], commit_parser: str, changelog_pattern: str, - unreleased_version: Optional[str] = None, - change_type_map: Optional[Dict[str, str]] = None, - changelog_message_builder_hook: Optional[Callable] = None, + unreleased_version: str | None = None, + change_type_map: dict[str, str] | None = None, + changelog_message_builder_hook: Callable | None = None, merge_prerelease: bool = False, -) -> Iterable[Dict]: +) -> Iterable[dict]: pat = re.compile(changelog_pattern) map_pat = re.compile(commit_parser, re.MULTILINE) body_map_pat = re.compile(commit_parser, re.MULTILINE | re.DOTALL) - current_tag: Optional[GitTag] = None + current_tag: GitTag | None = None # Check if the latest commit is not tagged if commits: @@ -105,8 +107,8 @@ def generate_tree_from_commits( current_tag_name = current_tag.name current_tag_date = current_tag.date - changes: Dict = defaultdict(list) - used_tags: List = [current_tag] + changes: dict = defaultdict(list) + used_tags: list = [current_tag] for commit in commits: commit_tag = get_commit_tag(commit, tags) @@ -130,7 +132,7 @@ def generate_tree_from_commits( # Process subject from commit message message = map_pat.match(commit.message) if message: - parsed_message: Dict = message.groupdict() + parsed_message: dict = message.groupdict() # change_type becomes optional by providing None change_type = parsed_message.pop("change_type", None) @@ -146,7 +148,7 @@ def generate_tree_from_commits( message_body = body_map_pat.match(body_part) if not message_body: continue - parsed_message_body: Dict = message_body.groupdict() + parsed_message_body: dict = message_body.groupdict() change_type = parsed_message_body.pop("change_type", None) if change_type_map: @@ -156,7 +158,7 @@ def generate_tree_from_commits( yield {"version": current_tag_name, "date": current_tag_date, "changes": changes} -def order_changelog_tree(tree: Iterable, change_type_order: List[str]) -> Iterable: +def order_changelog_tree(tree: Iterable, change_type_order: list[str]) -> Iterable: if len(set(change_type_order)) != len(change_type_order): raise InvalidConfigurationError( f"Change types contain duplicates types ({change_type_order})" @@ -184,7 +186,7 @@ def render_changelog(tree: Iterable) -> str: return changelog -def parse_version_from_markdown(value: str) -> Optional[str]: +def parse_version_from_markdown(value: str) -> str | None: if not value.startswith("#"): return None m = re.search(defaults.version_parser, value) @@ -193,7 +195,7 @@ def parse_version_from_markdown(value: str) -> Optional[str]: return m.groupdict().get("version") -def parse_title_type_of_line(value: str) -> Optional[str]: +def parse_title_type_of_line(value: str) -> str | None: md_title_parser = r"^(?P#+)" m = re.search(md_title_parser, value) if not m: @@ -201,12 +203,12 @@ def parse_title_type_of_line(value: str) -> Optional[str]: return m.groupdict().get("title") -def get_metadata(filepath: str) -> Dict: - unreleased_start: Optional[int] = None - unreleased_end: Optional[int] = None - unreleased_title: Optional[str] = None - latest_version: Optional[str] = None - latest_version_position: Optional[int] = None +def get_metadata(filepath: str) -> dict: + unreleased_start: int | None = None + unreleased_end: int | None = None + unreleased_title: str | None = None + latest_version: str | None = None + latest_version_position: int | None = None if not os.path.isfile(filepath): return { "unreleased_start": None, @@ -219,7 +221,7 @@ def get_metadata(filepath: str) -> Dict: for index, line in enumerate(changelog_file): line = line.strip().lower() - unreleased: Optional[str] = None + unreleased: str | None = None if "unreleased" in line: unreleased = parse_title_type_of_line(line) # Try to find beginning and end lines of the unreleased block @@ -249,7 +251,7 @@ def get_metadata(filepath: str) -> Dict: } -def incremental_build(new_content: str, lines: List[str], metadata: Dict) -> List[str]: +def incremental_build(new_content: str, lines: list[str], metadata: dict) -> list[str]: """Takes the original lines and updates with new_content. The metadata governs how to remove the old unreleased section and where to place the @@ -267,7 +269,7 @@ def incremental_build(new_content: str, lines: List[str], metadata: Dict) -> Lis unreleased_end = metadata.get("unreleased_end") latest_version_position = metadata.get("latest_version_position") skip = False - output_lines: List[str] = [] + output_lines: list[str] = [] for index, line in enumerate(lines): if index == unreleased_start: skip = True @@ -297,8 +299,8 @@ def incremental_build(new_content: str, lines: List[str], metadata: Dict) -> Lis def get_smart_tag_range( - tags: List[GitTag], newest: str, oldest: Optional[str] = None -) -> List[GitTag]: + tags: list[GitTag], newest: str, oldest: str | None = None +) -> list[GitTag]: """Smart because it finds the N+1 tag. This is because we need to find until the next tag @@ -323,19 +325,19 @@ def get_smart_tag_range( def get_oldest_and_newest_rev( - tags: List[GitTag], + tags: list[GitTag], version: str, tag_format: str, - version_type_cls: Optional[Type[VersionProtocol]] = None, -) -> Tuple[Optional[str], Optional[str]]: + version_type_cls: type[VersionProtocol] | None = None, +) -> tuple[str | None, str | None]: """Find the tags for the given version. `version` may come in different formats: - `0.1.0..0.4.0`: as a range - `0.3.0`: as a single version """ - oldest: Optional[str] = None - newest: Optional[str] = None + oldest: str | None = None + newest: str | None = None try: oldest, newest = version.split("..") except ValueError: @@ -355,7 +357,7 @@ def get_oldest_and_newest_rev( if not tags_range: raise NoCommitsFoundError("Could not find a valid revision range.") - oldest_rev: Optional[str] = tags_range[-1].name + oldest_rev: str | None = tags_range[-1].name newest_rev = newest_tag # check if it's the first tag created diff --git a/commitizen/changelog_parser.py b/commitizen/changelog_parser.py index e53c52893a..eb1b264d36 100644 --- a/commitizen/changelog_parser.py +++ b/commitizen/changelog_parser.py @@ -7,9 +7,11 @@ 2. Build a dict (tree) of that particular version 3. Transform tree into markdown again """ +from __future__ import annotations + import re from collections import defaultdict -from typing import Dict, Generator, Iterable, List +from typing import Generator, Iterable MD_VERSION_RE = r"^##\s(?P<version>[a-zA-Z0-9.+]+)\s?\(?(?P<date>[0-9-]+)?\)?" MD_CHANGE_TYPE_RE = r"^###\s(?P<change_type>[a-zA-Z0-9.+\s]+)" @@ -67,21 +69,21 @@ def find_version_blocks(filepath: str) -> Generator: yield block -def parse_md_version(md_version: str) -> Dict: +def parse_md_version(md_version: str) -> dict: m = md_version_c.match(md_version) if not m: return {} return m.groupdict() -def parse_md_change_type(md_change_type: str) -> Dict: +def parse_md_change_type(md_change_type: str) -> dict: m = md_change_type_c.match(md_change_type) if not m: return {} return m.groupdict() -def parse_md_message(md_message: str) -> Dict: +def parse_md_message(md_message: str) -> dict: m = md_message_c.match(md_message) if not m: return {} @@ -99,10 +101,10 @@ def transform_change_type(change_type: str) -> str: raise ValueError(f"Could not match a change_type with {change_type}") -def generate_block_tree(block: List[str]) -> Dict: +def generate_block_tree(block: list[str]) -> dict: # tree: Dict = {"commits": []} - changes: Dict = defaultdict(list) - tree: Dict = {"changes": changes} + changes: dict = defaultdict(list) + tree: dict = {"changes": changes} change_type = None for line in block: @@ -126,6 +128,6 @@ def generate_block_tree(block: List[str]) -> Dict: return tree -def generate_full_tree(blocks: Iterable) -> Iterable[Dict]: +def generate_full_tree(blocks: Iterable) -> Iterable[dict]: for block in blocks: yield generate_block_tree(block) diff --git a/commitizen/cli.py b/commitizen/cli.py index ed89b5675a..f6858af976 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -1,10 +1,11 @@ +from __future__ import annotations + import argparse import logging import sys from pathlib import Path from functools import partial from types import TracebackType -from typing import List import argcomplete from decli import cli @@ -353,7 +354,7 @@ def commitizen_excepthook( - type, value, traceback, debug=False, no_raise: List[int] = None + type, value, traceback, debug=False, no_raise: list[int] = None ): traceback = traceback if isinstance(traceback, TracebackType) else None if not no_raise: @@ -376,13 +377,13 @@ def commitizen_excepthook( sys.excepthook = commitizen_excepthook -def parse_no_raise(comma_separated_no_raise: str) -> List[int]: +def parse_no_raise(comma_separated_no_raise: str) -> list[int]: """Convert the given string to exit codes. Receives digits and strings and outputs the parsed integer which represents the exit code found in exceptions. """ - no_raise_items: List[str] = comma_separated_no_raise.split(",") + no_raise_items: list[str] = comma_separated_no_raise.split(",") no_raise_codes = [] for item in no_raise_items: if item.isdecimal(): diff --git a/commitizen/commands/bump.py b/commitizen/commands/bump.py index 53e194bc6f..3d6679a518 100644 --- a/commitizen/commands/bump.py +++ b/commitizen/commands/bump.py @@ -1,10 +1,9 @@ +from __future__ import annotations + import os from logging import getLogger -from typing import List, Optional import questionary -from packaging.version import InvalidVersion, Version - from commitizen import bump, cmd, factory, git, hooks, out, version_types from commitizen.commands.changelog import Changelog from commitizen.config import BaseConfig @@ -22,6 +21,7 @@ NoVersionSpecifiedError, ) from commitizen.providers import get_provider +from packaging.version import InvalidVersion, Version logger = getLogger("commitizen") @@ -85,7 +85,7 @@ def is_initial_tag(self, current_tag_version: str, is_yes: bool = False) -> bool is_initial = questionary.confirm("Is this the first tag created?").ask() return is_initial - def find_increment(self, commits: List[git.GitCommit]) -> Optional[str]: + def find_increment(self, commits: list[git.GitCommit]) -> str | None: # Update the bump map to ensure major version doesn't increment. is_major_version_zero: bool = self.bump_settings["major_version_zero"] # self.cz.bump_map = defaults.bump_map_major_version_zero @@ -117,17 +117,17 @@ def __call__(self): # noqa: C901 tag_format: str = self.bump_settings["tag_format"] bump_commit_message: str = self.bump_settings["bump_message"] - version_files: List[str] = self.bump_settings["version_files"] + version_files: list[str] = self.bump_settings["version_files"] major_version_zero: bool = self.bump_settings["major_version_zero"] prerelease_offset: int = self.bump_settings["prerelease_offset"] dry_run: bool = self.arguments["dry_run"] is_yes: bool = self.arguments["yes"] - increment: Optional[str] = self.arguments["increment"] - prerelease: Optional[str] = self.arguments["prerelease"] - devrelease: Optional[int] = self.arguments["devrelease"] - is_files_only: Optional[bool] = self.arguments["files_only"] - is_local_version: Optional[bool] = self.arguments["local_version"] + increment: str | None = self.arguments["increment"] + prerelease: str | None = self.arguments["prerelease"] + devrelease: int | None = self.arguments["devrelease"] + is_files_only: bool | None = self.arguments["files_only"] + is_local_version: bool | None = self.arguments["local_version"] manual_version = self.arguments["manual_version"] if manual_version: diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 69d223ed49..d4b577846e 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -1,9 +1,9 @@ +from __future__ import annotations + import os.path from difflib import SequenceMatcher from operator import itemgetter -from typing import Callable, Dict, List, Optional - -from packaging.version import parse +from typing import Callable from commitizen import bump, changelog, defaults, factory, git, out, version_types from commitizen.config import BaseConfig @@ -16,6 +16,7 @@ NotAllowed, ) from commitizen.git import GitTag, smart_open +from packaging.version import parse class Changelog: @@ -65,7 +66,7 @@ def __init__(self, config: BaseConfig, args): version_type = self.config.settings.get("version_type") self.version_type = version_type and version_types.VERSION_TYPES[version_type] - def _find_incremental_rev(self, latest_version: str, tags: List[GitTag]) -> str: + def _find_incremental_rev(self, latest_version: str, tags: list[GitTag]) -> str: """Try to find the 'start_rev'. We use a similarity approach. We know how to parse the version from the markdown @@ -92,7 +93,7 @@ def _find_incremental_rev(self, latest_version: str, tags: List[GitTag]) -> str: return start_rev def write_changelog( - self, changelog_out: str, lines: List[str], changelog_meta: Dict + self, changelog_out: str, lines: list[str], changelog_meta: dict ): if not isinstance(self.file_name, str): raise NotAllowed( @@ -101,9 +102,9 @@ def write_changelog( f"or the setting `changelog_file` in {self.config.path}" ) - changelog_hook: Optional[Callable] = self.cz.changelog_hook + changelog_hook: Callable | None = self.cz.changelog_hook with smart_open(self.file_name, "w") as changelog_file: - partial_changelog: Optional[str] = None + partial_changelog: str | None = None if self.incremental: new_lines = changelog.incremental_build( changelog_out, lines, changelog_meta @@ -120,11 +121,11 @@ def __call__(self): changelog_pattern = self.cz.changelog_pattern start_rev = self.start_rev unreleased_version = self.unreleased_version - changelog_meta: Dict = {} - change_type_map: Optional[Dict] = self.change_type_map - changelog_message_builder_hook: Optional[ + changelog_meta: dict = {} + change_type_map: dict | None = self.change_type_map + changelog_message_builder_hook: None | ( Callable - ] = self.cz.changelog_message_builder_hook + ) = self.cz.changelog_message_builder_hook merge_prerelease = self.merge_prerelease if not changelog_pattern or not commit_parser: diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index e42dbf7f49..401cc9cec0 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -1,7 +1,9 @@ +from __future__ import annotations + import os import re import sys -from typing import Any, Dict, Optional +from typing import Any from commitizen import factory, git, out from commitizen.config import BaseConfig @@ -15,7 +17,7 @@ class Check: """Check if the current commit msg matches the commitizen format.""" - def __init__(self, config: BaseConfig, arguments: Dict[str, Any], cwd=os.getcwd()): + def __init__(self, config: BaseConfig, arguments: dict[str, Any], cwd=os.getcwd()): """Initial check command. Args: @@ -23,9 +25,9 @@ def __init__(self, config: BaseConfig, arguments: Dict[str, Any], cwd=os.getcwd( arguments: All the flags provided by the user cwd: Current work directory """ - self.commit_msg_file: Optional[str] = arguments.get("commit_msg_file") - self.commit_msg: Optional[str] = arguments.get("message") - self.rev_range: Optional[str] = arguments.get("rev_range") + self.commit_msg_file: str | None = arguments.get("commit_msg_file") + self.commit_msg: str | None = arguments.get("message") + self.rev_range: str | None = arguments.get("rev_range") self.allow_abort: bool = bool( arguments.get("allow_abort", config.settings["allow_abort"]) ) @@ -41,7 +43,7 @@ def _valid_command_argument(self): for arg in (self.commit_msg_file, self.commit_msg, self.rev_range) ) if num_exclusive_args_provided == 0 and not sys.stdin.isatty(): - self.commit_msg: Optional[str] = sys.stdin.read() + self.commit_msg: str | None = sys.stdin.read() elif num_exclusive_args_provided != 1: raise InvalidCommandArgumentError( ( diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index 351b91007d..52ca081423 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -1,6 +1,8 @@ +from __future__ import annotations + import os import shutil -from typing import Any, Dict, List, Optional +from typing import Any import questionary import yaml @@ -54,10 +56,10 @@ def is_php_composer(self) -> bool: return os.path.isfile("composer.json") @property - def latest_tag(self) -> Optional[str]: + def latest_tag(self) -> str | None: return get_latest_tag_name() - def tags(self) -> Optional[List]: + def tags(self) -> list | None: """Not a property, only use if necessary""" if self.latest_tag is None: return None @@ -285,7 +287,7 @@ def _ask_update_changelog_on_bump(self) -> bool: ).unsafe_ask() return update_changelog_on_bump - def _exec_install_pre_commit_hook(self, hook_types: List[str]): + def _exec_install_pre_commit_hook(self, hook_types: list[str]): cmd_str = self._gen_pre_commit_cmd(hook_types) c = cmd.run(cmd_str) if c.return_code != 0: @@ -297,7 +299,7 @@ def _exec_install_pre_commit_hook(self, hook_types: List[str]): ) raise InitFailedError(err_msg) - def _gen_pre_commit_cmd(self, hook_types: List[str]) -> str: + def _gen_pre_commit_cmd(self, hook_types: list[str]) -> str: """Generate pre-commit command according to given hook types""" if not hook_types: raise ValueError("At least 1 hook type should be provided.") @@ -306,7 +308,7 @@ def _gen_pre_commit_cmd(self, hook_types: List[str]) -> str: ) return cmd_str - def _install_pre_commit_hook(self, hook_types: Optional[List[str]] = None): + def _install_pre_commit_hook(self, hook_types: list[str] | None = None): pre_commit_config_filename = ".pre-commit-config.yaml" cz_hook_config = { "repo": "https://github.com/commitizen-tools/commitizen", @@ -348,6 +350,6 @@ def _install_pre_commit_hook(self, hook_types: Optional[List[str]] = None): self._exec_install_pre_commit_hook(hook_types) out.write("commitizen pre-commit hook is now installed in your '.git'\n") - def _update_config_file(self, values: Dict[str, Any]): + def _update_config_file(self, values: dict[str, Any]): for key, value in values.items(): self.config.set_key(key, value) diff --git a/commitizen/config/__init__.py b/commitizen/config/__init__.py index e4e414437c..09e38ca96e 100644 --- a/commitizen/config/__init__.py +++ b/commitizen/config/__init__.py @@ -1,5 +1,6 @@ +from __future__ import annotations + from pathlib import Path -from typing import Union from commitizen import defaults, git @@ -26,7 +27,7 @@ def read_cfg() -> BaseConfig: if not filename.exists(): continue - _conf: Union[TomlConfig, JsonConfig, YAMLConfig] + _conf: TomlConfig | JsonConfig | YAMLConfig with open(filename, "rb") as f: data: bytes = f.read() diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index 8935c4875d..3762b30589 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -1,5 +1,6 @@ +from __future__ import annotations + from pathlib import Path -from typing import Optional, Union from commitizen.defaults import DEFAULT_SETTINGS, Settings @@ -7,14 +8,14 @@ class BaseConfig: def __init__(self): self._settings: Settings = DEFAULT_SETTINGS.copy() - self._path: Optional[Path] = None + self._path: Path | None = None @property def settings(self) -> Settings: return self._settings @property - def path(self) -> Optional[Path]: + def path(self) -> Path | None: return self._path def set_key(self, key, value): @@ -28,8 +29,8 @@ def set_key(self, key, value): def update(self, data: Settings) -> None: self._settings.update(data) - def add_path(self, path: Union[str, Path]) -> None: + def add_path(self, path: str | Path) -> None: self._path = Path(path) - def _parse_setting(self, data: Union[bytes, str]) -> None: + def _parse_setting(self, data: bytes | str) -> None: raise NotImplementedError() diff --git a/commitizen/config/json_config.py b/commitizen/config/json_config.py index 29d76040f1..10d60de880 100644 --- a/commitizen/config/json_config.py +++ b/commitizen/config/json_config.py @@ -1,6 +1,7 @@ +from __future__ import annotations + import json from pathlib import Path -from typing import Union from commitizen.exceptions import InvalidConfigurationError from commitizen.git import smart_open @@ -9,7 +10,7 @@ class JsonConfig(BaseConfig): - def __init__(self, *, data: Union[bytes, str], path: Union[Path, str]): + def __init__(self, *, data: bytes | str, path: Path | str): super(JsonConfig, self).__init__() self.is_empty_config = False self.add_path(path) @@ -33,7 +34,7 @@ def set_key(self, key, value): json.dump(parser, f, indent=2) return self - def _parse_setting(self, data: Union[bytes, str]) -> None: + def _parse_setting(self, data: bytes | str) -> None: """We expect to have a section in .cz.json looking like ``` diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index 0d09c90796..ee379aab77 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -1,6 +1,7 @@ +from __future__ import annotations + import os from pathlib import Path -from typing import Union from tomlkit import exceptions, parse, table @@ -8,7 +9,7 @@ class TomlConfig(BaseConfig): - def __init__(self, *, data: Union[bytes, str], path: Union[Path, str]): + def __init__(self, *, data: bytes | str, path: Path | str): super(TomlConfig, self).__init__() self.is_empty_config = False self._parse_setting(data) @@ -41,7 +42,7 @@ def set_key(self, key, value): f.write(parser.as_string().encode("utf-8")) return self - def _parse_setting(self, data: Union[bytes, str]) -> None: + def _parse_setting(self, data: bytes | str) -> None: """We expect to have a section in pyproject looking like ``` diff --git a/commitizen/config/yaml_config.py b/commitizen/config/yaml_config.py index 12c3238465..d67d7fb253 100644 --- a/commitizen/config/yaml_config.py +++ b/commitizen/config/yaml_config.py @@ -1,5 +1,6 @@ +from __future__ import annotations + from pathlib import Path -from typing import Union import yaml @@ -9,7 +10,7 @@ class YAMLConfig(BaseConfig): - def __init__(self, *, data: Union[bytes, str], path: Union[Path, str]): + def __init__(self, *, data: bytes | str, path: Path | str): super(YAMLConfig, self).__init__() self.is_empty_config = False self._parse_setting(data) @@ -19,7 +20,7 @@ def init_empty_config_content(self): with smart_open(self.path, "a") as json_file: yaml.dump({"commitizen": {}}, json_file, explicit_start=True) - def _parse_setting(self, data: Union[bytes, str]) -> None: + def _parse_setting(self, data: bytes | str) -> None: """We expect to have a section in cz.yaml looking like ``` diff --git a/commitizen/cz/__init__.py b/commitizen/cz/__init__.py index 5b974a99f2..f889dbd842 100644 --- a/commitizen/cz/__init__.py +++ b/commitizen/cz/__init__.py @@ -3,7 +3,7 @@ import importlib import pkgutil import warnings -from typing import Iterable, Optional +from typing import Iterable import importlib_metadata as metadata @@ -11,7 +11,7 @@ def discover_plugins( - path: Optional[Iterable[str]] = None, + path: Iterable[str] | None = None, ) -> dict[str, type[BaseCommitizen]]: """Discover commitizen plugins on the path diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index d24a2254f8..900e62d6b8 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -1,5 +1,7 @@ +from __future__ import annotations + from abc import ABCMeta, abstractmethod -from typing import Callable, Dict, List, Optional, Tuple +from typing import Callable from prompt_toolkit.styles import Style, merge_styles @@ -9,10 +11,10 @@ class BaseCommitizen(metaclass=ABCMeta): - bump_pattern: Optional[str] = None - bump_map: Optional[Dict[str, str]] = None - bump_map_major_version_zero: Optional[Dict[str, str]] = None - default_style_config: List[Tuple[str, str]] = [ + bump_pattern: str | None = None + bump_map: dict[str, str] | None = None + bump_map_major_version_zero: dict[str, str] | None = None + default_style_config: list[tuple[str, str]] = [ ("qmark", "fg:#ff9d00 bold"), ("question", "bold"), ("answer", "fg:#ff9d00 bold"), @@ -28,18 +30,18 @@ class BaseCommitizen(metaclass=ABCMeta): # The whole subject will be parsed as message by default # This allows supporting changelog for any rule system. # It can be modified per rule - commit_parser: Optional[str] = r"(?P<message>.*)" - changelog_pattern: Optional[str] = r".*" - change_type_map: Optional[Dict[str, str]] = None - change_type_order: Optional[List[str]] = None + commit_parser: str | None = r"(?P<message>.*)" + changelog_pattern: str | None = r".*" + change_type_map: dict[str, str] | None = None + change_type_order: list[str] | None = None # Executed per message parsed by the commitizen - changelog_message_builder_hook: Optional[ - Callable[[Dict, git.GitCommit], Dict] - ] = None + changelog_message_builder_hook: None | ( + Callable[[dict, git.GitCommit], dict] + ) = None # Executed only at the end of the changelog generation - changelog_hook: Optional[Callable[[str, Optional[str]], str]] = None + changelog_hook: Callable[[str, str | None], str] | None = None def __init__(self, config: BaseConfig): self.config = config @@ -63,19 +65,19 @@ def style(self): ] ) - def example(self) -> Optional[str]: + def example(self) -> str | None: """Example of the commit message.""" raise NotImplementedError("Not Implemented yet") - def schema(self) -> Optional[str]: + def schema(self) -> str | None: """Schema definition of the commit message.""" raise NotImplementedError("Not Implemented yet") - def schema_pattern(self) -> Optional[str]: + def schema_pattern(self) -> str | None: """Regex matching the schema used for message validation.""" raise NotImplementedError("Not Implemented yet") - def info(self) -> Optional[str]: + def info(self) -> str | None: """Information about the standardized commit message.""" raise NotImplementedError("Not Implemented yet") diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 3eac0a1df5..28ea5047bc 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -1,9 +1,10 @@ +from __future__ import annotations + try: from jinja2 import Template except ImportError: from string import Template # type: ignore -from typing import Optional from commitizen import defaults from commitizen.config import BaseConfig @@ -67,16 +68,16 @@ def message(self, answers: dict) -> str: else: return message_template.render(**answers) - def example(self) -> Optional[str]: + def example(self) -> str | None: return self.custom_settings.get("example") - def schema_pattern(self) -> Optional[str]: + def schema_pattern(self) -> str | None: return self.custom_settings.get("schema_pattern") - def schema(self) -> Optional[str]: + def schema(self) -> str | None: return self.custom_settings.get("schema") - def info(self) -> Optional[str]: + def info(self) -> str | None: info_path = self.custom_settings.get("info_path") info = self.custom_settings.get("info") if info_path: diff --git a/commitizen/defaults.py b/commitizen/defaults.py index a7c285edba..bc0b558148 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -1,7 +1,9 @@ +from __future__ import annotations + import pathlib import sys from collections import OrderedDict -from typing import Any, Dict, Iterable, List, MutableMapping, Optional, Tuple, Union +from typing import Any, Iterable, MutableMapping if sys.version_info < (3, 8): from typing_extensions import TypedDict @@ -14,47 +16,47 @@ class CzSettings(TypedDict, total=False): bump_pattern: str - bump_map: "OrderedDict[str, str]" - bump_map_major_version_zero: "OrderedDict[str, str]" - change_type_order: List[str] + bump_map: OrderedDict[str, str] + bump_map_major_version_zero: OrderedDict[str, str] + change_type_order: list[str] questions: Questions - example: Optional[str] - schema_pattern: Optional[str] - schema: Optional[str] - info_path: Union[str, pathlib.Path] + example: str | None + schema_pattern: str | None + schema: str | None + info_path: str | pathlib.Path info: str message_template: str - commit_parser: Optional[str] - changelog_pattern: Optional[str] - change_type_map: Optional[Dict[str, str]] + commit_parser: str | None + changelog_pattern: str | None + change_type_map: dict[str, str] | None class Settings(TypedDict, total=False): name: str - version: Optional[str] - version_files: List[str] - version_provider: Optional[str] - tag_format: Optional[str] - bump_message: Optional[str] + version: str | None + version_files: list[str] + version_provider: str | None + tag_format: str | None + bump_message: str | None allow_abort: bool changelog_file: str changelog_incremental: bool - changelog_start_rev: Optional[str] + changelog_start_rev: str | None changelog_merge_prerelease: bool update_changelog_on_bump: bool use_shortcuts: bool - style: Optional[List[Tuple[str, str]]] + style: list[tuple[str, str]] | None customize: CzSettings major_version_zero: bool - pre_bump_hooks: Optional[List[str]] - post_bump_hooks: Optional[List[str]] + pre_bump_hooks: list[str] | None + post_bump_hooks: list[str] | None prerelease_offset: int - version_type: Optional[str] + version_type: str | None name: str = "cz_conventional_commits" -config_files: List[str] = [ +config_files: list[str] = [ "pyproject.toml", ".cz.toml", ".cz.json", diff --git a/commitizen/git.py b/commitizen/git.py index 2c2cb5b368..6d22754fae 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -1,9 +1,10 @@ +from __future__ import annotations + import os from enum import Enum from os import linesep from pathlib import Path from tempfile import NamedTemporaryFile -from typing import List, Optional from commitizen import cmd, out from commitizen.exceptions import GitCommandError @@ -73,8 +74,7 @@ def date(self): return self._date @classmethod - def from_line(cls, line: str, inner_delimiter: str) -> "GitTag": - + def from_line(cls, line: str, inner_delimiter: str) -> GitTag: name, objectname, date, obj = line.split(inner_delimiter) if not obj: obj = objectname @@ -102,11 +102,11 @@ def commit(message: str, args: str = "") -> cmd.Command: def get_commits( - start: Optional[str] = None, + start: str | None = None, end: str = "HEAD", *, args: str = "", -) -> List[GitCommit]: +) -> list[GitCommit]: """Get the commits between start and end.""" git_log_entries = _get_log_as_str_list(start, end, args) git_commits = [] @@ -140,7 +140,7 @@ def get_filenames_in_commit(git_reference: str = ""): raise GitCommandError(c.err) -def get_tags(dateformat: str = "%Y-%m-%d") -> List[GitTag]: +def get_tags(dateformat: str = "%Y-%m-%d") -> list[GitTag]: inner_delimiter = "---inner_delimiter---" formatter = ( f'"%(refname:lstrip=2){inner_delimiter}' @@ -175,21 +175,21 @@ def is_signed_tag(tag: str) -> bool: return cmd.run(f"git tag -v {tag}").return_code == 0 -def get_latest_tag_name() -> Optional[str]: +def get_latest_tag_name() -> str | None: c = cmd.run("git describe --abbrev=0 --tags") if c.err: return None return c.out.strip() -def get_tag_names() -> List[Optional[str]]: +def get_tag_names() -> list[str | None]: c = cmd.run("git tag --list") if c.err: return [] return [tag.strip() for tag in c.out.split("\n") if tag.strip()] -def find_git_project_root() -> Optional[Path]: +def find_git_project_root() -> Path | None: c = cmd.run("git rev-parse --show-toplevel") if not c.err: return Path(c.out.strip()) @@ -237,7 +237,7 @@ def smart_open(*args, **kargs): return open(*args, newline=get_eol_style().get_eol_for_open(), **kargs) -def _get_log_as_str_list(start: Optional[str], end: str, args: str) -> List[str]: +def _get_log_as_str_list(start: str | None, end: str, args: str) -> list[str]: """Get string representation of each log entry""" delimiter = "----------commit-delimiter----------" log_format: str = "%H%n%s%n%an%n%ae%n%b" diff --git a/commitizen/providers.py b/commitizen/providers.py index 17b99e7b23..5c4849a635 100644 --- a/commitizen/providers.py +++ b/commitizen/providers.py @@ -4,7 +4,7 @@ import re from abc import ABC, abstractmethod from pathlib import Path -from typing import Any, Callable, ClassVar, Optional, cast +from typing import Any, Callable, ClassVar, cast import importlib_metadata as metadata import tomlkit @@ -184,14 +184,14 @@ class ScmProvider(VersionProvider): "$devrelease": r"(?P<devrelease>\.dev\d+)?", } - def _tag_format_matcher(self) -> Callable[[str], Optional[str]]: + def _tag_format_matcher(self) -> Callable[[str], str | None]: pattern = self.config.settings.get("tag_format") or VERSION_PATTERN for var, tag_pattern in self.TAG_FORMAT_REGEXS.items(): pattern = pattern.replace(var, tag_pattern) regex = re.compile(f"^{pattern}$", re.VERBOSE) - def matcher(tag: str) -> Optional[str]: + def matcher(tag: str) -> str | None: match = regex.match(tag) if not match: return None diff --git a/commitizen/version_types.py b/commitizen/version_types.py index 39a965e0c3..4eaa0f3519 100644 --- a/commitizen/version_types.py +++ b/commitizen/version_types.py @@ -1,5 +1,6 @@ +from __future__ import annotations + import sys -from typing import Optional, Tuple, Union if sys.version_info >= (3, 8): from typing import Protocol as _Protocol @@ -10,14 +11,14 @@ class VersionProtocol(_Protocol): - def __init__(self, _version: Union[Version, str]): + def __init__(self, _version: Version | str): raise NotImplementedError("must be implemented") def __str__(self) -> str: raise NotImplementedError("must be implemented") @property - def release(self) -> Tuple[int, ...]: + def release(self) -> tuple[int, ...]: raise NotImplementedError("must be implemented") @property @@ -25,11 +26,11 @@ def is_prerelease(self) -> bool: raise NotImplementedError("must be implemented") @property - def pre(self) -> Optional[Tuple[str, int]]: + def pre(self) -> tuple[str, int] | None: raise NotImplementedError("must be implemented") @property - def local(self) -> Optional[str]: + def local(self) -> str | None: raise NotImplementedError("must be implemented") @property @@ -42,7 +43,7 @@ def __init__(self, version: str): self._version = Version(version) @property - def release(self) -> Tuple[int, ...]: + def release(self) -> tuple[int, ...]: return self._version.release @property @@ -50,11 +51,11 @@ def is_prerelease(self) -> bool: return self._version.is_prerelease @property - def pre(self) -> Optional[Tuple[str, int]]: + def pre(self) -> tuple[str, int] | None: return self._version.pre @property - def local(self) -> Optional[str]: + def local(self) -> str | None: return self._version.local @property diff --git a/tests/commands/test_bump_command.py b/tests/commands/test_bump_command.py index f11a485db4..c6d41da97e 100644 --- a/tests/commands/test_bump_command.py +++ b/tests/commands/test_bump_command.py @@ -1,6 +1,7 @@ +from __future__ import annotations + import inspect import sys -from typing import Tuple from unittest.mock import MagicMock, call import pytest @@ -649,7 +650,7 @@ def test_bump_with_changelog_to_stdout_dry_run_arg( def test_bump_changelog_command_commits_untracked_changelog_and_version_files( tmp_commitizen_project, mocker, - cli_bump_changelog_args: Tuple[str, ...], + cli_bump_changelog_args: tuple[str, ...], version_filepath: str, version_regex: str, version_file_content: str, diff --git a/tests/commands/test_changelog_command.py b/tests/commands/test_changelog_command.py index 30033d9c7d..cb7298c0e6 100644 --- a/tests/commands/test_changelog_command.py +++ b/tests/commands/test_changelog_command.py @@ -116,7 +116,6 @@ def test_changelog_replacing_unreleased_using_incremental( def test_changelog_is_persisted_using_incremental( mocker: MockFixture, capsys, changelog_path, file_regression ): - create_file_and_commit("feat: add new output") create_file_and_commit("fix: output glitch") create_file_and_commit("Merge into master") @@ -550,7 +549,6 @@ def test_breaking_change_content_v1_with_exclamation_mark_feat( def test_changelog_config_flag_increment( mocker: MockFixture, changelog_path, config_path, file_regression ): - with open(config_path, "a") as f: f.write("changelog_incremental = true\n") with open(changelog_path, "a") as f: @@ -607,7 +605,6 @@ def test_changelog_config_flag_merge_prerelease( def test_changelog_config_start_rev_option( mocker: MockFixture, capsys, config_path, file_regression ): - # create commit and tag create_file_and_commit("feat: new file") testargs = ["cz", "bump", "--yes"] @@ -799,7 +796,6 @@ def test_changelog_incremental_with_merge_prerelease( def test_changelog_with_filename_as_empty_string( mocker: MockFixture, changelog_path, config_path ): - with open(config_path, "a") as f: f.write("changelog_file = true\n") diff --git a/tests/commands/test_check_command.py b/tests/commands/test_check_command.py index 9e9182e6f2..bf5aa959f5 100644 --- a/tests/commands/test_check_command.py +++ b/tests/commands/test_check_command.py @@ -1,6 +1,7 @@ +from __future__ import annotations + import sys from io import StringIO -from typing import List import pytest from pytest_mock import MockFixture @@ -52,7 +53,7 @@ ] -def _build_fake_git_commits(commit_msgs: List[str]) -> List[git.GitCommit]: +def _build_fake_git_commits(commit_msgs: list[str]) -> list[git.GitCommit]: return [git.GitCommit("test_rev", commit_msg) for commit_msg in commit_msgs] @@ -223,7 +224,6 @@ def test_check_command_with_invalid_argument(config): @pytest.mark.usefixtures("tmp_commitizen_project") def test_check_command_with_empty_range(config, mocker: MockFixture): - # must initialize git with a commit create_file_and_commit("feat: initial") diff --git a/tests/commands/test_init_command.py b/tests/commands/test_init_command.py index 8f9bb6b238..868c882cf9 100644 --- a/tests/commands/test_init_command.py +++ b/tests/commands/test_init_command.py @@ -1,6 +1,8 @@ +from __future__ import annotations + import json import os -from typing import Any, Dict, List +from typing import Any import pytest import yaml @@ -168,7 +170,7 @@ def check_cz_config(config: str): assert config_data == expected_config -def check_pre_commit_config(expected: List[Dict[str, Any]]): +def check_pre_commit_config(expected: list[dict[str, Any]]): """ Check the content of pre-commit config is as expected """ diff --git a/tests/conftest.py b/tests/conftest.py index e2177472db..98b56df158 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,8 +1,9 @@ +from __future__ import annotations + import os import re import tempfile from pathlib import Path -from typing import Optional import pytest @@ -55,7 +56,7 @@ def tmp_commitizen_project(tmp_git_project): @pytest.fixture(scope="function") def tmp_commitizen_project_initial(tmp_git_project): def _initial( - config_extra: Optional[str] = None, + config_extra: str | None = None, version="0.1.0", initial_commit="feat: new user interface", ): diff --git a/tests/test_git.py b/tests/test_git.py index 81089f6759..79cd76fca6 100644 --- a/tests/test_git.py +++ b/tests/test_git.py @@ -1,12 +1,13 @@ +from __future__ import annotations + import inspect import os import shutil -from typing import List, Optional import pytest +from commitizen import cmd, exceptions, git from pytest_mock import MockFixture -from commitizen import cmd, exceptions, git from tests.utils import FakeCommand, create_file_and_commit @@ -174,7 +175,7 @@ def test_get_commits_with_signature(): def test_get_tag_names_has_correct_arrow_annotation(): arrow_annotation = inspect.getfullargspec(git.get_tag_names).annotations["return"] - assert arrow_annotation == List[Optional[str]] + assert arrow_annotation == "list[str | None]" def test_get_latest_tag_name(tmp_commitizen_project): diff --git a/tests/test_version_providers.py b/tests/test_version_providers.py index 1c48fc3603..5a043bb302 100644 --- a/tests/test_version_providers.py +++ b/tests/test_version_providers.py @@ -3,7 +3,7 @@ import os from pathlib import Path from textwrap import dedent -from typing import TYPE_CHECKING, Iterator, Optional, Type +from typing import TYPE_CHECKING, Iterator import pytest @@ -138,7 +138,7 @@ def test_file_providers( chdir: Path, id: str, filename: str, - cls: Type[VersionProvider], + cls: type[VersionProvider], content: str, expected: str, ): @@ -173,7 +173,7 @@ def test_file_providers( ) @pytest.mark.usefixtures("tmp_git_project") def test_scm_provider( - config: BaseConfig, tag_format: Optional[str], tag: str, version: str + config: BaseConfig, tag_format: str | None, tag: str, version: str ): create_file_and_commit("test: fake commit") create_tag(tag) diff --git a/tests/utils.py b/tests/utils.py index 2efe13fa9e..88498e1af0 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -1,7 +1,8 @@ +from __future__ import annotations + import time import uuid from pathlib import Path -from typing import Optional from commitizen import cmd, exceptions, git @@ -13,7 +14,7 @@ def __init__(self, out=None, err=None, return_code=0): self.return_code = return_code -def create_file_and_commit(message: str, filename: Optional[str] = None): +def create_file_and_commit(message: str, filename: str | None = None): if not filename: filename = str(uuid.uuid4()) From c25dfb895291e52ebda17391d19a7fa308237e9c Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sat, 3 Jun 2023 12:02:10 +0800 Subject: [PATCH 2/9] ci(pre-commit): add blacken-docs hook --- .pre-commit-config.yaml | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b32b189b29..392754edba 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,8 +8,13 @@ default_stages: - push repos: + - repo: meta + hooks: + - id: check-hooks-apply + - id: check-useless-excludes + - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.1.0 + rev: v4.4.0 hooks: - id: check-vcs-permalinks - id: end-of-file-fixer @@ -18,6 +23,16 @@ repos: args: [--markdown-linebreak-ext=md] - id: debug-statements - id: no-commit-to-branch + - id: check-merge-conflict + - id: check-toml + - id: check-yaml + - id: detect-private-key + + - repo: https://github.com/asottile/blacken-docs + rev: 1.13.0 + hooks: + - id: blacken-docs + additional_dependencies: [black==22.10] - repo: https://github.com/commitizen-tools/commitizen rev: v3.2.2 # automatically updated by Commitizen From 1a691658e19026d0bebf760abf541e1119c78f61 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sat, 3 Jun 2023 12:03:28 +0800 Subject: [PATCH 3/9] docs: blackify example code --- docs/bump.md | 6 ++-- docs/customization.md | 76 ++++++++++++++++++++----------------------- 2 files changed, 38 insertions(+), 44 deletions(-) diff --git a/docs/bump.md b/docs/bump.md index 1c96fb43aa..73f5c9d8dd 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -144,9 +144,9 @@ __version__ = "1.21.0" and `setup.py`. ```python -... - version="1.0.5" -... +from setuptools import setup + +setup(..., version="1.0.5", ...) ``` If `--check-consistency` is used, commitizen will check whether the current version in `pyproject.toml` diff --git a/docs/customization.md b/docs/customization.md index 3ed8bd30ba..1d5073008c 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -215,50 +215,42 @@ Inherit from `BaseCommitizen`, and you must define `questions` and `message`. Th from commitizen.cz.base import BaseCommitizen from commitizen.defaults import Questions + class JiraCz(BaseCommitizen): # Questions = Iterable[MutableMapping[str, Any]] # It expects a list with dictionaries. def questions(self) -> Questions: """Questions regarding the commit message.""" questions = [ - { - 'type': 'input', - 'name': 'title', - 'message': 'Commit title' - }, - { - 'type': 'input', - 'name': 'issue', - 'message': 'Jira Issue number:' - }, + {"type": "input", "name": "title", "message": "Commit title"}, + {"type": "input", "name": "issue", "message": "Jira Issue number:"}, ] return questions def message(self, answers: dict) -> str: """Generate the message with the given answers.""" - return '{0} (#{1})'.format(answers['title'], answers['issue']) + return "{0} (#{1})".format(answers["title"], answers["issue"]) def example(self) -> str: """Provide an example to help understand the style (OPTIONAL) Used by `cz example`. """ - return 'Problem with user (#321)' + return "Problem with user (#321)" def schema(self) -> str: """Show the schema used (OPTIONAL) Used by `cz schema`. """ - return '<title> (<issue>)' + return "<title> (<issue>)" def info(self) -> str: """Explanation of the commit rules. (OPTIONAL) Used by `cz info`. """ - return 'We use this because is useful' - + return "We use this because is useful" ``` The next file required is `setup.py` modified from flask version. @@ -267,17 +259,13 @@ The next file required is `setup.py` modified from flask version. from setuptools import setup setup( - name='JiraCommitizen', - version='0.1.0', - py_modules=['cz_jira'], - license='MIT', - long_description='this is a long description', - install_requires=['commitizen'], - entry_points = { - 'commitizen.plugin': [ - 'cz_jira = cz_jira:JiraCz' - ] - } + name="JiraCommitizen", + version="0.1.0", + py_modules=["cz_jira"], + license="MIT", + long_description="this is a long description", + install_requires=["commitizen"], + entry_points={"commitizen.plugin": ["cz_jira = cz_jira:JiraCz"]}, ) ``` @@ -338,6 +326,7 @@ from commitizen.cz.base import BaseCommitizen import chat import compliance + class StrangeCommitizen(BaseCommitizen): changelog_pattern = r"^(break|new|fix|hotfix)" commit_parser = r"^(?P<change_type>feat|fix|refactor|perf|BREAKING CHANGE)(?:\((?P<scope>[^()\r\n]*)\)|\()?(?P<breaking>!)?:\s(?P<message>.*)?" @@ -345,16 +334,22 @@ class StrangeCommitizen(BaseCommitizen): "feat": "Features", "fix": "Bug Fixes", "refactor": "Code Refactor", - "perf": "Performance improvements" + "perf": "Performance improvements", } - def changelog_message_builder_hook(self, parsed_message: dict, commit: git.GitCommit) -> dict: + def changelog_message_builder_hook( + self, parsed_message: dict, commit: git.GitCommit + ) -> dict: rev = commit.rev m = parsed_message["message"] - parsed_message["message"] = f"{m} {rev} [{commit.author}]({commit.author_email})" + parsed_message[ + "message" + ] = f"{m} {rev} [{commit.author}]({commit.author_email})" return parsed_message - def changelog_hook(self, full_changelog: str, partial_changelog: Optional[str]) -> str: + def changelog_hook( + self, full_changelog: str, partial_changelog: Optional[str] + ) -> str: """Executed at the end of the changelog generation full_changelog: it's the output about to being written into the file @@ -368,7 +363,7 @@ class StrangeCommitizen(BaseCommitizen): chat.room("#committers").notify(partial_changelog) if full_changelog: compliance.send(full_changelog) - full_changelog.replace(' fix ', ' **fix** ') + full_changelog.replace(" fix ", " **fix** ") return full_changelog ``` @@ -381,6 +376,7 @@ If you want `commitizen` to catch your exception and print the message, you'll h ```python from commitizen.cz.exception import CzException + class NoSubjectProvidedException(CzException): ... ``` @@ -402,9 +398,11 @@ If you were having a `CzPlugin` class in a `cz_plugin.py` module like this: ```python from commitizen.cz.base import BaseCommitizen + class PluginCz(BaseCommitizen): ... + discover_this = PluginCz ``` @@ -413,6 +411,7 @@ Then remove the `discover_this` line: ```python from commitizen.cz.base import BaseCommitizen + class PluginCz(BaseCommitizen): ... ``` @@ -423,16 +422,11 @@ and expose the class as entrypoint in you setuptools: from setuptools import setup setup( - name='MyPlugin', - version='0.1.0', - py_modules=['cz_plugin'], - ... - entry_points = { - 'commitizen.plugin': [ - 'plugin = cz_plugin:PluginCz' - ] - } - ... + name="MyPlugin", + version="0.1.0", + py_modules=["cz_plugin"], + entry_points={"commitizen.plugin": ["plugin = cz_plugin:PluginCz"]}, + ..., ) ``` From 05a4cf094e931b6595e95da05d963cf58920932d Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sat, 3 Jun 2023 12:09:01 +0800 Subject: [PATCH 4/9] ci(pre-commit): add codespell hook --- .pre-commit-config.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 392754edba..28c9bf06f2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,6 +34,15 @@ repos: - id: blacken-docs additional_dependencies: [black==22.10] + - repo: https://github.com/codespell-project/codespell + rev: v2.2.4 + hooks: + - id: codespell + name: Run codespell to check for common misspellings in files + language: python + types: [text] + args: ["--write-changes", "--ignore-words-list", "asend"] + - repo: https://github.com/commitizen-tools/commitizen rev: v3.2.2 # automatically updated by Commitizen hooks: From 0005ac2399b462e30a3c14f4bb605a0ff1ac83c1 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sat, 3 Jun 2023 12:09:17 +0800 Subject: [PATCH 5/9] docs: fix typo --- CHANGELOG.md | 32 +++++++++---------- commitizen/cli.py | 2 +- .../conventional_commits.py | 2 +- commitizen/cz/utils.py | 10 +++--- commitizen/git.py | 2 +- docs/README.md | 4 +-- docs/bump.md | 4 +-- docs/contributing.md | 2 +- docs/customization.md | 2 +- docs/exit_codes.md | 2 +- docs/tutorials/auto_prepare_commit_message.md | 2 +- tests/commands/test_check_command.py | 2 +- tests/commands/test_init_command.py | 2 +- 13 files changed, 34 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18238e6ca9..0f07585f98 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -181,7 +181,7 @@ ### Fix -- **bump.py**: `CHANGELOG.md` gets git added and commited correctly +- **bump.py**: `CHANGELOG.md` gets git added and committed correctly ## v2.33.0 (2022-09-15) @@ -420,8 +420,8 @@ ### Fix -- **bump**: raise non zero error code when there's no elegible commit to bump -- **bump**: raise non zero error code when there's no elegible commit to bump +- **bump**: raise non zero error code when there's no eligible commit to bump +- **bump**: raise non zero error code when there's no eligible commit to bump ## v2.20.3 (2021-12-20) @@ -471,7 +471,7 @@ ### Fix -- **commit**: correct the stage checker before commiting +- **commit**: correct the stage checker before committing ## v2.18.0 (2021-08-13) @@ -546,7 +546,7 @@ ### Fix -- **bump**: replace all occurances that match regex +- **bump**: replace all occurrences that match regex - **wip**: add test for current breaking change ## v2.17.1 (2021-04-08) @@ -792,7 +792,7 @@ ### BREAKING CHANGE - setup.cfg, .cz and .cz.cfg are no longer supported -- Use "cz verion" instead +- Use "cz version" instead - "cz --debug" will no longer work ## v1.25.0 (2020-07-26) @@ -961,7 +961,7 @@ - **commands/changelog**: make changelog_file an option in config - **commands/changelog**: exit when there is no commit exists -- **commands/changlog**: add --start-rev argument to `cz changelog` +- **commands/changelog**: add --start-rev argument to `cz changelog` - **changelog**: generate changelog based on git log - **commands/changelog**: generate changelog_tree from all past commits - **cz/conventinal_commits**: add changelog_map, changelog_pattern and implement process_commit @@ -1062,7 +1062,7 @@ - **cmd**: reimplement how cmd is run - **git**: Use GitCommit, GitTag object to store commit and git information - **git**: make arguments other then start and end in get_commit keyword arguments -- **git**: Change get_commits into returning commits instead of lines of messsages +- **git**: Change get_commits into returning commits instead of lines of messages ### Feat @@ -1162,7 +1162,7 @@ - **config**: handle empty config file - **config**: fix load global_conf even if it doesn't exist -- **config/ini_config**: replase outdated _parse_ini_settings with _parse_settings +- **config/ini_config**: replace outdated _parse_ini_settings with _parse_settings ## v1.10.1 (2019-12-10) @@ -1207,16 +1207,16 @@ ### Refactor - **config**: remove has_pyproject which is no longer used -- **cz/customize**: make jinja2 a custom requirement. if not installed use string.Tempalte instead +- **cz/customize**: make jinja2 a custom requirement. if not installed use string.Template instead - **cz/utils**: rename filters as utils - **cli**: add back --version and remove subcommand required constraint ### Fix -- commit dry-run doesnt require staging to be clean +- commit dry-run doesn't require staging to be clean - correct typo to spell "convention" - removing folder in windows throwing a PermissionError -- **scripts**: add back the delelte poetry prefix +- **scripts**: add back the delete poetry prefix - **test_cli**: testing the version command ## v1.8.0 (2019-11-12) @@ -1327,7 +1327,7 @@ - update given files with new version - **config**: new set key, used to set version to cfg - support for pyproject.toml -- first semantic version bump implementaiton +- first semantic version bump implementation ### Fix @@ -1386,11 +1386,11 @@ ### Refactor -- **conventionalCommit**: moved fitlers to questions instead of message +- **conventionalCommit**: moved filters to questions instead of message ### Fix -- **manifest**: inluded missing files +- **manifest**: included missing files ## v0.9.5 (2018-08-24) @@ -1408,7 +1408,7 @@ ### Feat -- **commiter**: conventional commit is a bit more intelligent now +- **committer**: conventional commit is a bit more intelligent now ## v0.9.2 (2017-11-11) diff --git a/commitizen/cli.py b/commitizen/cli.py index f6858af976..e6d96b656b 100644 --- a/commitizen/cli.py +++ b/commitizen/cli.py @@ -68,7 +68,7 @@ "name": "--write-message-to-file", "type": Path, "metavar": "FILE_PATH", - "help": "write message to file before commiting (can be combined with --dry-run)", + "help": "write message to file before committing (can be combined with --dry-run)", }, { "name": ["-s", "--signoff"], diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 58026a72f3..cd26e4c44f 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -192,7 +192,7 @@ def schema(self) -> str: def schema_pattern(self) -> str: PATTERN = ( - r"(?s)" # To explictly make . match new line + r"(?s)" # To explicitly make . match new line r"(build|ci|docs|feat|fix|perf|refactor|style|test|chore|revert|bump)" # type r"(\(\S+\))?!?:" # scope r"( [^\n\r]+)" # subject diff --git a/commitizen/cz/utils.py b/commitizen/cz/utils.py index 0c5aedadaa..ea13be22c5 100644 --- a/commitizen/cz/utils.py +++ b/commitizen/cz/utils.py @@ -1,11 +1,11 @@ from commitizen.cz import exceptions -def required_validator(ans, msg=None): - if not ans: +def required_validator(answer, msg=None): + if not answer: raise exceptions.AnswerRequiredError(msg) - return ans + return answer -def multiple_line_breaker(ans, sep="|"): - return "\n".join(line.strip() for line in ans.split(sep) if line) +def multiple_line_breaker(answer, sep="|"): + return "\n".join(line.strip() for line in answer.split(sep) if line) diff --git a/commitizen/git.py b/commitizen/git.py index 6d22754fae..1c9c86dfc1 100644 --- a/commitizen/git.py +++ b/commitizen/git.py @@ -216,7 +216,7 @@ def get_eol_style() -> EOLTypes: # We enumerate the EOL types of the response of # `git config core.eol`, and map it to our enumration EOLTypes. # - # It is just like the varient of the "match" syntax. + # It is just like the variant of the "match" syntax. map = { "lf": EOLTypes.LF, "crlf": EOLTypes.CRLF, diff --git a/docs/README.md b/docs/README.md index 75f46c7b7c..2e14a37b1e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -19,14 +19,14 @@ Commitizen is release management tool designed for teams. -Commitizen assumes your team uses a standard way of commiting rules +Commitizen assumes your team uses a standard way of committing rules and from that foundation, it can bump your project's version, create the changelog, and update files. By default, commitizen uses [conventional commits][conventional_commits], but you can build your own set of rules, and publish them. -Using a standarized set of rules to write commits, makes commits easier to read, and enforces writing +Using a standardized set of rules to write commits, makes commits easier to read, and enforces writing descriptive commits. ### Features diff --git a/docs/bump.md b/docs/bump.md index 73f5c9d8dd..35c7daab12 100644 --- a/docs/bump.md +++ b/docs/bump.md @@ -184,7 +184,7 @@ will be sent to the stdout, and any other message generated by the bump will be sent to stderr. If `--changelog` is not used with this command, it is still smart enough to -understand that the user wants to create a changelog. It is recommened to be +understand that the user wants to create a changelog. It is recommended to be explicit and use `--changelog` (or the setting `update_changelog_on_bump`). This command is useful to "transport" the newly created changelog. @@ -484,7 +484,7 @@ release. During execution of the script, some environment variables are availabl | `CZ_POST_CURRENT_VERSION` | Current version, after the bump | | `CZ_POST_CURRENT_TAG_VERSION` | Current version tag, after the bump | | `CZ_POST_MESSAGE` | Commit message of the bump | -| `CZ_POST_INCREMENT` | Whether this wass a `MAJOR`, `MINOR` or `PATH` release | +| `CZ_POST_INCREMENT` | Whether this was a `MAJOR`, `MINOR` or `PATH` release | | `CZ_POST_CHANGELOG_FILE_NAME` | Path to the changelog file, if available | ```toml diff --git a/docs/contributing.md b/docs/contributing.md index 21a7ffb39d..266a087a77 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -20,7 +20,7 @@ If you're a first-time contributor, you can check the issues with [good first is 5. Check out a new branch and add your modification. 6. Add test cases for all your changes. (We use [CodeCov](https://codecov.io/) to ensure our test coverage does not drop.) -7. Use [commitizen](https://github.com/commitizen-tools/commitizen) to do git commit. We follow [conventional commmits][conventional-commmits] +7. Use [commitizen](https://github.com/commitizen-tools/commitizen) to do git commit. We follow [conventional commits][conventional-commits] 8. Run `./scripts/format` and `./scripts/test` to ensure you follow the coding style and the tests pass. 9. Optionally, update the `README.md`. 9. **Do not** update the `CHANGELOG.md`, it will be automatically created after merging to `master`. diff --git a/docs/customization.md b/docs/customization.md index 1d5073008c..610d1f0452 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -149,7 +149,7 @@ commitizen: | Parameter | Type | Default | Description | | ------------------- | ------ | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `questions` | `Questions` | `None` | Questions regarding the commit message. Detailed below. The type `Questions` is an alias to `Iterable[MutableMapping[str, Any]]` which is definied in `commitizen.defaults`. It expects a list of dictionaries. | +| `questions` | `Questions` | `None` | Questions regarding the commit message. Detailed below. The type `Questions` is an alias to `Iterable[MutableMapping[str, Any]]` which is defined in `commitizen.defaults`. It expects a list of dictionaries. | | `message_template` | `str` | `None` | The template for generating message from the given answers. `message_template` should either follow [Jinja2][jinja2] formatting specification, and all the variables in this template should be defined in `name` in `questions` | | `example` | `str` | `None` | (OPTIONAL) Provide an example to help understand the style. Used by `cz example`. | | `schema` | `str` | `None` | (OPTIONAL) Show the schema used. Used by `cz schema`. | diff --git a/docs/exit_codes.md b/docs/exit_codes.md index e7c7454478..c7b510ea3a 100644 --- a/docs/exit_codes.md +++ b/docs/exit_codes.md @@ -33,4 +33,4 @@ These exit codes can be found in `commitizen/exceptions.py::ExitCode`. | GitCommandError | 23 | Unexpected failure while calling a git command | | InvalidManualVersion | 24 | Manually provided version is invalid | | InitFailedError | 25 | Failed to initialize pre-commit | -| VersionProviderUnknown | 26 | `version_provider` setting is set to an unknown version provider indentifier | +| VersionProviderUnknown | 26 | `version_provider` setting is set to an unknown version provider identifier | diff --git a/docs/tutorials/auto_prepare_commit_message.md b/docs/tutorials/auto_prepare_commit_message.md index 8def5f2e28..46c807d3d4 100644 --- a/docs/tutorials/auto_prepare_commit_message.md +++ b/docs/tutorials/auto_prepare_commit_message.md @@ -12,7 +12,7 @@ use a [prepare-commit-msg Git hook](prepare-commit-msg-docs): > This hook is invoked by git-commit right after preparing the > default log message, and before the editor is started. -To automatically perform arbitrary cleanup steps after a succesful commit you can use a +To automatically perform arbitrary cleanup steps after a successful commit you can use a [post-commit Git hook][post-commit-docs]: > This hook is invoked by git-commit. It takes no parameters, and is invoked after a diff --git a/tests/commands/test_check_command.py b/tests/commands/test_check_command.py index bf5aa959f5..69fa33df20 100644 --- a/tests/commands/test_check_command.py +++ b/tests/commands/test_check_command.py @@ -42,7 +42,7 @@ "docs(check): fix pre-commit setup", "bump: version 1.16.1 → 1.16.2", "Merge pull request #135 from Lee-W/fix-pre-commit-hook\n\nFix pre commit hook", - "docs(check): enforce cz check only whem committing", + "docs(check): enforce cz check only when committing", ( 'Revert "fix(pre-commit): set pre-commit check stage to commit-msg"\n\n' "This reverts commit afc70133e4a81344928561fbf3bb20738dfc8a0b." diff --git a/tests/commands/test_init_command.py b/tests/commands/test_init_command.py index 868c882cf9..812accb69f 100644 --- a/tests/commands/test_init_command.py +++ b/tests/commands/test_init_command.py @@ -155,7 +155,7 @@ def default_choice(request, mocker: MockFixture): def check_cz_config(config: str): """ - Cehck the content of commitizen config is as expected + Check the content of commitizen config is as expected Args: config: The config path From 0337ca0379c4084a847aa220f056a27bbc7a73a7 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sat, 3 Jun 2023 12:16:17 +0800 Subject: [PATCH 6/9] ci(github-action): remove dependabot scope as the bot will generate it --- .github/dependabot.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b55eccfcc1..82fb674f7f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,7 +9,7 @@ updates: labels: - dependencies commit-message: - prefix: "ci(actions)" + prefix: "ci" include: "scope" - # Maintain python dependencies @@ -20,6 +20,5 @@ updates: labels: - dependencies commit-message: - prefix: "build(poetry)" - prefix-development:: "build(poetry-dev)" + prefix: "build" include: "scope" From 17b2f02efab713fd36d7eca973666e375ca40476 Mon Sep 17 00:00:00 2001 From: Wei Lee <weilee.rx@gmail.com> Date: Sat, 3 Jun 2023 12:47:07 +0800 Subject: [PATCH 7/9] build(poetry): update dependencies --- poetry.lock | 528 ++++++++++++++++++++++++++-------------------------- 1 file changed, 269 insertions(+), 259 deletions(-) diff --git a/poetry.lock b/poetry.lock index c96bb184ea..a1b7804d3d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "appnope" @@ -14,14 +14,14 @@ files = [ [[package]] name = "argcomplete" -version = "3.0.6" +version = "3.0.8" description = "Bash tab completion for argparse" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "argcomplete-3.0.6-py3-none-any.whl", hash = "sha256:798f28e11dc141f415879497599316a8a9126672a883064b851597a0d94be8a9"}, - {file = "argcomplete-3.0.6.tar.gz", hash = "sha256:9fe49c66ba963b81b64025f74bfbd0275619a6bde1c7370654dc365d4ecc9a0b"}, + {file = "argcomplete-3.0.8-py3-none-any.whl", hash = "sha256:e36fd646839933cbec7941c662ecb65338248667358dd3d968405a4506a60d9b"}, + {file = "argcomplete-3.0.8.tar.gz", hash = "sha256:b9ca96448e14fa459d7450a4ab5a22bbf9cee4ba7adddf03e65c398b5daeea28"}, ] [package.dependencies] @@ -81,14 +81,14 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "certifi" -version = "2022.12.7" +version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, - {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, ] [[package]] @@ -218,63 +218,72 @@ files = [ [[package]] name = "coverage" -version = "7.2.3" +version = "7.2.7" description = "Code coverage measurement for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "coverage-7.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e58c0d41d336569d63d1b113bd573db8363bc4146f39444125b7f8060e4e04f5"}, - {file = "coverage-7.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:344e714bd0fe921fc72d97404ebbdbf9127bac0ca1ff66d7b79efc143cf7c0c4"}, - {file = "coverage-7.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:974bc90d6f6c1e59ceb1516ab00cf1cdfbb2e555795d49fa9571d611f449bcb2"}, - {file = "coverage-7.2.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0743b0035d4b0e32bc1df5de70fba3059662ace5b9a2a86a9f894cfe66569013"}, - {file = "coverage-7.2.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d0391fb4cfc171ce40437f67eb050a340fdbd0f9f49d6353a387f1b7f9dd4fa"}, - {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a42e1eff0ca9a7cb7dc9ecda41dfc7cbc17cb1d02117214be0561bd1134772b"}, - {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:be19931a8dcbe6ab464f3339966856996b12a00f9fe53f346ab3be872d03e257"}, - {file = "coverage-7.2.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:72fcae5bcac3333a4cf3b8f34eec99cea1187acd55af723bcbd559adfdcb5535"}, - {file = "coverage-7.2.3-cp310-cp310-win32.whl", hash = "sha256:aeae2aa38395b18106e552833f2a50c27ea0000122bde421c31d11ed7e6f9c91"}, - {file = "coverage-7.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:83957d349838a636e768251c7e9979e899a569794b44c3728eaebd11d848e58e"}, - {file = "coverage-7.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dfd393094cd82ceb9b40df4c77976015a314b267d498268a076e940fe7be6b79"}, - {file = "coverage-7.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:182eb9ac3f2b4874a1f41b78b87db20b66da6b9cdc32737fbbf4fea0c35b23fc"}, - {file = "coverage-7.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bb1e77a9a311346294621be905ea8a2c30d3ad371fc15bb72e98bfcfae532df"}, - {file = "coverage-7.2.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca0f34363e2634deffd390a0fef1aa99168ae9ed2af01af4a1f5865e362f8623"}, - {file = "coverage-7.2.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55416d7385774285b6e2a5feca0af9652f7f444a4fa3d29d8ab052fafef9d00d"}, - {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:06ddd9c0249a0546997fdda5a30fbcb40f23926df0a874a60a8a185bc3a87d93"}, - {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fff5aaa6becf2c6a1699ae6a39e2e6fb0672c2d42eca8eb0cafa91cf2e9bd312"}, - {file = "coverage-7.2.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ea53151d87c52e98133eb8ac78f1206498c015849662ca8dc246255265d9c3c4"}, - {file = "coverage-7.2.3-cp311-cp311-win32.whl", hash = "sha256:8f6c930fd70d91ddee53194e93029e3ef2aabe26725aa3c2753df057e296b925"}, - {file = "coverage-7.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:fa546d66639d69aa967bf08156eb8c9d0cd6f6de84be9e8c9819f52ad499c910"}, - {file = "coverage-7.2.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b2317d5ed777bf5a033e83d4f1389fd4ef045763141d8f10eb09a7035cee774c"}, - {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be9824c1c874b73b96288c6d3de793bf7f3a597770205068c6163ea1f326e8b9"}, - {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c3b2803e730dc2797a017335827e9da6da0e84c745ce0f552e66400abdfb9a1"}, - {file = "coverage-7.2.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f69770f5ca1994cb32c38965e95f57504d3aea96b6c024624fdd5bb1aa494a1"}, - {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1127b16220f7bfb3f1049ed4a62d26d81970a723544e8252db0efde853268e21"}, - {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:aa784405f0c640940595fa0f14064d8e84aff0b0f762fa18393e2760a2cf5841"}, - {file = "coverage-7.2.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3146b8e16fa60427e03884301bf8209221f5761ac754ee6b267642a2fd354c48"}, - {file = "coverage-7.2.3-cp37-cp37m-win32.whl", hash = "sha256:1fd78b911aea9cec3b7e1e2622c8018d51c0d2bbcf8faaf53c2497eb114911c1"}, - {file = "coverage-7.2.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f3736a5d34e091b0a611964c6262fd68ca4363df56185902528f0b75dbb9c1f"}, - {file = "coverage-7.2.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:981b4df72c93e3bc04478153df516d385317628bd9c10be699c93c26ddcca8ab"}, - {file = "coverage-7.2.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0045f8f23a5fb30b2eb3b8a83664d8dc4fb58faddf8155d7109166adb9f2040"}, - {file = "coverage-7.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f760073fcf8f3d6933178d67754f4f2d4e924e321f4bb0dcef0424ca0215eba1"}, - {file = "coverage-7.2.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c86bd45d1659b1ae3d0ba1909326b03598affbc9ed71520e0ff8c31a993ad911"}, - {file = "coverage-7.2.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:172db976ae6327ed4728e2507daf8a4de73c7cc89796483e0a9198fd2e47b462"}, - {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:d2a3a6146fe9319926e1d477842ca2a63fe99af5ae690b1f5c11e6af074a6b5c"}, - {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:f649dd53833b495c3ebd04d6eec58479454a1784987af8afb77540d6c1767abd"}, - {file = "coverage-7.2.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7c4ed4e9f3b123aa403ab424430b426a1992e6f4c8fd3cb56ea520446e04d152"}, - {file = "coverage-7.2.3-cp38-cp38-win32.whl", hash = "sha256:eb0edc3ce9760d2f21637766c3aa04822030e7451981ce569a1b3456b7053f22"}, - {file = "coverage-7.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:63cdeaac4ae85a179a8d6bc09b77b564c096250d759eed343a89d91bce8b6367"}, - {file = "coverage-7.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20d1a2a76bb4eb00e4d36b9699f9b7aba93271c9c29220ad4c6a9581a0320235"}, - {file = "coverage-7.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ea748802cc0de4de92ef8244dd84ffd793bd2e7be784cd8394d557a3c751e21"}, - {file = "coverage-7.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21b154aba06df42e4b96fc915512ab39595105f6c483991287021ed95776d934"}, - {file = "coverage-7.2.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd214917cabdd6f673a29d708574e9fbdb892cb77eb426d0eae3490d95ca7859"}, - {file = "coverage-7.2.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c2e58e45fe53fab81f85474e5d4d226eeab0f27b45aa062856c89389da2f0d9"}, - {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:87ecc7c9a1a9f912e306997ffee020297ccb5ea388421fe62a2a02747e4d5539"}, - {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:387065e420aed3c71b61af7e82c7b6bc1c592f7e3c7a66e9f78dd178699da4fe"}, - {file = "coverage-7.2.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ea3f5bc91d7d457da7d48c7a732beaf79d0c8131df3ab278e6bba6297e23c6c4"}, - {file = "coverage-7.2.3-cp39-cp39-win32.whl", hash = "sha256:ae7863a1d8db6a014b6f2ff9c1582ab1aad55a6d25bac19710a8df68921b6e30"}, - {file = "coverage-7.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:3f04becd4fcda03c0160d0da9c8f0c246bc78f2f7af0feea1ec0930e7c93fa4a"}, - {file = "coverage-7.2.3-pp37.pp38.pp39-none-any.whl", hash = "sha256:965ee3e782c7892befc25575fa171b521d33798132692df428a09efacaffe8d0"}, - {file = "coverage-7.2.3.tar.gz", hash = "sha256:d298c2815fa4891edd9abe5ad6e6cb4207104c7dd9fd13aea3fdebf6f9b91259"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, ] [package.dependencies] @@ -400,14 +409,14 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "identify" -version = "2.5.22" +version = "2.5.24" description = "File identification library for Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "identify-2.5.22-py2.py3-none-any.whl", hash = "sha256:f0faad595a4687053669c112004178149f6c326db71ee999ae4636685753ad2f"}, - {file = "identify-2.5.22.tar.gz", hash = "sha256:f7a93d6cf98e29bd07663c60728e7a4057615068d7a639d132dc883b2d54d31e"}, + {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, + {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, ] [package.extras] @@ -553,62 +562,62 @@ testing = ["coverage", "pyyaml"] [[package]] name = "markupsafe" -version = "2.1.2" +version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, - {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, - {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, - {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, - {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, - {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, - {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, ] [[package]] @@ -640,14 +649,14 @@ files = [ [[package]] name = "mkdocs" -version = "1.4.2" +version = "1.4.3" description = "Project documentation with Markdown." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs-1.4.2-py3-none-any.whl", hash = "sha256:c8856a832c1e56702577023cd64cc5f84948280c1c0fcc6af4cd39006ea6aa8c"}, - {file = "mkdocs-1.4.2.tar.gz", hash = "sha256:8947af423a6d0facf41ea1195b8e1e8c85ad94ac95ae307fe11232e0424b11c5"}, + {file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"}, + {file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"}, ] [package.dependencies] @@ -670,14 +679,14 @@ min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-imp [[package]] name = "mkdocs-material" -version = "9.1.7" +version = "9.1.15" description = "Documentation that simply works" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "mkdocs_material-9.1.7-py3-none-any.whl", hash = "sha256:4ab0e2f378bb811ca44a001a63d687403a2725f0485c41d6a2a7aed3aa34cd31"}, - {file = "mkdocs_material-9.1.7.tar.gz", hash = "sha256:244f85d13e3aa773aaa66c74b95bb4b00d89a3a917f6f9d33704a5655bf0c423"}, + {file = "mkdocs_material-9.1.15-py3-none-any.whl", hash = "sha256:b49e12869ab464558e2dd3c5792da5b748a7e0c48ee83b4d05715f98125a7a39"}, + {file = "mkdocs_material-9.1.15.tar.gz", hash = "sha256:8513ab847c9a541ed3d11a3a7eed556caf72991ee786c31c5aac6691a121088a"}, ] [package.dependencies] @@ -757,14 +766,14 @@ files = [ [[package]] name = "nodeenv" -version = "1.7.0" +version = "1.8.0" description = "Node.js virtual environment builder" category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ - {file = "nodeenv-1.7.0-py2.py3-none-any.whl", hash = "sha256:27083a7b96a25f2f5e1d8cb4b6317ee8aeda3bdd121394e5ac54e498028a042e"}, - {file = "nodeenv-1.7.0.tar.gz", hash = "sha256:e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b"}, + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, ] [package.dependencies] @@ -839,22 +848,22 @@ files = [ [[package]] name = "platformdirs" -version = "3.2.0" +version = "3.5.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "platformdirs-3.2.0-py3-none-any.whl", hash = "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e"}, - {file = "platformdirs-3.2.0.tar.gz", hash = "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08"}, + {file = "platformdirs-3.5.1-py3-none-any.whl", hash = "sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5"}, + {file = "platformdirs-3.5.1.tar.gz", hash = "sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f"}, ] [package.dependencies] typing-extensions = {version = ">=4.5", markers = "python_version < \"3.8\""} [package.extras] -docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] +docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.2.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] [[package]] name = "pluggy" @@ -939,14 +948,14 @@ plugins = ["importlib-metadata"] [[package]] name = "pymdown-extensions" -version = "9.11" +version = "10.0.1" description = "Extension pack for Python Markdown." category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pymdown_extensions-9.11-py3-none-any.whl", hash = "sha256:a499191d8d869f30339de86fcf072a787e86c42b6f16f280f5c2cf174182b7f3"}, - {file = "pymdown_extensions-9.11.tar.gz", hash = "sha256:f7e86c1d3981f23d9dc43294488ecb54abadd05b0be4bf8f0e15efc90f7853ff"}, + {file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"}, + {file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"}, ] [package.dependencies] @@ -979,14 +988,14 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no [[package]] name = "pytest-cov" -version = "4.0.0" +version = "4.1.0" description = "Pytest plugin for measuring coverage." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, - {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, ] [package.dependencies] @@ -1070,14 +1079,14 @@ num = ["numpy", "pandas"] [[package]] name = "pytest-xdist" -version = "3.2.1" +version = "3.3.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-xdist-3.2.1.tar.gz", hash = "sha256:1849bd98d8b242b948e472db7478e090bf3361912a8fed87992ed94085f54727"}, - {file = "pytest_xdist-3.2.1-py3-none-any.whl", hash = "sha256:37290d161638a20b672401deef1cba812d110ac27e35d213f091d15b8beb40c9"}, + {file = "pytest-xdist-3.3.1.tar.gz", hash = "sha256:d5ee0520eb1b7bcca50a60a518ab7a7707992812c578198f8b44fdfac78e8c93"}, + {file = "pytest_xdist-3.3.1-py3-none-any.whl", hash = "sha256:ff9daa7793569e6a68544850fd3927cd257cc03a7ef76c95e86915355e82b5f2"}, ] [package.dependencies] @@ -1189,119 +1198,119 @@ docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphin [[package]] name = "regex" -version = "2022.10.31" +version = "2023.5.5" description = "Alternative regular expression module, to replace re." category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "regex-2022.10.31-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a8ff454ef0bb061e37df03557afda9d785c905dab15584860f982e88be73015f"}, - {file = "regex-2022.10.31-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eba476b1b242620c266edf6325b443a2e22b633217a9835a52d8da2b5c051f9"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0e5af9a9effb88535a472e19169e09ce750c3d442fb222254a276d77808620b"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d03fe67b2325cb3f09be029fd5da8df9e6974f0cde2c2ac6a79d2634e791dd57"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9d0b68ac1743964755ae2d89772c7e6fb0118acd4d0b7464eaf3921c6b49dd4"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a45b6514861916c429e6059a55cf7db74670eaed2052a648e3e4d04f070e001"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b0886885f7323beea6f552c28bff62cbe0983b9fbb94126531693ea6c5ebb90"}, - {file = "regex-2022.10.31-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5aefb84a301327ad115e9d346c8e2760009131d9d4b4c6b213648d02e2abe144"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:702d8fc6f25bbf412ee706bd73019da5e44a8400861dfff7ff31eb5b4a1276dc"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a3c1ebd4ed8e76e886507c9eddb1a891673686c813adf889b864a17fafcf6d66"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:50921c140561d3db2ab9f5b11c5184846cde686bb5a9dc64cae442926e86f3af"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7db345956ecce0c99b97b042b4ca7326feeec6b75facd8390af73b18e2650ffc"}, - {file = "regex-2022.10.31-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:763b64853b0a8f4f9cfb41a76a4a85a9bcda7fdda5cb057016e7706fde928e66"}, - {file = "regex-2022.10.31-cp310-cp310-win32.whl", hash = "sha256:44136355e2f5e06bf6b23d337a75386371ba742ffa771440b85bed367c1318d1"}, - {file = "regex-2022.10.31-cp310-cp310-win_amd64.whl", hash = "sha256:bfff48c7bd23c6e2aec6454aaf6edc44444b229e94743b34bdcdda2e35126cf5"}, - {file = "regex-2022.10.31-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4b4b1fe58cd102d75ef0552cf17242705ce0759f9695334a56644ad2d83903fe"}, - {file = "regex-2022.10.31-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:542e3e306d1669b25936b64917285cdffcd4f5c6f0247636fec037187bd93542"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c27cc1e4b197092e50ddbf0118c788d9977f3f8f35bfbbd3e76c1846a3443df7"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8e38472739028e5f2c3a4aded0ab7eadc447f0d84f310c7a8bb697ec417229e"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:76c598ca73ec73a2f568e2a72ba46c3b6c8690ad9a07092b18e48ceb936e9f0c"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c28d3309ebd6d6b2cf82969b5179bed5fefe6142c70f354ece94324fa11bf6a1"}, - {file = "regex-2022.10.31-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9af69f6746120998cd9c355e9c3c6aec7dff70d47247188feb4f829502be8ab4"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a5f9505efd574d1e5b4a76ac9dd92a12acb2b309551e9aa874c13c11caefbe4f"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:5ff525698de226c0ca743bfa71fc6b378cda2ddcf0d22d7c37b1cc925c9650a5"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:4fe7fda2fe7c8890d454f2cbc91d6c01baf206fbc96d89a80241a02985118c0c"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2cdc55ca07b4e70dda898d2ab7150ecf17c990076d3acd7a5f3b25cb23a69f1c"}, - {file = "regex-2022.10.31-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:44a6c2f6374e0033873e9ed577a54a3602b4f609867794c1a3ebba65e4c93ee7"}, - {file = "regex-2022.10.31-cp311-cp311-win32.whl", hash = "sha256:d8716f82502997b3d0895d1c64c3b834181b1eaca28f3f6336a71777e437c2af"}, - {file = "regex-2022.10.31-cp311-cp311-win_amd64.whl", hash = "sha256:61edbca89aa3f5ef7ecac8c23d975fe7261c12665f1d90a6b1af527bba86ce61"}, - {file = "regex-2022.10.31-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a069c8483466806ab94ea9068c34b200b8bfc66b6762f45a831c4baaa9e8cdd"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d26166acf62f731f50bdd885b04b38828436d74e8e362bfcb8df221d868b5d9b"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac741bf78b9bb432e2d314439275235f41656e189856b11fb4e774d9f7246d81"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75f591b2055523fc02a4bbe598aa867df9e953255f0b7f7715d2a36a9c30065c"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b30bddd61d2a3261f025ad0f9ee2586988c6a00c780a2fb0a92cea2aa702c54"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef4163770525257876f10e8ece1cf25b71468316f61451ded1a6f44273eedeb5"}, - {file = "regex-2022.10.31-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7b280948d00bd3973c1998f92e22aa3ecb76682e3a4255f33e1020bd32adf443"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:d0213671691e341f6849bf33cd9fad21f7b1cb88b89e024f33370733fec58742"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:22e7ebc231d28393dfdc19b185d97e14a0f178bedd78e85aad660e93b646604e"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:8ad241da7fac963d7573cc67a064c57c58766b62a9a20c452ca1f21050868dfa"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:586b36ebda81e6c1a9c5a5d0bfdc236399ba6595e1397842fd4a45648c30f35e"}, - {file = "regex-2022.10.31-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:0653d012b3bf45f194e5e6a41df9258811ac8fc395579fa82958a8b76286bea4"}, - {file = "regex-2022.10.31-cp36-cp36m-win32.whl", hash = "sha256:144486e029793a733e43b2e37df16a16df4ceb62102636ff3db6033994711066"}, - {file = "regex-2022.10.31-cp36-cp36m-win_amd64.whl", hash = "sha256:c14b63c9d7bab795d17392c7c1f9aaabbffd4cf4387725a0ac69109fb3b550c6"}, - {file = "regex-2022.10.31-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4cac3405d8dda8bc6ed499557625585544dd5cbf32072dcc72b5a176cb1271c8"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23cbb932cc53a86ebde0fb72e7e645f9a5eec1a5af7aa9ce333e46286caef783"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74bcab50a13960f2a610cdcd066e25f1fd59e23b69637c92ad470784a51b1347"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78d680ef3e4d405f36f0d6d1ea54e740366f061645930072d39bca16a10d8c93"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce6910b56b700bea7be82c54ddf2e0ed792a577dfaa4a76b9af07d550af435c6"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:659175b2144d199560d99a8d13b2228b85e6019b6e09e556209dfb8c37b78a11"}, - {file = "regex-2022.10.31-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1ddf14031a3882f684b8642cb74eea3af93a2be68893901b2b387c5fd92a03ec"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b683e5fd7f74fb66e89a1ed16076dbab3f8e9f34c18b1979ded614fe10cdc4d9"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2bde29cc44fa81c0a0c8686992c3080b37c488df167a371500b2a43ce9f026d1"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4919899577ba37f505aaebdf6e7dc812d55e8f097331312db7f1aab18767cce8"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:9c94f7cc91ab16b36ba5ce476f1904c91d6c92441f01cd61a8e2729442d6fcf5"}, - {file = "regex-2022.10.31-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ae1e96785696b543394a4e3f15f3f225d44f3c55dafe3f206493031419fedf95"}, - {file = "regex-2022.10.31-cp37-cp37m-win32.whl", hash = "sha256:c670f4773f2f6f1957ff8a3962c7dd12e4be54d05839b216cb7fd70b5a1df394"}, - {file = "regex-2022.10.31-cp37-cp37m-win_amd64.whl", hash = "sha256:8e0caeff18b96ea90fc0eb6e3bdb2b10ab5b01a95128dfeccb64a7238decf5f0"}, - {file = "regex-2022.10.31-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:131d4be09bea7ce2577f9623e415cab287a3c8e0624f778c1d955ec7c281bd4d"}, - {file = "regex-2022.10.31-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e613a98ead2005c4ce037c7b061f2409a1a4e45099edb0ef3200ee26ed2a69a8"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052b670fafbe30966bbe5d025e90b2a491f85dfe5b2583a163b5e60a85a321ad"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa62a07ac93b7cb6b7d0389d8ef57ffc321d78f60c037b19dfa78d6b17c928ee"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5352bea8a8f84b89d45ccc503f390a6be77917932b1c98c4cdc3565137acc714"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20f61c9944f0be2dc2b75689ba409938c14876c19d02f7585af4460b6a21403e"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29c04741b9ae13d1e94cf93fca257730b97ce6ea64cfe1eba11cf9ac4e85afb6"}, - {file = "regex-2022.10.31-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:543883e3496c8b6d58bd036c99486c3c8387c2fc01f7a342b760c1ea3158a318"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7a8b43ee64ca8f4befa2bea4083f7c52c92864d8518244bfa6e88c751fa8fff"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6a9a19bea8495bb419dc5d38c4519567781cd8d571c72efc6aa959473d10221a"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6ffd55b5aedc6f25fd8d9f905c9376ca44fcf768673ffb9d160dd6f409bfda73"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4bdd56ee719a8f751cf5a593476a441c4e56c9b64dc1f0f30902858c4ef8771d"}, - {file = "regex-2022.10.31-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ca88da1bd78990b536c4a7765f719803eb4f8f9971cc22d6ca965c10a7f2c4c"}, - {file = "regex-2022.10.31-cp38-cp38-win32.whl", hash = "sha256:5a260758454580f11dd8743fa98319bb046037dfab4f7828008909d0aa5292bc"}, - {file = "regex-2022.10.31-cp38-cp38-win_amd64.whl", hash = "sha256:5e6a5567078b3eaed93558842346c9d678e116ab0135e22eb72db8325e90b453"}, - {file = "regex-2022.10.31-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5217c25229b6a85049416a5c1e6451e9060a1edcf988641e309dbe3ab26d3e49"}, - {file = "regex-2022.10.31-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4bf41b8b0a80708f7e0384519795e80dcb44d7199a35d52c15cc674d10b3081b"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf0da36a212978be2c2e2e2d04bdff46f850108fccc1851332bcae51c8907cc"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d403d781b0e06d2922435ce3b8d2376579f0c217ae491e273bab8d092727d244"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a37d51fa9a00d265cf73f3de3930fa9c41548177ba4f0faf76e61d512c774690"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4f781ffedd17b0b834c8731b75cce2639d5a8afe961c1e58ee7f1f20b3af185"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d243b36fbf3d73c25e48014961e83c19c9cc92530516ce3c43050ea6276a2ab7"}, - {file = "regex-2022.10.31-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:370f6e97d02bf2dd20d7468ce4f38e173a124e769762d00beadec3bc2f4b3bc4"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:597f899f4ed42a38df7b0e46714880fb4e19a25c2f66e5c908805466721760f5"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7dbdce0c534bbf52274b94768b3498abdf675a691fec5f751b6057b3030f34c1"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:22960019a842777a9fa5134c2364efaed5fbf9610ddc5c904bd3a400973b0eb8"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7f5a3ffc731494f1a57bd91c47dc483a1e10048131ffb52d901bfe2beb6102e8"}, - {file = "regex-2022.10.31-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7ef6b5942e6bfc5706301a18a62300c60db9af7f6368042227ccb7eeb22d0892"}, - {file = "regex-2022.10.31-cp39-cp39-win32.whl", hash = "sha256:395161bbdbd04a8333b9ff9763a05e9ceb4fe210e3c7690f5e68cedd3d65d8e1"}, - {file = "regex-2022.10.31-cp39-cp39-win_amd64.whl", hash = "sha256:957403a978e10fb3ca42572a23e6f7badff39aa1ce2f4ade68ee452dc6807692"}, - {file = "regex-2022.10.31.tar.gz", hash = "sha256:a3a98921da9a1bf8457aeee6a551948a83601689e5ecdd736894ea9bbec77e83"}, + {file = "regex-2023.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:48c9ec56579d4ba1c88f42302194b8ae2350265cb60c64b7b9a88dcb7fbde309"}, + {file = "regex-2023.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f4541550459c08fdd6f97aa4e24c6f1932eec780d58a2faa2068253df7d6ff"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53e22e4460f0245b468ee645156a4f84d0fc35a12d9ba79bd7d79bdcd2f9629d"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b870b6f632fc74941cadc2a0f3064ed8409e6f8ee226cdfd2a85ae50473aa94"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:171c52e320fe29260da550d81c6b99f6f8402450dc7777ef5ced2e848f3b6f8f"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad5524c2aedaf9aa14ef1bc9327f8abd915699dea457d339bebbe2f0d218f86"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a0f874ee8c0bc820e649c900243c6d1e6dc435b81da1492046716f14f1a2a96"}, + {file = "regex-2023.5.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e645c757183ee0e13f0bbe56508598e2d9cd42b8abc6c0599d53b0d0b8dd1479"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a4c5da39bca4f7979eefcbb36efea04471cd68db2d38fcbb4ee2c6d440699833"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5e3f4468b8c6fd2fd33c218bbd0a1559e6a6fcf185af8bb0cc43f3b5bfb7d636"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:59e4b729eae1a0919f9e4c0fc635fbcc9db59c74ad98d684f4877be3d2607dd6"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ba73a14e9c8f9ac409863543cde3290dba39098fc261f717dc337ea72d3ebad2"}, + {file = "regex-2023.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0bbd5dcb19603ab8d2781fac60114fb89aee8494f4505ae7ad141a3314abb1f9"}, + {file = "regex-2023.5.5-cp310-cp310-win32.whl", hash = "sha256:40005cbd383438aecf715a7b47fe1e3dcbc889a36461ed416bdec07e0ef1db66"}, + {file = "regex-2023.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:59597cd6315d3439ed4b074febe84a439c33928dd34396941b4d377692eca810"}, + {file = "regex-2023.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8f08276466fedb9e36e5193a96cb944928301152879ec20c2d723d1031cd4ddd"}, + {file = "regex-2023.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cd46f30e758629c3ee91713529cfbe107ac50d27110fdcc326a42ce2acf4dafc"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2910502f718828cecc8beff004917dcf577fc5f8f5dd40ffb1ea7612124547b"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:445d6f4fc3bd9fc2bf0416164454f90acab8858cd5a041403d7a11e3356980e8"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18196c16a584619c7c1d843497c069955d7629ad4a3fdee240eb347f4a2c9dbe"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33d430a23b661629661f1fe8395be2004006bc792bb9fc7c53911d661b69dd7e"}, + {file = "regex-2023.5.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72a28979cc667e5f82ef433db009184e7ac277844eea0f7f4d254b789517941d"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f764e4dfafa288e2eba21231f455d209f4709436baeebb05bdecfb5d8ddc3d35"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:23d86ad2121b3c4fc78c58f95e19173790e22ac05996df69b84e12da5816cb17"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:690a17db524ee6ac4a27efc5406530dd90e7a7a69d8360235323d0e5dafb8f5b"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:1ecf3dcff71f0c0fe3e555201cbe749fa66aae8d18f80d2cc4de8e66df37390a"}, + {file = "regex-2023.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:811040d7f3dd9c55eb0d8b00b5dcb7fd9ae1761c454f444fd9f37fe5ec57143a"}, + {file = "regex-2023.5.5-cp311-cp311-win32.whl", hash = "sha256:c8c143a65ce3ca42e54d8e6fcaf465b6b672ed1c6c90022794a802fb93105d22"}, + {file = "regex-2023.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:586a011f77f8a2da4b888774174cd266e69e917a67ba072c7fc0e91878178a80"}, + {file = "regex-2023.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b6365703e8cf1644b82104cdd05270d1a9f043119a168d66c55684b1b557d008"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a56c18f21ac98209da9c54ae3ebb3b6f6e772038681d6cb43b8d53da3b09ee81"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8b942d8b3ce765dbc3b1dad0a944712a89b5de290ce8f72681e22b3c55f3cc8"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:844671c9c1150fcdac46d43198364034b961bd520f2c4fdaabfc7c7d7138a2dd"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2ce65bdeaf0a386bb3b533a28de3994e8e13b464ac15e1e67e4603dd88787fa"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fee0016cc35a8a91e8cc9312ab26a6fe638d484131a7afa79e1ce6165328a135"}, + {file = "regex-2023.5.5-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:18f05d14f14a812fe9723f13afafefe6b74ca042d99f8884e62dbd34dcccf3e2"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:941b3f1b2392f0bcd6abf1bc7a322787d6db4e7457be6d1ffd3a693426a755f2"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:921473a93bcea4d00295799ab929522fc650e85c6b9f27ae1e6bb32a790ea7d3"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:e2205a81f815b5bb17e46e74cc946c575b484e5f0acfcb805fb252d67e22938d"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:385992d5ecf1a93cb85adff2f73e0402dd9ac29b71b7006d342cc920816e6f32"}, + {file = "regex-2023.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:890a09cb0a62198bff92eda98b2b507305dd3abf974778bae3287f98b48907d3"}, + {file = "regex-2023.5.5-cp36-cp36m-win32.whl", hash = "sha256:821a88b878b6589c5068f4cc2cfeb2c64e343a196bc9d7ac68ea8c2a776acd46"}, + {file = "regex-2023.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:7918a1b83dd70dc04ab5ed24c78ae833ae8ea228cef84e08597c408286edc926"}, + {file = "regex-2023.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:338994d3d4ca4cf12f09822e025731a5bdd3a37aaa571fa52659e85ca793fb67"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a69cf0c00c4d4a929c6c7717fd918414cab0d6132a49a6d8fc3ded1988ed2ea"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f5e06df94fff8c4c85f98c6487f6636848e1dc85ce17ab7d1931df4a081f657"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8906669b03c63266b6a7693d1f487b02647beb12adea20f8840c1a087e2dfb5"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fda3e50abad8d0f48df621cf75adc73c63f7243cbe0e3b2171392b445401550"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ac2b7d341dc1bd102be849d6dd33b09701223a851105b2754339e390be0627a"}, + {file = "regex-2023.5.5-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fb2b495dd94b02de8215625948132cc2ea360ae84fe6634cd19b6567709c8ae2"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aa7d032c1d84726aa9edeb6accf079b4caa87151ca9fabacef31fa028186c66d"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d45864693351c15531f7e76f545ec35000d50848daa833cead96edae1665559"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21e90a288e6ba4bf44c25c6a946cb9b0f00b73044d74308b5e0afd190338297c"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:10250a093741ec7bf74bcd2039e697f519b028518f605ff2aa7ac1e9c9f97423"}, + {file = "regex-2023.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6b8d0c153f07a953636b9cdb3011b733cadd4178123ef728ccc4d5969e67f3c2"}, + {file = "regex-2023.5.5-cp37-cp37m-win32.whl", hash = "sha256:10374c84ee58c44575b667310d5bbfa89fb2e64e52349720a0182c0017512f6c"}, + {file = "regex-2023.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:9b320677521aabf666cdd6e99baee4fb5ac3996349c3b7f8e7c4eee1c00dfe3a"}, + {file = "regex-2023.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:afb1c70ec1e594a547f38ad6bf5e3d60304ce7539e677c1429eebab115bce56e"}, + {file = "regex-2023.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cf123225945aa58b3057d0fba67e8061c62d14cc8a4202630f8057df70189051"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99757ad7fe5c8a2bb44829fc57ced11253e10f462233c1255fe03888e06bc19"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a623564d810e7a953ff1357f7799c14bc9beeab699aacc8b7ab7822da1e952b8"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ced02e3bd55e16e89c08bbc8128cff0884d96e7f7a5633d3dc366b6d95fcd1d6"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cbe6b5be3b9b698d8cc4ee4dee7e017ad655e83361cd0ea8e653d65e469468"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a6e4b0e0531223f53bad07ddf733af490ba2b8367f62342b92b39b29f72735a"}, + {file = "regex-2023.5.5-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e9c4f778514a560a9c9aa8e5538bee759b55f6c1dcd35613ad72523fd9175b8"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:256f7f4c6ba145f62f7a441a003c94b8b1af78cee2cccacfc1e835f93bc09426"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bd7b68fd2e79d59d86dcbc1ccd6e2ca09c505343445daaa4e07f43c8a9cc34da"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4a5059bd585e9e9504ef9c07e4bc15b0a621ba20504388875d66b8b30a5c4d18"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:6893544e06bae009916a5658ce7207e26ed17385149f35a3125f5259951f1bbe"}, + {file = "regex-2023.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c64d5abe91a3dfe5ff250c6bb267ef00dbc01501518225b45a5f9def458f31fb"}, + {file = "regex-2023.5.5-cp38-cp38-win32.whl", hash = "sha256:7923470d6056a9590247ff729c05e8e0f06bbd4efa6569c916943cb2d9b68b91"}, + {file = "regex-2023.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:4035d6945cb961c90c3e1c1ca2feb526175bcfed44dfb1cc77db4fdced060d3e"}, + {file = "regex-2023.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50fd2d9b36938d4dcecbd684777dd12a407add4f9f934f235c66372e630772b0"}, + {file = "regex-2023.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d19e57f888b00cd04fc38f5e18d0efbd91ccba2d45039453ab2236e6eec48d4d"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd966475e963122ee0a7118ec9024388c602d12ac72860f6eea119a3928be053"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db09e6c18977a33fea26fe67b7a842f706c67cf8bda1450974d0ae0dd63570df"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6164d4e2a82f9ebd7752a06bd6c504791bedc6418c0196cd0a23afb7f3e12b2d"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84397d3f750d153ebd7f958efaa92b45fea170200e2df5e0e1fd4d85b7e3f58a"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c3efee9bb53cbe7b285760c81f28ac80dc15fa48b5fe7e58b52752e642553f1"}, + {file = "regex-2023.5.5-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:144b5b017646b5a9392a5554a1e5db0000ae637be4971c9747566775fc96e1b2"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1189fbbb21e2c117fda5303653b61905aeeeea23de4a94d400b0487eb16d2d60"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f83fe9e10f9d0b6cf580564d4d23845b9d692e4c91bd8be57733958e4c602956"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:72aa4746993a28c841e05889f3f1b1e5d14df8d3daa157d6001a34c98102b393"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:de2f780c3242ea114dd01f84848655356af4dd561501896c751d7b885ea6d3a1"}, + {file = "regex-2023.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:290fd35219486dfbc00b0de72f455ecdd63e59b528991a6aec9fdfc0ce85672e"}, + {file = "regex-2023.5.5-cp39-cp39-win32.whl", hash = "sha256:732176f5427e72fa2325b05c58ad0b45af341c459910d766f814b0584ac1f9ac"}, + {file = "regex-2023.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:1307aa4daa1cbb23823d8238e1f61292fd07e4e5d8d38a6efff00b67a7cdb764"}, + {file = "regex-2023.5.5.tar.gz", hash = "sha256:7d76a8a1fc9da08296462a18f16620ba73bcbf5909e42383b253ef34d9d5141e"}, ] [[package]] name = "requests" -version = "2.28.2" +version = "2.31.0" description = "Python HTTP for Humans." category = "dev" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.7" files = [ - {file = "requests-2.28.2-py3-none-any.whl", hash = "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"}, - {file = "requests-2.28.2.tar.gz", hash = "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf"}, + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] [package.dependencies] certifi = ">=2017.4.17" charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] @@ -1336,19 +1345,19 @@ files = [ [[package]] name = "setuptools" -version = "67.7.1" +version = "67.8.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.7.1-py3-none-any.whl", hash = "sha256:6f0839fbdb7e3cfef1fc38d7954f5c1c26bf4eebb155a55c9bf8faf997b9fb67"}, - {file = "setuptools-67.7.1.tar.gz", hash = "sha256:bb16732e8eb928922eabaa022f881ae2b7cdcfaf9993ef1f5e841a96d32b8e0c"}, + {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, + {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -1365,14 +1374,14 @@ files = [ [[package]] name = "termcolor" -version = "2.2.0" +version = "2.3.0" description = "ANSI color formatting for output in terminal" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "termcolor-2.2.0-py3-none-any.whl", hash = "sha256:91ddd848e7251200eac969846cbae2dacd7d71c2871e92733289e7e3666f48e7"}, - {file = "termcolor-2.2.0.tar.gz", hash = "sha256:dfc8ac3f350788f23b2947b3e6cfa5a53b630b612e6cd8965a015a776020b99a"}, + {file = "termcolor-2.3.0-py3-none-any.whl", hash = "sha256:3afb05607b89aed0ffe25202399ee0867ad4d3cb4180d98aaf8eefa6a5f7d475"}, + {file = "termcolor-2.3.0.tar.gz", hash = "sha256:b5b08f68937f138fe92f6c089b99f1e2da0ae56c52b78bf7075fd95420fd9a5a"}, ] [package.extras] @@ -1392,14 +1401,14 @@ files = [ [[package]] name = "tomlkit" -version = "0.11.7" +version = "0.11.8" description = "Style preserving TOML library" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.11.7-py3-none-any.whl", hash = "sha256:5325463a7da2ef0c6bbfefb62a3dc883aebe679984709aee32a317907d0a8d3c"}, - {file = "tomlkit-0.11.7.tar.gz", hash = "sha256:f392ef70ad87a672f02519f99967d28a4d3047133e2d1df936511465fbb3791d"}, + {file = "tomlkit-0.11.8-py3-none-any.whl", hash = "sha256:8c726c4c202bdb148667835f68d68780b9a003a9ec34167b6c673b38eff2a171"}, + {file = "tomlkit-0.11.8.tar.gz", hash = "sha256:9330fc7faa1db67b541b28e62018c17d20be733177d290a13b24c62d1614e0c3"}, ] [[package]] @@ -1478,54 +1487,55 @@ files = [ [[package]] name = "typing-extensions" -version = "4.5.0" +version = "4.6.3" description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, - {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, + {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, + {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, ] [[package]] name = "urllib3" -version = "1.26.15" +version = "2.0.2" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7" files = [ - {file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"}, - {file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"}, + {file = "urllib3-2.0.2-py3-none-any.whl", hash = "sha256:d055c2f9d38dc53c808f6fdc8eab7360b6fdbbde02340ed25cfbcd817c62469e"}, + {file = "urllib3-2.0.2.tar.gz", hash = "sha256:61717a1095d7e155cdb737ac7bb2f4324a858a1e2e6466f6d03ff630ca68d3cc"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.21.1" +version = "20.23.0" description = "Virtual Python Environment builder" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.21.1-py3-none-any.whl", hash = "sha256:09ddbe1af0c8ed2bb4d6ed226b9e6415718ad18aef9fa0ba023d96b7a8356049"}, - {file = "virtualenv-20.21.1.tar.gz", hash = "sha256:4c104ccde994f8b108163cf9ba58f3d11511d9403de87fb9b4f52bf33dbc8668"}, + {file = "virtualenv-20.23.0-py3-none-any.whl", hash = "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e"}, + {file = "virtualenv-20.23.0.tar.gz", hash = "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924"}, ] [package.dependencies] distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.8\""} -platformdirs = ">=2.4,<4" +filelock = ">=3.11,<4" +importlib-metadata = {version = ">=6.4.1", markers = "python_version < \"3.8\""} +platformdirs = ">=3.2,<4" [package.extras] docs = ["furo (>=2023.3.27)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=22.12)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.3)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.7.1)", "time-machine (>=2.9)"] [[package]] name = "watchdog" @@ -1598,4 +1608,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.7" -content-hash = "3786ee4cd2228f286a572eae8989bb6fb97cfb8441725a4c232c1aa0b36d6e7e" +content-hash = "8d518516e2278d5a633eb7361c57745112bcf620fb4b4ea01f5b5d2411f1569b" From 70b59635baca7857fecf3ba08b5b94c13b212145 Mon Sep 17 00:00:00 2001 From: Santiago Fraire <santiwilly@gmail.com> Date: Sat, 3 Jun 2023 13:49:45 +0200 Subject: [PATCH 8/9] feat: add support for cargo workspaces --- commitizen/providers.py | 13 ++++++++++++- tests/test_version_providers.py | 34 +++++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/commitizen/providers.py b/commitizen/providers.py index 5c4849a635..5e8b67bb69 100644 --- a/commitizen/providers.py +++ b/commitizen/providers.py @@ -115,14 +115,25 @@ def set(self, pyproject: tomlkit.TOMLDocument, version: str): class CargoProvider(TomlProvider): """ Cargo version management + + With support for `workspaces` """ filename = "Cargo.toml" def get(self, document: tomlkit.TOMLDocument) -> str: - return document["package"]["version"] # type: ignore + try: + return document["package"]["version"] # type: ignore + except tomlkit.exceptions.NonExistentKey: + ... + return document["workspace"]["package"]["version"] # type: ignore def set(self, document: tomlkit.TOMLDocument, version: str): + try: + document["workspace"]["package"]["version"] = version # type: ignore + return + except tomlkit.exceptions.NonExistentKey: + ... document["package"]["version"] = version # type: ignore diff --git a/tests/test_version_providers.py b/tests/test_version_providers.py index 5a043bb302..edf6e2f1cb 100644 --- a/tests/test_version_providers.py +++ b/tests/test_version_providers.py @@ -57,8 +57,9 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): mock.assert_called_once_with("version", "43.1") -FILE_PROVIDERS = dict( - pep621=( +FILE_PROVIDERS = [ + ( + "pep621", "pyproject.toml", Pep621Provider, """\ @@ -70,7 +71,8 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): version = "42.1" """, ), - poetry=( + ( + "poetry", "pyproject.toml", PoetryProvider, """\ @@ -82,7 +84,21 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): version = "42.1" """, ), - cargo=( + ( + "cargo", + "Cargo.toml", + CargoProvider, + """\ + [workspace.package] + version = "0.1.0" + """, + """\ + [workspace.package] + version = "42.1" + """, + ), + ( + "cargo", "Cargo.toml", CargoProvider, """\ @@ -94,7 +110,8 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): version = "42.1" """, ), - npm=( + ( + "npm", "package.json", NpmProvider, """\ @@ -110,7 +127,8 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): } """, ), - composer=( + ( + "composer", "composer.json", ComposerProvider, """\ @@ -126,12 +144,12 @@ def test_commitizen_provider(config: BaseConfig, mocker: MockerFixture): } """, ), -) +] @pytest.mark.parametrize( "id,filename,cls,content,expected", - (pytest.param(id, *FILE_PROVIDERS[id], id=id) for id in FILE_PROVIDERS), + FILE_PROVIDERS, ) def test_file_providers( config: BaseConfig, From 3ececac37470726e357a3c22c140a0f01cb4ec74 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com> Date: Tue, 13 Jun 2023 15:08:36 +0000 Subject: [PATCH 9/9] =?UTF-8?q?bump:=20version=203.2.2=20=E2=86=92=203.3.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 6 ++++++ commitizen/__version__.py | 2 +- pyproject.toml | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 28c9bf06f2..ecd51a19a1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -44,7 +44,7 @@ repos: args: ["--write-changes", "--ignore-words-list", "asend"] - repo: https://github.com/commitizen-tools/commitizen - rev: v3.2.2 # automatically updated by Commitizen + rev: v3.3.0 # automatically updated by Commitizen hooks: - id: commitizen - id: commitizen-branch diff --git a/CHANGELOG.md b/CHANGELOG.md index 0f07585f98..c34c0ab661 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,10 @@ +## v3.3.0 (2023-06-13) + +### Feat + +- add support for cargo workspaces + ## v3.2.2 (2023-05-11) ### Fix diff --git a/commitizen/__version__.py b/commitizen/__version__.py index 1e3bed4cd5..88c513ea36 100644 --- a/commitizen/__version__.py +++ b/commitizen/__version__.py @@ -1 +1 @@ -__version__ = "3.2.2" +__version__ = "3.3.0" diff --git a/pyproject.toml b/pyproject.toml index c0d6311bf7..6e12d9775b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.commitizen] -version = "3.2.2" +version = "3.3.0" tag_format = "v$version" version_files = [ "pyproject.toml:version", @@ -9,7 +9,7 @@ version_files = [ [tool.poetry] name = "commitizen" -version = "3.2.2" +version = "3.3.0" description = "Python commitizen client tool" authors = ["Santiago Fraire <santiwilly@gmail.com>"] license = "MIT"