1
0
mirror of https://github.com/janeczku/calibre-web synced 2025-10-23 11:27:41 +00:00

Fix missing session rollback on commit error

This commit is contained in:
Ozzieisaacs
2020-12-07 19:53:34 +01:00
parent f13522559d
commit 5e3618716d
8 changed files with 208 additions and 62 deletions

View File

@@ -434,7 +434,10 @@ def bookmark(book_id, book_format):
ub.Bookmark.book_id == book_id,
ub.Bookmark.format == book_format)).delete()
if not bookmark_key:
g.ubsession.commit()
try:
g.ubsession.commit()
except OperationalError:
g.ubsession.rollback()
return "", 204
lbookmark = ub.Bookmark(user_id=current_user.id,
@@ -442,7 +445,10 @@ def bookmark(book_id, book_format):
format=book_format,
bookmark_key=bookmark_key)
g.ubsession.merge(lbookmark)
g.ubsession.commit()
try:
g.ubsession.commit()
except OperationalError:
g.ubsession.rollback()
return "", 201
@@ -467,7 +473,10 @@ def toggle_read(book_id):
kobo_reading_state.statistics = ub.KoboStatistics()
book.kobo_reading_state = kobo_reading_state
g.ubsession.merge(book)
g.ubsession.commit()
try:
g.ubsession.commit()
except OperationalError:
g.ubsession.rollback()
else:
try:
calibre_db.update_title_sort(config)
@@ -501,7 +510,10 @@ def toggle_archived(book_id):
archived_book = ub.ArchivedBook(user_id=current_user.id, book_id=book_id)
archived_book.is_archived = True
g.ubsession.merge(archived_book)
g.ubsession.commit()
try:
g.ubsession.commit()
except OperationalError:
g.ubsession.rollback()
return ""
@@ -1086,11 +1098,12 @@ def update_table_settings():
except AttributeError:
pass
g.ubsession.commit()
except InvalidRequestError:
except (InvalidRequestError, OperationalError):
log.error("Invalid request received: %r ", request, )
return "Invalid request", 400
return ""
@web.route("/author")
@login_required_if_no_ano
def author_list():
@@ -1676,7 +1689,10 @@ def logout():
def remote_login():
auth_token = ub.RemoteAuthToken()
g.ubsession.add(auth_token)
g.ubsession.commit()
try:
g.ubsession.commit()
except OperationalError:
g.ubsession.rollback()
verify_url = url_for('web.verify_token', token=auth_token.auth_token, _external=true)
log.debug(u"Remot Login request with token: %s", auth_token.auth_token)
@@ -1708,7 +1724,10 @@ def verify_token(token):
# Update token with user information
auth_token.user_id = current_user.id
auth_token.verified = True
g.ubsession.commit()
try:
g.ubsession.commit()
except OperationalError:
g.ubsession.rollback()
flash(_(u"Success! Please return to your device"), category="success")
log.debug(u"Remote Login token for userid %s verified", auth_token.user_id)
@@ -1731,7 +1750,10 @@ def token_verified():
# Token expired
elif datetime.now() > auth_token.expiration:
g.ubsession.delete(auth_token)
g.ubsession.commit()
try:
g.ubsession.commit()
except OperationalError:
g.ubsession.rollback()
data['status'] = 'error'
data['message'] = _(u"Token has expired")
@@ -1744,7 +1766,10 @@ def token_verified():
login_user(user)
g.ubsession.delete(auth_token)
g.ubsession.commit()
try:
g.ubsession.commit()
except OperationalError:
g.ubsession.rollback()
data['status'] = 'success'
log.debug(u"Remote Login for userid %s succeded", user.id)
@@ -1836,14 +1861,11 @@ def profile():
g.ubsession.rollback()
flash(_(u"Found an existing account for this e-mail address."), category="error")
log.debug(u"Found an existing account for this e-mail address.")
'''return render_title_template("user_edit.html",
content=current_user,
translations=translations,
kobo_support=kobo_support,
title=_(u"%(name)s's profile", name=current_user.nickname),
page="me",
registered_oauth=local_oauth_check,
oauth_status=oauth_status)'''
except OperationalError as e:
g.ubsession.rollback()
log.error("Database error: %s", e)
flash(_(u"Database error: %(error)s.", error=e), category="error")
return render_title_template("user_edit.html",
translations=translations,
profile=1,