Merge pull request #85 from grillazz/ci-test

save and update
This commit is contained in:
Jakub Miazek 2023-03-29 21:55:54 +02:00 committed by GitHub
commit 336f1e8456
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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),
) from exception
finally:
await db.close()