Skip to content

Commit fc26a0d

Browse files
authored
Allow users to delete their only project (#3416)
The restriction preventing users from deleting their only project was originally introduced because the UI could not function correctly without projects, which is no longer the case.
1 parent d11b893 commit fc26a0d

2 files changed

Lines changed: 3 additions & 5 deletions

File tree

src/dstack/_internal/server/services/projects.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,6 @@ async def delete_projects(
203203
for project in projects_to_delete:
204204
if not _is_project_admin(user=user, project=project):
205205
raise ForbiddenError()
206-
if all(name in projects_names for name in user_project_names):
207-
raise ServerClientError("Cannot delete the only project")
208206

209207
res = await session.execute(
210208
select(ProjectModel)

src/tests/_internal/server/routers/test_projects.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ async def test_returns_40x_if_not_authenticated(self, test_db, client: AsyncClie
453453

454454
@pytest.mark.asyncio
455455
@pytest.mark.parametrize("test_db", ["sqlite", "postgres"], indirect=True)
456-
async def test_cannot_delete_the_only_project(
456+
async def test_deletes_the_only_project(
457457
self, test_db, session: AsyncSession, client: AsyncClient
458458
):
459459
user = await create_user(session=session, global_role=GlobalRole.USER)
@@ -466,9 +466,9 @@ async def test_cannot_delete_the_only_project(
466466
headers=get_auth_headers(user.token),
467467
json={"projects_names": [project.name]},
468468
)
469-
assert response.status_code == 400
469+
assert response.status_code == 200
470470
await session.refresh(project)
471-
assert not project.deleted
471+
assert project.deleted
472472

473473
@pytest.mark.asyncio
474474
@pytest.mark.parametrize("test_db", ["sqlite", "postgres"], indirect=True)

0 commit comments

Comments
 (0)