From e1383f51af525cadeaafff86b571262e4513a4b3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 4 Mar 2025 07:40:12 +0530 Subject: [PATCH] Dont import lxml at top level of module --- src/calibre/devices/kobo/driver.py | 2 +- src/calibre/ebooks/metadata/sources/amazon.py | 2 +- src/calibre/utils/formatter_functions.py | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/calibre/devices/kobo/driver.py b/src/calibre/devices/kobo/driver.py index 39524738b3..bb355adc4c 100644 --- a/src/calibre/devices/kobo/driver.py +++ b/src/calibre/devices/kobo/driver.py @@ -30,7 +30,6 @@ from calibre.devices.usbms.driver import USBMS from calibre.ebooks import DRMError from calibre.ebooks.metadata import authors_to_string from calibre.ebooks.metadata.book.base import Metadata -from calibre.ebooks.metadata.utils import normalize_languages from calibre.prints import debug_print from calibre.ptempfile import PersistentTemporaryFile, TemporaryDirectory, better_mktemp from calibre.utils.config_base import prefs @@ -3385,6 +3384,7 @@ class KOBOTOUCH(KOBO): debug_print('KoboTouch:set_series - end') def set_core_metadata(self, connection, book, series_only=False): + from calibre.ebooks.metadata.utils import normalize_languages # debug_print('KoboTouch:set_core_metadata book="%s"' % book.title) show_debug = self.is_debugging_title(book.title) if show_debug: diff --git a/src/calibre/ebooks/metadata/sources/amazon.py b/src/calibre/ebooks/metadata/sources/amazon.py index 4a623d00dc..443382d821 100644 --- a/src/calibre/ebooks/metadata/sources/amazon.py +++ b/src/calibre/ebooks/metadata/sources/amazon.py @@ -27,7 +27,6 @@ from calibre import as_unicode, browser, random_user_agent, xml_replace_entities from calibre.ebooks.metadata import check_isbn from calibre.ebooks.metadata.book.base import Metadata from calibre.ebooks.metadata.sources.base import Option, Source, fixauthors, fixcase -from calibre.ebooks.oeb.base import urlquote from calibre.utils.icu import lower as icu_lower from calibre.utils.localization import canonicalize_lang from calibre.utils.random_ua import accept_header_for_ua @@ -51,6 +50,7 @@ def sort_matches_preferring_kindle_editions(matches): def iri_quote_plus(url): + from calibre.ebooks.oeb.base import urlquote ans = urlquote(url) if isinstance(ans, bytes): ans = ans.decode('utf-8') diff --git a/src/calibre/utils/formatter_functions.py b/src/calibre/utils/formatter_functions.py index 499ee1bc65..1c35f7d3d7 100644 --- a/src/calibre/utils/formatter_functions.py +++ b/src/calibre/utils/formatter_functions.py @@ -22,12 +22,9 @@ from enum import Enum, auto from functools import partial from math import ceil, floor, modf, trunc -from lxml import html - from calibre import human_readable, prepare_string_for_xml, prints from calibre.constants import DEBUG from calibre.db.constants import DATA_DIR_NAME, DATA_FILE_PATTERN -from calibre.db.notes.exim import expand_note_resources, parse_html from calibre.ebooks.metadata import title_sort from calibre.ebooks.metadata.book.base import field_metadata from calibre.ebooks.metadata.search_internet import qquote @@ -3095,6 +3092,9 @@ This function works only in the GUI and the content server. if plain_text == '1': note = note['searchable_text'].partition('\n')[2] else: + from lxml import html + + from calibre.db.notes.exim import expand_note_resources, parse_html # Return the full HTML of the note, including all images # as data: URLs. Reason: non-exported note html contains # "calres://" URLs for images. These images won't render