user_settings

 1from __future__ import annotations
 2
 3import json
 4from pathlib import Path
 5from typing import Any
 6
 7from config import data_dir, resources_dir
 8
 9_DEFAULTS_PATH = resources_dir() / "formats" / "default_settings.json"
10_USER_PATH = data_dir() / "user_settings.json"
11
12_defaults: dict[str, Any] = json.loads(_DEFAULTS_PATH.read_text())
13_settings: dict[str, Any] = {}
14
15
16def _load() -> None:
17    global _settings
18    if _USER_PATH.exists():
19        _settings = json.loads(_USER_PATH.read_text())
20    else:
21        _settings = {}
22
23
24def save() -> None:
25    _USER_PATH.write_text(json.dumps(_settings, indent=2))
26
27
28def get(key: str) -> Any:
29    if not _settings:
30        _load()
31    return _settings.get(key, _defaults.get(key))
32
33
34def set(key: str, value: Any) -> None:
35    if not _settings and _USER_PATH.exists():
36        _load()
37    _settings[key] = value
38    save()
39
40
41def all_settings() -> dict[str, Any]:
42    if not _settings and _USER_PATH.exists():
43        _load()
44    return {**_defaults, **_settings}
45
46
47_load()
def save() -> None:
25def save() -> None:
26    _USER_PATH.write_text(json.dumps(_settings, indent=2))
def get(key: str) -> Any:
29def get(key: str) -> Any:
30    if not _settings:
31        _load()
32    return _settings.get(key, _defaults.get(key))
def set(key: str, value: Any) -> None:
35def set(key: str, value: Any) -> None:
36    if not _settings and _USER_PATH.exists():
37        _load()
38    _settings[key] = value
39    save()
def all_settings() -> dict[str, typing.Any]:
42def all_settings() -> dict[str, Any]:
43    if not _settings and _USER_PATH.exists():
44        _load()
45    return {**_defaults, **_settings}