From 696717a892f86035e52fc1f5db0654f2c829669e Mon Sep 17 00:00:00 2001 From: Mahhheshh <100200105+Mahhheshh@users.noreply.github.com> Date: Sun, 22 Feb 2026 16:03:48 +0530 Subject: [PATCH 1/2] add extra error messages and fix response schema --- src/core/errors.py | 7 +++++ src/routers/openml/qualities.py | 39 ++++++++++++++++++-------- tests/routers/openml/qualities_test.py | 3 +- 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/core/errors.py b/src/core/errors.py index 840cd75f..7e444833 100644 --- a/src/core/errors.py +++ b/src/core/errors.py @@ -5,3 +5,10 @@ class DatasetError(IntEnum): NOT_FOUND = 111 NO_ACCESS = 112 NO_DATA_FILE = 113 + + +class QualityError(IntEnum): + UNKNOWN_DATASET = 361 + NO_QUALITIES = 362 + NOT_PROCESSED = 363 + PROCESSED_WITH_ERROR = 364 diff --git a/src/routers/openml/qualities.py b/src/routers/openml/qualities.py index 54181f8f..b4edc258 100644 --- a/src/routers/openml/qualities.py +++ b/src/routers/openml/qualities.py @@ -7,7 +7,7 @@ import database.datasets import database.qualities from core.access import _user_has_access -from core.errors import DatasetError +from core.errors import QualityError from database.users import User from routers.dependencies import expdb_connection, fetch_user from schemas.datasets.openml import Quality @@ -32,18 +32,35 @@ def get_qualities( dataset_id: int, user: Annotated[User | None, Depends(fetch_user)], expdb: Annotated[Connection, Depends(expdb_connection)], -) -> list[Quality]: +) -> dict[Literal["data_qualities"], dict[Literal["quality"], list[Quality]]]: dataset = database.datasets.get(dataset_id, expdb) if not dataset or not _user_has_access(dataset, user): raise HTTPException( status_code=HTTPStatus.PRECONDITION_FAILED, - detail={"code": DatasetError.NO_DATA_FILE, "message": "Unknown dataset"}, + detail={"code": QualityError.UNKNOWN_DATASET, "message": "Unknown dataset"}, ) from None - return database.qualities.get_for_dataset(dataset_id, expdb) - # The PHP API provided (sometime) helpful error messages - # if not qualities: - # check if dataset exists: error 360 - # check if user has access: error 361 - # check if there is a data processed entry and forward the error: 364 - # if nothing in process table: 363 - # otherwise: error 362 + + processing = database.datasets.get_latest_processing_update(dataset_id, expdb) + if processing is None: + raise HTTPException( + status_code=HTTPStatus.PRECONDITION_FAILED, + detail={"code": QualityError.NOT_PROCESSED, "message": "Dataset not processed yet"}, + ) + if processing.error: + raise HTTPException( + status_code=HTTPStatus.PRECONDITION_FAILED, + detail={"code": QualityError.PROCESSED_WITH_ERROR, "message": "Dataset processed with error"}, + ) + + qualities = database.qualities.get_for_dataset(dataset_id, expdb) + if not qualities: + raise HTTPException( + status_code=HTTPStatus.PRECONDITION_FAILED, + detail={"code": QualityError.NO_QUALITIES, "message": "No qualities found"}, + ) + + return { + "data_qualities": { + "quality": qualities + } + } diff --git a/tests/routers/openml/qualities_test.py b/tests/routers/openml/qualities_test.py index eed569e9..a1dd61cb 100644 --- a/tests/routers/openml/qualities_test.py +++ b/tests/routers/openml/qualities_test.py @@ -306,9 +306,8 @@ def test_get_quality_identical_error( py_api: TestClient, php_api: httpx.Client, ) -> None: - if data_id in [55, 56, 59]: - pytest.skip("Detailed error for code 364 (failed processing) not yet supported.") if data_id in [116]: + # skipping 116 is not valid case for 362 pytest.skip("Detailed error for code 362 (no qualities) not yet supported.") php_response = php_api.get(f"/data/qualities/{data_id}") python_response = py_api.get(f"/datasets/qualities/{data_id}") From a7a942c8b5010e4a929a74f3aa9d3d139c742451 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 22 Feb 2026 10:39:56 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/routers/openml/qualities.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/routers/openml/qualities.py b/src/routers/openml/qualities.py index b4edc258..a6ea55ad 100644 --- a/src/routers/openml/qualities.py +++ b/src/routers/openml/qualities.py @@ -49,7 +49,10 @@ def get_qualities( if processing.error: raise HTTPException( status_code=HTTPStatus.PRECONDITION_FAILED, - detail={"code": QualityError.PROCESSED_WITH_ERROR, "message": "Dataset processed with error"}, + detail={ + "code": QualityError.PROCESSED_WITH_ERROR, + "message": "Dataset processed with error", + }, ) qualities = database.qualities.get_for_dataset(dataset_id, expdb) @@ -61,6 +64,6 @@ def get_qualities( return { "data_qualities": { - "quality": qualities - } + "quality": qualities, + }, }