diff --git a/cps/db.py b/cps/db.py index fc11770c..fe940d12 100644 --- a/cps/db.py +++ b/cps/db.py @@ -756,16 +756,21 @@ class CalibreDB(): except Exception as ex: log.debug_or_exception(ex) # display authors in right order - entries = self.order_authors(entries, True) + entries = self.order_authors(entries, True, join_archive_read) return entries, randm, pagination # Orders all Authors in the list according to authors sort - def order_authors(self, entries, list_return=False): + def order_authors(self, entries, list_return=False, combined=False): for entry in entries: - sort_authors = entry.author_sort.split('&') + if combined: + sort_authors = entry.Books.author_sort.split('&') + ids = [a.id for a in entry.Books.authors] + + else: + sort_authors = entry.author_sort.split('&') + ids = [a.id for a in entry.authors] authors_ordered = list() error = False - ids = [a.id for a in entry.authors] for auth in sort_authors: results = self.session.query(Authors).filter(Authors.sort == auth.lstrip().strip()).all() # ToDo: How to handle not found authorname @@ -776,7 +781,10 @@ class CalibreDB(): if r.id in ids: authors_ordered.append(r) if not error: - entry.authors = authors_ordered + if combined: + entry.Books.authors = authors_ordered + else: + entry.authors = authors_ordered if list_return: return entries else: @@ -841,7 +849,8 @@ class CalibreDB(): )) # read search results from calibre-database and return it (function is used for feed and simple search - def get_search_results(self, term, offset=None, order=None, limit=None, config_read_column=False, *join): + def get_search_results(self, term, offset=None, order=None, limit=None, allow_show_archived=False, + config_read_column=False, *join): order = order[0] if order else [Books.sort] pagination = None result = self.search_query(term, config_read_column, *join).order_by(*order).all() diff --git a/cps/editbooks.py b/cps/editbooks.py index 7bfa35cf..9c942b52 100644 --- a/cps/editbooks.py +++ b/cps/editbooks.py @@ -50,6 +50,7 @@ from .services.worker import WorkerThread from .tasks.upload import TaskUpload from .render_template import render_title_template from .usermanagement import login_required_if_no_ano +from .kobo_sync_status import change_archived_books try: from functools import wraps @@ -1185,10 +1186,9 @@ def edit_list_book(param): ret = Response(json.dumps({'success': True, 'newValue': ' & '.join([author.replace('|',',') for author in input_authors])}), mimetype='application/json') - elif param =='is_archive': - # ToDo save - ret = Response(json.dumps({'success': True, 'newValue': vals['value']}), - mimetype='application/json') + elif param =='is_archived': + change_archived_books(book.id, vals['value']=="True") + ret = "" elif param =='read_status': # ToDo save ret = Response(json.dumps({'success': True, 'newValue': vals['value']}), @@ -1197,8 +1197,12 @@ def edit_list_book(param): new_val = dict() new_val[param] = vals['value'] edit_single_cc_data(book.id, book, param[14:], new_val) - ret = Response(json.dumps({'success': True, 'newValue': vals['value']}), - mimetype='application/json') + # ToDo: Very hacky find better solution + if vals['value'] in ["True", "False"]: + ret = "" + else: + ret = Response(json.dumps({'success': True, 'newValue': vals['value']}), + mimetype='application/json') else: return _("Parameter not found"), 400 book.last_modified = datetime.utcnow() diff --git a/cps/helper.py b/cps/helper.py index c30479a2..73731908 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -52,7 +52,7 @@ except ImportError: from . import calibre_db from .tasks.convert import TaskConvert -from . import logger, config, get_locale, db, ub +from . import logger, config, get_locale, db, ub, kobo_sync_status from . import gdriveutils as gd from .constants import STATIC_DIR as _STATIC_DIR from .subproc_wrapper import process_wait @@ -431,7 +431,8 @@ def update_dir_structure_file(book_id, calibrepath, first_author, orignal_filepa for file in file_list: shutil.move(os.path.normcase(os.path.join(dir_name, file)), os.path.normcase(os.path.join(new_path + dir_name[len(path):], file))) - # os.unlink(os.path.normcase(os.path.join(dir_name, file))) + # change location in database to new author/title path + localbook.path = os.path.join(new_authordir, new_titledir).replace('\\','/') except (OSError) as ex: log.error("Rename title from: %s to %s: %s", path, new_path, ex) log.debug(ex, exc_info=True) @@ -441,12 +442,11 @@ def update_dir_structure_file(book_id, calibrepath, first_author, orignal_filepa # Rename all files from old names to new names try: clean_author_database(renamed_author, calibrepath) - if first_author not in renamed_author: clean_author_database([first_author], calibrepath, localbook) if not renamed_author and not orignal_filepath and len(os.listdir(os.path.dirname(path))) == 0: shutil.rmtree(os.path.dirname(path)) - except (OSError) as ex: + except (OSError, FileNotFoundError) as ex: log.error("Error in rename file in path %s", ex) log.debug(ex, exc_info=True) return _("Error in rename file in path: %(error)s", error=str(ex)) diff --git a/cps/kobo.py b/cps/kobo.py index 482eb13a..b0917a47 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -949,7 +949,8 @@ def HandleBookDeletionRequest(book_uuid): return redirect_or_proxy_request() book_id = book.id - archived_book = ( + is_archived = kobo_sync_status.change_archived_books(book_id, True) + '''archived_book = ( ub.session.query(ub.ArchivedBook) .filter(ub.ArchivedBook.book_id == book_id) .first() @@ -960,8 +961,8 @@ def HandleBookDeletionRequest(book_uuid): archived_book.last_modified = datetime.datetime.utcnow() ub.session.merge(archived_book) - ub.session_commit() - if archived_book.is_archived: + ub.session_commit()''' + if is_archived: kobo_sync_status.remove_synced_book(book_id) return "", 204 diff --git a/cps/kobo_sync_status.py b/cps/kobo_sync_status.py index b88cb6ac..eee47d89 100644 --- a/cps/kobo_sync_status.py +++ b/cps/kobo_sync_status.py @@ -20,7 +20,7 @@ from flask_login import current_user from . import ub import datetime -from sqlalchemy.sql.expression import or_ +from sqlalchemy.sql.expression import or_, and_ # Add the current book id to kobo_synced_books table for current user, if entry is already present, # do nothing (safety precaution) @@ -42,18 +42,18 @@ def remove_synced_book(book_id): ub.session_commit() -def add_archived_books(book_id): - archived_book = (ub.session.query(ub.ArchivedBook) - .filter(ub.ArchivedBook.book_id == book_id) - .filter(ub.ArchivedBook.user_id == current_user.id) - .first()) +def change_archived_books(book_id, state=None, message=None): + archived_book = ub.session.query(ub.ArchivedBook).filter(and_(ub.ArchivedBook.user_id == int(current_user.id), + ub.ArchivedBook.book_id == book_id)).first() if not archived_book: archived_book = ub.ArchivedBook(user_id=current_user.id, book_id=book_id) - archived_book.is_archived = True + + archived_book.is_archived = state if state else not archived_book.is_archived archived_book.last_modified = datetime.datetime.utcnow() ub.session.merge(archived_book) - ub.session_commit() + ub.session_commit(message) + return archived_book.is_archived # select all books which are synced by the current user and do not belong to a synced shelf and them to archive @@ -65,7 +65,7 @@ def update_on_sync_shelfs(user_id): .filter(or_(ub.Shelf.kobo_sync == 0, ub.Shelf.kobo_sync == None)) .filter(ub.KoboSyncedBooks.user_id == user_id).all()) for b in books_to_archive: - add_archived_books(b.book_id) + change_archived_books(b.book_id, True) ub.session.query(ub.KoboSyncedBooks) \ .filter(ub.KoboSyncedBooks.book_id == b.book_id) \ .filter(ub.KoboSyncedBooks.user_id == user_id).delete() diff --git a/cps/opds.py b/cps/opds.py index f249218c..0b0a8923 100644 --- a/cps/opds.py +++ b/cps/opds.py @@ -528,8 +528,8 @@ def get_metadata_calibre_companion(uuid, library): def feed_search(term): if term: entries, __, ___ = calibre_db.get_search_results(term, config_read_column=config.config_read_column) - entriescount = len(entries) if len(entries) > 0 else 1 - pagination = Pagination(1, entriescount, entriescount) + entries_count = len(entries) if len(entries) > 0 else 1 + pagination = Pagination(1, entries_count, entries_count) return render_xml_template('feed.xml', searchterm=term, entries=entries, pagination=pagination) else: return render_xml_template('feed.xml', searchterm="") diff --git a/cps/static/js/table.js b/cps/static/js/table.js index fbb4df3e..48c7631a 100644 --- a/cps/static/js/table.js +++ b/cps/static/js/table.js @@ -810,10 +810,11 @@ function checkboxChange(checkbox, userId, field, field_index) { } function BookCheckboxChange(checkbox, userId, field) { + var value = checkbox.checked ? "True" : "False"; $.ajax({ method: "post", url: getPath() + "/ajax/editbooks/" + field, - data: {"pk": userId, "value": checkbox.checked}, + data: {"pk": userId, "value": value}, error: function(data) { handleListServerResponse([{type:"danger", message:data.responseText}]) }, diff --git a/cps/templates/book_table.html b/cps/templates/book_table.html index 6d6a0e80..92c8a2f5 100644 --- a/cps/templates/book_table.html +++ b/cps/templates/book_table.html @@ -71,8 +71,8 @@ {{ text_table_row('publishers', _('Enter Publishers'),_('Publishers'), false, true) }}
{{entry.title|shortentitle}}
+ +{{entry.Books.title|shortentitle}}
- {% for author in entry.authors %} + {% for author in entry.Books.authors %} {% if loop.index > g.config_authors_max and g.config_authors_max != 0 %} {% if not loop.first %} & @@ -71,24 +71,24 @@ {{author.name.replace('|',',')|shortentitle(30)}} {% endif %} {% endfor %} - {% for format in entry.data %} + {% for format in entry.Books.data %} {% if format.format|lower in g.constants.EXTENSIONS_AUDIO %} {% endif %} {% endfor %}
- {% if entry.series.__len__() > 0 %} + {% if entry.Books.series.__len__() > 0 %}- - {{entry.series[0].name}} + + {{entry.Books.series[0].name}} - ({{entry.series_index|formatseriesindex}}) + ({{entry.Books.series_index|formatseriesindex}})
{% endif %} - {% if entry.ratings.__len__() > 0 %} + {% if entry.Books.ratings.__len__() > 0 %}Start Time: 2021-12-02 06:37:36
+Start Time: 2021-12-04 22:17:44
Stop Time: 2021-12-02 10:15:15
+Stop Time: 2021-12-05 01:46:42
Duration: 2h 57 min
+Duration: 2h 48 min
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_ebook_convert.py", line 506, in test_convert_xss + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_ebook_convert.py", line 538, in test_user_convert_xss + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_additional_books.py", line 136, in test_change_upload_formats + self.assertTrue(self.check_element_on_page((By.ID, 'edit_cancel'))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_additional_books.py", line 642, in test_delete_role + self.assertTrue(self.delete_book_format(12, 'FB2')) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_additional_books.py", line 654, in test_title_sort + self.verify_order("search", order=order) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 1324, in verify_order + self.check_element_on_page((By.ID, key)).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_additional_books.py", line 510, in test_upload_edit_role + self.fill_basic_config({'config_uploading': 1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_additional_books.py", line 55, in test_upload_metadata_cbr + self.fill_basic_config({'config_uploading': 1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_additional_books.py", line 92, in test_upload_metadata_cbt + self.fill_basic_config({'config_uploading': 1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_additional_books.py", line 240, in test_writeonly_path + self.fill_basic_config({'config_rarfile_location': unrar_path()}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_additional_books.py", line 718, in test_xss_custom_comment_edit + self.assertEqual(0, len(values['cust_columns'])) +KeyError: 'cust_columns'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_additional_books.py", line 41, in tearDownClass + cls.stop_calibre_web() + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 444, in stop_calibre_web + cls.driver.find_element_by_id('admin_stop').click() + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 360, in find_element_by_id + return self.find_element(by=By.ID, value=id_) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element + return self.execute(Command.FIND_ELEMENT, { + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute + self.error_handler.check_response(response) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response + raise exception_class(message, screen, stacktrace) +selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="admin_stop"]+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 443, in test_edit_comments + self.assertEqual(len(self.adv_search({u'comment': u'mirä 人'})), 1) +AssertionError: 0 != 1+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 452, in test_edit_custom_bool + self.assertEqual(len(self.adv_search({u'custom_column_3': u'Yes'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 543, in test_edit_custom_categories + self.assertEqual(len(self.adv_search({u'custom_column_6': u'人 Ü'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 526, in test_edit_custom_comment + self.assertEqual(len(self.adv_search({u'custom_column_5': u'人1 Ä'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 592, in test_edit_custom_date + self.assertEqual(len(self.adv_search({u'custom_column_2_start': u'16/7/2015'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 560, in test_edit_custom_float + self.assertEqual(len(self.adv_search({u'custom_column_8': u'-2.5'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 576, in test_edit_custom_int + self.assertEqual(len(self.adv_search({u'custom_column_4': u'0'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 467, in test_edit_custom_rating + self.assertEqual(len(self.adv_search({u'custom_column_1': u'3'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 493, in test_edit_custom_single_select + self.assertEqual(len(self.adv_search({u'custom_column_9': u'人物'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 509, in test_edit_custom_text + self.assertEqual(len(self.adv_search({u'custom_column_10': u'人 Ä'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 73, in test_edit_title + self.assertEqual(u'O0ü 执', values['title']) +KeyError: 'title'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 1022, in test_upload_book_cbr + self.check_element_on_page((By.ID, 'edit_cancel')).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 987, in test_upload_book_cbt + self.fill_basic_config({'config_uploading':1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 961, in test_upload_book_cbz + self.fill_basic_config({'config_uploading':1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 922, in test_upload_book_epub + self.fill_basic_config({'config_uploading':1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 844, in test_upload_book_fb2 + self.fill_basic_config({'config_uploading':1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 870, in test_upload_book_lit + self.fill_basic_config({'config_uploading':1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 896, in test_upload_book_mobi + self.fill_basic_config({'config_uploading':1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 818, in test_upload_book_pdf + self.fill_basic_config({'config_uploading':1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books.py", line 769, in test_upload_cover_hdd + self.fill_basic_config({'config_uploading': 1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_list.py", line 73, in test_bookslist_edit_title + bl = self.get_books_list(-1) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 1827, in get_books_list + element_text = "+" if "glyphicon-plus" in click_element.find_elements_by_xpath("./span")[0].get_attribute('class') else "" +IndexError: list index out of range+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_list.py", line 287, in test_list_visibility + self.assertEqual(17, len(bl['column_elements'])) +AssertionError: 17 != 20+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_list.py", line 326, in test_restricted_rights + self.assertFalse('Delete' in bl['table'][0]) +AssertionError: True is not false+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_books_list.py", line 63, in test_search_books_list + self.assertEqual(9, len(bl['table'])) +AssertionError: 9 != 10+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 652, in test_edit_custom_bool + self.assertEqual(len(self.adv_search({u'custom_column_3': u'Yes'})), 1) +AssertionError: 0 != 1+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 714, in test_edit_custom_categories + self.assertEqual(len(self.adv_search({u'custom_column_6': u'人 Ü'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 732, in test_edit_custom_float + self.assertEqual(len(self.adv_search({u'custom_column_8': u'-2.5'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 748, in test_edit_custom_int + self.assertEqual(len(self.adv_search({u'custom_column_4': u'0'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 661, in test_edit_custom_rating + self.assertEqual(len(self.adv_search({u'custom_column_1': u'3'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 681, in test_edit_custom_single_select + self.assertEqual(len(self.adv_search({u'custom_column_9': u'人物'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 697, in test_edit_custom_text + self.assertEqual(len(self.adv_search({u'custom_column_10': u'人 Ä'})), 0) +TypeError: object of type 'bool' has no len()+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 850, in test_upload_book_epub + self.check_element_on_page((By.ID, 'edit_cancel')).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 815, in test_upload_book_lit + self.fill_basic_config({'config_uploading':1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 763, in test_upload_cover_hdd + self.fill_basic_config({'config_uploading': 1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_edit_ebooks_gdrive.py", line 901, in test_watch_metadata + self.assertTrue(button) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_email_ssl.py", line 147, in test_email_limit + self.check_element_on_page((By.ID, 'edit_cancel')).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_email_ssl.py", line 217, in test_filepicker_two_file + accordions[0].click() +IndexError: list index out of range+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 584, in test_book_download + data = self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 111, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}+
Traceback (most recent call last): - File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 619, in test_kobo_sync_selected_shelfs - self.assertIn("NewTag", data3[2]) -IndexError: list index out of range+ File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 603, in test_kobo_sync_selected_shelfs + data = self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 111, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 653, in test_kobo_upload_book + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 111, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}+
Traceback (most recent call last): - File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 481, in test_shelves_add_remove_books - self.assertEqual(1, len(books)) -AssertionError: 1 != 0+ File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 448, in test_shelves_add_remove_books + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 111, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}
Traceback (most recent call last): - File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 286, in test_sync_changed_book - self.assertEqual(1, len(data)) -AssertionError: 1 != 2+ File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 278, in test_sync_changed_book + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 111, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 515, in test_sync_reading_state + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 111, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}+
Traceback (most recent call last): - File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 304, in test_sync_shelf - self.assertEqual(1, len(data)) -AssertionError: 1 != 0+ File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 297, in test_sync_shelf + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 111, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 243, in test_sync_unchanged + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 111, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}+
Traceback (most recent call last): - File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 270, in test_sync_upload - self.assertEqual(1, len(data)) -AssertionError: 1 != 0+ File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 257, in test_sync_upload + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync.py", line 111, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync_big.py", line 260, in test_kobo_sync_selected_shelfs + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync_big.py", line 103, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync_big.py", line 164, in test_sync_changed_book + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync_big.py", line 103, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync_big.py", line 237, in test_sync_reading_state + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync_big.py", line 103, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync_big.py", line 193, in test_sync_shelf + self.inital_sync() + File "/home/ozzie/Development/calibre-web-test/test/test_kobo_sync_big.py", line 103, in inital_sync + self.assertEqual(r.json(), {}) +AssertionError: {'Benefits': {}} != {} +- {'Benefits': {}} ++ {}+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_opds_feed.py", line 574, in test_opds_search + self.assertEqual(200, r.status_code) +AssertionError: 200 != 500+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_pdf_metadata.py", line 129, in test_upload_invalid_pdf + self.check_uploaded_pdf({'author': "Mani Mücks", + File "/home/ozzie/Development/calibre-web-test/test/test_pdf_metadata.py", line 59, in check_uploaded_pdf + self.check_element_on_page((By.ID, 'edit_cancel')).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_reader.py", line 230, in test_sound_listener + self.sound_test('music.flac', 'Unknown - music', '0:02') + File "/home/ozzie/Development/calibre-web-test/test/test_reader.py", line 191, in sound_test + self.check_element_on_page((By.ID, 'edit_cancel')).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 466, in test_adv_search_shelf + self.assertEqual(len(self.adv_search({u'include_shelf': u'Search', 'book_title': 'book'})), 2) +AssertionError: 0 != 2+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 252, in test_arrange_shelf + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 146, in test_create_public_shelf + self.create_user('invalid', {'edit_shelf_role': 0, 'password': '1234', 'email': 'bac@b.com'}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 976, in create_user + return cls.change_user(config) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 1030, in change_user + ele = cls.driver.find_element_by_id(checkbox) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 360, in find_element_by_id + return self.find_element(by=By.ID, value=id_) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element + return self.execute(Command.FIND_ELEMENT, { + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute + self.error_handler.check_response(response) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response + raise exception_class(message, screen, stacktrace) +selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="edit_shelf_role"]+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 237, in test_delete_book_of_shelf + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 57, in test_private_shelf + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 295, in test_public_private_shelf + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 95, in test_public_shelf + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 168, in test_rename_shelf + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 334, in test_shelf_action_non_shelf_edit_role + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 391, in test_shelf_anonymous + self.fill_basic_config({'config_anonbrowse': 1}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 356, in fill_basic_config + cls._fill_basic_config(elements) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 266, in _fill_basic_config + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "config_port"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 328, in test_shelf_long_name + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 479, in test_xss_shelf + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_shelf.py", line 44, in tearDown + self.login('admin','admin123') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 84, in login + WebDriverWait(cls.driver, 5).until(EC.presence_of_element_located((By.ID, "username"))) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until + raise TimeoutException(message, screen, stacktrace) +selenium.common.exceptions.TimeoutException: Message:+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_upload_epubs.py", line 82, in test_upload_epub_duplicate + self.check_element_on_page((By.ID, 'edit_cancel')).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): - File "/home/ozzie/Development/calibre-web-test/test/test_upload_epubs.py", line 128, in test_upload_epub_lang - self.assertEqual(len(self.adv_search({u'include_language': u'Tedesco'})), 1) -AssertionError: 0 != 1+ File "/home/ozzie/Development/calibre-web-test/test/test_upload_epubs.py", line 110, in test_upload_epub_lang + self.change_visibility_me({'locale': "Italiano"}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 887, in change_visibility_me + select = Select(cls.driver.find_element_by_id(key)) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 360, in find_element_by_id + return self.find_element(by=By.ID, value=id_) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element + return self.execute(Command.FIND_ELEMENT, { + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute + self.error_handler.check_response(response) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response + raise exception_class(message, screen, stacktrace) +selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [id="locale"]
ImportError: Failed to import test module: test_visiblilitys -Traceback (most recent call last): - File "/usr/lib/python3.8/unittest/loader.py", line 436, in _find_test_path - module = self._get_module_from_name(name) - File "/usr/lib/python3.8/unittest/loader.py", line 377, in _get_module_from_name - __import__(name) - File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 764 - books = self.get_shelf_books_displayed()test_upload_book_cbr - ^ -SyntaxError: invalid syntax+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 755, in test_allow_columns + self.assertEqual(len(self.adv_search({'book_title': 'Buchtitel'})), 1) +AssertionError: 0 != 1+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 586, in test_allow_tags + self.assertTrue(self.check_element_on_page((By.ID, "flash_success"))) +AssertionError: False is not true+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 943, in test_archive_books + self.assertIsNotNone(details['archived']) +AssertionError: unexpectedly None+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 911, in test_authors_max_settings + self.assertEqual(len(list_element[1][10]['author']), 4) +IndexError: list index out of range+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 852, in test_hide_custom_column + self.check_element_on_page((By.ID, "edit_book")).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 786, in test_link_column_to_read_status + self.check_element_on_page((By.ID, "edit_book")).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 89, in test_random_books_available + list_element[0].click() +IndexError: list index out of range+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 669, in test_restrict_columns + self.assertEqual(len(restricts), 0) +AssertionError: 1 != 0+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 514, in test_restrict_tags + self.assertEqual(len(elements['include_tags']), 1) +TypeError: 'bool' object is not subscriptable+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 991, in test_save_views_recent + self.check_element_on_page((By.ID, "desc")).click() +AttributeError: 'bool' object has no attribute 'click'+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 474, in test_search_order + self.search('book') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 1991, in search + field.send_keys(term) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 477, in send_keys + self._execute(Command.SEND_KEYS_TO_ELEMENT, + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute + return self._parent.execute(command, params) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute + self.error_handler.check_response(response) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response + raise exception_class(message, screen, stacktrace) +selenium.common.exceptions.ElementNotInteractableException: Message: Element <input id="query" class="form-control" name="query" type="text"> is not reachable by keyboard+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 469, in test_search_string + self.search('Hallo') + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 1991, in search + field.send_keys(term) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 477, in send_keys + self._execute(Command.SEND_KEYS_TO_ELEMENT, + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute + return self._parent.execute(command, params) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute + self.error_handler.check_response(response) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response + raise exception_class(message, screen, stacktrace) +selenium.common.exceptions.ElementNotInteractableException: Message: Element <input id="query" class="form-control" name="query" type="text"> is not reachable by keyboard+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 101, in test_user_email_available + self.driver.find_element_by_id("top_user").click() + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click + self._execute(Command.CLICK_ELEMENT) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute + return self._parent.execute(command, params) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute + self.error_handler.check_response(response) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response + raise exception_class(message, screen, stacktrace) +selenium.common.exceptions.ElementClickInterceptedException: Message: Element <a id="top_user" href="/me"> is not clickable at point (2414,25) because another element <div id="restrictModal" class="modal fade in"> obscures it+
Traceback (most recent call last): + File "/home/ozzie/Development/calibre-web-test/test/test_visiblilitys.py", line 118, in test_user_visibility_sidebar + self.change_user({'show_32': 0}) + File "/home/ozzie/Development/calibre-web-test/test/helper_ui.py", line 1032, in change_user + ele.click() + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click + self._execute(Command.CLICK_ELEMENT) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute + return self._parent.execute(command, params) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute + self.error_handler.check_response(response) + File "/home/ozzie/Development/calibre-web-test/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response + raise exception_class(message, screen, stacktrace) +selenium.common.exceptions.ElementClickInterceptedException: Message: Element <input id="show_32" name="show_32" type="checkbox"> is not clickable at point (486,766) because another element <div id="restrictModal" class="modal fade in"> obscures it