generated from LouisMazin/PythonApplicationTemplate
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
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_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") |