diff --git a/fed_mgr/v1/crud.py b/fed_mgr/v1/crud.py index 5362915..2c51eb8 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,13 +439,18 @@ 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) + 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) @@ -453,14 +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) - - # FIXME: return updated_value - def delete_item(*, entity: type[Entity], session: Session, **kwargs) -> None: """Delete an item by its ID from the database.