From 0fe602df18f0f96ce1a7606140c03dbec88f2973 Mon Sep 17 00:00:00 2001 From: Yu-Ting Hsiung Date: Mon, 2 Feb 2026 00:02:33 +0800 Subject: [PATCH] refactor: simplify code with pathlib Path object --- commitizen/changelog_formats/base.py | 16 +++++++--------- commitizen/commands/changelog.py | 11 +++++------ commitizen/commands/commit.py | 4 +--- commitizen/commands/init.py | 7 ++++--- commitizen/config/__init__.py | 8 +++----- commitizen/config/json_config.py | 2 +- commitizen/config/toml_config.py | 11 +++++------ commitizen/config/yaml_config.py | 2 +- .../conventional_commits/conventional_commits.py | 7 +++---- commitizen/cz/jira/jira.py | 7 +++---- commitizen/providers/cargo_provider.py | 2 +- commitizen/providers/npm_provider.py | 4 ++-- docs/config/version_provider.md | 2 +- 13 files changed, 37 insertions(+), 46 deletions(-) diff --git a/commitizen/changelog_formats/base.py b/commitizen/changelog_formats/base.py index da6f63bd1f..dcddb5d7e0 100644 --- a/commitizen/changelog_formats/base.py +++ b/commitizen/changelog_formats/base.py @@ -1,7 +1,7 @@ from __future__ import annotations -import os from abc import ABCMeta +from pathlib import Path from typing import IO, TYPE_CHECKING, Any, ClassVar from commitizen.changelog import IncrementalMergeInfo, Metadata @@ -36,12 +36,11 @@ def __init__(self, config: BaseConfig) -> None: ) def get_metadata(self, filepath: str) -> Metadata: - if not os.path.isfile(filepath): + file = Path(filepath) + if not file.is_file(): return Metadata() - with open( - filepath, encoding=self.config.settings["encoding"] - ) as changelog_file: + with file.open(encoding=self.config.settings["encoding"]) as changelog_file: return self.get_metadata_from_file(changelog_file) def get_metadata_from_file(self, file: IO[Any]) -> Metadata: @@ -74,12 +73,11 @@ def get_metadata_from_file(self, file: IO[Any]) -> Metadata: return meta def get_latest_full_release(self, filepath: str) -> IncrementalMergeInfo: - if not os.path.isfile(filepath): + file = Path(filepath) + if not file.is_file(): return IncrementalMergeInfo() - with open( - filepath, encoding=self.config.settings["encoding"] - ) as changelog_file: + with file.open(encoding=self.config.settings["encoding"]) as changelog_file: return self.get_latest_full_release_from_file(changelog_file) def get_latest_full_release_from_file(self, file: IO[Any]) -> IncrementalMergeInfo: diff --git a/commitizen/commands/changelog.py b/commitizen/commands/changelog.py index 33dca6b6c1..777fd30493 100644 --- a/commitizen/commands/changelog.py +++ b/commitizen/commands/changelog.py @@ -1,7 +1,5 @@ from __future__ import annotations -import os -import os.path from difflib import SequenceMatcher from operator import itemgetter from pathlib import Path @@ -66,7 +64,7 @@ def __init__(self, config: BaseConfig, arguments: ChangelogArgs) -> None: f"or the setting `changelog_file` in {self.config.path}" ) self.file_name = ( - os.path.join(str(self.config.path.parent), changelog_file_name) + Path(self.config.path.parent, changelog_file_name).as_posix() if self.config.path is not None else changelog_file_name ) @@ -282,9 +280,10 @@ def __call__(self) -> None: raise DryRunExit() lines = [] - if self.incremental and os.path.isfile(self.file_name): - with open( - self.file_name, encoding=self.config.settings["encoding"] + changelog_path = Path(self.file_name) + if self.incremental and changelog_path.is_file(): + with changelog_path.open( + encoding=self.config.settings["encoding"] ) as changelog_file: lines = changelog_file.readlines() diff --git a/commitizen/commands/commit.py b/commitizen/commands/commit.py index 5776af4201..e7f337b604 100644 --- a/commitizen/commands/commit.py +++ b/commitizen/commands/commit.py @@ -61,9 +61,7 @@ def _read_backup_message(self) -> str | None: return None # Read commit message from backup - with open( - self.backup_file_path, encoding=self.config.settings["encoding"] - ) as f: + with self.backup_file_path.open(encoding=self.config.settings["encoding"]) as f: return f.read().strip() def _get_message_by_prompt_commit_questions(self) -> str: diff --git a/commitizen/commands/init.py b/commitizen/commands/init.py index 9d33e7081a..b0df9381dc 100644 --- a/commitizen/commands/init.py +++ b/commitizen/commands/init.py @@ -288,11 +288,12 @@ def _get_config_data(self) -> dict[str, Any]: ], } - if not Path(".pre-commit-config.yaml").is_file(): + pre_commit_config_path = Path(self._PRE_COMMIT_CONFIG_PATH) + if not pre_commit_config_path.is_file(): return {"repos": [CZ_HOOK_CONFIG]} - with open( - self._PRE_COMMIT_CONFIG_PATH, encoding=self.config.settings["encoding"] + with pre_commit_config_path.open( + encoding=self.config.settings["encoding"] ) as config_file: config_data: dict[str, Any] = yaml.safe_load(config_file) or {} diff --git a/commitizen/config/__init__.py b/commitizen/config/__init__.py index ae980af9c0..65718af4a2 100644 --- a/commitizen/config/__init__.py +++ b/commitizen/config/__init__.py @@ -34,16 +34,14 @@ def _resolve_config_candidates() -> list[BaseConfig]: def _create_config_from_path(path: Path) -> BaseConfig: - with open(path, "rb") as f: - data: bytes = f.read() - - return create_config(data=data, path=path) + with path.open("rb") as f: + return create_config(data=f.read(), path=path) def read_cfg(filepath: str | None = None) -> BaseConfig: if filepath is not None: conf_path = Path(filepath) - if not conf_path.exists(): + if not conf_path.is_file(): raise ConfigFileNotFound() conf = _create_config_from_path(conf_path) if conf.is_empty_config: diff --git a/commitizen/config/json_config.py b/commitizen/config/json_config.py index 860ca8ed5a..106dc8eabf 100644 --- a/commitizen/config/json_config.py +++ b/commitizen/config/json_config.py @@ -32,7 +32,7 @@ def init_empty_config_content(self) -> None: json.dump({"commitizen": {}}, json_file) def set_key(self, key: str, value: object) -> Self: - with open(self.path, "rb") as f: + with self.path.open("rb") as f: config_doc = json.load(f) config_doc["commitizen"][key] = value diff --git a/commitizen/config/toml_config.py b/commitizen/config/toml_config.py index b10cf9bd3e..2a5330be2b 100644 --- a/commitizen/config/toml_config.py +++ b/commitizen/config/toml_config.py @@ -1,6 +1,5 @@ from __future__ import annotations -import os from typing import TYPE_CHECKING from tomlkit import TOMLDocument, exceptions, parse, table @@ -28,25 +27,25 @@ def __init__(self, *, data: bytes | str, path: Path) -> None: def init_empty_config_content(self) -> None: config_doc = TOMLDocument() - if os.path.isfile(self.path): - with open(self.path, "rb") as input_toml_file: + if self.path.is_file(): + with self.path.open("rb") as input_toml_file: config_doc = parse(input_toml_file.read()) if config_doc.get("tool") is None: config_doc["tool"] = table() config_doc["tool"]["commitizen"] = table() # type: ignore[index] - with open(self.path, "wb") as output_toml_file: + with self.path.open("wb") as output_toml_file: output_toml_file.write( config_doc.as_string().encode(self._settings["encoding"]) ) def set_key(self, key: str, value: object) -> Self: - with open(self.path, "rb") as f: + with self.path.open("rb") as f: config_doc = parse(f.read()) config_doc["tool"]["commitizen"][key] = value # type: ignore[index] - with open(self.path, "wb") as f: + with self.path.open("wb") as f: f.write(config_doc.as_string().encode(self._settings["encoding"])) return self diff --git a/commitizen/config/yaml_config.py b/commitizen/config/yaml_config.py index 58722d0f60..fda74510b3 100644 --- a/commitizen/config/yaml_config.py +++ b/commitizen/config/yaml_config.py @@ -53,7 +53,7 @@ def _parse_setting(self, data: bytes | str) -> None: self.is_empty_config = True def set_key(self, key: str, value: object) -> Self: - with open(self.path, "rb") as yaml_file: + with self.path.open("rb") as yaml_file: config_doc = yaml.load(yaml_file, Loader=yaml.FullLoader) config_doc["commitizen"][key] = value diff --git a/commitizen/cz/conventional_commits/conventional_commits.py b/commitizen/cz/conventional_commits/conventional_commits.py index 1d1930595b..6431edec95 100644 --- a/commitizen/cz/conventional_commits/conventional_commits.py +++ b/commitizen/cz/conventional_commits/conventional_commits.py @@ -1,6 +1,6 @@ from __future__ import annotations -import os +from pathlib import Path from typing import TYPE_CHECKING, TypedDict from commitizen import defaults @@ -214,7 +214,6 @@ def schema_pattern(self) -> str: ) def info(self) -> str: - dir_path = os.path.dirname(os.path.realpath(__file__)) - filepath = os.path.join(dir_path, "conventional_commits_info.txt") - with open(filepath, encoding=self.config.settings["encoding"]) as f: + filepath = Path(__file__).parent / "conventional_commits_info.txt" + with filepath.open(encoding=self.config.settings["encoding"]) as f: return f.read() diff --git a/commitizen/cz/jira/jira.py b/commitizen/cz/jira/jira.py index bbe4fc5ee3..78504fbb82 100644 --- a/commitizen/cz/jira/jira.py +++ b/commitizen/cz/jira/jira.py @@ -1,6 +1,6 @@ from __future__ import annotations -import os +from pathlib import Path from typing import TYPE_CHECKING from commitizen.cz.base import BaseCommitizen @@ -73,7 +73,6 @@ def schema_pattern(self) -> str: return r".*[A-Z]{2,}\-[0-9]+( #| .* #).+( #.+)*" 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, encoding=self.config.settings["encoding"]) as f: + filepath = Path(__file__).parent / "jira_info.txt" + with filepath.open(encoding=self.config.settings["encoding"]) as f: return f.read() diff --git a/commitizen/providers/cargo_provider.py b/commitizen/providers/cargo_provider.py index ca00f05e7b..e7b127c4bd 100644 --- a/commitizen/providers/cargo_provider.py +++ b/commitizen/providers/cargo_provider.py @@ -39,7 +39,7 @@ def set(self, document: TOMLDocument, version: str) -> None: def set_version(self, version: str) -> None: super().set_version(version) - if self.lock_file.exists(): + if self.lock_file.is_file(): self.set_lock_version(version) def set_lock_version(self, version: str) -> None: diff --git a/commitizen/providers/npm_provider.py b/commitizen/providers/npm_provider.py index 7aeb0ee7df..597fce4b6e 100644 --- a/commitizen/providers/npm_provider.py +++ b/commitizen/providers/npm_provider.py @@ -46,14 +46,14 @@ def set_version(self, version: str) -> None: self.package_file.write_text( json.dumps(package_document, indent=self.indent) + "\n" ) - if self.lock_file.exists(): + if self.lock_file.is_file(): lock_document = self.set_lock_version( json.loads(self.lock_file.read_text()), version ) self.lock_file.write_text( json.dumps(lock_document, indent=self.indent) + "\n" ) - if self.shrinkwrap_file.exists(): + if self.shrinkwrap_file.is_file(): shrinkwrap_document = self.set_shrinkwrap_version( json.loads(self.shrinkwrap_file.read_text()), version ) diff --git a/docs/config/version_provider.md b/docs/config/version_provider.md index 48a49049df..ccbbe6cfd3 100644 --- a/docs/config/version_provider.md +++ b/docs/config/version_provider.md @@ -217,7 +217,7 @@ class MyProvider(VersionProvider): def get_version(self) -> str: """Read version from VERSION file.""" version_file = Path("VERSION") - if not version_file.exists(): + if not version_file.is_file(): return "0.0.0" return version_file.read_text().strip()