diff --git a/cps/templates/email_edit.html b/cps/templates/email_edit.html
index ec2f587a..7a198c14 100644
--- a/cps/templates/email_edit.html
+++ b/cps/templates/email_edit.html
@@ -35,12 +35,12 @@
+
-
-
-
-
+
+
+
diff --git a/cps/translations/it/LC_MESSAGES/messages.mo b/cps/translations/it/LC_MESSAGES/messages.mo
index 5e5afe85..bbe29221 100644
Binary files a/cps/translations/it/LC_MESSAGES/messages.mo and b/cps/translations/it/LC_MESSAGES/messages.mo differ
diff --git a/cps/translations/it/LC_MESSAGES/messages.po b/cps/translations/it/LC_MESSAGES/messages.po
index 7ca6e798..cdb92ec5 100644
--- a/cps/translations/it/LC_MESSAGES/messages.po
+++ b/cps/translations/it/LC_MESSAGES/messages.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Calibre-Web\n"
"Report-Msgid-Bugs-To: https://github.com/janeczku/Calibre-Web\n"
-"POT-Creation-Date: 2020-05-01 17:15+0200\n"
+"POT-Creation-Date: 2020-05-04 20:19+0200\n"
"PO-Revision-Date: 2017-04-04 15:09+0200\n"
"Last-Translator: ElQuimm
\n"
"Language: it\n"
@@ -172,7 +172,7 @@ msgstr "Configurazione del server e-mail aggiornata"
#: cps/admin.py:821
msgid "User not found"
-msgstr ""
+msgstr "Utente non trovato"
#: cps/admin.py:842
#, python-format
@@ -185,7 +185,7 @@ msgstr "Non rimarrebbe nessun utente amministratore, non posso eliminare l'utent
#: cps/admin.py:851
msgid "No admin user remaining, can't remove admin role"
-msgstr ""
+msgstr "Non rimarrebbe nessun utente amministratore, non posso eliminare il ruolo di amministratore"
#: cps/admin.py:887 cps/web.py:1515
msgid "Found an existing account for this e-mail address."
@@ -285,11 +285,11 @@ msgstr "non configurato"
#: cps/editbooks.py:239
msgid "Book Format Successfully Deleted"
-msgstr ""
+msgstr "Il formato del libro è stato eliminato con successo"
#: cps/editbooks.py:242
msgid "Book Successfully Deleted"
-msgstr ""
+msgstr "Il libro é stato eliminato con successo"
#: cps/editbooks.py:253 cps/editbooks.py:489
msgid "Error opening eBook. File does not exist or file is not accessible"
@@ -321,12 +321,12 @@ msgstr "Impossibile creare la cartella %(path)s (autorizzazione negata)."
#: cps/editbooks.py:434
#, python-format
msgid "Failed to store file %(file)s."
-msgstr "Il salvataggio del file %(file)s è fallito."
+msgstr "Il salvataggio del file %(file)s non è riuscito."
#: cps/editbooks.py:451
#, python-format
msgid "File format %(ext)s added to %(book)s"
-msgstr "Ho aggiunto l'estensione %(ext)s al libro %(book)s"
+msgstr "Ho aggiunto il formato %(ext)s al libro %(book)s"
#: cps/editbooks.py:606
msgid "Metadata successfully updated"
@@ -362,7 +362,7 @@ msgstr "Il file %(file)s è stato caricato"
#: cps/editbooks.py:833
msgid "Source or destination format for conversion missing"
-msgstr "Il formato sorgente o quello di destinazione, necessari alla conversione, mancano"
+msgstr "Mancano o il formato sorgente o quello di destinazione, necessari alla conversione"
#: cps/editbooks.py:841
#, python-format
@@ -446,17 +446,17 @@ msgstr "Il file richiesto non può essere letto. I permessi sono corretti?"
#: cps/helper.py:299
#, python-format
msgid "Deleting book %(id)s failed, path has subfolders: %(path)s"
-msgstr ""
+msgstr "L'eliminazione del libro %(id)s non è riuscita, poiché il percorso ha delle sottocartelle: %(path)s"
#: cps/helper.py:309
#, python-format
msgid "Deleting book %(id)s failed: %(message)s"
-msgstr ""
+msgstr "L'eliminazione del libro %(id)s non è riuscita: %(message)s"
#: cps/helper.py:319
#, python-format
msgid "Deleting book %(id)s failed, book path not valid: %(path)s"
-msgstr ""
+msgstr "L'eliminazione del libro %(id)s non è riuscita, poiché il percorso non è valido: %(path)s"
#: cps/helper.py:354
#, python-format
@@ -489,7 +489,7 @@ msgstr "Errore nel creare la cartella per la copertina"
#: cps/helper.py:555
msgid "Cover-file is not a valid image file, or could not be stored"
-msgstr ""
+msgstr "Il file della copertina non è in un formato immagine valido o non può essere salvato"
#: cps/helper.py:566
msgid "Only jpg/jpeg/png/webp files are supported as coverfile"
@@ -501,11 +501,11 @@ msgstr "Solamente i file nei formati jpg/jpeg sono supportati per le copertine"
#: cps/helper.py:622
msgid "Unrar binary file not found"
-msgstr ""
+msgstr "Non ho trovato il file binario di UnRar"
#: cps/helper.py:635
msgid "Error excecuting UnRar"
-msgstr ""
+msgstr "Errore nell'eseguire UnRar"
#: cps/helper.py:691
msgid "Waiting"
@@ -558,19 +558,19 @@ msgstr "Registra con %(provider)s"
#: cps/oauth_bb.py:154
msgid "Failed to log in with GitHub."
-msgstr "Accesso con GitHub non riuscito."
+msgstr "Accesso con GitHub non è riuscito."
#: cps/oauth_bb.py:159
msgid "Failed to fetch user info from GitHub."
-msgstr "Fallito il recupero delle informazioni dell'utente da GitHub."
+msgstr "Il recupero delle informazioni dell'utente da GitHub non è riuscito."
#: cps/oauth_bb.py:170
msgid "Failed to log in with Google."
-msgstr "Fallito l'accesso con Google."
+msgstr "L'accesso con Google non è riuscito."
#: cps/oauth_bb.py:175
msgid "Failed to fetch user info from Google."
-msgstr "Fallito il recupero delle informazioni dell'utente da Google."
+msgstr "Il recupero delle informazioni dell'utente da Google non è riuscito."
#: cps/oauth_bb.py:225 cps/web.py:1291 cps/web.py:1431
#, python-format
@@ -584,7 +584,7 @@ msgstr "Collegamento a %(oauth)s avvenuto con successo"
#: cps/oauth_bb.py:241
msgid "Login failed, No User Linked With OAuth Account"
-msgstr "Accesso fallito, non c'è un utente collegato all'account OAuth"
+msgstr "Accesso non riuscito, non c'è un utente collegato all'account OAuth"
#: cps/oauth_bb.py:283
#, python-format
@@ -594,7 +594,7 @@ msgstr "Scollegamento da %(oauth)s avvenuto con successo"
#: cps/oauth_bb.py:287
#, python-format
msgid "Unlink to %(oauth)s Failed"
-msgstr "Scollegamento da %(oauth)s fallito"
+msgstr "Scollegamento da %(oauth)s non riuscito"
#: cps/oauth_bb.py:290
#, python-format
@@ -818,11 +818,11 @@ msgstr "Mostra la selezione del formato dei file"
#: cps/ub.py:107 cps/web.py:1150
msgid "Archived Books"
-msgstr ""
+msgstr "Libri archiviati"
#: cps/ub.py:109
msgid "Show archived books"
-msgstr ""
+msgstr "Mostra l'opzione per la selezione dei libri archiviati"
#: cps/updater.py:294 cps/updater.py:305 cps/updater.py:406 cps/updater.py:420
msgid "Unexpected data while reading update information"
@@ -1360,23 +1360,23 @@ msgstr "Descrizione"
#: cps/templates/book_edit.html:66
msgid "Identifiers"
-msgstr ""
+msgstr "Identificatori"
#: cps/templates/book_edit.html:70 cps/templates/book_edit.html:308
msgid "Identifier Type"
-msgstr ""
+msgstr "Tipo di identificatore"
#: cps/templates/book_edit.html:71 cps/templates/book_edit.html:309
msgid "Identifier Value"
-msgstr ""
+msgstr "Valore dell'identificatore"
#: cps/templates/book_edit.html:72 cps/templates/book_edit.html:310
msgid "Remove"
-msgstr ""
+msgstr "Rimuovi"
#: cps/templates/book_edit.html:76
msgid "Add Identifier"
-msgstr ""
+msgstr "Aggiungi un identificatore"
#: cps/templates/book_edit.html:80 cps/templates/search_form.html:33
msgid "Tags"
@@ -1453,11 +1453,11 @@ msgstr "e dal disco rigido"
#: cps/templates/book_edit.html:209
msgid "Important Kobo Note: deleted books will remain on any paired Kobo device."
-msgstr ""
+msgstr "Oservazione importante riguardo Kobo: i libri eliminati, rimarranno in ogni lettore Kobo accoppiato."
#: cps/templates/book_edit.html:210
msgid "Books must first be archived and the device synced before a book can safely be deleted."
-msgstr ""
+msgstr "Prima di poter elimnare in sicurezza un libro, prima occorre che il libro venga archiviato e che l'apparecchio venga sincronizzato."
#: cps/templates/book_edit.html:232
msgid "Keyword"
@@ -1775,7 +1775,7 @@ msgstr "Percorso del convertitore"
#: cps/templates/config_edit.html:349
msgid "Location of Unrar binary"
-msgstr "Percorso di UnRar"
+msgstr "Percorso del file binario di UnRar"
#: cps/templates/config_edit.html:368 cps/templates/layout.html:84
#: cps/templates/login.html:4 cps/templates/login.html:20
@@ -1912,15 +1912,15 @@ msgstr "da leggere"
#: cps/templates/detail.html:208
msgid "Restore from archive"
-msgstr ""
+msgstr "Ripristina dall'archivio"
#: cps/templates/detail.html:208
msgid "Add to archive"
-msgstr ""
+msgstr "Aggiungi all'archivio"
#: cps/templates/detail.html:209
msgid "Archived"
-msgstr ""
+msgstr "Archiviato"
#: cps/templates/detail.html:219
msgid "Description:"
@@ -2252,7 +2252,7 @@ msgstr "Scuro"
#: cps/templates/readcbr.html:121
msgid "Scale"
-msgstr "Adatta"
+msgstr "Scala"
#: cps/templates/readcbr.html:124
msgid "Best"
@@ -2396,7 +2396,7 @@ msgstr "Cambia ordine"
#: cps/templates/shelf.html:67
msgid "Are you sure you want to delete this shelf?"
-msgstr "Vuoi davvero eliminare lo scaffale?"
+msgstr "Vuoi davvero eliminare questo scaffale?"
#: cps/templates/shelf.html:70
msgid "Shelf will be deleted for all users"
diff --git a/cps/web.py b/cps/web.py
index 7960df2f..d3d2111b 100644
--- a/cps/web.py
+++ b/cps/web.py
@@ -37,9 +37,9 @@ from flask import Blueprint
from flask import render_template, request, redirect, send_from_directory, make_response, g, flash, abort, url_for
from flask_babel import gettext as _
from flask_login import login_user, logout_user, login_required, current_user
-from sqlalchemy.exc import IntegrityError, InvalidRequestError
+from sqlalchemy.exc import IntegrityError, InvalidRequestError, OperationalError
from sqlalchemy.sql.expression import text, func, true, false, not_, and_, or_
-from werkzeug.exceptions import default_exceptions
+from werkzeug.exceptions import default_exceptions, InternalServerError
try:
from werkzeug.exceptions import FailedDependency
except ImportError:
@@ -119,9 +119,16 @@ for ex in default_exceptions:
if feature_support['ldap']:
# Only way of catching the LDAPException upon logging in with LDAP server down
@app.errorhandler(services.ldap.LDAPException)
- def handle_exception(e):
- log.debug('LDAP server not accessible while trying to login to opds feed')
- return error_http(FailedDependency())
+ def handle_LDAP_exception(e):
+ log.debug('LDAP server not accssible while trying to login to opds feed %s', e)
+ return error_http(e)
+
+# @app.errorhandler(InvalidRequestError)
+#@app.errorhandler(OperationalError)
+#def handle_db_exception(e):
+# db.session.rollback()
+# log.error('Database request error: %s',e)
+# return internal_error(InternalServerError(e))
web = Blueprint('web', __name__)
@@ -435,6 +442,10 @@ def toggle_read(book_id):
db.session.commit()
except KeyError:
log.error(u"Custom Column No.%d is not exisiting in calibre database", config.config_read_column)
+ except OperationalError as e:
+ db.session.rollback()
+ log.error(u"Read status could not set: %e", e)
+
return ""
@web.route("/ajax/togglearchived/", methods=['POST'])
diff --git a/test/Calibre-Web TestSummary.html b/test/Calibre-Web TestSummary.html
old mode 100644
new mode 100755
index ea31b506..4f560221
--- a/test/Calibre-Web TestSummary.html
+++ b/test/Calibre-Web TestSummary.html
@@ -36,17 +36,17 @@
-
Start Time: 2020-05-01 13:35:57
+
Start Time: 2020-05-05 19:02:03
-
Stop Time: 2020-05-01 14:32:26
+
Stop Time: 2020-05-05 19:58:37
-
Duration: 47:49 min
+
Duration: 47:42 min
@@ -1829,8 +1829,8 @@ AssertionError: False is not true : logfile config value is not empty after rese
+
test_check_update_stable_versions
|
- PASS |
+
+
+
+
+
+
+
+ |
@@ -1924,8 +1946,8 @@ AssertionError: False is not true : logfile config value is not empty after rese
+
test_series_user_template
|
-
-
-
-
-
-
-
- |
+ PASS |
@@ -2574,7 +2576,7 @@ AssertionError: False is not true
SQLAlchemy-Utils |
- 0.36.4 |
+ 0.36.5 |
test_OAuth_login |