Bugfixes after testrun

This commit is contained in:
Ozzie Isaacs 2022-09-24 06:46:24 +02:00
parent 04908e22fe
commit 59a5ccd05c
6 changed files with 242 additions and 210 deletions

View File

@ -53,7 +53,7 @@ from weakref import WeakSet
log = logger.create()
cc_exceptions = ['composite']
cc_exceptions = ['composite', 'series']
cc_classes = {}
Base = declarative_base()
@ -472,7 +472,6 @@ class CalibreDB:
# This is a WeakSet so that references here don't keep other CalibreDB
# instances alive once they reach the end of their respective scopes
instances = WeakSet()
series = False
def __init__(self, expire_on_commit=True, init=False):
""" Initialize a new CalibreDB session
@ -500,7 +499,6 @@ class CalibreDB:
for row in cc:
if row.datatype not in cc_exceptions:
if row.datatype == 'series':
cls.series = True
dicttable = {'__tablename__': 'books_custom_column_' + str(row.id) + '_link',
'id': Column(Integer, primary_key=True),
'book': Column(Integer, ForeignKey('books.id'),
@ -1029,14 +1027,10 @@ class CalibreDB:
Base.metadata.remove(table)
def reconnect_db(self, config, app_db_path):
if self.series:
from . import isoLanguages, web_server
web_server.stop(True)
else:
self.dispose()
self.engine.dispose()
self.setup_db(config.config_calibre_dir, app_db_path)
self.update_config(config)
self.dispose()
self.engine.dispose()
self.setup_db(config.config_calibre_dir, app_db_path)
self.update_config(config)
def lcase(s):

View File

@ -102,11 +102,11 @@ def get_epub_info(tmp_file_path, original_file_name, original_file_extension):
identifiers = []
for node in p.xpath('dc:identifier', namespaces=ns):
identifier_name=node.attrib.values()[-1];
identifier_value=node.text;
if identifier_name in ('uuid','calibre'):
continue;
identifiers.append( [identifier_name, identifier_value] )
identifier_name = node.attrib.values()[-1]
identifier_value = node.text
if identifier_name in ('uuid', 'calibre') or identifier_value is None:
continue
identifiers.append([identifier_name, identifier_value])
if not epub_metadata['title']:
title = original_file_name

View File

@ -33,7 +33,7 @@ def get_scheduled_tasks(reconnect=True):
tasks.append([lambda: TaskReconnectDatabase(), 'reconnect', False])
# ToDo make configurable. Generate metadata.opf file for each changed book
if True:
if False:
tasks.append([lambda: TaskBackupMetadata("en"), 'backup metadata', False])
# Generate all missing book cover thumbnails

View File

@ -796,6 +796,7 @@ def create_anonymous_user(_session):
def create_admin_user(_session):
user = User()
user.name = "admin"
user.email = "admin@example.org"
user.role = constants.ADMIN_USER_ROLES
user.sidebar_view = constants.ADMIN_USER_SIDEBAR

View File

@ -47,7 +47,7 @@ install_requires =
backports_abc>=0.4
Flask>=1.0.2,<2.1.0
iso-639>=0.4.5,<0.5.0
PyPDF3>=1.0.0,<1.0.7
PyPDF2>=1.20,<2.11.0
pytz>=2016.10
requests>=2.11.1,<2.28.0
SQLAlchemy>=1.3.0,<1.5.0
@ -97,5 +97,5 @@ comics =
natsort>=2.2.0,<8.2.0
comicapi>=2.2.0,<2.3.0
kobo =
jsonschema>=3.2.0,<4.8.0
jsonschema>=3.2.0,<4.9.0

View File

@ -37,20 +37,20 @@
<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>2022-07-29 22:16:18</p>
<p class='text-justify attribute'><strong>Start Time: </strong>2022-09-24 21:26:53</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>2022-07-30 04:12:54</p>
<p class='text-justify attribute'><strong>Stop Time: </strong>2022-09-25 03:49:07</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>5h 1 min</p>
<p class='text-justify attribute'><strong>Duration: </strong>5h 27 min</p>
</div>
</div>
</div>
@ -465,11 +465,11 @@
<tr id="su" class="failClass">
<tr id="su" class="passClass">
<td>TestEbookConvertCalibre</td>
<td class="text-center">15</td>
<td class="text-center">13</td>
<td class="text-center">2</td>
<td class="text-center">15</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
@ -506,31 +506,11 @@
<tr id="ft6.4" class="none bg-danger">
<tr id='pt6.4' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestEbookConvertCalibre - test_convert_failed_and_email</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft6.4')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_ft6.4" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft6.4').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 &#34;/home/ozzie/Development/calibre-web-test/test/test_ebook_convert.py&#34;, line 260, in test_convert_failed_and_email
self.assertEqual(1, task_len)
AssertionError: 1 != 0</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -544,32 +524,11 @@ AssertionError: 1 != 0</pre>
<tr id="ft6.6" class="none bg-danger">
<tr id='pt6.6' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestEbookConvertCalibre - test_convert_options</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft6.6')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_ft6.6" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft6.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 &#34;/home/ozzie/Development/calibre-web-test/test/test_ebook_convert.py&#34;, line 622, in test_convert_options
self.assertEqual(from_book, set([&#39;-- select an option --&#39;, &#34;TXT&#34;]))
AssertionError: Items in the first set but not the second:
&#39;AZW3&#39;</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -2153,11 +2112,11 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr id="su" class="passClass">
<tr id="su" class="failClass">
<td>TestGoodreads</td>
<td class="text-center">3</td>
<td class="text-center">3</td>
<td class="text-center">0</td>
<td class="text-center">2</td>
<td class="text-center">1</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
@ -2167,11 +2126,31 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr id='pt24.1' class='hiddenRow bg-success'>
<tr id="ft24.1" class="none bg-danger">
<td>
<div class='testcase'>TestGoodreads - test_author_page</div>
</td>
<td colspan='6' align='center'>PASS</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft24.1')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_ft24.1" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft24.1').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 &#34;/home/ozzie/Development/calibre-web-test/test/test_goodreads.py&#34;, line 108, in test_author_page
self.assertFalse(self.check_element_on_page((By.CLASS_NAME, &#34;author-photo&#34;)))
AssertionError: &lt;selenium.webdriver.remote.webelement.WebElement (session=&#34;2520e615-2568-4cc5-b588-44e563fa14a2&#34;, element=&#34;138199ad-2df2-4990-8382-172c41178915&#34;)&gt; is not false</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
@ -3645,11 +3624,11 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr id="su" class="skipClass">
<tr id="su" class="failClass">
<td>TestThumbnails</td>
<td class="text-center">8</td>
<td class="text-center">7</td>
<td class="text-center">0</td>
<td class="text-center">2</td>
<td class="text-center">5</td>
<td class="text-center">0</td>
<td class="text-center">1</td>
<td class="text-center">
@ -3668,29 +3647,89 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr id='pt42.2' class='hiddenRow bg-success'>
<tr id="ft42.2" class="none bg-danger">
<td>
<div class='testcase'>TestThumbnails - test_cache_of_deleted_book</div>
</td>
<td colspan='6' align='center'>PASS</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft42.2')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_ft42.2" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft42.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 &#34;/home/ozzie/Development/calibre-web-test/test/test_thumbnails.py&#34;, line 193, in test_cache_of_deleted_book
self.assertEqual(len(res), 1)
AssertionError: 2 != 1</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='pt42.3' class='hiddenRow bg-success'>
<tr id="ft42.3" class="none bg-danger">
<td>
<div class='testcase'>TestThumbnails - test_cover_cache_on_database_change</div>
</td>
<td colspan='6' align='center'>PASS</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft42.3')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_ft42.3" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft42.3').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 &#34;/home/ozzie/Development/calibre-web-test/test/test_thumbnails.py&#34;, line 80, in test_cover_cache_on_database_change
self.assertLessEqual(len(res), 1, res)
AssertionError: 2 not less than or equal to 1 : [{&#39;user&#39;: &#39;System&#39;, &#39;task&#39;: &#39;Metadata backup: Backing up Metadata&#39;, &#39;result&#39;: &#39;Failed&#39;, &#39;progress&#39;: &#39;100 %&#39;, &#39;duration&#39;: &#39; 0s&#39;, &#39;start&#39;: &#39;9/25/22, 2:16 AM&#39;}, {&#39;user&#39;: &#39;System&#39;, &#39;task&#39;: &#39;Cover Thumbnails: Generated 222 cover thumbnails&#39;, &#39;result&#39;: &#39;Finished&#39;, &#39;progress&#39;: &#39;100 %&#39;, &#39;duration&#39;: &#39; 5s&#39;, &#39;start&#39;: &#39;9/25/22, 2:16 AM&#39;}]</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='pt42.4' class='hiddenRow bg-success'>
<tr id="ft42.4" class="none bg-danger">
<td>
<div class='testcase'>TestThumbnails - test_cover_change_on_upload_new_cover</div>
</td>
<td colspan='6' align='center'>PASS</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft42.4')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_ft42.4" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft42.4').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 &#34;/home/ozzie/Development/calibre-web-test/test/test_thumbnails.py&#34;, line 123, in test_cover_change_on_upload_new_cover
self.assertLessEqual(len(res), 1)
AssertionError: 2 not less than or equal to 1</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
@ -3704,11 +3743,31 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr id='pt42.6' class='hiddenRow bg-success'>
<tr id="ft42.6" class="none bg-danger">
<td>
<div class='testcase'>TestThumbnails - test_cover_on_upload_book</div>
</td>
<td colspan='6' align='center'>PASS</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft42.6')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_ft42.6" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft42.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 &#34;/home/ozzie/Development/calibre-web-test/test/test_thumbnails.py&#34;, line 230, in test_cover_on_upload_book
self.assertLessEqual(len(res), 1)
AssertionError: 2 not less than or equal to 1</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
@ -3722,101 +3781,26 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr id='pt42.8' class='hiddenRow bg-success'>
<tr id="ft42.8" class="none bg-danger">
<td>
<div class='testcase'>TestThumbnails - test_sideloaded_book</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id="su" class="skipClass">
<td>TestUpdater</td>
<td class="text-center">9</td>
<td class="text-center">8</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('c43', 9)">Detail</a>
</td>
</tr>
<tr id='pt43.1' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestUpdater - test_check_update_nightly_errors</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt43.2' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestUpdater - test_check_update_nightly_request_errors</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt43.3' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestUpdater - test_check_update_stable_errors</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt43.4' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestUpdater - test_check_update_stable_versions</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt43.5' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestUpdater - test_perform_update</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt43.6' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestUpdater - test_perform_update_stable_errors</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id="st43.7" class="none bg-warning">
<td>
<div class='testcase'>TestUpdater - test_perform_update_timeout</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st43.7')">SKIP</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft42.8')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_st43.7" class="popup_window test_output" style="display:none;">
<div id="div_ft42.8" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_st43.7').style.display='none'"><span
onclick="document.getElementById('div_ft42.8').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">Takes too long</pre>
<pre class="text-left">Traceback (most recent call last):
File &#34;/home/ozzie/Development/calibre-web-test/test/test_thumbnails.py&#34;, line 320, in test_sideloaded_book
self.assertGreaterEqual(diff(BytesIO(list_cover), BytesIO(new_list_cover), delete_diff_file=True), 0.04)
AssertionError: 0.0 not greater than or equal to 0.04</pre>
</div>
<div class="clearfix"></div>
</div>
@ -3825,21 +3809,52 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
</tr>
<tr id="su" class="errorClass">
<td>_FailedTest</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">0</td>
<td class="text-center">
<a onclick="showClassDetail('c43', 1)">Detail</a>
</td>
</tr>
<tr id='pt43.8' class='hiddenRow bg-success'>
<tr id="et43.1" class="none bg-info">
<td>
<div class='testcase'>TestUpdater - test_reconnect_database</div>
<div class='testcase'>_FailedTest - test_updater</div>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt43.9' class='hiddenRow bg-success'>
<td>
<div class='testcase'>TestUpdater - test_update_write_protect</div>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et43.1')">ERROR</a>
</div>
<!--css div popup start-->
<div id="div_et43.1" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_et43.1').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">ImportError: Failed to import test module: test_updater
Traceback (most recent call last):
File &#34;/usr/lib/python3.10/unittest/loader.py&#34;, line 436, in _find_test_path
module = self._get_module_from_name(name)
File &#34;/usr/lib/python3.10/unittest/loader.py&#34;, line 377, in _get_module_from_name
__import__(name)
File &#34;/home/ozzie/Development/calibre-web-test/test/test_updater.py&#34;, line 20
p = None
IndentationError: unexpected indent</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
@ -3896,11 +3911,11 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr id="su" class="passClass">
<tr id="su" class="failClass">
<td>TestUserList</td>
<td class="text-center">18</td>
<td class="text-center">18</td>
<td class="text-center">0</td>
<td class="text-center">17</td>
<td class="text-center">1</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
@ -4063,11 +4078,33 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr id='pt45.18' class='hiddenRow bg-success'>
<tr id="ft45.18" class="none bg-danger">
<td>
<div class='testcase'>TestUserList - test_user_list_sort</div>
</td>
<td colspan='6' align='center'>PASS</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft45.18')">FAIL</a>
</div>
<!--css div popup start-->
<div id="div_ft45.18" class="popup_window test_output" style="display:block;">
<div class='close_button pull-right'>
<button type="button" class="close" aria-label="Close" onfocus="this.blur();"
onclick="document.getElementById('div_ft45.18').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 &#34;/home/ozzie/Development/calibre-web-test/test/test_user_list.py&#34;, line 556, in test_user_list_sort
self.assertEqual(&#34;+&#34;, ul[&#39;table&#39;][0][&#39;E-mail Address&#39;][&#39;text&#39;])
AssertionError: &#39;+&#39; != &#39;1al@b.com&#39;
- +
+ 1al@b.com</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
@ -4791,11 +4828,11 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr id='total_row' class="text-center bg-grey">
<td>Total</td>
<td>423</td>
<td>413</td>
<td>3</td>
<td>0</td>
<td>7</td>
<td>415</td>
<td>400</td>
<td>8</td>
<td>1</td>
<td>6</td>
<td>&nbsp;</td>
</tr>
</table>
@ -4823,13 +4860,13 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>Platform</th>
<td>Linux 5.15.0-41-generic #44~20.04.1-Ubuntu SMP Fri Jun 24 13:27:29 UTC 2022 x86_64 x86_64</td>
<td>Linux 5.15.0-48-generic #54-Ubuntu SMP Fri Aug 26 13:26:29 UTC 2022 x86_64 x86_64</td>
<td>Basic</td>
</tr>
<tr>
<th>Python</th>
<td>3.8.10</td>
<td>3.10.6</td>
<td>Basic</td>
</tr>
@ -4895,7 +4932,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>greenlet</th>
<td>1.1.2</td>
<td>1.1.3</td>
<td>Basic</td>
</tr>
@ -4924,14 +4961,14 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
</tr>
<tr>
<th>PyPDF3</th>
<td>1.0.6</td>
<th>PyPDF2</th>
<td>2.10.9</td>
<td>Basic</td>
</tr>
<tr>
<th>pytz</th>
<td>2022.1</td>
<td>2022.2.1</td>
<td>Basic</td>
</tr>
@ -4943,7 +4980,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>SQLAlchemy</th>
<td>1.4.39</td>
<td>1.4.41</td>
<td>Basic</td>
</tr>
@ -4961,7 +4998,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>Wand</th>
<td>0.6.8</td>
<td>0.6.10</td>
<td>Basic</td>
</tr>
@ -4973,7 +5010,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>google-api-python-client</th>
<td>2.55.0</td>
<td>2.62.0</td>
<td>TestCliGdrivedb</td>
</tr>
@ -5003,7 +5040,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>google-api-python-client</th>
<td>2.55.0</td>
<td>2.62.0</td>
<td>TestEbookConvertCalibreGDrive</td>
</tr>
@ -5033,7 +5070,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>google-api-python-client</th>
<td>2.55.0</td>
<td>2.62.0</td>
<td>TestEbookConvertGDriveKepubify</td>
</tr>
@ -5075,7 +5112,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>google-api-python-client</th>
<td>2.55.0</td>
<td>2.62.0</td>
<td>TestEditAuthorsGdrive</td>
</tr>
@ -5111,7 +5148,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>google-api-python-client</th>
<td>2.55.0</td>
<td>2.62.0</td>
<td>TestEditBooksOnGdrive</td>
</tr>
@ -5153,7 +5190,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>google-api-python-client</th>
<td>2.55.0</td>
<td>2.62.0</td>
<td>TestSetupGdrive</td>
</tr>
@ -5195,13 +5232,13 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>jsonschema</th>
<td>4.8.0</td>
<td>4.16.0</td>
<td>TestKoboSync</td>
</tr>
<tr>
<th>jsonschema</th>
<td>4.8.0</td>
<td>4.16.0</td>
<td>TestKoboSyncBig</td>
</tr>
@ -5213,19 +5250,19 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
<tr>
<th>jsonschema</th>
<td>4.8.0</td>
<td>4.16.0</td>
<td>TestLdapLogin</td>
</tr>
<tr>
<th>python-ldap</th>
<td>3.4.2</td>
<td>3.4.3</td>
<td>TestLdapLogin</td>
</tr>
<tr>
<th>Flask-Dance</th>
<td>6.0.0</td>
<td>6.1.1</td>
<td>TestOAuthLogin</td>
</tr>
@ -5243,7 +5280,7 @@ AssertionError: 0.0 not greater than or equal to 0.05</pre>
</div>
<script>
drawCircle(413, 3, 0, 7);
drawCircle(400, 8, 1, 6);
showCase(5);
</script>