Files
cmbot/src/services/config_service.py
T

63 lines
2.1 KiB
Python
Raw Normal View History

import json
import logging
logger = logging.getLogger(__name__)
DEFAULT_CONFIG = {
"output_format": "PNG", # PNG or JPG
"output_quality": 95, # JPG quality 1-95
"output_dir": "", # empty = use app output/ dir
"last_garment_dir": "",
"last_print_dir": "",
}
_CONFIG_FILENAME = "app_config.json"
2026-06-15 15:53:01 +08:00
def load_config():
2026-06-15 17:13:36 +08:00
"""
从 JSON 文件加载应用配置。
2026-06-15 17:13:36 +08:00
返回默认配置与文件配置的合并字典。如果配置文件不存在、损坏或无法读取,
函数不会抛出异常,而是记录日志并返回默认配置。
Returns:
dict: 合并后的配置字典
"""
from services.file_service import get_config_path
config_file = get_config_path(_CONFIG_FILENAME)
if not config_file.exists():
logger.info("Config file not found, using defaults: %s", config_file)
return dict(DEFAULT_CONFIG)
try:
with open(str(config_file), encoding="utf-8") as f:
data = json.load(f)
if not isinstance(data, dict):
raise ValueError("Config root is not a JSON object")
merged = dict(DEFAULT_CONFIG)
merged.update(data)
logger.info("Config loaded from %s", config_file)
return merged
except (json.JSONDecodeError, ValueError) as exc:
logger.warning("Config file damaged (%s), using defaults: %s", exc, config_file)
return dict(DEFAULT_CONFIG)
except OSError as exc:
logger.warning("Config file unreadable (%s), using defaults: %s", exc, config_file)
return dict(DEFAULT_CONFIG)
def save_config(data):
"""Save config dict to JSON. Logs error on failure, does not raise."""
from services.file_service import get_config_path
config_file = get_config_path(_CONFIG_FILENAME)
try:
config_file.parent.mkdir(exist_ok=True)
with open(str(config_file), "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
logger.info("Config saved to %s", config_file)
except OSError as exc:
logger.error("Failed to save config to %s: %s", config_file, exc)