ChatDev/server/services/vuegraphs_storage.py
2026-01-07 16:24:01 +08:00

63 lines
1.9 KiB
Python
Executable File

"""
SQLite-backed storage helpers for Vue graph editor payloads.
"""
import os
import sqlite3
from pathlib import Path
from typing import Optional
_INITIALIZED_PATHS: set[Path] = set()
def _get_db_path() -> Path:
"""Resolve the SQLite database path, allowing overrides via env."""
return Path(os.getenv("VUEGRAPHS_DB_PATH", "data/vuegraphs.db"))
def _ensure_db_initialized() -> Path:
"""Create the SQLite database and table if they do not already exist."""
db_path = _get_db_path()
if db_path not in _INITIALIZED_PATHS or not db_path.exists():
db_path.parent.mkdir(parents=True, exist_ok=True)
with sqlite3.connect(db_path) as connection:
connection.execute(
"""
CREATE TABLE IF NOT EXISTS vuegraphs (
filename TEXT PRIMARY KEY,
content TEXT NOT NULL
)
"""
)
connection.commit()
_INITIALIZED_PATHS.add(db_path)
return db_path
def save_vuegraph_content(filename: str, content: str) -> None:
"""Insert or update the stored content for the provided filename."""
db_path = _ensure_db_initialized()
with sqlite3.connect(db_path) as connection:
connection.execute(
"""
INSERT INTO vuegraphs (filename, content)
VALUES (?, ?)
ON CONFLICT(filename) DO UPDATE SET content=excluded.content
""",
(filename, content),
)
connection.commit()
def fetch_vuegraph_content(filename: str) -> Optional[str]:
"""Return the stored content for filename, or None when absent."""
db_path = _ensure_db_initialized()
with sqlite3.connect(db_path) as connection:
cursor = connection.execute(
"SELECT content FROM vuegraphs WHERE filename = ?",
(filename,),
)
row = cursor.fetchone()
return row[0] if row else None