from os import path, getenv, mkdir import sys from platform import system from pathlib import Path from typing import Optional def resource_path(relative_path: str) -> str: """ Get absolute path to resource, works for dev and for PyInstaller bundle. PyInstaller stores bundled files in _MEIPASS folder. """ try: base_path: Path = Path(sys._MEIPASS) # PyInstaller temp folder except AttributeError: base_path: Path = Path(__file__).parent.parent.parent # Dev environment: source/ folder return path.join(base_path, relative_path) def get_current_dir() -> str: return str(Path.cwd()) def get_data_dir() -> str: return resource_path("data") def get_lang_path() -> str: return path.join(get_data_dir(), "lang") def get_asset_path(asset: str) -> str: return path.join(get_data_dir(), "assets", f"{asset}.png") def get_asset_svg_path(asset: str) -> str: return path.join(get_data_dir(), "assets", f"{asset}.svg") def get_user_data_dir(app_name: str) -> str: home: Path = Path.home() os: str = system() if os == "Windows": appdata: Optional[str] = getenv('APPDATA') if appdata: user_data_path: str = path.join(Path(appdata), app_name) else: user_data_path: str = path.join(home, "AppData", "Roaming", app_name) elif os == "Darwin": user_data_path: str = path.join(home, "Library", "Application Support", app_name) else: user_data_path: str = path.join(home, ".local", "share", app_name) if not path.exists(user_data_path): mkdir(user_data_path) return user_data_path def get_user_temp_icons(app_name: str) -> str: user_data_path = get_user_data_dir(app_name) return path.join(user_data_path, "temp", "icons") def get_user_temp(app_name: str) -> str: user_data_path = get_user_data_dir(app_name) return path.join(user_data_path, "temp")