From b5094f2f5de14e12ffb7d957f8078666c6c2fc86 Mon Sep 17 00:00:00 2001 From: un-pogaz <46523284+un-pogaz@users.noreply.github.com> Date: Sat, 8 Feb 2025 10:33:00 +0100 Subject: [PATCH 1/3] fix UnboundLocalError cannot access local variable 'x' where it is not associated with a value --- src/calibre/ebooks/metadata/book/render.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/calibre/ebooks/metadata/book/render.py b/src/calibre/ebooks/metadata/book/render.py index 4f41f3d071..33eef885bc 100644 --- a/src/calibre/ebooks/metadata/book/render.py +++ b/src/calibre/ebooks/metadata/book/render.py @@ -442,19 +442,19 @@ 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 = f'{p(x)}' + u, v = cc_search_action_with_data(st, unescaped_val, book_id, metadata, mi, field) + v = f'{p(unescaped_val)}' else: v = '{}'.format( - search_action_with_data(st, x, book_id, field), + search_action_with_data(st, unescaped_val, book_id, field), _('Click to see books with {0}: {1}').format( - metadata['name'] or field, a(x)), p(x)) + metadata['name'] or field, a(unescaped_val)), p(unescaped_val)) else: 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 = f'{p(x)}' + add_other_links(field, val) + u, v = cc_search_action_with_data(field, unescaped_val, book_id, metadata, mi, field) + val = f'{p(unescaped_val)}' + add_other_links(field, val) elif metadata['datatype'] == 'bool': val = '{}'.format( search_action_with_data(field, val, book_id, None), a( From b84daddb742ad16ae640237c3a8fde97d0c901ab Mon Sep 17 00:00:00 2001 From: un-pogaz <46523284+un-pogaz@users.noreply.github.com> Date: Sat, 8 Feb 2025 10:35:14 +0100 Subject: [PATCH 2/3] never reached code --- src/calibre/ebooks/metadata/book/render.py | 42 ++++++++++------------ 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/src/calibre/ebooks/metadata/book/render.py b/src/calibre/ebooks/metadata/book/render.py index 33eef885bc..9f8a2b4147 100644 --- a/src/calibre/ebooks/metadata/book/render.py +++ b/src/calibre/ebooks/metadata/book/render.py @@ -420,37 +420,31 @@ def mi_to_html( if not metadata.get('display', {}).get('is_names', False): all_vals = sorted(all_vals, key=sort_key) links = [] - 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 = f'{p(x)}' - else: - v = '{}'.format( - search_action_with_data(st, x, book_id, field), - _('Click to see books with {0}: {1}').format( - metadata['name'] or field, a(x)), p(x)) - v += add_other_links(field, x) - links.append(v) - else: - links = all_vals + for x in all_vals: + if metadata['is_custom']: + 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), + _('Click to see books with {0}: {1}').format( + metadata['name'] or field, a(x)), p(x)) + v += add_other_links(field, x) + links.append(v) val = value_list(metadata['is_multiple']['list_to_ui'], links) else: try: st = metadata['search_terms'][0] except Exception: st = field - if show_links: - if metadata['is_custom']: - u, v = cc_search_action_with_data(st, unescaped_val, book_id, metadata, mi, field) - v = f'{p(unescaped_val)}' - else: - v = '{}'.format( - search_action_with_data(st, unescaped_val, book_id, field), - _('Click to see books with {0}: {1}').format( - metadata['name'] or field, a(unescaped_val)), p(unescaped_val)) + if metadata['is_custom']: + u, v = cc_search_action_with_data(st, unescaped_val, book_id, metadata, mi, field) + v = f'{p(unescaped_val)}' else: - v = val + v = '{}'.format( + search_action_with_data(st, unescaped_val, book_id, field), + _('Click to see books with {0}: {1}').format( + metadata['name'] or field, a(unescaped_val)), p(unescaped_val)) val = v + add_other_links(field, val) elif metadata['datatype'] == 'enumeration': u, v = cc_search_action_with_data(field, unescaped_val, book_id, metadata, mi, field) From 5ff898af7b72ba74cfb9c6fae96c6c8deea08182 Mon Sep 17 00:00:00 2001 From: un-pogaz <46523284+un-pogaz@users.noreply.github.com> Date: Sat, 8 Feb 2025 10:41:22 +0100 Subject: [PATCH 3/3] DRY also fix regresion of displaying search terms --- src/calibre/ebooks/metadata/book/render.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/calibre/ebooks/metadata/book/render.py b/src/calibre/ebooks/metadata/book/render.py index 9f8a2b4147..55292ba0c8 100644 --- a/src/calibre/ebooks/metadata/book/render.py +++ b/src/calibre/ebooks/metadata/book/render.py @@ -411,18 +411,18 @@ def mi_to_html( _('Click to see books with {0}: {1} (derived from {2})').format( metadata['name'] or field, aval, val)), val) elif metadata['datatype'] == 'text': + try: + st = metadata['search_terms'][0] + except Exception: + st = field if metadata['is_multiple']: - try: - st = metadata['search_terms'][0] - except Exception: - st = field all_vals = mi.get(field) if not metadata.get('display', {}).get('is_names', False): all_vals = sorted(all_vals, key=sort_key) links = [] for x in all_vals: if metadata['is_custom']: - u, v = cc_search_action_with_data(field, x, book_id, metadata, mi, field) + u, v = cc_search_action_with_data(st, x, book_id, metadata, mi, field) v = f'{p(x)}' else: v = '{}'.format( @@ -433,10 +433,6 @@ def mi_to_html( links.append(v) val = value_list(metadata['is_multiple']['list_to_ui'], links) else: - try: - st = metadata['search_terms'][0] - except Exception: - st = field if metadata['is_custom']: u, v = cc_search_action_with_data(st, unescaped_val, book_id, metadata, mi, field) v = f'{p(unescaped_val)}' @@ -447,7 +443,11 @@ def mi_to_html( metadata['name'] or field, a(unescaped_val)), p(unescaped_val)) val = v + add_other_links(field, val) elif metadata['datatype'] == 'enumeration': - u, v = cc_search_action_with_data(field, unescaped_val, book_id, metadata, mi, field) + try: + st = metadata['search_terms'][0] + except Exception: + st = field + u, v = cc_search_action_with_data(st, unescaped_val, book_id, metadata, mi, field) val = f'{p(unescaped_val)}' + add_other_links(field, val) elif metadata['datatype'] == 'bool': val = '{}'.format(