Fixed removing filament with spools

This commit is contained in:
Donkie
2023-04-03 20:12:29 +02:00
parent ada139844a
commit 497540511f
3 changed files with 29 additions and 5 deletions

View File

@@ -4,6 +4,7 @@ from typing import Annotated, Optional, Union
from fastapi import APIRouter, Depends
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from pydantic import BaseModel, Field
from pydantic.error_wrappers import ErrorWrapper
from sqlalchemy.ext.asyncio import AsyncSession
@@ -11,6 +12,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
from spoolman.api.v1.models import Filament, Message
from spoolman.database import filament
from spoolman.database.database import get_db_session
from spoolman.exceptions import ItemDeleteError
router = APIRouter(
prefix="/filament",
@@ -102,10 +104,22 @@ async def update(
return Filament.from_db(db_item)
@router.delete("/{filament_id}")
async def delete(
@router.delete(
"/{filament_id}",
response_model=Message,
responses={
403: {"model": Message},
},
)
async def delete( # noqa: ANN201
db: Annotated[AsyncSession, Depends(get_db_session)],
filament_id: int,
) -> Message:
):
try:
await filament.delete(db, filament_id)
except ItemDeleteError as exc:
return JSONResponse(
status_code=403,
content={"message": str(exc)},
)
return Message(message="Success!")

View File

@@ -3,9 +3,10 @@
from typing import Optional
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.exc import IntegrityError
from spoolman.database import models, vendor
from spoolman.exceptions import ItemNotFoundError
from spoolman.exceptions import ItemDeleteError, ItemNotFoundError
async def create(
@@ -76,3 +77,8 @@ async def delete(db: AsyncSession, filament_id: int) -> None:
"""Delete a filament object."""
filament = await get_by_id(db, filament_id)
await db.delete(filament)
try:
await db.flush() # Flush immediately so any errors are propagated in this request.
except IntegrityError as exc:
await db.rollback()
raise ItemDeleteError("Failed to delete filament.") from exc

View File

@@ -5,5 +5,9 @@ class ItemNotFoundError(Exception):
pass
class ItemDeleteError(Exception):
pass
class ItemCreateError(Exception):
pass