diff --git a/src/calibre/ebooks/metadata/book/base.py b/src/calibre/ebooks/metadata/book/base.py index a64be2654e..91ad613af8 100644 --- a/src/calibre/ebooks/metadata/book/base.py +++ b/src/calibre/ebooks/metadata/book/base.py @@ -753,8 +753,8 @@ class Metadata: res = human_readable(res) return (name, str(res), orig_res, fmeta) - if self.get(key, None): - return (key, str(self.get(key)), self.get(key), None) + if kv := self.get(key, None): + return (key, str(kv), kv, None) return (None, None, None, None) diff --git a/src/calibre/ebooks/metadata/book/render.py b/src/calibre/ebooks/metadata/book/render.py index 11c5ba445d..f9b2b70cb0 100644 --- a/src/calibre/ebooks/metadata/book/render.py +++ b/src/calibre/ebooks/metadata/book/render.py @@ -69,17 +69,21 @@ def search_action_with_data(search_term, value, book_id, field=None, **k): def cc_search_action_with_data(search_term, value, book_id, fm, mi, field=None, **k): if mi is not None and fm is not None: - template = fm.get('display', {}).get('web_search_template') - if template: - formatter = SafeFormat() - mi.set('item_value', value) - u = formatter.safe_format(template, mi, "BOOK DETAILS WEB LINK", mi) - if u: - v = prepare_string_for_xml(_('Click to browse to {0}').format(u), attribute=True) - return action('cc_url', url=u),v + if template := fm.get('display', {}).get('web_search_template'): + try: + formatter = SafeFormat() + mi.set('item_value', value) + u = formatter.safe_format(template, mi, 'BOOK DETAILS WEB LINK', mi) + if u: + v = prepare_string_for_xml(_('Click to browse to {}').format(u), attribute=True) + return action('cc_url', url=u), v + except Exception: + import traceback + traceback.print_exc() t = _('Click to see books with {0}: {1}').format(mi.get('name', search_term), prepare_string_for_xml(value)) return search_action_with_data(search_term, value, book_id, **k), t + def notes_action(**keys): return 'notes:' + as_hex_unicode(json_dumps(keys)) @@ -225,16 +229,16 @@ def mi_to_html( ans.append((field, row % (name, comments_to_html(val)))) else: if not metadata['is_multiple']: - u,v = cc_search_action_with_data(field, val, book_id, metadata, mi, field) - val = '{}'.format(u, v, p(val)) + u, v = cc_search_action_with_data(field, val, book_id, metadata, mi, field) + val = f'{p(val)}' else: all_vals = [v.strip() for v in val.split(metadata['is_multiple']['cache_to_list']) if v.strip()] if show_links: links = [] for x in all_vals: - u,v = cc_search_action_with_data(field, x, book_id, metadata, mi, field) - links.append('{}'.format(u, v, p(x))) + u, v = cc_search_action_with_data(field, x, book_id, metadata, mi, field) + links.append(f'{p(x)}') else: links = all_vals val = value_list(metadata['is_multiple']['list_to_ui'], links) @@ -364,7 +368,7 @@ def mi_to_html( st = field series = getattr(mi, field) if metadata.get('display', {}).get('web_search_template'): - u,v = cc_search_action_with_data(st, series, book_id, metadata, mi, field) + u, v = cc_search_action_with_data(st, series, book_id, metadata, mi, field) val = _('%(sidx)s of ' '%(series)s') % dict( sidx=fmt_sidx(sidx, use_roman=use_roman_numbers), cls='series_name', @@ -405,8 +409,8 @@ def mi_to_html( if show_links: for x in all_vals: if metadata['is_custom']: - u,v = cc_search_action_with_data(field, x, book_id, metadata, mi, field) - v = '{}'.format(u, v, p(x)) + u, v = cc_search_action_with_data(field, x, book_id, metadata, mi, field) + v = f'{p(x)}' else: v = '{}'.format( search_action_with_data(st, x, book_id, field), @@ -424,8 +428,8 @@ def mi_to_html( st = field if show_links: if metadata['is_custom']: - u,v = cc_search_action_with_data(st, x, book_id, metadata, mi, field) - v = '{}'.format(u, v, p(x)) + u, v = cc_search_action_with_data(st, x, book_id, metadata, mi, field) + v = f'{p(x)}' else: v = '{}'.format( search_action_with_data(st, x, book_id, field), @@ -435,8 +439,8 @@ def mi_to_html( v = val val = v + add_other_links(field, val) elif metadata['datatype'] == 'enumeration': - u,v = cc_search_action_with_data(field, x, book_id, metadata, mi, field) - val = '{}'.format(u, v, p(x)) + add_other_links(field, val) + u, v = cc_search_action_with_data(field, x, book_id, metadata, mi, field) + val = f'{p(x)}' + add_other_links(field, val) elif metadata['datatype'] == 'bool': val = '{}'.format( search_action_with_data(field, val, book_id, None), a( diff --git a/src/calibre/gui2/preferences/look_feel_tabs/__init__.py b/src/calibre/gui2/preferences/look_feel_tabs/__init__.py index a3693c3bad..eb8dcc6c6c 100644 --- a/src/calibre/gui2/preferences/look_feel_tabs/__init__.py +++ b/src/calibre/gui2/preferences/look_feel_tabs/__init__.py @@ -7,7 +7,21 @@ __docformat__ = 'restructuredtext en' import json -from qt.core import QAbstractListModel, QComboBox, QDialog, QFormLayout, QHBoxLayout, QIcon, QItemSelectionModel, QLineEdit, Qt, QToolButton, QVBoxLayout, QWidget, pyqtSignal +from qt.core import ( + QAbstractListModel, + QComboBox, + QDialog, + QFormLayout, + QHBoxLayout, + QIcon, + QItemSelectionModel, + QLineEdit, + Qt, + QToolButton, + QVBoxLayout, + QWidget, + pyqtSignal, +) from calibre.ebooks.metadata.book.render import DEFAULT_AUTHOR_LINK from calibre.ebooks.metadata.search_internet import qquote