From 8f7c4b9d199ae866c3929780fd4bb5332d6b1fdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bern=C3=A1t=20G=C3=A1bor?= Date: Thu, 26 Mar 2026 08:12:09 -0700 Subject: [PATCH] Fix ty 0.0.25 type errors and remove version pin --- pyproject.toml | 2 +- src/platformdirs/_xdg.py | 6 +++--- src/platformdirs/api.py | 12 ++++++++++++ tests/test_windows.py | 18 +++++++++++++----- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 5b78110..93f83f8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -68,7 +68,7 @@ test = [ "pytest-mock>=3.15.1", ] type = [ - "ty>=0.0.19,<0.0.25", + "ty>=0.0.19", { include-group = "release" }, { include-group = "test" }, ] diff --git a/src/platformdirs/_xdg.py b/src/platformdirs/_xdg.py index c4aadd6..5ffbf93 100644 --- a/src/platformdirs/_xdg.py +++ b/src/platformdirs/_xdg.py @@ -21,7 +21,7 @@ def user_data_dir(self) -> str: def _site_data_dirs(self) -> list[str]: if xdg_dirs := os.environ.get("XDG_DATA_DIRS", "").strip(): return [self._append_app_name_and_version(p) for p in xdg_dirs.split(os.pathsep) if p.strip()] - return super()._site_data_dirs # type: ignore[misc] + return super()._site_data_dirs @property def site_data_dir(self) -> str: @@ -40,7 +40,7 @@ def user_config_dir(self) -> str: def _site_config_dirs(self) -> list[str]: if xdg_dirs := os.environ.get("XDG_CONFIG_DIRS", "").strip(): return [self._append_app_name_and_version(p) for p in xdg_dirs.split(os.pathsep) if p.strip()] - return super()._site_config_dirs # type: ignore[misc] + return super()._site_config_dirs @property def site_config_dir(self) -> str: @@ -129,7 +129,7 @@ def user_applications_dir(self) -> str: def _site_applications_dirs(self) -> list[str]: if xdg_dirs := os.environ.get("XDG_DATA_DIRS", "").strip(): return [os.path.join(p, "applications") for p in xdg_dirs.split(os.pathsep) if p.strip()] # noqa: PTH118 - return super()._site_applications_dirs # type: ignore[misc] + return super()._site_applications_dirs @property def site_applications_dir(self) -> str: diff --git a/src/platformdirs/api.py b/src/platformdirs/api.py index 1ee29ad..0a5e01f 100644 --- a/src/platformdirs/api.py +++ b/src/platformdirs/api.py @@ -123,6 +123,10 @@ def user_data_dir(self) -> str: def site_data_dir(self) -> str: """:returns: data directory shared by users""" + @property + def _site_data_dirs(self) -> list[str]: + raise NotImplementedError + @property @abstractmethod def user_config_dir(self) -> str: @@ -133,6 +137,10 @@ def user_config_dir(self) -> str: def site_config_dir(self) -> str: """:returns: config directory shared by users""" + @property + def _site_config_dirs(self) -> list[str]: + raise NotImplementedError + @property @abstractmethod def user_cache_dir(self) -> str: @@ -213,6 +221,10 @@ def user_applications_dir(self) -> str: def site_applications_dir(self) -> str: """:returns: applications directory shared by users""" + @property + def _site_applications_dirs(self) -> list[str]: + raise NotImplementedError + @property @abstractmethod def user_runtime_dir(self) -> str: diff --git a/tests/test_windows.py b/tests/test_windows.py index 4a4a704..7347ae2 100644 --- a/tests/test_windows.py +++ b/tests/test_windows.py @@ -198,7 +198,7 @@ def _setup_ctypes_mocks(mocker: MockerFixture, *, win_dll: MagicMock | None = No if not hasattr(ctypes, attr): setattr(ctypes, attr, MagicMock()) if win_dll is not None: - ctypes.WinDLL = win_dll # type: ignore[attr-defined] + mocker.patch.object(ctypes, "WinDLL", win_dll) mocker.patch("sys.platform", "win32") mocker.patch("ctypes.POINTER", return_value=MagicMock()) @@ -227,8 +227,12 @@ def test_get_win_folder_via_ctypes_passes_dont_verify_flag(mocker: MockerFixture mock_ole32 = MagicMock() mock_shell32 = MagicMock() mock_kernel32 = MagicMock() - ctypes.WinDLL = MagicMock( # type: ignore[attr-defined] - side_effect=lambda name: {"ole32": mock_ole32, "shell32": mock_shell32, "kernel32": mock_kernel32}[name], + mocker.patch.object( + ctypes, + "WinDLL", + MagicMock( + side_effect=lambda name: {"ole32": mock_ole32, "shell32": mock_shell32, "kernel32": mock_kernel32}[name], + ), ) mocker.patch("ctypes.byref", side_effect=lambda x: x) @@ -273,8 +277,12 @@ def test_get_win_folder_via_ctypes_null_result(mocker: MockerFixture) -> None: mock_ole32 = MagicMock() mock_shell32 = MagicMock() mock_kernel32 = MagicMock() - ctypes.WinDLL = MagicMock( # type: ignore[attr-defined] - side_effect=lambda name: {"ole32": mock_ole32, "shell32": mock_shell32, "kernel32": mock_kernel32}[name], + mocker.patch.object( + ctypes, + "WinDLL", + MagicMock( + side_effect=lambda name: {"ole32": mock_ole32, "shell32": mock_shell32, "kernel32": mock_kernel32}[name], + ), ) mocker.patch("ctypes.byref", side_effect=lambda x: x)