Add delete_from_db parameter and DB deletion logic to delete_notion_page

This commit is contained in:
CREDO23 2026-02-13 16:08:06 +02:00
parent 45de7d546c
commit cc36780c67
2 changed files with 49 additions and 7 deletions

View file

@ -33,6 +33,7 @@ def create_delete_notion_page_tool(
@tool @tool
async def delete_notion_page( async def delete_notion_page(
page_title: str, page_title: str,
delete_from_db: bool = False,
) -> dict[str, Any]: ) -> dict[str, Any]:
"""Delete (archive) a Notion page. """Delete (archive) a Notion page.
@ -42,19 +43,23 @@ def create_delete_notion_page_tool(
Args: Args:
page_title: The title of the Notion page to delete. page_title: The title of the Notion page to delete.
delete_from_db: Whether to also remove the page from the knowledge base.
Default is False (in Notion).
Set to True to permanently remove from both Notion and knowledge base.
Returns: Returns:
Dictionary with: Dictionary with:
- status: "success" or "error" - status: "success", "rejected", "not_found", or "error"
- page_id: Deleted page ID - page_id: Deleted page ID (if success)
- message: Success or error message - message: Success or error message
- deleted_from_db: Whether the page was also removed from knowledge base (if success)
Examples: Examples:
- "Delete the 'Meeting Notes' Notion page" - "Delete the 'Meeting Notes' Notion page"
- "Remove the 'Old Project Plan' Notion page" - "Remove the 'Old Project Plan' Notion page"
- "Archive the 'Draft Ideas' Notion page" - "Archive the 'Draft Ideas' Notion page"
""" """
logger.info(f"delete_notion_page called: page_title='{page_title}'") logger.info(f"delete_notion_page called: page_title='{page_title}', delete_from_db={delete_from_db}")
if db_session is None or search_space_id is None or user_id is None: if db_session is None or search_space_id is None or user_id is None:
logger.error("Notion tool not properly configured - missing required parameters") logger.error("Notion tool not properly configured - missing required parameters")
@ -88,8 +93,9 @@ def create_delete_notion_page_tool(
page_id = context.get("page_id") page_id = context.get("page_id")
connector_id_from_context = context.get("account", {}).get("id") connector_id_from_context = context.get("account", {}).get("id")
document_id = context.get("document_id")
logger.info(f"Requesting approval for deleting Notion page: '{page_title}' (page_id={page_id})") logger.info(f"Requesting approval for deleting Notion page: '{page_title}' (page_id={page_id}, delete_from_db={delete_from_db})")
# Request approval before deleting # Request approval before deleting
approval = interrupt( approval = interrupt(
{ {
@ -99,6 +105,7 @@ def create_delete_notion_page_tool(
"params": { "params": {
"page_id": page_id, "page_id": page_id,
"connector_id": connector_id_from_context, "connector_id": connector_id_from_context,
"delete_from_db": delete_from_db,
}, },
}, },
"context": context, "context": context,
@ -132,9 +139,43 @@ def create_delete_notion_page_tool(
connector_id=connector_id_from_context, connector_id=connector_id_from_context,
) )
# Delete the page # Delete the page from Notion
result = await notion_connector.delete_page(page_id=page_id) result = await notion_connector.delete_page(page_id=page_id)
logger.info(f"delete_page result: {result.get('status')} - {result.get('message', '')}") logger.info(f"delete_page result: {result.get('status')} - {result.get('message', '')}")
# If deletion was successful and user wants to delete from DB
deleted_from_db = False
if result.get("status") == "success" and delete_from_db and document_id:
try:
from sqlalchemy.future import select
from app.db import Document
# Get the document
doc_result = await db_session.execute(
select(Document).filter(Document.id == document_id)
)
document = doc_result.scalars().first()
if document:
await db_session.delete(document)
await db_session.commit()
deleted_from_db = True
logger.info(f"Deleted document {document_id} from knowledge base")
else:
logger.warning(f"Document {document_id} not found in DB")
except Exception as e:
logger.error(f"Failed to delete document from DB: {e}")
# Don't fail the whole operation if DB deletion fails
# The page is already deleted from Notion, so inform the user
result["warning"] = f"Page deleted from Notion, but failed to remove from knowledge base: {e!s}"
# Update result with DB deletion status
if result.get("status") == "success":
result["deleted_from_db"] = deleted_from_db
if deleted_from_db:
result["message"] = f"{result.get('message', '')} (also removed from knowledge base)"
return result return result
except ValueError as e: except ValueError as e:

View file

@ -229,12 +229,13 @@ BUILTIN_TOOLS: list[ToolDefinition] = [
), ),
ToolDefinition( ToolDefinition(
name="delete_notion_page", name="delete_notion_page",
description="Delete (archive) a Notion page", description="Delete a Notion page by title",
factory=lambda deps: create_delete_notion_page_tool( factory=lambda deps: create_delete_notion_page_tool(
db_session=deps["db_session"], db_session=deps["db_session"],
search_space_id=deps["search_space_id"], search_space_id=deps["search_space_id"],
user_id=deps["user_id"],
), ),
requires=["db_session", "search_space_id"], requires=["db_session", "search_space_id", "user_id"],
), ),
] ]