From 09fedd1c1a1bff7ce4ea25534ec061ae8da3057e Mon Sep 17 00:00:00 2001 From: Giovanni Savarese Date: Mon, 15 Dec 2025 09:21:07 +0000 Subject: [PATCH 1/2] Delete returning Since MySQL does not support RETURNING, for consistency, remove it for all dialects --- fed_mgr/v1/crud.py | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/fed_mgr/v1/crud.py b/fed_mgr/v1/crud.py index 5362915..08cddb0 100644 --- a/fed_mgr/v1/crud.py +++ b/fed_mgr/v1/crud.py @@ -413,7 +413,7 @@ def add_item(*, entity: type[Entity], session: Session, **kwargs) -> Entity: def update_item( *, entity: type[Entity], session: Session, updated_by: User, **kwargs -) -> None: # FIXME Return Entity +) -> None: """Update an existing item in the database with new data. Args: @@ -439,10 +439,7 @@ def update_item( try: statement = ( - update(entity) - .where(sqlalchemy.and_(True, *conditions)) - .values(**kwargs) - .returning(entity) + update(entity).where(sqlalchemy.and_(True, *conditions)).values(**kwargs) ) result = session.exec(statement) session.commit() @@ -459,8 +456,6 @@ def update_item( message += f"exist: {where_values!s}" raise ItemNotFoundError(message) - # FIXME: return updated_value - def delete_item(*, entity: type[Entity], session: Session, **kwargs) -> None: """Delete an item by its ID from the database. From c3e2229459d54ab8f45ee37d014f81c5c25c7c11 Mon Sep 17 00:00:00 2001 From: Giovanni Savarese Date: Mon, 15 Dec 2025 09:48:30 +0000 Subject: [PATCH 2/2] Result object is not a list of rows --- fed_mgr/v1/crud.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/fed_mgr/v1/crud.py b/fed_mgr/v1/crud.py index 08cddb0..2c51eb8 100644 --- a/fed_mgr/v1/crud.py +++ b/fed_mgr/v1/crud.py @@ -442,7 +442,15 @@ def update_item( update(entity).where(sqlalchemy.and_(True, *conditions)).values(**kwargs) ) result = session.exec(statement) + if result.rowcount == 0: + session.rollback() + message = ( + f"{split_camel_case(entity.__name__)} with given attributes does not " + ) + message += f"exist: {where_values!s}" + raise ItemNotFoundError(message) session.commit() + except sqlalchemy.exc.IntegrityError as e: session.rollback() message = _message_for_conflict(e.args[0], entity.__name__, **kwargs) @@ -450,12 +458,6 @@ def update_item( raise DatabaseOperationError(e.args[0]) from e raise ConflictError(message) from e - updated_value = result.first() - if updated_value is None: - message = f"{split_camel_case(entity.__name__)} with given attributes does not " - message += f"exist: {where_values!s}" - raise ItemNotFoundError(message) - def delete_item(*, entity: type[Entity], session: Session, **kwargs) -> None: """Delete an item by its ID from the database.