1
0
mirror of https://github.com/janeczku/calibre-web synced 2025-12-04 23:38:06 +00:00

Fix for #768 (If email server is configured, admins can send user passwords, also domains can be denied from registration)

This commit is contained in:
Ozzieisaacs
2019-12-29 13:54:52 +01:00
parent 01381488f4
commit 5887f0fe6b
7 changed files with 209 additions and 233 deletions

View File

@@ -30,15 +30,15 @@
<div id='header_parameters' class='row text-center report-parameters'>
<div class="col-xs-6 col-md-4">
<p class='text-justify attribute'><strong>Start Time:</strong> 2019-12-28 15:05:02.169394</p>
<p class='text-justify attribute'><strong>Start Time:</strong> 2019-12-29 09:32:57.266265</p>
</div>
<div class="col-xs-6 col-md-4">
<p class='text-justify attribute'><strong>Stop Time:</strong> 2019-12-28 15:36:05.637251</p>
<p class='text-justify attribute'><strong>Stop Time:</strong> 2019-12-29 10:08:09.098085</p>
</div>
<div class="col-xs-6 col-md-4">
<p class='text-justify attribute'><strong>Duration:</strong> 0:31:03.467857</p>
<p class='text-justify attribute'><strong>Duration:</strong> 0:35:11.831820</p>
</div>
</div>
@@ -230,11 +230,11 @@
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr class='failClass'>
<tr class='passClass'>
<td>test_ebook_convert.test_ebook_convert</td>
<td class="text-center">11</td>
<td class="text-center">10</td>
<td class="text-center">1</td>
<td class="text-center">11</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
@@ -276,15 +276,15 @@
</div>
<div class="text-left pull-left">
<pre class="text-left">pt3.4: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 35724)
Receiving message from: ('127.0.0.1', 44766)
Message addressed from: name@host.com
Message addressed to: a5@b.com
Message length : 1
Message length : 42
User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 35726)
Receiving message from: ('127.0.0.1', 44768)
Message addressed from: name@host.com
Message addressed to: a1@b.com
Message length : 2
Message length : 16679
User: name@host.com, Password: 1234</pre>
</div>
<div class="clearfix"></div>
@@ -309,10 +309,10 @@ User: name@host.com, Password: 1234</pre>
</div>
<div class="text-left pull-left">
<pre class="text-left">pt3.5: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 35730)
Receiving message from: ('127.0.0.1', 44772)
Message addressed from: name@host.com
Message addressed to: a5@b.com
Message length : 1
Message length : 42
User: name@host.com, Password: 1234</pre>
</div>
<div class="clearfix"></div>
@@ -355,45 +355,42 @@ User: name@host.com, Password: 1234</pre>
</div>
<div class="text-left pull-left">
<pre class="text-left">pt3.9: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 35734)
Receiving message from: ('127.0.0.1', 44776)
Message addressed from: name@host.com
Message addressed to: a1@b.com
Message length : 2</pre>
Message length : 22311</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='ft3.10' class='none bg-danger'>
<tr id='pt3.10' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_email_only</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft3.10')">FAIL</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt3.10')">PASS</a>
</div>
<!--css div popup start-->
<div id='div_ft3.10' class="popup_window test_output" style="display:none;">
<div id='div_pt3.10' 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_ft3.10').style.display='none'"><span
onclick="document.getElementById('div_pt3.10').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">ft3.10: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 35736)
<pre class="text-left">pt3.10: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 44778)
Message addressed from: name@host.com
Message addressed to: a5@b.com
Message length : 1
Message length : 42
User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 35738)
Receiving message from: ('127.0.0.1', 44780)
Message addressed from: name@host.com
Message addressed to: a1@b.com
Message length : 2Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_ebook_convert.py", line 397, in test_email_only
self.assertGreaterEqual(self.email_server.handler.message_size,24256)
AssertionError: 2 not greater than or equal to 24256</pre>
Message length : 17477</pre>
</div>
<div class="clearfix"></div>
</div>
@@ -1287,10 +1284,10 @@ AssertionError: 2 not greater than or equal to 24256</pre>
</div>
<div class="text-left pull-left">
<pre class="text-left">pt6.1: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 41832)
Receiving message from: ('127.0.0.1', 47328)
Message addressed from: name@host.com
Message addressed to: a1@b.com
Message length : 2</pre>
Message length : 22013</pre>
</div>
<div class="clearfix"></div>
</div>
@@ -1303,121 +1300,111 @@ Message length : 2</pre>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr class='failClass'>
<tr class='skipClass'>
<td>test_email_ssl.test_SSL</td>
<td class="text-center">4</td>
<td class="text-center">0</td>
<td class="text-center">4</td>
<td class="text-center">2</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">2</td>
<td class="text-center">
<a onclick="showClassDetail('c7', 4)">Detail</a>
</td>
</tr>
<tr id='ft7.1' class='none bg-danger'>
<tr id='st7.1' class='none bg-warning'>
<td>
<div class='testcase'>test_SSL_None_setup_error</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft7.1')">FAIL</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st7.1')">SKIP</a>
</div>
<!--css div popup start-->
<div id='div_ft7.1' class="popup_window test_output" style="display:none;">
<div id='div_st7.1' 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_ft7.1').style.display='none'"><span
onclick="document.getElementById('div_st7.1').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">ft7.1: Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_email_ssl.py", line 129, in test_SSL_None_setup_error
self.assertEqual('Failed', ret[-1]['result'])
AssertionError: 'Failed' != 'Started'
- Failed
+ Started</pre>
<pre class="text-left">st7.1: AsyncIO has no ssl handshake timeout</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='ft7.2' class='none bg-danger'>
<tr id='st7.2' class='none bg-warning'>
<td>
<div class='testcase'>test_SSL_STARTTLS_setup_error</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft7.2')">FAIL</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st7.2')">SKIP</a>
</div>
<!--css div popup start-->
<div id='div_ft7.2' class="popup_window test_output" style="display:none;">
<div id='div_st7.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_ft7.2').style.display='none'"><span
onclick="document.getElementById('div_st7.2').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">ft7.2: Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_email_ssl.py", line 109, in test_SSL_STARTTLS_setup_error
self.assertEqual(ret[-1]['result'], 'Failed')
AssertionError: 'Waiting' != 'Failed'
- Waiting
+ Failed</pre>
<pre class="text-left">st7.2: AsyncIO has no ssl handshake timeout</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='ft7.3' class='none bg-danger'>
<tr id='pt7.3' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_SSL_logging_email</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft7.3')">FAIL</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt7.3')">PASS</a>
</div>
<!--css div popup start-->
<div id='div_ft7.3' class="popup_window test_output" style="display:none;">
<div id='div_pt7.3' 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_ft7.3').style.display='none'"><span
onclick="document.getElementById('div_pt7.3').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">ft7.3: Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_email_ssl.py", line 137, in test_SSL_logging_email
self.assertTrue(len(re.findall('Subject: Calibre-Web test e-mail',data)),"Email logging not working")
AssertionError: 0 is not true : Email logging not working</pre>
<pre class="text-left">pt7.3: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 38658)
Message addressed from: name@host.com
Message addressed to: a5@b.com
Message length : 42</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='ft7.4' class='none bg-danger'>
<tr id='pt7.4' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_SSL_only</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft7.4')">FAIL</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt7.4')">PASS</a>
</div>
<!--css div popup start-->
<div id='div_ft7.4' class="popup_window test_output" style="display:none;">
<div id='div_pt7.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_ft7.4').style.display='none'"><span
onclick="document.getElementById('div_pt7.4').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">ft7.4: Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_email_ssl.py", line 88, in test_SSL_only
self.assertEqual(ret[-1]['result'], 'Finished')
AssertionError: 'Waiting' != 'Finished'
- Waiting
+ Finished</pre>
<pre class="text-left">pt7.4: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 38660)
Message addressed from: name@host.com
Message addressed to: a1@b.com
Message length : 22013</pre>
</div>
<div class="clearfix"></div>
</div>
@@ -1989,12 +1976,12 @@ AssertionError: False is not true : logfile config value is not empty after rese
<!--css div popup end-->
</td>
</tr>
<tr class='errorClass'>
<tr class='skipClass'>
<td>test_register.test_register</td>
<td class="text-center">5</td>
<td class="text-center">2</td>
<td class="text-center">4</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">2</td>
<td class="text-center">1</td>
<td class="text-center">
<a onclick="showClassDetail('c12', 5)">Detail</a>
@@ -2029,36 +2016,32 @@ AssertionError: False is not true : logfile config value is not empty after rese
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='et12.3' class='none bg-info'>
<tr id='pt12.3' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_registering_user</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et12.3')">ERROR</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt12.3')">PASS</a>
</div>
<!--css div popup start-->
<div id='div_et12.3' class="popup_window test_output" style="display:none;">
<div id='div_pt12.3' 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_et12.3').style.display='none'"><span
onclick="document.getElementById('div_pt12.3').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">et12.3: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 36440)
<pre class="text-left">pt12.3: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 45484)
Message addressed from: name@host.com
Message addressed to: huj@de.de
Message length : 1Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_register.py", line 80, in test_registering_user
user, passw = self.email_server.handler.extract_register_info()
File "/home/matthias/Entwicklung/calibre-web-test/test/email_convert_helper.py", line 90, in extract_register_info
self.message = email.message_from_string(self.message).get_payload(0).get_payload(decode=True).decode('utf-8')
File "/usr/lib/python3.6/email/__init__.py", line 38, in message_from_string
return Parser(*args, **kws).parsestr(s)
File "/usr/lib/python3.6/email/parser.py", line 68, in parsestr
return self.parse(StringIO(text), headersonly=headersonly)
TypeError: initial_value must be str or None, not list</pre>
Message length : 276
User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 45498)
Message addressed from: name@host.com
Message addressed to: huij@de.de
Message length : 284</pre>
</div>
<div class="clearfix"></div>
</div>
@@ -2082,118 +2065,75 @@ TypeError: initial_value must be str or None, not list</pre>
</div>
<div class="text-left pull-left">
<pre class="text-left">pt12.4: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 36442)
Receiving message from: ('127.0.0.1', 45500)
Message addressed from: name@host.com
Message addressed to: huj@de.com
Message length : 1</pre>
Message length : 286</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='et12.5' class='none bg-info'>
<tr id='pt12.5' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_user_change_password</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et12.5')">ERROR</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt12.5')">PASS</a>
</div>
<!--css div popup start-->
<div id='div_et12.5' class="popup_window test_output" style="display:none;">
<div id='div_pt12.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_et12.5').style.display='none'"><span
onclick="document.getElementById('div_pt12.5').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">et12.5: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 36444)
<pre class="text-left">pt12.5: User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 45502)
Message addressed from: name@host.com
Message addressed to: passwd@de.com
Message length : 1Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_register.py", line 118, in test_user_change_password
user, passw = self.email_server.handler.extract_register_info()
File "/home/matthias/Entwicklung/calibre-web-test/test/email_convert_helper.py", line 90, in extract_register_info
self.message = email.message_from_string(self.message).get_payload(0).get_payload(decode=True).decode('utf-8')
File "/usr/lib/python3.6/email/__init__.py", line 38, in message_from_string
return Parser(*args, **kws).parsestr(s)
File "/usr/lib/python3.6/email/parser.py", line 68, in parsestr
return self.parse(StringIO(text), headersonly=headersonly)
TypeError: initial_value must be str or None, not list</pre>
Message length : 286
User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 45504)
Message addressed from: name@host.com
Message addressed to: passwd@de.com
Message length : 212
User: name@host.com, Password: 10234
Receiving message from: ('127.0.0.1', 45506)
Message addressed from: name@host.com
Message addressed to: passwd@de.com
Message length : 212</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
<tr class='errorClass'>
<tr class='failClass'>
<td>test_shelf.test_shelf</td>
<td class="text-center">7</td>
<td class="text-center">5</td>
<td class="text-center">2</td>
<td class="text-center">1</td>
<td class="text-center">4</td>
<td class="text-center">0</td>
<td class="text-center">0</td>
<td class="text-center">
<a onclick="showClassDetail('c13', 7)">Detail</a>
</td>
</tr>
<tr id='et13.1' class='none bg-info'>
<tr id='pt13.1' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_delete_book_of_shelf</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et13.1')">ERROR</a>
</div>
<!--css div popup start-->
<div id='div_et13.1' 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_et13.1').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">et13.1: Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_shelf.py", line 205, in test_delete_book_of_shelf
self.get_book_details(books[1][7]['id'])
File "/home/matthias/Entwicklung/calibre-web-test/test/ui_helper.py", line 669, in get_book_details
if id&gt;0:
TypeError: '&gt;' not supported between instances of 'str' and 'int'</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='et13.2' class='none bg-info'>
<tr id='pt13.2' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_private_shelf</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et13.2')">ERROR</a>
</div>
<!--css div popup start-->
<div id='div_et13.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_et13.2').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">et13.2: Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_shelf.py", line 70, in test_private_shelf
details = self.get_book_details(books[1][0]['id'])
File "/home/matthias/Entwicklung/calibre-web-test/test/ui_helper.py", line 669, in get_book_details
if id&gt;0:
TypeError: '&gt;' not supported between instances of 'str' and 'int'</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='pt13.3' class='hiddenRow bg-success'>
<td>
@@ -2201,61 +2141,37 @@ TypeError: '&gt;' not supported between instances of 'str' and 'int'</pre>
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='et13.4' class='none bg-info'>
<tr id='ft13.4' class='none bg-danger'>
<td>
<div class='testcase'>test_public_shelf</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et13.4')">ERROR</a>
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft13.4')">FAIL</a>
</div>
<!--css div popup start-->
<div id='div_et13.4' class="popup_window test_output" style="display:none;">
<div id='div_ft13.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_et13.4').style.display='none'"><span
onclick="document.getElementById('div_ft13.4').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">et13.4: Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_shelf.py", line 109, in test_public_shelf
details = self.get_book_details(books[1][0]['id'])
File "/home/matthias/Entwicklung/calibre-web-test/test/ui_helper.py", line 669, in get_book_details
if id&gt;0:
TypeError: '&gt;' not supported between instances of 'str' and 'int'</pre>
<pre class="text-left">ft13.4: Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_shelf.py", line 121, in test_public_shelf
self.assertTrue(len(shelf_books[0]) == 2)
AssertionError: False is not true</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
</tr>
<tr id='et13.5' class='none bg-info'>
<tr id='pt13.5' class='hiddenRow bg-success'>
<td>
<div class='testcase'>test_rename_shelf</div>
</td>
<td colspan='6'>
<div class="text-center">
<a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_et13.5')">ERROR</a>
</div>
<!--css div popup start-->
<div id='div_et13.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_et13.5').style.display='none'"><span
aria-hidden="true">&times;</span></button>
</div>
<div class="text-left pull-left">
<pre class="text-left">et13.5: Traceback (most recent call last):
File "/home/matthias/Entwicklung/calibre-web-test/test/test_shelf.py", line 148, in test_rename_shelf
self.get_book_details(books[1][0]['id'])
File "/home/matthias/Entwicklung/calibre-web-test/test/ui_helper.py", line 669, in get_book_details
if id&gt;0:
TypeError: '&gt;' not supported between instances of 'str' and 'int'</pre>
</div>
<div class="clearfix"></div>
</div>
<!--css div popup end-->
</td>
<td colspan='6' align='center'>PASS</td>
</tr>
<tr id='ft13.6' class='none bg-danger'>
<td>
@@ -2852,16 +2768,16 @@ AssertionError: 'Not Implemented' is not None : Database change</pre>
<tr id='total_row' class="text-center bg-grey">
<td>Total</td>
<td>162</td>
<td>95</td>
<td>7</td>
<td>6</td>
<td>54</td>
<td>103</td>
<td>3</td>
<td>0</td>
<td>56</td>
<td>&nbsp;</td>
</tr>
</table>
<script>
drawCircle(95, 7, 6, 54);
drawCircle(103, 3, 0, 56);
</script>
</div>