Fix #15170 cannot filter document status (#15216)

Fix #15170 cannot filter document status

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
Wang Qi
2026-05-25 18:58:37 +08:00
committed by GitHub
parent 4783ce9951
commit f4d36f7082
2 changed files with 89 additions and 17 deletions

View File

@@ -811,15 +811,10 @@ def _get_docs_with_request(req, dataset_id:str):
msg = f"Invalid filter conditions: {', '.join(invalid_types)} type{'s' if len(invalid_types) > 1 else ''}"
return RetCode.DATA_ERROR, msg, [], 0
# map run status (text or numeric) - align with API parameter
run_status = q.getlist("run")
run_status_text_to_numeric = {"UNSTART": "0", "RUNNING": "1", "CANCEL": "2", "DONE": "3", "FAIL": "4"}
run_status_converted = [run_status_text_to_numeric.get(v, v) for v in run_status]
if run_status_converted:
invalid_status = {s for s in run_status_converted if s not in run_status_text_to_numeric.values()}
if invalid_status:
msg = f"Invalid filter run status conditions: {', '.join(invalid_status)}"
return RetCode.DATA_ERROR, msg, [], 0
run_status_converted, invalid_status = _parse_run_status_filter(q)
if invalid_status:
msg = f"Invalid filter run status conditions: {', '.join(invalid_status)}"
return RetCode.DATA_ERROR, msg, [], 0
err_code, err_message, doc_ids_filter, return_empty_metadata = _parse_doc_id_filter_with_metadata(q, dataset_id)
if err_code != RetCode.SUCCESS:
@@ -867,14 +862,10 @@ def _get_doc_filters_with_request(req, dataset_id: str):
msg = f"Invalid filter conditions: {', '.join(invalid_types)} type{'s' if len(invalid_types) > 1 else ''}"
return RetCode.DATA_ERROR, msg, {}, 0
run_status = q.getlist("run")
run_status_text_to_numeric = {"UNSTART": "0", "RUNNING": "1", "CANCEL": "2", "DONE": "3", "FAIL": "4"}
run_status_converted = [run_status_text_to_numeric.get(v, v) for v in run_status]
if run_status_converted:
invalid_status = {s for s in run_status_converted if s not in run_status_text_to_numeric.values()}
if invalid_status:
msg = f"Invalid filter run status conditions: {', '.join(invalid_status)}"
return RetCode.DATA_ERROR, msg, {}, 0
run_status_converted, invalid_status = _parse_run_status_filter(q)
if invalid_status:
msg = f"Invalid filter run status conditions: {', '.join(invalid_status)}"
return RetCode.DATA_ERROR, msg, {}, 0
docs_filter, total = DocumentService.get_filter_by_kb_id(
dataset_id,
@@ -885,6 +876,23 @@ def _get_doc_filters_with_request(req, dataset_id: str):
)
return RetCode.SUCCESS, "", docs_filter, total
def _get_query_values(req_args, *names):
values = []
for name in names:
values.extend(req_args.getlist(name))
values.extend(req_args.getlist(f"{name}[]"))
return [str(value).strip() for value in values if value is not None and str(value).strip()]
def _parse_run_status_filter(req_args):
raw_statuses = _get_query_values(req_args, "run", "run_status")
status_text_to_numeric = {status.name: status.value for status in TaskStatus}
valid_statuses = set(status_text_to_numeric.values())
converted = [status_text_to_numeric.get(status.upper(), status) for status in raw_statuses]
invalid_statuses = {status for status in converted if status not in valid_statuses}
return converted, invalid_statuses
def _parse_doc_id_filter_with_metadata(req, kb_id):
"""Parse document ID filter based on metadata conditions from the request.