Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 19 additions & 6 deletions src/platformdirs/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -468,39 +468,44 @@ def iter_config_dirs(self) -> Iterator[str]:
yield from _unique(self._iter_config_dirs())

def _iter_config_dirs(self) -> Iterator[str]:
yield self.user_config_dir
if not self._use_site:
yield self.user_config_dir
yield from self._create_as_yielded(self._site_config_dirs)

def iter_data_dirs(self) -> Iterator[str]:
""":yield: all user and site data directories."""
yield from _unique(self._iter_data_dirs())

def _iter_data_dirs(self) -> Iterator[str]:
yield self.user_data_dir
if not self._use_site:
yield self.user_data_dir
yield from self._create_as_yielded(self._site_data_dirs)

def iter_cache_dirs(self) -> Iterator[str]:
""":yield: all user and site cache directories."""
yield from _unique(self._iter_cache_dirs())

def _iter_cache_dirs(self) -> Iterator[str]:
yield self.user_cache_dir
if not self._use_site:
yield self.user_cache_dir
yield from self._create_as_yielded(self._site_cache_dirs)

def iter_state_dirs(self) -> Iterator[str]:
""":yield: all user and site state directories."""
yield from _unique(self._iter_state_dirs())

def _iter_state_dirs(self) -> Iterator[str]:
yield self.user_state_dir
if not self._use_site:
yield self.user_state_dir
yield self.site_state_dir

def iter_log_dirs(self) -> Iterator[str]:
""":yield: all user and site log directories."""
yield from _unique(self._iter_log_dirs())

def _iter_log_dirs(self) -> Iterator[str]:
yield self.user_log_dir
if not self._use_site:
yield self.user_log_dir
yield self.site_log_dir

def iter_runtime_dirs(self) -> Iterator[str]:
Expand All @@ -509,7 +514,15 @@ def iter_runtime_dirs(self) -> Iterator[str]:

def _iter_runtime_dirs(self) -> Iterator[str]:
yield self.user_runtime_dir
yield self.site_runtime_dir
# Root's user runtime dir is already the site one; site_runtime_dir reads the invoking user's XDG_RUNTIME_DIR.
if not self._use_site:
yield self.site_runtime_dir

@property
def _use_site(self) -> bool:
# Only Unix redirects root's user dirs to the site ones. The iterators then skip the user dir, since under
# multipath it is the joined site string that _unique cannot match against any single entry.
return False

def iter_config_paths(self) -> Iterator[Path]:
""":yield: all user and site configuration paths."""
Expand Down
37 changes: 1 addition & 36 deletions src/platformdirs/unix.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,11 @@
from contextlib import suppress
from pathlib import Path
from tempfile import gettempdir
from typing import TYPE_CHECKING, Final, NoReturn
from typing import Final, NoReturn

from ._xdg import XDGMixin, _expand_user, _xdg_dir
from .api import PlatformDirsABC, RuntimeDirWarning

if TYPE_CHECKING:
from collections.abc import Iterator

if sys.platform == "win32":

def getuid() -> NoReturn:
Expand Down Expand Up @@ -216,38 +213,6 @@ def site_runtime_dir(self) -> str:
path = "/run"
return self._append_app_name_and_version(path, private=False)

def _iter_config_dirs(self) -> Iterator[str]:
# Under multipath the user dir is an os.pathsep-joined string that no single site entry matches, so the
# dedupe in iter_config_dirs cannot drop it. Skip it here instead.
if not self._use_site:
yield self.user_config_dir
yield from self._create_as_yielded(self._site_config_dirs)

def _iter_data_dirs(self) -> Iterator[str]:
if not self._use_site:
yield self.user_data_dir
yield from self._create_as_yielded(self._site_data_dirs)

def _iter_cache_dirs(self) -> Iterator[str]:
if not self._use_site:
yield self.user_cache_dir
yield self.site_cache_dir

def _iter_state_dirs(self) -> Iterator[str]:
if not self._use_site:
yield self.user_state_dir
yield self.site_state_dir

def _iter_log_dirs(self) -> Iterator[str]:
if not self._use_site:
yield self.user_log_dir
yield self.site_log_dir

def _iter_runtime_dirs(self) -> Iterator[str]:
yield self.user_runtime_dir
if not self._use_site:
yield self.site_runtime_dir


class Unix(XDGMixin, _UnixDefaults):
"""On Unix/Linux, we follow the `XDG Basedir Spec <https://specifications.freedesktop.org/basedir/latest/>`_.
Expand Down
Loading