48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
"""Patch config.yaml for the MySQL business DB + SQLite checkpointer split."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
|
|
def _parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description="Switch DeerFlow config.yaml to MySQL business storage")
|
|
parser.add_argument("--config", required=True, help="Path to config.yaml")
|
|
parser.add_argument("--mysql-url-env", default="MYSQL_DATABASE_URL", help="Environment variable referenced by database.mysql_url")
|
|
parser.add_argument("--checkpointer-sqlite", required=True, help="SQLite deerflow.db path used by LangGraph checkpointer")
|
|
parser.add_argument("--pool-size", type=int, default=10)
|
|
return parser.parse_args()
|
|
|
|
|
|
def main() -> None:
|
|
args = _parse_args()
|
|
config_path = Path(args.config)
|
|
data = yaml.safe_load(config_path.read_text(encoding="utf-8")) or {}
|
|
if not isinstance(data, dict):
|
|
raise SystemExit(f"Expected a mapping in {config_path}")
|
|
|
|
database = dict(data.get("database") or {})
|
|
database["backend"] = "mysql"
|
|
database["mysql_url"] = f"${args.mysql_url_env}"
|
|
database.setdefault("pool_size", args.pool_size)
|
|
database.setdefault("echo_sql", False)
|
|
data["database"] = database
|
|
|
|
data["checkpointer"] = {
|
|
"type": "sqlite",
|
|
"connection_string": args.checkpointer_sqlite,
|
|
}
|
|
|
|
config_path.write_text(
|
|
yaml.safe_dump(data, allow_unicode=True, sort_keys=False),
|
|
encoding="utf-8",
|
|
)
|
|
print(f"Updated {config_path}: database.backend=mysql, checkpointer.type=sqlite")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|