Revert so commit now happens before notice, but add a catch-all to websocket notifications
This commit is contained in:
@@ -76,8 +76,8 @@ async def create(
|
||||
extra=[models.FilamentField(key=k, value=v) for k, v in (extra or {}).items()],
|
||||
)
|
||||
db.add(filament)
|
||||
await filament_changed(filament, EventType.ADDED)
|
||||
await db.commit()
|
||||
await filament_changed(filament, EventType.ADDED)
|
||||
return filament
|
||||
|
||||
|
||||
@@ -172,8 +172,8 @@ async def update(
|
||||
filament.multi_color_direction = v.value if v is not None else None
|
||||
else:
|
||||
setattr(filament, k, v)
|
||||
await filament_changed(filament, EventType.UPDATED)
|
||||
await db.commit()
|
||||
await filament_changed(filament, EventType.UPDATED)
|
||||
return filament
|
||||
|
||||
|
||||
@@ -182,8 +182,8 @@ async def delete(db: AsyncSession, filament_id: int) -> None:
|
||||
filament = await get_by_id(db, filament_id)
|
||||
await db.delete(filament)
|
||||
try:
|
||||
await filament_changed(filament, EventType.DELETED)
|
||||
await db.commit() # Flush immediately so any errors are propagated in this request.
|
||||
await filament_changed(filament, EventType.DELETED)
|
||||
except IntegrityError as exc:
|
||||
await db.rollback()
|
||||
raise ItemDeleteError("Failed to delete filament.") from exc
|
||||
@@ -255,12 +255,16 @@ async def find_by_color(
|
||||
|
||||
async def filament_changed(filament: models.Filament, typ: EventType) -> None:
|
||||
"""Notify websocket clients that a filament has changed."""
|
||||
await websocket_manager.send(
|
||||
("filament", str(filament.id)),
|
||||
FilamentEvent(
|
||||
type=typ,
|
||||
resource="filament",
|
||||
date=datetime.utcnow(),
|
||||
payload=Filament.from_db(filament),
|
||||
),
|
||||
)
|
||||
try:
|
||||
await websocket_manager.send(
|
||||
("filament", str(filament.id)),
|
||||
FilamentEvent(
|
||||
type=typ,
|
||||
resource="filament",
|
||||
date=datetime.utcnow(),
|
||||
payload=Filament.from_db(filament),
|
||||
),
|
||||
)
|
||||
except Exception:
|
||||
# Important to have a catch-all here since we don't want to stop the call if this fails.
|
||||
logger.exception("Failed to send websocket message")
|
||||
|
||||
Reference in New Issue
Block a user