From 62bbb42c1f7556c09b0def1c950fb7605613f450 Mon Sep 17 00:00:00 2001 From: RyoNak Date: Mon, 8 Dec 2025 18:28:58 +0900 Subject: [PATCH 1/2] DOCS: fix mermaid rendering --- docs/BRANCH_STRATEGY.md | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/docs/BRANCH_STRATEGY.md b/docs/BRANCH_STRATEGY.md index c4ce266..325e57e 100644 --- a/docs/BRANCH_STRATEGY.md +++ b/docs/BRANCH_STRATEGY.md @@ -16,20 +16,7 @@ project: encoding-checker-cli - Follow clear naming conventions for branches to enhance collaboration and maintainability. ```mermaid -%%| fig-width: 16 -%%| fig-height: 12 -%%{ init: { - 'theme': 'default', - 'themeVariables': { - 'fontFamily': 'Meiryo' - }, - 'gitGraph': { - 'orientation': 'LR', - 'nodeSpacing': 150, - 'mainBranchName': 'main' - } -} }%% -$ gitGraph +gitGraph commit id: "" tag: "v1.0.0" branch hotfix From bd9925832e9cf2381370b524c1059ef9de495ca2 Mon Sep 17 00:00:00 2001 From: RyoNak Date: Tue, 20 Oct 2026 18:47:53 +0900 Subject: [PATCH 2/2] docs: add CHANGELOG, commit rules, and bump version to 0.1.2 --- CHANGELOG.md | 27 ++++++++ docs/COMMITRULES.md | 100 +++++++++++++++++++++++++++ pyproject.toml | 4 +- src/encoding_checker_cli/encoding.py | 2 +- tests/test_detect_file_encoding.py | 96 +++++++++++++++++++++++++ uv.lock | 38 ++++++++-- 6 files changed, 258 insertions(+), 9 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 docs/COMMITRULES.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..67324d8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,27 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [0.1.2] - 2026-10-20 + +### Added + +- Commit message rules based on Conventional Commits (`docs/COMMITRULES.md`). +- Unit tests for the chardet fallback in `detect_file_encoding`: use of the top-level `chardet.UniversalDetector`, operation without the `chardet.universaldetector` submodule, 1024-byte chunk feeding, early stop when the detector is done, and `None` when no encoding is detected. + +### Changed + +- Raise the minimum `chardet` version to 7.0.0 (`chardet>=7.0.0`); the lockfile now pins chardet 7.7.0. + +### Fixed + +- Use `chardet.UniversalDetector` instead of `chardet.universaldetector.UniversalDetector` so encoding detection works with chardet 7.x, which no longer exposes the `chardet.universaldetector` submodule. +- Mermaid diagram rendering in the docs. + +[Unreleased]: https://github.com/RyoNakagami/encoding-checker-cli/compare/v0.1.2...HEAD +[0.1.2]: https://github.com/RyoNakagami/encoding-checker-cli/compare/v0.1.1...v0.1.2 diff --git a/docs/COMMITRULES.md b/docs/COMMITRULES.md new file mode 100644 index 0000000..1721da0 --- /dev/null +++ b/docs/COMMITRULES.md @@ -0,0 +1,100 @@ +# Commit Rules + +- This project follows the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification. +- A consistent commit history makes the project easier to read, enables automated changelog generation, and clarifies the intent of every change. + +## Commit Message Format + +```text +(): ← single line, mandatory + +[optional body] + +[optional footer(s)] +``` + +- The **header** is the first line and is mandatory — it is always a **single line**. +- The **scope** is optional. +- A blank line separates the header from the body, and the body from the footer. + +### Example + +```text +feat(parser): add support for nested config blocks + +The parser now recurses into nested tables so that deeply +structured pyproject.toml files are read correctly. + +Closes #42 +``` + +## Type + +The `` describes the kind of change and must be one of the following: + +| Type | Description | +| ---------- | -------------------------------------------------------------------- | +| `feat` | A new feature | +| `fix` | A bug fix | +| `docs` | Documentation-only changes | +| `style` | Changes that do not affect meaning (formatting, whitespace, etc.) | +| `refactor` | A code change that neither fixes a bug nor adds a feature | +| `perf` | A code change that improves performance | +| `test` | Adding missing tests or correcting existing tests | +| `build` | Changes to the build system or external deps (e.g. `uv`, pyproject) | +| `ci` | Changes to CI configuration files and scripts | +| `chore` | Other changes that don't modify `src` or test files | +| `revert` | Reverts a previous commit | + +## Scope + +The `` is optional and provides additional context about the section of the +codebase affected, e.g. `feat(glossary):`, `fix(quarto):`, `docs(commitrules):`. +Use a short, lowercase noun. Omit the scope when the change is global. + +## Description + +- Keep the description on a **single line** — never wrap it onto multiple lines. +- Use the **imperative, present tense**: "add", not "added" or "adds". +- Do **not** capitalize the first letter. +- Do **not** end with a period. +- Keep the header concise — aim for **50 characters or fewer**, and a hard limit of 72. +- If more explanation is needed, put it in the **body**, not the description. + +## Body + +- Optional. Use it to explain **what** and **why**, not **how**. +- Wrap lines at **72 characters**. +- Separate from the header with one blank line. + +## Footer + +- Optional. Used for metadata such as issue references and breaking changes. +- Reference issues with `Closes #`, `Fixes #`, or `Refs #`. + +### Breaking Changes + +A breaking change is indicated either by appending a `!` after the type/scope, or +by a `BREAKING CHANGE:` footer (or both). + +``` +feat(api)!: drop support for Python 3.9 + +BREAKING CHANGE: the minimum supported Python version is now 3.10. +``` + +## Quick Reference + +``` +feat: a new feature +fix: a bug fix +docs: documentation only +style: formatting, no code change +refactor: code change, no feature/fix +perf: performance improvement +test: adding or fixing tests +build: build system or dependencies +ci: CI configuration +chore: maintenance / tooling +revert: revert a previous commit +``` diff --git a/pyproject.toml b/pyproject.toml index e24719b..3b7a5b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "encoding-checker-cli" -version = "0.1.1" +version = "0.1.2" description = "A command-line tool for checking and converting text encoding." readme = "README.md" authors = [ @@ -8,7 +8,7 @@ authors = [ ] requires-python = ">=3.13" dependencies = [ - "chardet>=5.2.0", + "chardet>=7.0.0", "typer>=0.20.0", ] diff --git a/src/encoding_checker_cli/encoding.py b/src/encoding_checker_cli/encoding.py index e81939a..5bee196 100644 --- a/src/encoding_checker_cli/encoding.py +++ b/src/encoding_checker_cli/encoding.py @@ -61,7 +61,7 @@ def detect_file_encoding(file_path: Path) -> str | None: pass # 2. Use chardet as fallback - detector = chardet.universaldetector.UniversalDetector() + detector = chardet.UniversalDetector() for chunk_start in range(0, len(raw_bytes), 1024): chunk = raw_bytes[chunk_start : chunk_start + 1024] detector.feed(chunk) diff --git a/tests/test_detect_file_encoding.py b/tests/test_detect_file_encoding.py index 1a56857..0e32214 100644 --- a/tests/test_detect_file_encoding.py +++ b/tests/test_detect_file_encoding.py @@ -1,5 +1,6 @@ import pytest from pathlib import Path +from encoding_checker_cli import encoding as encoding_module from encoding_checker_cli.encoding import detect_file_encoding, JAPANESE_ENCODINGS def test_utf8(tmp_path): @@ -67,3 +68,98 @@ def fake_read_bytes(self): # Restore original read_bytes method if needed monkeypatch.setattr(Path, "read_bytes", original_read_bytes) + + +class FakeDetector: + """Minimal stand-in for chardet.UniversalDetector.""" + + instances = [] + + def __init__(self, encoding="shift_jis", done_after=None): + self.result = {"encoding": encoding} + self.done = False + self.closed = False + self.chunks = [] + self._done_after = done_after + FakeDetector.instances.append(self) + + def feed(self, chunk): + self.chunks.append(chunk) + if self._done_after is not None and len(self.chunks) >= self._done_after: + self.done = True + + def close(self): + self.closed = True + + +@pytest.fixture +def fake_detector(monkeypatch): + """Replace chardet.UniversalDetector with a configurable fake.""" + FakeDetector.instances = [] + + def install(**kwargs): + monkeypatch.setattr( + encoding_module.chardet, "UniversalDetector", lambda: FakeDetector(**kwargs) + ) + return FakeDetector.instances + + return install + + +def test_fallback_uses_top_level_universal_detector(tmp_path, fake_detector): + """The chardet fallback is driven by chardet.UniversalDetector.""" + instances = fake_detector(encoding="SHIFT_JIS") + file = tmp_path / "sjis.txt" + file.write_bytes("テストテスト".encode("shift_jis")) + + result = detect_file_encoding(file) + + assert result == "shift_jis" + assert len(instances) == 1 + assert instances[0].closed + + +def test_fallback_without_universaldetector_submodule(tmp_path, monkeypatch): + """Detection works even if chardet does not expose the universaldetector submodule.""" + monkeypatch.delattr(encoding_module.chardet, "universaldetector", raising=False) + file = tmp_path / "sjis.txt" + file.write_bytes("テストテスト".encode("shift_jis")) + + result = detect_file_encoding(file) + + assert result in JAPANESE_ENCODINGS + + +def test_fallback_feeds_in_1024_byte_chunks(tmp_path, fake_detector): + """Bytes are fed to the detector in 1024-byte chunks until EOF.""" + instances = fake_detector() + raw = b"\x82" * 2500 # invalid UTF-8, forces the chardet fallback + file = tmp_path / "big.bin" + file.write_bytes(raw) + + detect_file_encoding(file) + + chunks = instances[0].chunks + assert [len(c) for c in chunks] == [1024, 1024, 452] + assert b"".join(chunks) == raw + + +def test_fallback_stops_feeding_when_detector_done(tmp_path, fake_detector): + """Feeding stops as soon as the detector reports it is done.""" + instances = fake_detector(done_after=1) + file = tmp_path / "big.bin" + file.write_bytes(b"\x82" * 2500) + + detect_file_encoding(file) + + assert len(instances[0].chunks) == 1 + assert instances[0].closed + + +def test_fallback_returns_none_when_detector_has_no_result(tmp_path, fake_detector): + """Return None if the detector cannot determine an encoding.""" + fake_detector(encoding=None) + file = tmp_path / "bad.bin" + file.write_bytes(b"\x82\xff\x00\x81") + + assert detect_file_encoding(file) is None diff --git a/uv.lock b/uv.lock index a4c9648..80abb26 100644 --- a/uv.lock +++ b/uv.lock @@ -1,14 +1,40 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.13" [[package]] name = "chardet" -version = "5.2.0" +version = "7.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618, upload-time = "2023-08-01T19:23:02.662Z" } +sdist = { url = "https://files.pythonhosted.org/packages/47/92/3d893ac5d338b9a9af34c5b517d77492dcea8a10254254eead4215a96f3f/chardet-7.7.0.tar.gz", hash = "sha256:0ba38a05201b0abf7570c12d8af45c30b2af835bd5cc52bfc7105082eda82c1e", size = 1008480, upload-time = "2026-10-18T00:06:25.352Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385, upload-time = "2023-08-01T19:23:00.661Z" }, + { url = "https://files.pythonhosted.org/packages/4e/73/0c434bc65adc411e49b1bbebee24ebb36a3511c80a058f1fde17f43fb537/chardet-7.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:11263887c082c3d8c32026aeddbdef37ac8feccd1faece5a22b2ff00a29b115a", size = 1202232, upload-time = "2026-10-18T00:05:45.657Z" }, + { url = "https://files.pythonhosted.org/packages/9d/be/222e5628af10d6b80750ccdda7f6d2610646dddb082c37947623d5e55bf7/chardet-7.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e8c718e6961981fe1685e1243742f326ac553f0fa0dfd0c6d3d17dd4f92cd3ff", size = 1173273, upload-time = "2026-10-18T00:05:46.984Z" }, + { url = "https://files.pythonhosted.org/packages/70/ff/889cf390db3748918789818d93ba9a7d712b326030199698432fc50bf8cd/chardet-7.7.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a76f4d1f769b4ae8888cefd46e604cf1f5769f1176b55e78b90eaeefa888ce92", size = 1616968, upload-time = "2026-10-18T00:05:48.457Z" }, + { url = "https://files.pythonhosted.org/packages/ca/04/0b5fd38375ae182cec6446dd3121aaff5ae18fd12b98b10161a58b720db9/chardet-7.7.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c519c10c315a675bcfd4b55c0e0de1859ca5a39881d8f69750500102c2fc5d2f", size = 1658830, upload-time = "2026-10-18T00:05:49.938Z" }, + { url = "https://files.pythonhosted.org/packages/99/c0/7e642d7bc6aca242ef41b4aa5f5be27dbb57912e8ce0f38043d8d1999cd1/chardet-7.7.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:46a044166fe0d99931884dc28405faac558d5eabf28316a2b3d2a1a6c7dc439a", size = 1583300, upload-time = "2026-10-18T00:05:51.567Z" }, + { url = "https://files.pythonhosted.org/packages/30/ee/53147716ced6d43837682a2acfb09dd45add8bc496107f21051c5aeae1f6/chardet-7.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:113bbd3ab85835e3e99499ae66829915ed3b4cf5c69525ab1742260f77638449", size = 1308030, upload-time = "2026-10-18T00:05:52.997Z" }, + { url = "https://files.pythonhosted.org/packages/1a/61/800a9442f352912c86f2a00de84fd6914dd9353d29091b1e223e7c08850e/chardet-7.7.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:ad286a0654ae7477bc454a1dee4f396cb28adffeacc6bc7d4412f607c73de0c3", size = 1200940, upload-time = "2026-10-18T00:05:54.59Z" }, + { url = "https://files.pythonhosted.org/packages/fb/92/3c6ce24dd68c626cc6aa0b5953c2aebb1d853c7b07d3535f0300b7428288/chardet-7.7.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4f67f20c9ad3f3024bf71d4aae1d25722b12da921ca9586f3cce7a4639695aa0", size = 1173087, upload-time = "2026-10-18T00:05:56.257Z" }, + { url = "https://files.pythonhosted.org/packages/4d/32/5a952b376c00dda01465b396958a8985916d9a9293a772d6bda2c37f2cc5/chardet-7.7.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a05667635c0496dab47eca8c845c044d1da6d74d34a9bf687199c9c53a38119d", size = 1624001, upload-time = "2026-10-18T00:05:57.832Z" }, + { url = "https://files.pythonhosted.org/packages/04/f7/09296ca1d4621c9c2766d074822035eee6aebb79eff80c0af3bd96283d05/chardet-7.7.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:79eec5af9d7715334695254234c8d7c29165841526c11083951d9b9f6458e372", size = 1653785, upload-time = "2026-10-18T00:05:59.379Z" }, + { url = "https://files.pythonhosted.org/packages/cb/08/80571baad57db2962d6931b3ee1828c82e3e14e9b3464f80532f536e23ac/chardet-7.7.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4167165812219e70f311083a8e06e3b627ed5b27aa8c15c3fdd56f350fd3213e", size = 1582280, upload-time = "2026-10-18T00:06:00.825Z" }, + { url = "https://files.pythonhosted.org/packages/18/82/3c07070fdcf3c4263e16680c90e9af7c2cd2e5e59cfb1d372efa60fde8cc/chardet-7.7.0-cp314-cp314-win_amd64.whl", hash = "sha256:546180f6170da39778069d16130449a9cff49a8fe144535947d1ef26f5330b96", size = 1310108, upload-time = "2026-10-18T00:06:02.342Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b0/d703d408c7f8931b1564110078fc3dcff9825a159990fa69b80da52be160/chardet-7.7.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a4c2e83b09a540a4d33279d2bee8ed3bfd57ac6645b359ae8b8afd5b4578c3c2", size = 1237782, upload-time = "2026-10-18T00:06:03.763Z" }, + { url = "https://files.pythonhosted.org/packages/d8/3e/0eafeebd53eb096400f75138ab18614ab5be12b8794b76dd4b35ef1a8e05/chardet-7.7.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:259dd55b1ba05a66868151a42663483763046a3e6579bde6b0aa65d834635b5a", size = 1207710, upload-time = "2026-10-18T00:06:05.221Z" }, + { url = "https://files.pythonhosted.org/packages/b8/8d/3c200098027def56be1b6443a10c72efe013a42eb76444d889c809890ca5/chardet-7.7.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56e5a5c782548b301b44371de327115d13a08de391ddaf9db4ac420d8511c5d7", size = 1660832, upload-time = "2026-10-18T00:06:06.619Z" }, + { url = "https://files.pythonhosted.org/packages/08/81/02f98389fa72345f40d23d69c2d857511d11a0911779a7cf8ed1cecb5037/chardet-7.7.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d227d2aa329fcf848f4640ed9a4d99e1753840c1cfa19f7ca5a48f30c03982ad", size = 1678291, upload-time = "2026-10-18T00:06:08.196Z" }, + { url = "https://files.pythonhosted.org/packages/5e/24/0ae866b759a148d0f6087ffb30920a2b956653d0d455b4be93026edbee95/chardet-7.7.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:c4a591b2dbfc0a047f8d60331c2fbfb4c3589911000406666a3085fa7d5da69f", size = 1200696, upload-time = "2026-10-18T00:06:09.701Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a6/5e0a1f56aca6c44b562d05d9e360f31b5a8f4b311d940a324fa337d277ba/chardet-7.7.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:eb625c3ab2386ca7f3be9ac2b9b822f4c5b792595c8bb8100b3b6ea68120e92c", size = 1172821, upload-time = "2026-10-18T00:06:11.04Z" }, + { url = "https://files.pythonhosted.org/packages/89/05/868f52672cde7e188a7333f3f65deaa62f5acbfcf0f81f3582013776e8ad/chardet-7.7.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ddedfb252d05c86c2d6e9a3090f8bd574876bbd39679e7c588ed57d21595c097", size = 1625481, upload-time = "2026-10-18T00:06:12.499Z" }, + { url = "https://files.pythonhosted.org/packages/f9/12/2b3a006ae31a7ab4ccac11a00abb27af23b4a5d57ddb00e937375e747a2a/chardet-7.7.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42c4d8a2dc8abcc067417adc13c2f64f48482e48ce48e3af769b5a44214e5a5c", size = 1660352, upload-time = "2026-10-18T00:06:13.977Z" }, + { url = "https://files.pythonhosted.org/packages/b6/f0/f995a2873a78aa3ec8308f02e61f0717deb4b01c8f1a74c2da329f325925/chardet-7.7.0-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:78db6186c1e73d38a2106cdcbbc8f43612eaed9ef8bc4adaf0fe67b6e8a2049d", size = 1597363, upload-time = "2026-10-18T00:06:15.492Z" }, + { url = "https://files.pythonhosted.org/packages/4a/7b/22b916b52c7bc4eb076ba1736ea9b99cf1065ebb7b56d356409144887c73/chardet-7.7.0-cp315-cp315-win_amd64.whl", hash = "sha256:8f1d611f15530e1642856d91b7aa259851466d7e961f27b888921e7e29718edb", size = 1309528, upload-time = "2026-10-18T00:06:16.845Z" }, + { url = "https://files.pythonhosted.org/packages/02/2f/ccaf5ffa0c8adca280e2687d75524cc07113a0df70cbf542da3445f2b300/chardet-7.7.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:1db39957379a801cf1798a5e50cdb3d3fc32683e23c4166ecfa157b980d1931e", size = 1236698, upload-time = "2026-10-18T00:06:18.191Z" }, + { url = "https://files.pythonhosted.org/packages/0d/7e/32f45f7ddeb27d94feb529a1a23e5a38a6d3614d12e23f0c89a9eb89098b/chardet-7.7.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:7f3b2ca3bac2bdbe42c4dfe7a2888c4b98e2e86a83ddb631960b229d1980979e", size = 1207247, upload-time = "2026-10-18T00:06:19.751Z" }, + { url = "https://files.pythonhosted.org/packages/26/40/8c1ab360c39a0bb823786e8934984cbc3e83076dfce2a7f3760086ef778c/chardet-7.7.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80db1c109e6e3c102ac589897449437ea2edf26dda1042a3ff669368e21d90e5", size = 1653659, upload-time = "2026-10-18T00:06:21.189Z" }, + { url = "https://files.pythonhosted.org/packages/1b/3e/bd5c25f525ff2466e6365cbfb098f928761357331b884eebc92ac50f8878/chardet-7.7.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:091f50d3567b1a066f797835ee5367dbcf3cb77c5e56993b3f61b28264b8e6f8", size = 1677031, upload-time = "2026-10-18T00:06:22.564Z" }, + { url = "https://files.pythonhosted.org/packages/cc/75/88a3eb36264375ff951bd2f9397c409727ab6aa6a18e1bd933851571d421/chardet-7.7.0-py3-none-any.whl", hash = "sha256:11cf9b719ea3675a2a7d8a3071bbe4d7ea24b26bfe39a51588d515ddd05cacad", size = 706680, upload-time = "2026-10-18T00:06:24.018Z" }, ] [[package]] @@ -95,7 +121,7 @@ wheels = [ [[package]] name = "encoding-checker-cli" -version = "0.1.1" +version = "0.1.2" source = { editable = "." } dependencies = [ { name = "chardet" }, @@ -110,7 +136,7 @@ dev = [ [package.metadata] requires-dist = [ - { name = "chardet", specifier = ">=5.2.0" }, + { name = "chardet", specifier = ">=7.0.0" }, { name = "typer", specifier = ">=0.20.0" }, ]