From 50c510d16bcc2b1b163acf8d6f457cc812b912b3 Mon Sep 17 00:00:00 2001 From: kaiyuan Zhang Date: Mon, 10 Mar 2025 09:44:18 +0800 Subject: [PATCH] Fix: bugs mentioned by#5760 (#5778) ### What problem does this PR solve? Fixed the issue of "stop deleting when encountering invalid dataset ID" #5760 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --------- Co-authored-by: Kevin Hu --- api/apps/sdk/dataset.py | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/api/apps/sdk/dataset.py b/api/apps/sdk/dataset.py index f39c6ca90..afa2988c6 100644 --- a/api/apps/sdk/dataset.py +++ b/api/apps/sdk/dataset.py @@ -228,6 +228,8 @@ def delete(tenant_id): schema: type: object """ + errors = [] + success_count = 0 req = request.json if not req: ids = None @@ -243,12 +245,12 @@ def delete(tenant_id): for id in id_list: kbs = KnowledgebaseService.query(id=id, tenant_id=tenant_id) if not kbs: - return get_error_data_result(message=f"You don't own the dataset {id}") + errors.append(f"You don't own the dataset {id}") + continue for doc in DocumentService.query(kb_id=id): if not DocumentService.remove_document(doc, tenant_id): - return get_error_data_result( - message="Remove document error.(Database error)" - ) + errors.append(f"Remove document error for dataset {id}") + continue f2d = File2DocumentService.get_by_document_id(doc.id) FileService.filter_delete( [ @@ -260,7 +262,17 @@ def delete(tenant_id): FileService.filter_delete( [File.source_type == FileSource.KNOWLEDGEBASE, File.type == "folder", File.name == kbs[0].name]) if not KnowledgebaseService.delete_by_id(id): - return get_error_data_result(message="Delete dataset error.(Database error)") + errors.append(f"Delete dataset error for {id}") + continue + success_count += 1 + if errors: + if success_count > 0: + return get_result( + data={"success_count": success_count, "errors": errors}, + message=f"Partially deleted {success_count} datasets with {len(errors)} errors" + ) + else: + return get_error_data_result(message="; ".join(errors)) return get_result(code=settings.RetCode.SUCCESS)