From ef7a3ba23fe4e1a84189196f8bdccc3597f3d3e8 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 2 Oct 2026 19:05:28 +0000 Subject: [PATCH] =?UTF-8?q?chore(release):=20=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E5=8D=87=E8=87=B3=201.1.0=EF=BC=9B=E8=AE=BE=E7=BD=AE=E9=A1=B5?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E4=B8=8E=E8=AE=B8=E5=8F=AF=E8=AF=81=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E8=BF=90=E8=A1=8C=E6=97=B6=E8=AF=BB=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 设置页「关于」此前写死 v1.0.0 与 MIT,现从打包进应用的 pyproject.toml 读取(打包后 importlib.metadata 取不到本应用)。 Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01Rc1gnR8Z5AEH5z4VEfnkCC --- file-toolkit/core/version.py | 30 +++++++++++++++++++++++++ file-toolkit/pyproject.toml | 2 +- file-toolkit/tests/core/test_version.py | 14 ++++++++++++ file-toolkit/ui/pages/settings_page.py | 5 +++-- file-toolkit/uv.lock | 2 +- 5 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 file-toolkit/core/version.py create mode 100644 file-toolkit/tests/core/test_version.py diff --git a/file-toolkit/core/version.py b/file-toolkit/core/version.py new file mode 100644 index 0000000..77a4a8f --- /dev/null +++ b/file-toolkit/core/version.py @@ -0,0 +1,30 @@ +"""应用版本与许可证 — 运行时从 pyproject.toml 读取,避免界面上的版本号与发布版本脱节。 + +flet build 打包时 pyproject.toml 会随源码一起放进应用(而应用本身不是已安装的发行包, +importlib.metadata 取不到),所以直接读文件。 +""" +import tomllib +from functools import cache +from pathlib import Path + +_PYPROJECT = Path(__file__).parent.parent / "pyproject.toml" + + +@cache +def _project() -> dict: + try: + with _PYPROJECT.open("rb") as f: + return tomllib.load(f).get("project", {}) + except (OSError, tomllib.TOMLDecodeError): + return {} + + +def app_version() -> str: + """如 "1.1.0";读取失败时返回 "未知"。""" + return _project().get("version", "未知") + + +def app_license() -> str: + """如 "Apache-2.0"。""" + lic = _project().get("license", {}) + return lic.get("text", "") if isinstance(lic, dict) else str(lic) diff --git a/file-toolkit/pyproject.toml b/file-toolkit/pyproject.toml index 67281f5..7e90183 100644 --- a/file-toolkit/pyproject.toml +++ b/file-toolkit/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "file-toolkit" -version = "1.0.0" +version = "1.1.0" description = "File Toolkit — Local file processing desktop application" readme = { text = "File Toolkit — Local file processing desktop application", content-type = "text/plain" } requires-python = ">=3.11" diff --git a/file-toolkit/tests/core/test_version.py b/file-toolkit/tests/core/test_version.py new file mode 100644 index 0000000..6f9c5e3 --- /dev/null +++ b/file-toolkit/tests/core/test_version.py @@ -0,0 +1,14 @@ +"""core.version 从 pyproject.toml 读取版本""" +import tomllib +from pathlib import Path + +from core.version import app_license, app_version + + +def test_version_matches_pyproject(): + data = tomllib.loads((Path(__file__).parents[2] / "pyproject.toml").read_text(encoding="utf-8")) + assert app_version() == data["project"]["version"] + + +def test_license_is_apache(): + assert app_license() == "Apache-2.0" diff --git a/file-toolkit/ui/pages/settings_page.py b/file-toolkit/ui/pages/settings_page.py index 31b931e..25d0961 100644 --- a/file-toolkit/ui/pages/settings_page.py +++ b/file-toolkit/ui/pages/settings_page.py @@ -1,6 +1,7 @@ """设置页 — Figma 设计语言统一""" import flet as ft +from core.version import app_license, app_version from services import settings_service from services.prompt_image_service import DEFAULT_BASE_URL, DEFAULT_MODEL from ui.palette import c @@ -303,8 +304,8 @@ async def _test_ai_image_connection_async(self) -> None: # ── 关于 ────────────────────────────────────────────────────────── def _build_about(self) -> ft.Control: return self._card("关于", ft.Icons.INFO_OUTLINED, c("#005f98"), c("#dee9ff"), [ - self._row("版本", ft.Text("v1.0.0(Windows MVP)", size=13, color=c("#455c7f", "fg"))), - self._row("开源协议", ft.Text("MIT License", size=13, color=c("#455c7f", "fg"))), + self._row("版本", ft.Text(f"v{app_version()}", size=13, color=c("#455c7f", "fg"))), + self._row("开源协议", ft.Text(app_license() or "Apache-2.0", size=13, color=c("#455c7f", "fg"))), ]) # ── 通用布局 ────────────────────────────────────────────────────── diff --git a/file-toolkit/uv.lock b/file-toolkit/uv.lock index 50e3530..145fe62 100644 --- a/file-toolkit/uv.lock +++ b/file-toolkit/uv.lock @@ -507,7 +507,7 @@ wheels = [ [[package]] name = "file-toolkit" -version = "1.0.0" +version = "1.1.0" source = { editable = "." } dependencies = [ { name = "ffmpeg-python" },