| """Spreadsheet Canvas Tool""" |
| import logging |
| from typing import Any, Dict, List, Optional |
|
|
| logger = logging.getLogger(__name__) |
|
|
|
|
| async def present_sheets_canvas( |
| user_id: str, |
| title: str, |
| data: Dict[str, Any], |
| agent_id: Optional[str] = None, |
| layout: str = "sheet", |
| formulas: List[str] = None |
| ) -> Dict[str, Any]: |
| """ |
| Present a spreadsheet canvas. |
| |
| Creates a grid-based spreadsheet with cells, formulas, and charts. |
| """ |
| from core.canvas_sheets_service import SpreadsheetCanvasService |
| from core.database import get_db_session |
| from tools.canvas_tool import present_specialized_canvas |
|
|
| try: |
| with get_db_session() as db: |
| service = SpreadsheetCanvasService(db) |
|
|
| result = service.create_spreadsheet_canvas( |
| user_id=user_id, |
| title=title, |
| data=data, |
| agent_id=agent_id, |
| layout=layout, |
| formulas=formulas |
| ) |
|
|
| if not result.get("success"): |
| return result |
|
|
| canvas_id = result["canvas_id"] |
|
|
| present_result = await present_specialized_canvas( |
| user_id=user_id, |
| canvas_type="sheets", |
| component_type="data_grid", |
| data={ |
| "title": title, |
| "cells": result["cells"], |
| "formulas": formulas or [] |
| }, |
| title=title, |
| agent_id=agent_id, |
| layout=layout |
| ) |
|
|
| if not present_result.get("success"): |
| return present_result |
|
|
| return { |
| "success": True, |
| "canvas_id": canvas_id, |
| "title": title, |
| "message": f"Presented spreadsheet canvas: {title}" |
| } |
|
|
| except Exception as e: |
| logger.error(f"Failed to present sheets canvas: {e}") |
| return {"success": False, "error": str(e)} |
|
|