From 4efbd79944825c2c450a545ea3837a51e9b6b6e4 Mon Sep 17 00:00:00 2001 From: Jonathan2745 Date: Sun, 5 Jul 2026 18:49:51 +0800 Subject: [PATCH] fix(config): fixed python config file' --- src/qrgenerator/config.py | 11 ++++++++++- tests/test_config.py | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/test_config.py diff --git a/src/qrgenerator/config.py b/src/qrgenerator/config.py index 640936f..85ba305 100644 --- a/src/qrgenerator/config.py +++ b/src/qrgenerator/config.py @@ -1,11 +1,20 @@ from __future__ import annotations import os +import sys from pathlib import Path from dotenv import load_dotenv -PROJECT_ROOT = Path(__file__).resolve().parents[2] + +def _get_app_root() -> Path: + if getattr(sys, "frozen", False): + return Path(sys.executable).resolve().parent + + return Path(__file__).resolve().parents[2] + + +PROJECT_ROOT = _get_app_root() load_dotenv(PROJECT_ROOT / ".env") diff --git a/tests/test_config.py b/tests/test_config.py new file mode 100644 index 0000000..10abe3f --- /dev/null +++ b/tests/test_config.py @@ -0,0 +1,18 @@ +import sys +from pathlib import Path + +import qrgenerator.config as config + + +def test_get_app_root_uses_source_root_when_not_frozen(monkeypatch) -> None: + monkeypatch.delattr(sys, "frozen", raising=False) + + assert config._get_app_root() == Path(config.__file__).resolve().parents[2] + + +def test_get_app_root_uses_executable_directory_when_frozen(monkeypatch, tmp_path: Path) -> None: + executable_path = tmp_path / "QRGenerator.exe" + monkeypatch.setattr(sys, "frozen", True, raising=False) + monkeypatch.setattr(sys, "executable", str(executable_path)) + + assert config._get_app_root() == tmp_path