mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-07-19 22:21:04 +08:00
Fixes #16855. ## Problem `ListDatasetReq` declares `include_parsing_status: bool = False` but `dataset_api_service.list_datasets` ignored the flag, so callers passing `include_parsing_status=true` got `null` for every parsing-status field. The helper that produces the counts (`DocumentService.get_parsing_status_by_kb_ids`) already existed and returned the documented shape; it just wasn't being called. ## Fix Read the flag in `list_datasets`, call the helper only when truthy, and attach per-kb counts to each record before serialisation. The flag follows the same string-coercion idiom already used for `desc` in this function. When the flag is false or absent, no new field is added to the response, so the change is non-breaking and additive. Existing callers see byte-identical responses. ## Tests New file `test/unit_test/api/apps/services/test_dataset_api_service_list_datasets.py` (7 tests, all passing): - `test_list_datasets_without_include_parsing_status_does_not_call_helper` - `test_list_datasets_with_include_parsing_status_true_attaches_counts` - `test_list_datasets_with_include_parsing_status_string_true` - `test_list_datasets_with_include_parsing_status_false_skips_helper` - `test_list_datasets_with_include_parsing_status_string_false_skips_helper` - `test_list_datasets_with_empty_kb_list_skips_helper_even_when_flag_true` - `test_list_datasets_with_include_parsing_status_missing_kb_gets_empty_dict` ``` $ uv run pytest test/unit_test/api/apps/services/test_dataset_api_service_list_datasets.py -v ============================== 7 passed in 0.19s ============================== ``` ## Files changed - `api/apps/services/dataset_api_service.py` (+15) - `test/unit_test/api/apps/services/test_dataset_api_service_list_datasets.py` (new) ## Follow-up (out of scope) Register the `parsing_status` field in the OpenAPI response schema at `api/apps/restful_apis/dataset_api.py` so Swagger / generated clients document it. Co-authored-by: Harsh23Kashyap <harsh@example.com>
(1). Deploy RAGFlow services and images
https://ragflow.io/docs/build_docker_image
(2). Configure the required environment for testing
Install Python dependencies (including test dependencies):
uv sync --python 3.13 --only-group test --no-default-groups --frozen
Activate the environment:
source .venv/bin/activate
Install SDK:
uv pip install sdk/python
Modify the .env file: Add the following code:
COMPOSE_PROFILES=${COMPOSE_PROFILES},tei-cpu
TEI_MODEL=BAAI/bge-small-en-v1.5
RAGFLOW_IMAGE=infiniflow/ragflow:v0.26.4 #Replace with the image you are using
Start the container(wait two minutes):
docker compose -f docker/docker-compose.yml up -d
(3). Test Elasticsearch
a) Run sdk tests against Elasticsearch:
export HTTP_API_TEST_LEVEL=p2
export HOST_ADDRESS=http://127.0.0.1:9380 # Ensure that this port is the API port mapped to your localhost
pytest -s --tb=short --level=${HTTP_API_TEST_LEVEL} test/testcases/test_sdk_api
b) Run http api tests against Elasticsearch:
pytest -s --tb=short --level=${HTTP_API_TEST_LEVEL} test/testcases/test_http_api
(4). Test Infinity
Modify the .env file:
DOC_ENGINE=${DOC_ENGINE:-infinity}
Start the container:
docker compose -f docker/docker-compose.yml down -v
docker compose -f docker/docker-compose.yml up -d
a) Run sdk tests against Infinity:
DOC_ENGINE=infinity pytest -s --tb=short --level=${HTTP_API_TEST_LEVEL} test/testcases/test_sdk_api
b) Run http api tests against Infinity:
DOC_ENGINE=infinity pytest -s --tb=short --level=${HTTP_API_TEST_LEVEL} test/testcases/test_http_api