From a700b3f19ce75c8249904a5d7d96e9e96806d840 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 17 Sep 2024 09:58:38 +0530 Subject: [PATCH] OPF2: Speedup to_book_metadata() by avoiding deepcopying large non-metadata items --- src/calibre/ebooks/metadata/opf2.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index e7c8d579b4..523e927d37 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -695,7 +695,13 @@ class OPF: # {{{ if self.package_version >= 3.0: from calibre.ebooks.metadata.opf3 import read_metadata return read_metadata(self.root) - ans = MetaInformation(self) + # avoid deepcopy of non-metadata items + manifest, spine, guide, toc = self.manifest, self.spine, self.guide, self.toc + self.manifest = self.spine = self.guide = self.toc = None + try: + ans = MetaInformation(self) + finally: + self.manifest, self.spine, self.guide, self.toc = manifest, spine, guide, toc for n, v in self._user_metadata_.items(): ans.set_user_metadata(n, v)