diff --git a/book_maker/loader/epub_loader.py b/book_maker/loader/epub_loader.py index fc7fb53..c4b9a1c 100644 --- a/book_maker/loader/epub_loader.py +++ b/book_maker/loader/epub_loader.py @@ -52,20 +52,39 @@ class EPUBBookLoader(BaseBookLoader): self.accumulated_num = 1 self.helper = EPUBBookLoaderHelper(self.translate_model, self.accumulated_num) + # monkey pathch for # 173 + def _write_items_patch(obj): + for item in obj.book.get_items(): + if isinstance(item, epub.EpubNcx): + obj.out.writestr( + "%s/%s" % (obj.book.FOLDER_NAME, item.file_name), obj._get_ncx() + ) + elif isinstance(item, epub.EpubNav): + obj.out.writestr( + "%s/%s" % (obj.book.FOLDER_NAME, item.file_name), + obj._get_nav(item), + ) + elif item.manifest: + obj.out.writestr( + "%s/%s" % (obj.book.FOLDER_NAME, item.file_name), item.content + ) + else: + obj.out.writestr("%s" % item.file_name, item.content) + + epub.EpubWriter._write_items = _write_items_patch + try: self.origin_book = epub.read_epub(self.epub_name) except Exception: - # tricky for #71 if you don't know why please check the issue and ignore this + # tricky monkey pathch for #71 if you don't know why please check the issue and ignore this # when upstream change will TODO fix this - def _load_spine(self): - spine = self.container.find( - "{%s}%s" % (epub.NAMESPACES["OPF"], "spine") - ) + def _load_spine(obj): + spine = obj.container.find("{%s}%s" % (epub.NAMESPACES["OPF"], "spine")) - self.book.spine = [ + obj.book.spine = [ (t.get("idref"), t.get("linear", "yes")) for t in spine ] - self.book.set_direction(spine.get("page-progression-direction", None)) + obj.book.set_direction(spine.get("page-progression-direction", None)) epub.EpubReader._load_spine = _load_spine self.origin_book = epub.read_epub(self.epub_name) diff --git a/setup.py b/setup.py index f819e4d..11de1e8 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,15 @@ setup( packages=find_packages(), url="https://github.com/yihong0618/bilingual_book_maker", python_requires=">=3.7", - install_requires=["bs4", "openai", "requests", "ebooklib", "rich", "tqdm", "tiktoken"], + install_requires=[ + "bs4", + "openai", + "requests", + "ebooklib", + "rich", + "tqdm", + "tiktoken", + ], classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License",