diff --git a/lib/platformdirs/__init__.py b/lib/platformdirs/__init__.py index 3f7d9490..afe8351d 100644 --- a/lib/platformdirs/__init__.py +++ b/lib/platformdirs/__init__.py @@ -19,18 +19,18 @@ if TYPE_CHECKING: from pathlib import Path from typing import Literal +if sys.platform == "win32": + from platformdirs.windows import Windows as _Result +elif sys.platform == "darwin": + from platformdirs.macos import MacOS as _Result +else: + from platformdirs.unix import Unix as _Result + def _set_platform_dir_class() -> type[PlatformDirsABC]: - if sys.platform == "win32": - from platformdirs.windows import Windows as Result # noqa: PLC0415 - elif sys.platform == "darwin": - from platformdirs.macos import MacOS as Result # noqa: PLC0415 - else: - from platformdirs.unix import Unix as Result # noqa: PLC0415 - if os.getenv("ANDROID_DATA") == "/data" and os.getenv("ANDROID_ROOT") == "/system": if os.getenv("SHELL") or os.getenv("PREFIX"): - return Result + return _Result from platformdirs.android import _android_folder # noqa: PLC0415 @@ -39,10 +39,14 @@ def _set_platform_dir_class() -> type[PlatformDirsABC]: return Android # return to avoid redefinition of a result - return Result + return _Result -PlatformDirs = _set_platform_dir_class() #: Currently active platform +if TYPE_CHECKING: + # Work around mypy issue: https://github.com/python/mypy/issues/10962 + PlatformDirs = _Result +else: + PlatformDirs = _set_platform_dir_class() #: Currently active platform AppDirs = PlatformDirs #: Backwards compatibility with appdirs diff --git a/lib/platformdirs/android.py b/lib/platformdirs/android.py index afd3141c..7004a852 100644 --- a/lib/platformdirs/android.py +++ b/lib/platformdirs/android.py @@ -117,7 +117,7 @@ class Android(PlatformDirsABC): @lru_cache(maxsize=1) -def _android_folder() -> str | None: # noqa: C901, PLR0912 +def _android_folder() -> str | None: # noqa: C901 """:return: base folder for the Android OS or None if it cannot be found""" result: str | None = None # type checker isn't happy with our "import android", just don't do this when type checking see diff --git a/lib/platformdirs/api.py b/lib/platformdirs/api.py index c50caa64..18d660e4 100644 --- a/lib/platformdirs/api.py +++ b/lib/platformdirs/api.py @@ -91,6 +91,12 @@ class PlatformDirsABC(ABC): # noqa: PLR0904 if self.ensure_exists: Path(path).mkdir(parents=True, exist_ok=True) + def _first_item_as_path_if_multipath(self, directory: str) -> Path: + if self.multipath: + # If multipath is True, the first path is returned. + directory = directory.split(os.pathsep)[0] + return Path(directory) + @property @abstractmethod def user_data_dir(self) -> str: diff --git a/lib/platformdirs/macos.py b/lib/platformdirs/macos.py index eb1ba5df..e4b0391a 100644 --- a/lib/platformdirs/macos.py +++ b/lib/platformdirs/macos.py @@ -4,9 +4,13 @@ from __future__ import annotations import os.path import sys +from typing import TYPE_CHECKING from .api import PlatformDirsABC +if TYPE_CHECKING: + from pathlib import Path + class MacOS(PlatformDirsABC): """ @@ -42,6 +46,11 @@ class MacOS(PlatformDirsABC): return os.pathsep.join(path_list) return path_list[0] + @property + def site_data_path(self) -> Path: + """:return: data path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" + return self._first_item_as_path_if_multipath(self.site_data_dir) + @property def user_config_dir(self) -> str: """:return: config directory tied to the user, same as `user_data_dir`""" @@ -74,6 +83,11 @@ class MacOS(PlatformDirsABC): return os.pathsep.join(path_list) return path_list[0] + @property + def site_cache_path(self) -> Path: + """:return: cache path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" + return self._first_item_as_path_if_multipath(self.site_cache_dir) + @property def user_state_dir(self) -> str: """:return: state directory tied to the user, same as `user_data_dir`""" diff --git a/lib/platformdirs/unix.py b/lib/platformdirs/unix.py index 9500ade6..f1942e92 100644 --- a/lib/platformdirs/unix.py +++ b/lib/platformdirs/unix.py @@ -218,12 +218,6 @@ class Unix(PlatformDirsABC): # noqa: PLR0904 """:return: cache path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" return self._first_item_as_path_if_multipath(self.site_cache_dir) - def _first_item_as_path_if_multipath(self, directory: str) -> Path: - if self.multipath: - # If multipath is True, the first path is returned. - directory = directory.split(os.pathsep)[0] - return Path(directory) - def iter_config_dirs(self) -> Iterator[str]: """:yield: all user and site configuration directories.""" yield self.user_config_dir diff --git a/lib/platformdirs/version.py b/lib/platformdirs/version.py index 6483ddce..afb49243 100644 --- a/lib/platformdirs/version.py +++ b/lib/platformdirs/version.py @@ -12,5 +12,5 @@ __version__: str __version_tuple__: VERSION_TUPLE version_tuple: VERSION_TUPLE -__version__ = version = '4.2.2' -__version_tuple__ = version_tuple = (4, 2, 2) +__version__ = version = '4.3.6' +__version_tuple__ = version_tuple = (4, 3, 6) diff --git a/requirements.txt b/requirements.txt index 9834d3ef..86e315d4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,7 +25,7 @@ MarkupSafe==2.1.5 musicbrainzngs==0.7.1 packaging==24.1 paho-mqtt==2.1.0 -platformdirs==4.2.2 +platformdirs==4.3.6 plexapi==4.15.16 portend==3.2.0 profilehooks==1.12.0