From 1c2223424d8ad00ca47bad4abc0b9698ee23ec3a Mon Sep 17 00:00:00 2001 From: Jakub Miazek Date: Wed, 29 Mar 2023 21:43:25 +0200 Subject: [PATCH 1/2] save and update --- app/models/base.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/app/models/base.py b/app/models/base.py index 8b66dc2..882c321 100644 --- a/app/models/base.py +++ b/app/models/base.py @@ -1,5 +1,6 @@ from typing import Any +from asyncpg import UniqueViolationError from fastapi import HTTPException, status from sqlalchemy.exc import SQLAlchemyError, IntegrityError from sqlalchemy.ext.asyncio import AsyncSession @@ -68,17 +69,16 @@ class Base: await self.save(db_session) async def save_or_update(self, db: AsyncSession): - # TODO: this will be successor of update meth - _success = False try: db.add(self) - _success = await db.commit() - return _success + return await db.commit() except IntegrityError as exception: - if not _success: - # TODO: check if exception is instance of class 'asyncpg.exceptions.UniqueViolationError' + if isinstance(exception.orig, UniqueViolationError): return await db.merge(self) else: - raise exception + raise HTTPException( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + detail=repr(exception), + ) finally: - await db.close() \ No newline at end of file + await db.close() From 2bcd95556d96bf2db47066f8427de52c1cde8ea3 Mon Sep 17 00:00:00 2001 From: Jakub Miazek Date: Wed, 29 Mar 2023 21:50:34 +0200 Subject: [PATCH 2/2] lint code --- app/models/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/base.py b/app/models/base.py index 882c321..e359aad 100644 --- a/app/models/base.py +++ b/app/models/base.py @@ -79,6 +79,6 @@ class Base: raise HTTPException( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=repr(exception), - ) + ) from exception finally: await db.close()