mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-08-26 01:52:16 +08:00
Fix #15170 cannot filter document status ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user