From fa1ac8fa31d33139396434fd95e35fde9579d116 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 9 Nov 2026 22:23:27 +0900 Subject: [PATCH 1/5] chore: update imports --- dzgui/api/mods.py | 4 ++-- dzgui/app_init.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dzgui/api/mods.py b/dzgui/api/mods.py index c6a076d..cc048c6 100644 --- a/dzgui/api/mods.py +++ b/dzgui/api/mods.py @@ -2,10 +2,10 @@ import hashlib import logging import re -from concurrent.futures import wait -from concurrent.futures import ThreadPoolExecutor +from concurrent.futures import ThreadPoolExecutor, wait from dataclasses import dataclass from pathlib import Path +from typing import Any from dzgui.api.steam import get_app_path from dzgui.api.servers import get_rules, fqip_to_record diff --git a/dzgui/app_init.py b/dzgui/app_init.py index 1a942ab..b112450 100644 --- a/dzgui/app_init.py +++ b/dzgui/app_init.py @@ -18,8 +18,8 @@ from dzgui.config.query import lookup from dzgui.config.userprefs import UserPrefs from dzgui.config.xdg import get_xdg_paths, parse_filepaths from dzgui.init.migrate import ( - has_new_config, copy_state_files, + has_new_config, migrate_cols_file, ) from dzgui.init.flock import lock_acquire From 441066a1a0029898fabaa0a76cf4c3452597d4dd Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 9 Nov 2026 22:23:37 +0900 Subject: [PATCH 2/5] chore: update comments --- dzgui/config/userprefs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dzgui/config/userprefs.py b/dzgui/config/userprefs.py index a392235..d65b8b3 100644 --- a/dzgui/config/userprefs.py +++ b/dzgui/config/userprefs.py @@ -6,7 +6,8 @@ if TYPE_CHECKING: from dzgui.util.ip import Coords -# NOTE: mutable dataclass, 'use_miles' key changes on demand +# NOTE: mutable dataclass: 'use_miles' key changes on demand +# 'frozen' cannot be True @dataclass(slots=True) class UserPrefs: is_steam_deck: bool From 4f6223f90b9fc467b02f942921933258ae046f3b Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 9 Nov 2026 22:24:26 +0900 Subject: [PATCH 3/5] fix: strip invalid values from versions file --- dzgui/api/mods.py | 5 +++-- dzgui/init/migrate.py | 18 +++++++++++++++++- tests/test_legacy_version_file.py | 25 +++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 tests/test_legacy_version_file.py diff --git a/dzgui/api/mods.py b/dzgui/api/mods.py index cc048c6..64359fd 100644 --- a/dzgui/api/mods.py +++ b/dzgui/api/mods.py @@ -18,8 +18,7 @@ from dzgui.const.constants import ( from dzgui.config.query import lookup from dzgui.const.enum import Preferences - -from typing import Any +from dzgui.init.migrate import clean_legacy_versions_file logger = logging.getLogger(APP_NAME) @@ -133,6 +132,8 @@ def remove_stale_signatures( versions.touch() return + clean_legacy_versions_file(versions) + path = lookup(config, Preferences.DEFAULT) steam_path = Path(path) if ids is None: diff --git a/dzgui/init/migrate.py b/dzgui/init/migrate.py index 2a5c0bc..47e14d0 100644 --- a/dzgui/init/migrate.py +++ b/dzgui/init/migrate.py @@ -1,12 +1,16 @@ import json +import logging +import re import shutil from pathlib import Path from typing import Any -from dzgui.const.constants import LEGACY_CONFIG_PATH, LEGACY_COLS_PATH, LEGACY_IPS_PATH +from dzgui.const.constants import APP_NAME, LEGACY_CONFIG_PATH, LEGACY_COLS_PATH, LEGACY_IPS_PATH from dzgui.config.convert import rc2json from dzgui.util._json import read_json, write_json +logger = logging.getLogger(APP_NAME) + def migrate_legacy_conf(config: Path) -> Any: old_conf = Path.home() / LEGACY_CONFIG_PATH @@ -70,3 +74,15 @@ def copy_ipdb(ips_path: Path) -> None: return # TODO: ensure that month file is copied shutil.copy(legacy, ips_path) + + +def clean_legacy_versions_file(versions: Path) -> None: + # NOTE: handling for #523 + try: + pat = r"^(\d+),(\d+)$" + lines = versions.read_text().splitlines() + clean = [line for line in lines if re.match(pat, line)] + concat = "\n".join(clean) + versions.write_text(concat) + except Exception: + logger.warning(e) diff --git a/tests/test_legacy_version_file.py b/tests/test_legacy_version_file.py new file mode 100644 index 0000000..3117b37 --- /dev/null +++ b/tests/test_legacy_version_file.py @@ -0,0 +1,25 @@ +from typing import TYPE_CHECKING + +from dzgui.init.migrate import clean_legacy_versions_file + +if TYPE_CHECKING: + from pathlib import Path + + +def test_null_signature_stripping(tmp_path: "Path") -> None: + tmp = tmp_path.joinpath("dzg.versions") + lines = [ + "1111,2222", + "3333,4444", + "5555,null", + "foo", + ",4555", + "1111", + " ", + ",,,", + "-1", + ] + expect = ["1111,2222", "3333,4444"] + tmp.write_text("\n".join(lines)) + clean_legacy_versions_file(tmp) + assert expect == tmp.read_text().splitlines() From 3677b01fdccc3f3ae1e630550d2384560b483f5c Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 9 Nov 2026 22:25:13 +0900 Subject: [PATCH 4/5] fix: exception handling --- dzgui/init/migrate.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/dzgui/init/migrate.py b/dzgui/init/migrate.py index 47e14d0..0ff3ce2 100644 --- a/dzgui/init/migrate.py +++ b/dzgui/init/migrate.py @@ -5,7 +5,12 @@ import shutil from pathlib import Path from typing import Any -from dzgui.const.constants import APP_NAME, LEGACY_CONFIG_PATH, LEGACY_COLS_PATH, LEGACY_IPS_PATH +from dzgui.const.constants import ( + APP_NAME, + LEGACY_CONFIG_PATH, + LEGACY_COLS_PATH, + LEGACY_IPS_PATH, +) from dzgui.config.convert import rc2json from dzgui.util._json import read_json, write_json @@ -84,5 +89,5 @@ def clean_legacy_versions_file(versions: Path) -> None: clean = [line for line in lines if re.match(pat, line)] concat = "\n".join(clean) versions.write_text(concat) - except Exception: + except Exception as e: logger.warning(e) From ff1e150eb11ff9f18c6742ce71056a13c4c3505b Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 11 Nov 2026 05:04:50 +0900 Subject: [PATCH 5/5] change: suppress logger message --- dzgui/api/mods.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dzgui/api/mods.py b/dzgui/api/mods.py index 64359fd..170e7c4 100644 --- a/dzgui/api/mods.py +++ b/dzgui/api/mods.py @@ -128,7 +128,7 @@ def remove_stale_signatures( config: Path, versions: Path, ids: list[int] | None = None ) -> None: if versions.is_file() is False: - logger.warning("Creating new version signatures file") + logger.debug("Creating new version signatures file") versions.touch() return