Coverage for graphica/core/app_paths.py: 100.0%

19 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-12 16:38 +0000

1""" 

2書き込み可能なユーザー単位のフォルダ(Windows では %LOCALAPPDATA%\\Graphica 配下)。 

3 

4読み取り専用の同梱リソースは resource_path() で読む。インストール先(Program Files)は 

5書き込めないので、アプリが書くものは必ずここに置く。カレントディレクトリには依存しない。 

6""" 

7import os 

8import re 

9 

10from graphica.core.version import APP_NAME 

11 

12 

13def get_app_data_dir() -> str: 

14 """無ければ作る。LOCALAPPDATA の無い環境では ~/.local/share/Graphica。""" 

15 base = os.environ.get('LOCALAPPDATA') 

16 if not base: 

17 base = os.environ.get('XDG_DATA_HOME') or os.path.join(os.path.expanduser('~'), '.local', 'share') 

18 app_dir = os.path.join(base, APP_NAME) 

19 os.makedirs(app_dir, exist_ok=True) 

20 return app_dir 

21 

22 

23def get_user_plugins_dir() -> str: 

24 """利用者が zip から入れたプラグインの置き場所。無ければ作る。""" 

25 plugins_dir = os.path.join(get_app_data_dir(), 'plugins') 

26 os.makedirs(plugins_dir, exist_ok=True) 

27 return plugins_dir 

28 

29 

30def get_plugin_data_dir(plugin_name: str) -> str: 

31 """プラグインごとの書き込み用フォルダ。無ければ作る。名前はフォルダ名に使える文字だけ残す。""" 

32 safe_name = re.sub(r'[^\w.-]', '_', plugin_name).strip('.') or '_' 

33 data_dir = os.path.join(get_app_data_dir(), 'plugin_data', safe_name) 

34 os.makedirs(data_dir, exist_ok=True) 

35 return data_dir