2025-07-11 14:33:17 +02:00

59 lines
1.8 KiB
Python

from os import path, getenv, mkdir
import sys
from platform import system
from pathlib import Path
def resource_path(relative_path: str) -> Path:
"""
Get absolute path to resource, works for dev and for PyInstaller bundle.
PyInstaller stores bundled files in _MEIPASS folder.
"""
try:
base_path = Path(sys._MEIPASS) # PyInstaller temp folder
except AttributeError:
base_path = Path(__file__).parent.parent.parent # Dev environment: source/ folder
return path.join(base_path, relative_path)
def get_data_dir() -> Path:
return resource_path("data")
def get_lang_path() -> Path:
return path.join(get_data_dir(), "lang")
def get_asset_path(asset: str) -> Path:
return path.join(get_data_dir(), "assets", f"{asset}.png")
def get_asset_svg_path(asset: str) -> Path:
return path.join(get_data_dir(), "assets", f"{asset}.svg")
def get_user_data_dir(app_name: str) -> Path:
home = Path.home()
os = system()
if os == "Windows":
appdata = getenv('APPDATA')
if appdata:
user_data_path = path.join(Path(appdata), app_name)
else:
user_data_path = path.join(home, "AppData", "Roaming", app_name)
elif os == "Darwin":
user_data_path = path.join(home, "Library", "Application Support", app_name)
else:
user_data_path = path.join(home, ".local", "share", app_name)
if not path.exists(user_data_path):
mkdir(user_data_path)
return user_data_path
def get_current_dir() -> Path:
"""
Return the directory where the exe or main script is located.
"""
if getattr(sys, 'frozen', False):
# If the application is frozen (PyInstaller)
return str(Path(sys.executable).parent)
else:
# If running in a normal Python environment
return str(Path(__file__).parent.parent.parent)