Skip to content

Commit a1a1529

Browse files
committed
refactor(BA-4092): Use VFolderFilterStatusFailed for invalid purge status
- Replace VFolderInvalidParameter with VFolderFilterStatusFailed in repository purge_vfolder() for consistency with existing error types - Remove try-except in API handler since VFolderFilterStatusFailed already inherits from HTTPBadRequest - Update tests accordingly
1 parent 168669b commit a1a1529

File tree

4 files changed

+13
-19
lines changed

4 files changed

+13
-19
lines changed

src/ai/backend/manager/api/vfolder.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1938,14 +1938,11 @@ async def purge(request: web.Request, params: PurgeRequestModel) -> web.Response
19381938
):
19391939
raise InsufficientPrivilege("You are not allowed to purge vfolders")
19401940

1941-
try:
1942-
await root_ctx.processors.vfolder.purge_vfolder.wait_for_complete(
1943-
PurgeVFolderAction(
1944-
purger=Purger(row_class=VFolderRow, pk_value=folder_id),
1945-
)
1941+
await root_ctx.processors.vfolder.purge_vfolder.wait_for_complete(
1942+
PurgeVFolderAction(
1943+
purger=Purger(row_class=VFolderRow, pk_value=folder_id),
19461944
)
1947-
except VFolderInvalidParameter as e:
1948-
raise InvalidAPIParameters(str(e))
1945+
)
19491946

19501947
return web.Response(status=HTTPStatus.NO_CONTENT)
19511948

src/ai/backend/manager/repositories/vfolder/repository.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from ai.backend.manager.errors.resource import DBOperationFailed, ProjectNotFound
3131
from ai.backend.manager.errors.storage import (
3232
VFolderDeletionNotAllowed,
33+
VFolderFilterStatusFailed,
3334
VFolderInvalidParameter,
3435
VFolderNotFound,
3536
)
@@ -423,7 +424,7 @@ async def purge_vfolder(self, purger: Purger[VFolderRow]) -> VFolderData:
423424
424425
Raises:
425426
VFolderNotFound: If the vfolder doesn't exist.
426-
VFolderInvalidParameter: If the vfolder status is not purgable.
427+
VFolderFilterStatusFailed: If the vfolder status is not purgable.
427428
"""
428429
vfolder_uuid = cast(uuid.UUID, purger.pk_value)
429430
async with self._db.begin_session() as session:
@@ -432,9 +433,7 @@ async def purge_vfolder(self, purger: Purger[VFolderRow]) -> VFolderData:
432433
if vfolder_row is None:
433434
raise VFolderNotFound(extra_data=str(vfolder_uuid))
434435
if vfolder_row.status not in vfolder_status_map[VFolderStatusSet.PURGABLE]:
435-
raise VFolderInvalidParameter(
436-
f"Cannot purge vfolder with status {vfolder_row.status}"
437-
)
436+
raise VFolderFilterStatusFailed
438437
await execute_purger(session, purger)
439438
return vfolder_row.to_data()
440439

tests/unit/manager/repositories/vfolder/test_vfolder_repository.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
VFolderOperationStatus,
2222
VFolderOwnershipType,
2323
)
24-
from ai.backend.manager.errors.storage import VFolderInvalidParameter, VFolderNotFound
24+
from ai.backend.manager.errors.storage import VFolderFilterStatusFailed, VFolderNotFound
2525
from ai.backend.manager.models.agent import AgentRow
2626
from ai.backend.manager.models.deployment_auto_scaling_policy import DeploymentAutoScalingPolicyRow
2727
from ai.backend.manager.models.deployment_policy import DeploymentPolicyRow
@@ -710,7 +710,7 @@ async def test_purge_vfolder_invalid_status(
710710

711711
purger = Purger(row_class=VFolderRow, pk_value=vfolder_id)
712712

713-
with pytest.raises(VFolderInvalidParameter):
713+
with pytest.raises(VFolderFilterStatusFailed):
714714
await vfolder_repository.purge_vfolder(purger)
715715

716716
# Verify vfolder still exists in DB (not deleted)

tests/unit/manager/services/vfolder/test_vfolder_service.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
VFolderOperationStatus,
1818
VFolderOwnershipType,
1919
)
20-
from ai.backend.manager.errors.storage import VFolderInvalidParameter, VFolderNotFound
20+
from ai.backend.manager.errors.storage import VFolderFilterStatusFailed, VFolderNotFound
2121
from ai.backend.manager.models.vfolder import VFolderRow
2222
from ai.backend.manager.repositories.base.purger import Purger
2323
from ai.backend.manager.repositories.vfolder.repository import VfolderRepository
@@ -128,12 +128,10 @@ async def test_purge_vfolder_invalid_status_propagates(
128128
mock_vfolder_repository: MagicMock,
129129
sample_action: PurgeVFolderAction,
130130
) -> None:
131-
"""Test that VFolderInvalidParameter from repository is propagated."""
132-
mock_vfolder_repository.purge_vfolder = AsyncMock(
133-
side_effect=VFolderInvalidParameter("Cannot purge vfolder with status ready")
134-
)
131+
"""Test that VFolderFilterStatusFailed from repository is propagated."""
132+
mock_vfolder_repository.purge_vfolder = AsyncMock(side_effect=VFolderFilterStatusFailed)
135133

136-
with pytest.raises(VFolderInvalidParameter):
134+
with pytest.raises(VFolderFilterStatusFailed):
137135
await vfolder_service.purge(sample_action)
138136

139137
mock_vfolder_repository.purge_vfolder.assert_called_once_with(sample_action.purger)

0 commit comments

Comments
 (0)