Files
DataClaw/backend/app/services/web_search_config_store.py
T

52 lines
1.7 KiB
Python
Raw Normal View History

2026-03-29 19:34:58 +08:00
import os
import json
import threading
from typing import Any, Dict
from app.core.data_root import get_data_root
_cache_lock = threading.RLock()
_cache_mtime: float = -1.0
_cache_data: Dict[str, Any] = {}
def get_config_file_path() -> str:
return str(get_data_root() / "web_search_config.json")
def get_web_search_config() -> Dict[str, Any]:
global _cache_mtime, _cache_data
config_file = get_config_file_path()
current_mtime = os.path.getmtime(config_file) if os.path.exists(config_file) else -1.0
with _cache_lock:
if current_mtime != _cache_mtime:
if not os.path.exists(config_file):
_cache_data = {
"provider": "duckduckgo",
"api_key": "",
"base_url": "",
"max_results": 5
}
else:
try:
with open(config_file, "r") as f:
_cache_data = json.load(f)
except json.JSONDecodeError:
_cache_data = {
"provider": "duckduckgo",
"api_key": "",
"base_url": "",
"max_results": 5
}
_cache_mtime = current_mtime
return dict(_cache_data)
def save_web_search_config(config: Dict[str, Any]) -> None:
global _cache_mtime, _cache_data
config_file = get_config_file_path()
os.makedirs(os.path.dirname(config_file), exist_ok=True)
with _cache_lock:
with open(config_file, "w") as f:
json.dump(config, f, indent=2)
_cache_data = dict(config)
_cache_mtime = os.path.getmtime(config_file)