Исходный код EJIO.utils.system.paths

## /utils/system/paths.py

from pathlib import Path
from ..interface import ReadOnlyMeta

__all__ = [
    'SystemPaths',
    'get_app_root',
]


[документация] def get_app_root() -> Path: """ Возвращает абсолютный путь к корневой папке, где запущен главный файл приложения. Надежно работает как при обычном запуске скрипта, так и при сборке через PyInstaller. :return: Путь к корню программы. """ import sys if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'): return Path(sys._MEIPASS) # type: ignore[attr-defined] # Извлекаем путь к самому первому запущенному файлу (__main__) main_module = sys.modules.get('__main__') if main_module and hasattr(main_module, '__file__') and main_module.__file__: return Path(main_module.__file__).resolve().parent return Path.cwd().resolve()
[документация] class SystemPaths(metaclass=ReadOnlyMeta): """ Неизменяемая структура системных путей только для чтения. Корректно работает на Windows, Linux и macOS. """ __slots__ = () @staticmethod def user_home() -> Path: """Путь к домашней директории текущего пользователя.""" return Path.home().resolve() @staticmethod def desktop() -> Path: """Путь к рабочему столу пользователя.""" return Path.home().joinpath("Desktop").resolve() @staticmethod def documents() -> Path: """Путь к папке Документы.""" return Path.home().joinpath("Documents").resolve() @staticmethod def app_data() -> Path: """ Путь к изолированной папке для хранения локальных конфигураций и данных приложений. Windows: %APPDATA% Linux: ~/.config macOS: ~/Library/Application Support """ import os from .properties import SystemProperties system = SystemProperties.os if system == "windows": return Path(os.environ.get("APPDATA", Path.home().joinpath("AppData", "Roaming"))).resolve() if system == "darwin": return Path.home().joinpath("Library", "Application Support").resolve() return Path.home().joinpath(".config").resolve() @staticmethod def app_cache() -> Path: """ Путь к папке для хранения временных файлов кэша приложений. Windows: %LOCALAPPDATA%/Cache Linux: ~/.cache macOS: ~/Library/Caches """ import os from .properties import SystemProperties system = SystemProperties.os if system == "windows": local = os.environ.get("LOCALAPPDATA", Path.home().joinpath("AppData", "Local")) return Path(local).joinpath("Cache").resolve() if system == "darwin": return Path.home().joinpath("Library", "Caches").resolve() return Path.home().joinpath(".cache").resolve() @staticmethod def temp() -> Path: """Путь к глобальной системной папке временных файлов.""" import tempfile return Path(tempfile.gettempdir()).resolve()
[документация] @classmethod def clear(cls) -> None: """Реализация контракта Disposable..""" pass
[документация] @classmethod def destroy(cls) -> None: """Реализация контракта Disposable.""" pass