fix: Fix delete document endpoint SQLite cursor handling

- Replace context manager pattern with direct cursor assignment
  (SQLite cursors don't support context manager protocol)
- Use conn.close() instead of db_manager.return_connection()
  (SQLiteManager doesn't have return_connection method)

Fixes 500 error when deleting documents via REST API.
This commit is contained in:
Illya 2025-12-08 23:54:49 -05:00
parent 046f18949c
commit f6320faa9c

View file

@ -717,42 +717,42 @@ async def api_delete_document(kb_name: str, filename: str):
# Get the collection ID # Get the collection ID
conn = db_manager.get_connection() conn = db_manager.get_connection()
try: try:
with conn.cursor() as cur: cursor = conn.cursor()
# Get collection ID # Get collection ID
cur.execute( cursor.execute(
"SELECT id FROM knowledge_bases WHERE name = ?", "SELECT id FROM knowledge_bases WHERE name = ?",
(kb_name,) (kb_name,)
) )
result = cur.fetchone() result = cursor.fetchone()
if not result: if not result:
raise HTTPException(status_code=404, detail=f"Knowledge base '{kb_name}' not found") raise HTTPException(status_code=404, detail=f"Knowledge base '{kb_name}' not found")
collection_id = result[0] collection_id = result[0]
# Delete documents with this filename # Delete documents with this filename
cur.execute( cursor.execute(
""" """
DELETE FROM documents DELETE FROM documents
WHERE kb_id = ? AND json_extract(metadata, '$.filename') = ? WHERE kb_id = ? AND json_extract(metadata, '$.filename') = ?
RETURNING id RETURNING id
""", """,
(collection_id, filename) (collection_id, filename)
) )
deleted_count = len(cur.fetchall()) deleted_count = len(cursor.fetchall())
conn.commit() conn.commit()
if deleted_count == 0: if deleted_count == 0:
raise HTTPException(status_code=404, detail=f"No documents found with filename '{filename}'") raise HTTPException(status_code=404, detail=f"No documents found with filename '{filename}'")
logger.info(f"Deleted {deleted_count} document(s) with filename '{filename}' from KB '{kb_name}'") logger.info(f"Deleted {deleted_count} document(s) with filename '{filename}' from KB '{kb_name}'")
return { return {
"success": True, "success": True,
"message": f"Deleted {deleted_count} document(s)", "message": f"Deleted {deleted_count} document(s)",
"filename": filename, "filename": filename,
"kb_name": kb_name "kb_name": kb_name
} }
finally: finally:
db_manager.return_connection(conn) conn.close()
except HTTPException: except HTTPException:
raise raise