diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ab7d800f5..27f0af4128 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ into pre-release sections below. * Do not process task sources in task/task-group CRUD operations (\#1861). * Do not process task owners in task/task-group CRUD operations (\#1861). * Expand use and validators for `TaskGroupCreateV2` schema (\#1861). + * Forbid extras in `TaskCollectPipV2` (\#1891). * Database: * Add `taskgroupv2_id` foreign key to `CollectionStateV2` (\#1867). * Make `TaskV2.source` nullable and drop its uniqueness constraint (\#1861). diff --git a/fractal_server/app/schemas/v2/task_collection.py b/fractal_server/app/schemas/v2/task_collection.py index 08fb9935c5..17bfa52dd3 100644 --- a/fractal_server/app/schemas/v2/task_collection.py +++ b/fractal_server/app/schemas/v2/task_collection.py @@ -6,6 +6,7 @@ from typing import Optional from pydantic import BaseModel +from pydantic import Extra from pydantic import root_validator from pydantic import validator @@ -24,7 +25,7 @@ class CollectionStatusV2(str, Enum): OK = "OK" -class TaskCollectPipV2(BaseModel): +class TaskCollectPipV2(BaseModel, extra=Extra.forbid): """ TaskCollectPipV2 class diff --git a/tests/v2/03_api/test_api_task_collection.py b/tests/v2/03_api/test_api_task_collection.py index bb528963ce..631368251e 100644 --- a/tests/v2/03_api/test_api_task_collection.py +++ b/tests/v2/03_api/test_api_task_collection.py @@ -400,7 +400,6 @@ async def test_task_collection_custom( source="source1", package_root=None, package_name=package_name, - version=None, ) # Fail because no package is installed in sys.executable @@ -442,7 +441,6 @@ async def test_task_collection_custom( source="source3", package_root=package_root, package_name=None, - version=None, ) res = await client.post( f"{PREFIX}/collect/custom/", json=payload_root.dict() diff --git a/tests/v2/03_api/test_api_task_collection_ssh.py b/tests/v2/03_api/test_api_task_collection_ssh.py index ac88b5918b..8912f6d6c0 100644 --- a/tests/v2/03_api/test_api_task_collection_ssh.py +++ b/tests/v2/03_api/test_api_task_collection_ssh.py @@ -270,9 +270,12 @@ async def test_task_collection_ssh_from_wheel( f"{PREFIX}/collect/pip/", json=dict( package=remote_wheel_path, - version="1.2.3", + package_version="1.2.3", python_version=current_py_version, ), ) assert res.status_code == 422 - debug(res.json()) + error_msg = ( + "Cannot provide package version when package " "is a wheel file." + ) + assert error_msg in str(res.json()["detail"])