Merge branch 'master' into Develop

This commit is contained in:
Ozzieisaacs 2020-06-01 10:58:49 +02:00
commit 89223760e6
44 changed files with 9078 additions and 8685 deletions

View File

@ -683,9 +683,10 @@ def _configuration_update_helper():
reboot_required |= reboot
# Rarfile Content configuration
_config_string(to_save, "config_rarfile_location")
unrar_status = helper.check_unrar(config.config_rarfile_location)
if unrar_status:
return _configuration_result(unrar_status, gdriveError)
if "config_rarfile_location" in to_save:
unrar_status = helper.check_unrar(config.config_rarfile_location)
if unrar_status:
return _configuration_result(unrar_status, gdriveError)
try:
metadata_db = os.path.join(config.config_calibre_dir, "metadata.db")

View File

@ -77,7 +77,6 @@ class _Settings(_Base):
config_uploading = Column(SmallInteger, default=0)
config_anonbrowse = Column(SmallInteger, default=0)
config_public_reg = Column(SmallInteger, default=0)
config_register_email = Column(SmallInteger, default=0)
config_remote_login = Column(Boolean, default=False)
config_kobo_sync = Column(Boolean, default=False)

View File

@ -572,8 +572,7 @@ class CalibreDB(threading.Thread):
authorterms = re.split("[, ]+", term)
for authorterm in authorterms:
q.append(Books.authors.any(func.lower(Authors.name).ilike("%" + authorterm + "%")))
return self.session.query(Books).filter(self.common_filters()).filter(
return self.session.query(Books).filter(self.common_filters(True)).filter(
or_(Books.tags.any(func.lower(Tags.name).ilike("%" + term + "%")),
Books.series.any(func.lower(Series.name).ilike("%" + term + "%")),
Books.authors.any(and_(*q)),

View File

@ -278,7 +278,7 @@ def render_edit_book(book_id):
# Determine what formats don't already exist
if config.config_converterpath:
allowed_conversion_formats = constants.EXTENSIONS_CONVERT.copy()
allowed_conversion_formats = constants.EXTENSIONS_CONVERT[:]
for file in book.data:
if file.format.lower() in allowed_conversion_formats:
allowed_conversion_formats.remove(file.format.lower())

View File

@ -31,8 +31,6 @@ from datetime import datetime, timedelta
from tempfile import gettempdir
import requests
from babel import Locale as LC
from babel.core import UnknownLocaleError
from babel.dates import format_datetime
from babel.units import format_unit
from flask import send_from_directory, make_response, redirect, abort
@ -56,6 +54,7 @@ except ImportError:
try:
from PIL import Image as PILImage
from PIL import UnidentifiedImageError
use_PIL = True
except ImportError:
use_PIL = False
@ -532,8 +531,19 @@ def get_book_cover_internal(book, use_generic_cover_on_failure):
# saves book cover from url
def save_cover_from_url(url, book_path):
img = requests.get(url, timeout=10) # ToDo: Error Handling
return save_cover(img, book_path)
try:
img = requests.get(url, timeout=(10, 200)) # ToDo: Error Handling
img.raise_for_status()
return save_cover(img, book_path)
except (requests.exceptions.HTTPError,
requests.exceptions.ConnectionError,
requests.exceptions.Timeout) as ex:
log.info(u'Cover Download Error %s', ex)
return False, _("Error Downloading Cover")
except UnidentifiedImageError as ex:
log.info(u'File Format Error %s', ex)
return False, _("Cover Format Error")
def save_cover_from_filestorage(filepath, saved_filename, img):
@ -768,7 +778,7 @@ def get_download_link(book_id, book_format, client):
book_format = book_format.split(".")[0]
book = calibre_db.get_filtered_book(book_id)
if book:
data1 = data = calibre_db.get_book_format(book.id, book_format.upper())
data1 = calibre_db.get_book_format(book.id, book_format.upper())
else:
abort(404)
if data1:

View File

@ -157,12 +157,12 @@ def create_access_log(log_file, log_name, formatter):
if log_file == DEFAULT_ACCESS_LOG:
raise
file_handler = RotatingFileHandler(DEFAULT_ACCESS_LOG, maxBytes=50000, backupCount=2)
log_file = "access.log"
log_file = ""
file_handler.setFormatter(formatter)
access_log.addHandler(file_handler)
return access_log, \
"access.log" if _absolute_log_file(log_file, DEFAULT_ACCESS_LOG) == DEFAULT_ACCESS_LOG else log_file
"" if _absolute_log_file(log_file, DEFAULT_ACCESS_LOG) == DEFAULT_ACCESS_LOG else log_file
# Enable logging of smtp lib debug output

View File

@ -57,7 +57,7 @@ def connect(key=None, secret=None, enabled=True):
def get_author_info(author_name):
now = time.time()
author_info = None # _AUTHORS_CACHE.get(author_name, None)
author_info = _AUTHORS_CACHE.get(author_name, None)
if author_info:
if now < author_info._timestamp + _CACHE_TIMEOUT:
return author_info

View File

@ -19,7 +19,7 @@
{% endfor %}
</div>
{% if title == "Series" %}
{% if data == "series" %}
<button class="update-view btn btn-primary" href="#" data-target="series_view" data-view="grid">Grid</button>
{% endif %}
</div>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -589,7 +589,7 @@ def get_languages_json():
@login_required_if_no_ano
def get_matching_tags():
tag_dict = {'tags': []}
q = calibre_db.session.query(db.Books)
q = calibre_db.session.query(db.Books).filter(calibre_db.common_filters(True))
calibre_db.session.connection().connection.connection.create_function("lower", 1, db.lcase)
author_input = request.args.get('author_name') or ''
title_input = request.args.get('book_title') or ''
@ -657,7 +657,7 @@ def books_list(data, sort, book_id, page):
abort(404)
elif data == "discover":
if current_user.check_visibility(constants.SIDEBAR_RANDOM):
entries, __, pagination = calibre_db.calibre_db.fill_indexpage(page, db.Books, True, [func.randomblob(2)])
entries, __, pagination = calibre_db.fill_indexpage(page, db.Books, True, [func.randomblob(2)])
pagination = Pagination(1, config.config_books_per_page, config.config_books_per_page)
return render_title_template('discover.html', entries=entries, pagination=pagination, id=book_id,
title=_(u"Discover (Random Books)"), page="discover")
@ -1022,7 +1022,7 @@ def advanced_search():
# Build custom columns names
cc = get_cc_columns(filter_config_custom_read=True)
calibre_db.session.connection().connection.connection.create_function("lower", 1, db.lcase)
q = calibre_db.session.query(db.Books).filter(calibre_db.common_filters()).order_by(db.Books.sort)
q = calibre_db.session.query(db.Books).filter(calibre_db.common_filters(True)).order_by(db.Books.sort)
include_tag_inputs = request.args.getlist('include_tag')
exclude_tag_inputs = request.args.getlist('exclude_tag')
@ -1641,8 +1641,8 @@ def profile():
def read_book(book_id, book_format):
book = calibre_db.get_filtered_book(book_id)
if not book:
flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error")
log.debug(u"Error opening eBook. File does not exist or file is not accessible:")
flash(_(u"Error opening eBook. File does not exist or file is not accessible"), category="error")
log.debug(u"Error opening eBook. File does not exist or file is not accessible")
return redirect(url_for("web.index"))
# check if book has bookmark
@ -1681,8 +1681,8 @@ def read_book(book_id, book_format):
# if book_format.lower() == fileext:
# return render_title_template('readcbr.html', comicfile=book_id,
# extension=fileext, title=_(u"Read a Book"), book=book)
log.debug(u"Error opening eBook. File does not exist or file is not accessible:")
flash(_(u"Error opening eBook. File does not exist or file is not accessible."), category="error")
log.debug(u"Error opening eBook. File does not exist or file is not accessible")
flash(_(u"Error opening eBook. File does not exist or file is not accessible"), category="error")
return redirect(url_for("web.index"))
@ -1693,8 +1693,8 @@ def show_book(book_id):
if entries:
for index in range(0, len(entries.languages)):
try:
entries.languages[index].language_name = LC.parse(entries.languages[index].lang_code).get_language_name(
get_locale())
entries.languages[index].language_name = LC.parse(entries.languages[index].lang_code)\
.get_language_name(get_locale())
except UnknownLocaleError:
entries.languages[index].language_name = _(
isoLanguages.get(part3=entries.languages[index].lang_code).name)
@ -1743,6 +1743,6 @@ def show_book(book_id):
is_xhr=request.headers.get('X-Requested-With')=='XMLHttpRequest', title=entries.title, books_shelfs=book_in_shelfs,
have_read=have_read, is_archived=is_archived, kindle_list=kindle_list, reader_list=reader_list, page="book")
else:
log.debug(u"Error opening eBook. File does not exist or file is not accessible:")
flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error")
log.debug(u"Error opening eBook. File does not exist or file is not accessible")
flash(_(u"Error opening eBook. File does not exist or file is not accessible"), category="error")
return redirect(url_for("web.index"))

View File

@ -24,7 +24,10 @@ import smtplib
import socket
import time
import threading
import queue
try:
import queue
except ImportError:
import Queue as queue
from glob import glob
from shutil import copyfile
from datetime import datetime
@ -278,18 +281,6 @@ class WorkerThread(threading.Thread):
self.doLock.acquire()
index = self.current
self.doLock.release()
'''dbpath = os.path.join(config.config_calibre_dir, "metadata.db")
engine = create_engine('sqlite://',
echo=False,
isolation_level="SERIALIZABLE",
connect_args={'check_same_thread': True})
engine.execute("attach database '{}' as calibre;".format(dbpath))
conn = engine.connect()
Session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
bind=engine))
w_session = Session()
engine.execute("attach database '{}' as calibre;".format(dbpath))'''
file_path = self.queue[index]['file_path']
book_id = self.queue[index]['bookid']
format_old_ext = u'.' + self.queue[index]['settings']['old_book_format'].lower()

File diff suppressed because it is too large Load Diff

View File

@ -36,17 +36,17 @@
<div class="col-xs-12 col-sm-6">
<div class="row">
<div class="col-xs-6 col-md-6 col-sm-offset-3" style="margin-top:50px;">
<p class='text-justify attribute'><strong>Start Time: </strong>2020-05-23 12:52:51</p>
<p class='text-justify attribute'><strong>Start Time: </strong>2020-05-29 07:01:47</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 col-md-6 col-sm-offset-3">
<p class='text-justify attribute'><strong>Stop Time: </strong>2020-05-23 13:50:07</p>
<p class='text-justify attribute'><strong>Stop Time: </strong>2020-05-29 08:01:43</p>
</div>
</div>
<div class="row">
<div class="col-xs-6 col-md-6 col-sm-offset-3">
<p class='text-justify attribute'><strong>Duration: </strong>48:28 min</p>
<p class='text-justify attribute'><strong>Duration: </strong>50:44 min</p>
</div>
</div>
</div>
@ -442,8 +442,8 @@
<tr class="result['header']['style']">
<td>test_edit_additional_books.test_edit_additional_books</td>
<td class="text-center">3</td>
<td class="text-center">2</td>
<td class="text-center">1</td>
<td class="text-center">3</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
@ -462,33 +462,11 @@
<tr id='ft4.2' class='none bg-danger'>
<tr id='pt4.2' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_metadata_cbt</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft4.2')">FAIL</a>
</div>
<!--css div popup start-->
<div id='div_ft4.2' class="popup_window test_output" style="display:none;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus='this.blur();'
onclick="document.getElementById('div_ft4.2').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_edit_additional_books.py", line 88, in test_upload_metadata_cbt
self.assertEqual('Test 执 to', details['title'])
AssertionError: 'Test 执 to' != 'book'
- Test 执 to
+ book</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -505,13 +483,13 @@ AssertionError: 'Test 执 to' != 'book'
<tr class="result['header']['style']">
<td>test_edit_books.test_edit_books</td>
<td class="text-center">33</td>
<td class="text-center">30</td>
<td class="text-center">27</td>
<td class="text-center">1</td>
<td class="text-center">0</td>
<td class="text-center">2</td>
<td class="text-center">
<a onclick="showClassDetail('c5', 30)">Detail</a>
<a onclick="showClassDetail('c5', 33)">Detail</a>
</td>
</tr>
@ -564,7 +542,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.6' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_edit_custom_rating</div>
<div class='testcase'>test_edit_custom_categories</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -573,7 +551,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.7' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_edit_custom_single_select</div>
<div class='testcase'>test_edit_custom_float</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -582,7 +560,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.8' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_edit_custom_text</div>
<div class='testcase'>test_edit_custom_int</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -591,7 +569,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.9' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_edit_language</div>
<div class='testcase'>test_edit_custom_rating</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -600,42 +578,25 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.10' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_edit_publisher</div>
<div class='testcase'>test_edit_custom_single_select</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='st5.11' class='none bg-warning'>
<tr id='pt5.11' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_edit_publishing_date</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st5.11')">SKIP</a>
</div>
<!--css div popup start-->
<div id='div_st5.11' class="popup_window test_output" style="display:none;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus='this.blur();'
onclick="document.getElementById('div_st5.11').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Not Implemented</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
<div class='testcase'>test_edit_custom_text</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt5.12' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_edit_rating</div>
<div class='testcase'>test_edit_language</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -644,35 +605,26 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.13' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_edit_series</div>
<div class='testcase'>test_edit_publisher</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt5.14' class='hiddenRow bg-success'>
<tr id='st5.14' class='none bg-warning'>
<td>
<div class='testcase'>test_edit_title</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='st5.15' class='none bg-warning'>
<td>
<div class='testcase'>test_rename_uppercase_lowercase</div>
<div class='testcase'>test_edit_publishing_date</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st5.15')">SKIP</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st5.14')">SKIP</a>
</div>
<!--css div popup start-->
<div id='div_st5.15' class="popup_window test_output" style="display:none;">
<div id='div_st5.14' class="popup_window test_output" style="display:none;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus='this.blur();'
onclick="document.getElementById('div_st5.15').style.display='none'"><span
onclick="document.getElementById('div_st5.14').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
@ -686,9 +638,18 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.15' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_edit_rating</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt5.16' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_typeahead_author</div>
<div class='testcase'>test_edit_series</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -697,25 +658,42 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.17' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_typeahead_functions</div>
<div class='testcase'>test_edit_title</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt5.18' class='hiddenRow bg-success'>
<tr id='st5.18' class='none bg-warning'>
<td>
<div class='testcase'>test_typeahead_language</div>
<div class='testcase'>test_rename_uppercase_lowercase</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st5.18')">SKIP</a>
</div>
<!--css div popup start-->
<div id='div_st5.18' class="popup_window test_output" style="display:none;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus='this.blur();'
onclick="document.getElementById('div_st5.18').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Not Implemented</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt5.19' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_typeahead_publisher</div>
<div class='testcase'>test_typeahead_author</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -724,7 +702,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.20' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_typeahead_series</div>
<div class='testcase'>test_typeahead_functions</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -733,7 +711,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.21' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_typeahead_tag</div>
<div class='testcase'>test_typeahead_language</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -742,7 +720,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.22' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_cbr</div>
<div class='testcase'>test_typeahead_publisher</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -751,7 +729,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.23' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_cbt</div>
<div class='testcase'>test_typeahead_series</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -760,7 +738,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.24' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_cbz</div>
<div class='testcase'>test_typeahead_tag</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -769,7 +747,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.25' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_epub</div>
<div class='testcase'>test_upload_book_cbr</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -778,7 +756,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.26' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_fb2</div>
<div class='testcase'>test_upload_book_cbt</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -787,7 +765,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.27' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_lit</div>
<div class='testcase'>test_upload_book_cbz</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -796,7 +774,7 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.28' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_mobi</div>
<div class='testcase'>test_upload_book_epub</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -804,6 +782,33 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='pt5.29' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_fb2</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt5.30' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_lit</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt5.31' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_mobi</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt5.32' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_upload_book_pdf</div>
</td>
@ -812,24 +817,24 @@ AssertionError: 'Test 执 to' != 'book'
<tr id='ft5.30' class='none bg-danger'>
<tr id='ft5.33' class='none bg-danger'>
<td>
<div class='testcase'>test_upload_cover_hdd</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft5.30')">FAIL</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft5.33')">FAIL</a>
</div>
<!--css div popup start-->
<div id='div_ft5.30' class="popup_window test_output" style="display:none;">
<div id='div_ft5.33' class="popup_window test_output" style="display:none;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus='this.blur();'
onclick="document.getElementById('div_ft5.30').style.display='none'"><span
onclick="document.getElementById('div_ft5.33').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_edit_books.py", line 662, in test_upload_cover_hdd
File "/home/matthias/Entwicklung/calibre-web-test/test/test_edit_books.py", line 735, in test_upload_cover_hdd
self.assertTrue(False,"Browser-Cache Problem: Old Cover is displayed instead of New Cover")
AssertionError: False is not true : Browser-Cache Problem: Old Cover is displayed instead of New Cover</pre>
</div>
@ -1112,8 +1117,8 @@ AssertionError: False is not true : Browser-Cache Problem: Old Cover is displaye
<tr class="result['header']['style']">
<td>test_kobo_sync.test_kobo_sync</td>
<td class="text-center">8</td>
<td class="text-center">7</td>
<td class="text-center">1</td>
<td class="text-center">8</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
@ -1168,31 +1173,11 @@ AssertionError: False is not true : Browser-Cache Problem: Old Cover is displaye
<tr id='ft10.6' class='none bg-danger'>
<tr id='pt10.6' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_sync_shelf</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft10.6')">FAIL</a>
</div>
<!--css div popup start-->
<div id='div_ft10.6' class="popup_window test_output" style="display:none;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus='this.blur();'
onclick="document.getElementById('div_ft10.6').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_kobo_sync.py", line 323, in test_sync_shelf
self.assertEqual(1, len(data[0]['ChangedTag']['Tag']['Items']))
AssertionError: 1 != 0</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -1314,13 +1299,13 @@ AssertionError: 1 != 0</pre>
<tr class="result['header']['style']">
<td>test_logging.test_logging</td>
<td class="text-center">7</td>
<td class="text-center">6</td>
<td class="text-center">4</td>
<td class="text-center">1</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">1</td>
<td class="text-center">
<a onclick="showClassDetail('c12', 6)">Detail</a>
<a onclick="showClassDetail('c12', 7)">Detail</a>
</td>
</tr>
@ -1328,7 +1313,7 @@ AssertionError: 1 != 0</pre>
<tr id='pt12.1' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_debug_log</div>
<div class='testcase'>test_access_log_recover</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -1336,6 +1321,15 @@ AssertionError: 1 != 0</pre>
<tr id='pt12.2' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_debug_log</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt12.3' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_failed_login</div>
</td>
@ -1344,19 +1338,19 @@ AssertionError: 1 != 0</pre>
<tr id='st12.3' class='none bg-warning'>
<tr id='st12.4' class='none bg-warning'>
<td>
<div class='testcase'>test_failed_register</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st12.3')">SKIP</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st12.4')">SKIP</a>
</div>
<!--css div popup start-->
<div id='div_st12.3' class="popup_window test_output" style="display:none;">
<div id='div_st12.4' class="popup_window test_output" style="display:none;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus='this.blur();'
onclick="document.getElementById('div_st12.3').style.display='none'"><span
onclick="document.getElementById('div_st12.4').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
@ -1370,7 +1364,7 @@ AssertionError: 1 != 0</pre>
<tr id='pt12.4' class='hiddenRow bg-success'>
<tr id='pt12.5' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_logfile_change</div>
</td>
@ -1379,36 +1373,16 @@ AssertionError: 1 != 0</pre>
<tr id='ft12.5' class='none bg-danger'>
<tr id='pt12.6' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_logfile_recover</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft12.5')">FAIL</a>
</div>
<!--css div popup start-->
<div id='div_ft12.5' class="popup_window test_output" style="display:none;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus='this.blur();'
onclick="document.getElementById('div_ft12.5').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_logging.py", line 137, in test_logfile_recover
self.assertTrue(logpath=="", "logfile config value is not empty after reseting to default")
AssertionError: False is not true : logfile config value is not empty after reseting to default</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt12.6' class='hiddenRow bg-success'>
<tr id='pt12.7' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_logviewer</div>
</td>
@ -1935,13 +1909,13 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr class="result['header']['style']">
<td>test_updater.test_updater</td>
<td class="text-center">8</td>
<td class="text-center">7</td>
<td class="text-center">6</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">1</td>
<td class="text-center">
<a onclick="showClassDetail('c18', 7)">Detail</a>
<a onclick="showClassDetail('c18', 8)">Detail</a>
</td>
</tr>
@ -2026,6 +2000,15 @@ AssertionError: False is not true : logfile config value is not empty after rese
</tr>
<tr id='pt18.8' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_reconnect_database</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr class="result['header']['style']">
@ -2216,13 +2199,13 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr class="result['header']['style']">
<td>test_visiblilitys.calibre_web_visibilitys</td>
<td class="text-center">28</td>
<td class="text-center">28</td>
<td class="text-center">30</td>
<td class="text-center">30</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
<a onclick="showClassDetail('c20', 28)">Detail</a>
<a onclick="showClassDetail('c20', 30)">Detail</a>
</td>
</tr>
@ -2329,7 +2312,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.12' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_admin_change_visibility_rated</div>
<div class='testcase'>test_admin_change_visibility_random</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2338,7 +2321,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.13' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_admin_change_visibility_rating</div>
<div class='testcase'>test_admin_change_visibility_rated</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2347,7 +2330,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.14' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_admin_change_visibility_read</div>
<div class='testcase'>test_admin_change_visibility_rating</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2356,7 +2339,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.15' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_admin_change_visibility_series</div>
<div class='testcase'>test_admin_change_visibility_read</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2365,7 +2348,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.16' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_allow_columns</div>
<div class='testcase'>test_admin_change_visibility_series</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2374,7 +2357,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.17' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_allow_tags</div>
<div class='testcase'>test_allow_columns</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2383,7 +2366,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.18' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_authors_max_settings</div>
<div class='testcase'>test_allow_tags</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2392,7 +2375,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.19' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_checked_logged_in</div>
<div class='testcase'>test_archive_books</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2401,7 +2384,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.20' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_hide_custom_column</div>
<div class='testcase'>test_authors_max_settings</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2410,7 +2393,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.21' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_link_column_to_read_status</div>
<div class='testcase'>test_checked_logged_in</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2419,7 +2402,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.22' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_random_books_available</div>
<div class='testcase'>test_hide_custom_column</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2428,7 +2411,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.23' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_restrict_columns</div>
<div class='testcase'>test_link_column_to_read_status</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2437,7 +2420,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.24' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_restrict_tags</div>
<div class='testcase'>test_random_books_available</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2446,7 +2429,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.25' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_search_functions</div>
<div class='testcase'>test_restrict_columns</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2455,7 +2438,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.26' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_search_string</div>
<div class='testcase'>test_restrict_tags</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2464,7 +2447,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.27' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_user_email_available</div>
<div class='testcase'>test_search_functions</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2472,6 +2455,24 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='pt20.28' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_search_string</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt20.29' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_user_email_available</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt20.30' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_user_visibility_sidebar</div>
</td>
@ -2482,9 +2483,9 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr id='total_row' class="text-center bg-grey">
<td>Total</td>
<td>218</td>
<td>211</td>
<td>201</td>
<td>4</td>
<td>1</td>
<td>0</td>
<td>6</td>
<td>&nbsp;</td>
@ -2634,7 +2635,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr>
<th>comicapi</th>
<td>2.1</td>
<td>2.1.1</td>
<td>test_edit_additional_books</td>
</tr>
@ -2700,7 +2701,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
<tr>
<th>SQLAlchemy-Utils</th>
<td>0.36.5</td>
<td>0.36.6</td>
<td>test_OAuth_login</td>
</tr>
@ -2712,7 +2713,7 @@ AssertionError: False is not true : logfile config value is not empty after rese
</div>
<script>
drawCircle(201, 4, 0, 6);
drawCircle(211, 1, 0, 6);
</script>
</div>