From 25e8f7e7271ca7476306784b2a64214c9c0417bc Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Wed, 8 Apr 2020 18:51:00 +0800 Subject: [PATCH 01/17] style(mypy): unify config path input as Union[str, Path] and output as Path --- commitizen/config/__init__.py | 2 +- commitizen/config/base_config.py | 11 ++++++----- commitizen/config/ini_config.py | 4 +++- commitizen/config/toml_config.py | 5 ++++- commitizen/defaults.py | 3 ++- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/commitizen/config/__init__.py b/commitizen/config/__init__.py index 9b317f1e36..3a729e4be5 100644 --- a/commitizen/config/__init__.py +++ b/commitizen/config/__init__.py @@ -29,7 +29,7 @@ def load_global_conf() -> Optional[IniConfig]: with open(global_cfg, "r") as f: data = f.read() - conf = IniConfig(data) + conf = IniConfig(data=data, path=global_cfg) return conf diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index 7f5951d790..327a7dc9b1 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -1,5 +1,6 @@ import warnings -from typing import Optional +from typing import Optional, Union +from pathlib import Path from commitizen.defaults import DEFAULT_SETTINGS @@ -7,14 +8,14 @@ class BaseConfig: def __init__(self): self._settings: dict = DEFAULT_SETTINGS.copy() - self._path: Optional[str] = None + self._path: Optional[Path] = None @property def settings(self) -> dict: return self._settings @property - def path(self) -> str: + def path(self) -> Optional[Path]: return self._path def set_key(self, key, value): @@ -28,8 +29,8 @@ def set_key(self, key, value): def update(self, data: dict): self._settings.update(data) - def add_path(self, path: str): - self._path = path + def add_path(self, path: Union[str, Path]): + self._path = Path(path) def _parse_setting(self, data: str) -> dict: raise NotImplementedError() diff --git a/commitizen/config/ini_config.py b/commitizen/config/ini_config.py index 39f7488bc4..88544f9b79 100644 --- a/commitizen/config/ini_config.py +++ b/commitizen/config/ini_config.py @@ -1,12 +1,14 @@ import configparser import json import warnings +from pathlib import Path +from typing import Optional, Union from .base_config import BaseConfig class IniConfig(BaseConfig): - def __init__(self, *, data: str, path: str): + def __init__(self, *, data: str, path: Union[Path, str]): warnings.simplefilter("always", DeprecationWarning) warnings.warn( ( diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index 21ffd62e8d..f075091ba3 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -1,10 +1,13 @@ +from typing import Optional, Union +from pathlib import Path + from tomlkit import exceptions, parse from .base_config import BaseConfig class TomlConfig(BaseConfig): - def __init__(self, *, data: str, path: str): + def __init__(self, *, data: str, path: Union[Path, str]): super(TomlConfig, self).__init__() self.is_empty_config = False self._parse_setting(data) diff --git a/commitizen/defaults.py b/commitizen/defaults.py index e38ef01bf0..2f4fae78b2 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -1,4 +1,5 @@ from collections import OrderedDict +from typing import Dict, Any name: str = "cz_conventional_commits" # TODO: .cz, setup.cfg, .cz.cfg should be removed in 2.0 @@ -6,7 +7,7 @@ deprcated_config_files: list = [".cz", "setup.cfg", ".cz.cfg"] config_files: list = long_term_support_config_files + deprcated_config_files -DEFAULT_SETTINGS: dict = { +DEFAULT_SETTINGS: Dict[str, Any] = { "name": "cz_conventional_commits", "version": None, "version_files": [], From e0a2ff084457b13dabc633223c1f04c12f39ee5a Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Wed, 8 Apr 2020 19:08:18 +0800 Subject: [PATCH 02/17] refactor(config): fix mypy warning for _conf --- commitizen/config/__init__.py | 3 ++- commitizen/config/base_config.py | 2 +- commitizen/config/toml_config.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/commitizen/config/__init__.py b/commitizen/config/__init__.py index 3a729e4be5..48a61c75fd 100644 --- a/commitizen/config/__init__.py +++ b/commitizen/config/__init__.py @@ -1,6 +1,6 @@ import warnings from pathlib import Path -from typing import Optional +from typing import Optional, Union from commitizen import defaults, git, out from commitizen.error_codes import NOT_A_GIT_PROJECT @@ -56,6 +56,7 @@ def read_cfg() -> BaseConfig: with open(filename, "r") as f: data: str = f.read() + _conf: Union[TomlConfig, IniConfig] if "toml" in filename.suffix: _conf = TomlConfig(data=data, path=filename) else: diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index 327a7dc9b1..5392ac6272 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -1,6 +1,6 @@ import warnings -from typing import Optional, Union from pathlib import Path +from typing import Optional, Union from commitizen.defaults import DEFAULT_SETTINGS diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index f075091ba3..000502c687 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -1,5 +1,5 @@ -from typing import Optional, Union from pathlib import Path +from typing import Optional, Union from tomlkit import exceptions, parse From ded92b2df383e97f61d12a4dcbf46efe2b9f18c8 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Wed, 8 Apr 2020 19:15:22 +0800 Subject: [PATCH 03/17] refactor(cz): add type annotation for each function in cz --- commitizen/cz/__init__.py | 2 +- commitizen/cz/base.py | 8 ++++---- .../conventional_commits.py | 5 +++-- commitizen/cz/customize/customize.py | 17 ++++++++++------- commitizen/cz/jira/jira.py | 12 +++++++----- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/commitizen/cz/__init__.py b/commitizen/cz/__init__.py index 3c379f3c6b..c8c988bba6 100644 --- a/commitizen/cz/__init__.py +++ b/commitizen/cz/__init__.py @@ -11,7 +11,7 @@ "cz_customize": CustomizeCommitsCz, } plugins = { - name: importlib.import_module(name).discover_this + name: importlib.import_module(name).discover_this # type: ignore for finder, name, ispkg in pkgutil.iter_modules() if name.startswith("cz_") } diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 258f43ca5e..32ac9f812c 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -42,18 +42,18 @@ def style(self): ] ) - def example(self) -> str: + def example(self) -> Optional[str]: """Example of the commit message.""" raise NotImplementedError("Not Implemented yet") - def schema(self) -> str: + def schema(self) -> Optional[str]: """Schema definition of the commit message.""" raise NotImplementedError("Not Implemented yet") - def schema_pattern(self) -> str: + def schema_pattern(self) -> Optional[str]: """Regex matching the schema used for message validation""" raise NotImplementedError("Not Implemented yet") - def info(self) -> str: + def info(self) -> Optional[str]: """Information about the standardized commit message.""" raise NotImplementedError("Not Implemented yet") diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index a9bfcf2039..fc4bef9792 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -1,4 +1,5 @@ import os +from typing import List, Dict, Any from commitizen import defaults from commitizen.cz.base import BaseCommitizen @@ -29,8 +30,8 @@ class ConventionalCommitsCz(BaseCommitizen): bump_pattern = defaults.bump_pattern bump_map = defaults.bump_map - def questions(self) -> list: - questions = [ + def questions(self) -> List[Dict[str, Any]]: + questions: List[Dict[str, Any]] = [ { "type": "list", "name": "prefix", diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 1e10975fe8..7eb38bcd8d 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -1,7 +1,9 @@ try: - from jinja2 import Template + from jinja2 import Template # type: ignore except ImportError: - from string import Template + from string import Template # type: ignore + +from typing import Optional, List, Any, Dict from commitizen import defaults from commitizen.config import BaseConfig @@ -26,23 +28,23 @@ def __init__(self, config: BaseConfig): if custom_bump_map: self.bump_map = custom_bump_map - def questions(self) -> list: + def questions(self) -> List[Dict[str, Any]]: return self.custom_settings.get("questions") def message(self, answers: dict) -> str: message_template = Template(self.custom_settings.get("message_template")) if getattr(Template, "substitute", None): - return message_template.substitute(**answers) + return message_template.substitute(**answers) # type: ignore else: return message_template.render(**answers) - def example(self) -> str: + def example(self) -> Optional[str]: return self.custom_settings.get("example") - def schema(self) -> str: + def schema(self) -> Optional[str]: return self.custom_settings.get("schema") - def info(self) -> str: + def info(self) -> Optional[str]: info_path = self.custom_settings.get("info_path") info = self.custom_settings.get("info") if info_path: @@ -51,3 +53,4 @@ def info(self) -> str: return content elif info: return info + return None diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index b853855fba..3c35b50254 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -1,12 +1,14 @@ import os +from typing import List, Dict, Any + from commitizen.cz.base import BaseCommitizen __all__ = ["JiraSmartCz"] class JiraSmartCz(BaseCommitizen): - def questions(self): + def questions(self) -> List[Dict[str, Any]]: questions = [ { "type": "input", @@ -43,7 +45,7 @@ def questions(self): ] return questions - def message(self, answers): + def message(self, answers) -> str: return " ".join( filter( bool, @@ -57,7 +59,7 @@ def message(self, answers): ) ) - def example(self): + def example(self) -> str: return ( "JRA-34 #comment corrected indent issue\n" "JRA-35 #time 1w 2d 4h 30m Total work logged\n" @@ -66,13 +68,13 @@ def example(self): "ahead of schedule" ) - def schema(self): + def schema(self) -> str: return " # " # noqa def schema_pattern(self) -> str: return r".*[A-Z]{2,}\-[0-9]+( #| .* #).+( #.+)*" - def info(self): + def info(self) -> str: dir_path = os.path.dirname(os.path.realpath(__file__)) filepath = os.path.join(dir_path, "jira_info.txt") with open(filepath, "r") as f: From a6dde29bbd328a455ed6616d0341e0b1dde4e9b4 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 16:42:52 +0800 Subject: [PATCH 04/17] refactor(cz/base): fix config type used in base cz --- commitizen/cz/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/commitizen/cz/base.py b/commitizen/cz/base.py index 32ac9f812c..cd0775e6f7 100644 --- a/commitizen/cz/base.py +++ b/commitizen/cz/base.py @@ -3,6 +3,8 @@ from prompt_toolkit.styles import Style, merge_styles +from commitizen.config.base_config import BaseConfig + class BaseCommitizen(metaclass=ABCMeta): bump_pattern: Optional[str] = None @@ -20,7 +22,7 @@ class BaseCommitizen(metaclass=ABCMeta): ("disabled", "fg:#858585 italic"), ] - def __init__(self, config: dict): + def __init__(self, config: BaseConfig): self.config = config if not self.config.settings.get("style"): self.config.settings.update({"style": BaseCommitizen.default_style_config}) From 5fad7b75f8643a2f39138f87737c025c4f85b57d Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 16:43:23 +0800 Subject: [PATCH 05/17] refactor(config/base): use Dict to replace dict in base_config --- commitizen/config/base_config.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index 5392ac6272..e01ed2d5f4 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -1,17 +1,17 @@ import warnings from pathlib import Path -from typing import Optional, Union +from typing import Optional, Union, Dict, Any from commitizen.defaults import DEFAULT_SETTINGS class BaseConfig: def __init__(self): - self._settings: dict = DEFAULT_SETTINGS.copy() + self._settings: Dict[str, Any] = DEFAULT_SETTINGS.copy() self._path: Optional[Path] = None @property - def settings(self) -> dict: + def settings(self) -> Dict[str, Any]: return self._settings @property From cdfe112d373cd20dff6da9dacb3b13de9a7507e6 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 16:44:05 +0800 Subject: [PATCH 06/17] refactor(commands/check): fix type annotation --- commitizen/commands/check.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/commitizen/commands/check.py b/commitizen/commands/check.py index 830cb6bb85..ccfb7a4791 100644 --- a/commitizen/commands/check.py +++ b/commitizen/commands/check.py @@ -1,6 +1,6 @@ import os import re -from typing import Dict +from typing import Dict, Optional from commitizen import factory, git, out from commitizen.config import BaseConfig @@ -22,8 +22,8 @@ def __init__(self, config: BaseConfig, arguments: Dict[str, str], cwd=os.getcwd( the flags provided by the user """ - self.commit_msg_file: str = arguments.get("commit_msg_file") - self.rev_range: str = arguments.get("rev_range") + self.commit_msg_file: Optional[str] = arguments.get("commit_msg_file") + self.rev_range: Optional[str] = arguments.get("rev_range") self._valid_command_argument() @@ -76,4 +76,4 @@ def _get_commit_messages(self): def validate_commit_message(commit_msg: str, pattern: str) -> bool: if commit_msg.startswith("Merge") or commit_msg.startswith("Revert"): return True - return re.match(pattern, commit_msg) + return bool(re.match(pattern, commit_msg)) From c4b1591595c463cbdbf80b354d8d7bc00b4f4fc9 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 16:44:43 +0800 Subject: [PATCH 07/17] fix(cz/customize): add error handling when customize detail is not set --- commitizen/cz/customize/customize.py | 10 +++++++++- commitizen/error_codes.py | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 7eb38bcd8d..797efbabee 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -7,7 +7,9 @@ from commitizen import defaults from commitizen.config import BaseConfig +from commitizen import out from commitizen.cz.base import BaseCommitizen +from commitizen.error_codes import MISSING_CONFIG __all__ = ["CustomizeCommitsCz"] @@ -18,7 +20,13 @@ class CustomizeCommitsCz(BaseCommitizen): def __init__(self, config: BaseConfig): super(CustomizeCommitsCz, self).__init__(config) - self.custom_settings = self.config.settings.get("customize") + + if "customize" not in self.config.settings: + out.error( + "fatal: customize is not set in configuration file." + ) + raise SystemExit(MISSING_CONFIG) + self.custom_settings = self.config.settings["customize"] custom_bump_pattern = self.custom_settings.get("bump_pattern") if custom_bump_pattern: diff --git a/commitizen/error_codes.py b/commitizen/error_codes.py index c6eeac7a27..20cc54aa9e 100644 --- a/commitizen/error_codes.py +++ b/commitizen/error_codes.py @@ -3,6 +3,7 @@ # Config NOT_A_GIT_PROJECT = 2 +MISSING_CONFIG = 15 # Bump NO_COMMITS_FOUND = 3 From 28949ea9948067f49685c5af11ec0b1b485121bd Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 16:45:13 +0800 Subject: [PATCH 08/17] style: reformat --- commitizen/config/base_config.py | 2 +- .../cz/conventional_commits/conventional_commits.py | 2 +- commitizen/cz/customize/customize.py | 9 +++------ commitizen/cz/jira/jira.py | 3 +-- commitizen/defaults.py | 2 +- 5 files changed, 7 insertions(+), 11 deletions(-) diff --git a/commitizen/config/base_config.py b/commitizen/config/base_config.py index e01ed2d5f4..f5febf3d34 100644 --- a/commitizen/config/base_config.py +++ b/commitizen/config/base_config.py @@ -1,6 +1,6 @@ import warnings from pathlib import Path -from typing import Optional, Union, Dict, Any +from typing import Any, Dict, Optional, Union from commitizen.defaults import DEFAULT_SETTINGS diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index fc4bef9792..fcf0df4b58 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -1,5 +1,5 @@ import os -from typing import List, Dict, Any +from typing import Any, Dict, List from commitizen import defaults from commitizen.cz.base import BaseCommitizen diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index 797efbabee..c3bc7a048b 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -3,11 +3,10 @@ except ImportError: from string import Template # type: ignore -from typing import Optional, List, Any, Dict +from typing import Any, Dict, List, Optional -from commitizen import defaults +from commitizen import defaults, out from commitizen.config import BaseConfig -from commitizen import out from commitizen.cz.base import BaseCommitizen from commitizen.error_codes import MISSING_CONFIG @@ -22,9 +21,7 @@ def __init__(self, config: BaseConfig): super(CustomizeCommitsCz, self).__init__(config) if "customize" not in self.config.settings: - out.error( - "fatal: customize is not set in configuration file." - ) + out.error("fatal: customize is not set in configuration file.") raise SystemExit(MISSING_CONFIG) self.custom_settings = self.config.settings["customize"] diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index 3c35b50254..46c5965c46 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -1,6 +1,5 @@ import os - -from typing import List, Dict, Any +from typing import Any, Dict, List from commitizen.cz.base import BaseCommitizen diff --git a/commitizen/defaults.py b/commitizen/defaults.py index 2f4fae78b2..477a48e4a1 100644 --- a/commitizen/defaults.py +++ b/commitizen/defaults.py @@ -1,5 +1,5 @@ from collections import OrderedDict -from typing import Dict, Any +from typing import Any, Dict name: str = "cz_conventional_commits" # TODO: .cz, setup.cfg, .cz.cfg should be removed in 2.0 From 9c12b9fbd3e1d8f14b9ba7b542c75f5fe1fee828 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 17:03:45 +0800 Subject: [PATCH 09/17] refactor(cz): add type annotation to registry --- commitizen/cz/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/commitizen/cz/__init__.py b/commitizen/cz/__init__.py index c8c988bba6..a14ea95edf 100644 --- a/commitizen/cz/__init__.py +++ b/commitizen/cz/__init__.py @@ -1,11 +1,13 @@ import importlib import pkgutil +from typing import Dict, Type +from commitizen.cz.base import BaseCommitizen from commitizen.cz.conventional_commits import ConventionalCommitsCz from commitizen.cz.customize import CustomizeCommitsCz from commitizen.cz.jira import JiraSmartCz -registry = { +registry: Dict[str, Type[BaseCommitizen]] = { "cz_conventional_commits": ConventionalCommitsCz, "cz_jira": JiraSmartCz, "cz_customize": CustomizeCommitsCz, From db8e37ec8b3611010a2dfba4b8c82c00c6abce57 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 17:06:55 +0800 Subject: [PATCH 10/17] style(config): move .flake8 to setup.cfg and add mypy, pytest config --- .flake8 | 4 ---- setup.cfg | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) delete mode 100644 .flake8 create mode 100644 setup.cfg diff --git a/.flake8 b/.flake8 deleted file mode 100644 index 73998f1162..0000000000 --- a/.flake8 +++ /dev/null @@ -1,4 +0,0 @@ -[flake8] -exclude = .git,__pycache__,docs/source/conf.py,old,build,dist -max-complexity = 10 -max-line-length = 100 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000000..53860b52a0 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,28 @@ +[tool:pytest] +addopts = --strict-markers +norecursedirs = .* build dist CVS _darcs {arch} *.egg venv env virtualenv + + +[mypy] +files = commitizen, tests +ignore_missing_imports = true + + +[flake8] +ignore = + # F632: use ==/!= to compare str, bytes, and int literals + F632, + # W503: Line break occurred before a binary operator + W503, + # E501: Line too long + E501, + # E203: Whitespace before ':' (for black) + E203 +exclude = + .git, + __pycache__, + docs/source/conf.py, + build, + dist +max-line-length = 88 +max-complexity = 10 From 2754a34ddd79dec68a854d8cbb38d096cb7fc409 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 17:10:27 +0800 Subject: [PATCH 11/17] ci(scripts/test): remove redundant arugment (it's been configed in setup.cfg) --- scripts/test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test b/scripts/test index 6a8082162e..768c000a31 100755 --- a/scripts/test +++ b/scripts/test @@ -8,4 +8,4 @@ fi ${PREFIX}pytest --cov-report term-missing --cov-report=xml:coverage.xml --cov=commitizen tests/ ${PREFIX}black commitizen tests --check ${PREFIX}isort --recursive --check-only commitizen tests -${PREFIX}flake8 --max-line-length=88 commitizen/ tests/ +${PREFIX}flake8 commitizen/ tests/ From c59929577be8ec9aaca6c94ead8a566b431281c4 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 17:11:48 +0800 Subject: [PATCH 12/17] ci(scripts/test): add mypy check --- scripts/test | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/test b/scripts/test index 768c000a31..86c1669a10 100755 --- a/scripts/test +++ b/scripts/test @@ -9,3 +9,4 @@ ${PREFIX}pytest --cov-report term-missing --cov-report=xml:coverage.xml --cov=co ${PREFIX}black commitizen tests --check ${PREFIX}isort --recursive --check-only commitizen tests ${PREFIX}flake8 commitizen/ tests/ +${PREFIX}mypy commitizen/ tests/ From 65edcc3be8d73fc52fc2eee0fe5d85b50889ce8b Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 17:41:15 +0800 Subject: [PATCH 13/17] style: remove unused import --- commitizen/config/ini_config.py | 2 +- commitizen/config/toml_config.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/commitizen/config/ini_config.py b/commitizen/config/ini_config.py index 88544f9b79..6ac003ad46 100644 --- a/commitizen/config/ini_config.py +++ b/commitizen/config/ini_config.py @@ -2,7 +2,7 @@ import json import warnings from pathlib import Path -from typing import Optional, Union +from typing import Union from .base_config import BaseConfig diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index 000502c687..e13d720a17 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import Optional, Union +from typing import Union from tomlkit import exceptions, parse From 2738b740f7e220278e3ef7677379627c88ccdc61 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 17:58:50 +0800 Subject: [PATCH 14/17] refactor(mypy): fix mypy check by checking version.pre exists --- commitizen/bump.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/commitizen/bump.py b/commitizen/bump.py index bb80e2ba6a..171accbd44 100644 --- a/commitizen/bump.py +++ b/commitizen/bump.py @@ -66,10 +66,12 @@ def prerelease_generator(current_version: str, prerelease: Optional[str] = None) return "" version = Version(current_version) - new_prerelease_number: int = 0 - if version.is_prerelease and prerelease.startswith(version.pre[0]): - prev_prerelease: int = list(version.pre)[1] + # version.pre is needed for mypy check + if version.is_prerelease and version.pre and prerelease.startswith(version.pre[0]): + prev_prerelease: int = version.pre[1] new_prerelease_number = prev_prerelease + 1 + else: + new_prerelease_number = 0 pre_version = f"{prerelease}{new_prerelease_number}" return pre_version @@ -176,7 +178,8 @@ def create_tag(version: Union[Version, str], tag_format: Optional[str] = None): major, minor, patch = version.release prerelease = "" - if version.is_prerelease: + # version.pre is needed for mypy check + if version.is_prerelease and version.pre: prerelease = f"{version.pre[0]}{version.pre[1]}" t = Template(tag_format) From 495525791ea48c6e431ef2572dfe9fff902d1f10 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 18:13:52 +0800 Subject: [PATCH 15/17] refactor(cz/customize): remove unused mypy ignore --- commitizen/cz/customize/customize.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commitizen/cz/customize/customize.py b/commitizen/cz/customize/customize.py index c3bc7a048b..28d1b13738 100644 --- a/commitizen/cz/customize/customize.py +++ b/commitizen/cz/customize/customize.py @@ -1,5 +1,5 @@ try: - from jinja2 import Template # type: ignore + from jinja2 import Template except ImportError: from string import Template # type: ignore From 582f2a23c6d7c7db1a0861b46284c31a18883d9e Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 18:14:24 +0800 Subject: [PATCH 16/17] ci(mypy-config): add stricter config but comment out those we not yet follow --- setup.cfg | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/setup.cfg b/setup.cfg index 53860b52a0..ac1f11ee38 100644 --- a/setup.cfg +++ b/setup.cfg @@ -6,6 +6,16 @@ norecursedirs = .* build dist CVS _darcs {arch} *.egg venv env virtualenv [mypy] files = commitizen, tests ignore_missing_imports = true +# disallow_untyped_calls = True +# disallow_untyped_defs = True +# disallow_incomplete_defs = True +disallow_untyped_decorators = True +# disallow_any_generics = True +disallow_subclassing_any = True +# warn_return_any = True +warn_redundant_casts = True +warn_unused_ignores = True +warn_unused_configs = True [flake8] From 906d1fb4180eb692397323506dcb292bb8f84232 Mon Sep 17 00:00:00 2001 From: Wei Lee Date: Thu, 9 Apr 2020 18:35:42 +0800 Subject: [PATCH 17/17] test(cz/customize): add test case initialize_cz_customize_failed --- tests/test_cz_customize.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/test_cz_customize.py b/tests/test_cz_customize.py index 3ec448cc32..3cc76eb9e0 100644 --- a/tests/test_cz_customize.py +++ b/tests/test_cz_customize.py @@ -1,7 +1,8 @@ import pytest -from commitizen.config import TomlConfig +from commitizen.config import BaseConfig, TomlConfig from commitizen.cz.customize import CustomizeCommitsCz +from commitizen.error_codes import MISSING_CONFIG @pytest.fixture(scope="module") @@ -37,6 +38,14 @@ def config(): return TomlConfig(data=toml_str, path="not_exist.toml") +def test_initialize_cz_customize_failed(): + with pytest.raises(SystemExit) as excinfo: + config = BaseConfig() + _ = CustomizeCommitsCz(config) + + assert excinfo.value.code == MISSING_CONFIG + + def test_bump_pattern(config): cz = CustomizeCommitsCz(config) assert cz.bump_pattern == "^(break|new|fix|hotfix)"