def get_comics_from_collection(self, stream): from calibre.libunzip import extract as zipextract tdir = PersistentTemporaryDirectory('_comic_collection') zipextract(stream, tdir) comics = [] with CurrentDir(tdir): if not os.path.exists('comics.txt'): raise ValueError( ('%s is not a valid comic collection' ' no comics.txt was found in the file') % stream.name) with open('comics.txt', 'rb') as f: raw = f.read() if raw.startswith(codecs.BOM_UTF16_BE): raw = raw.decode('utf-16-be')[1:] elif raw.startswith(codecs.BOM_UTF16_LE): raw = raw.decode('utf-16-le')[1:] elif raw.startswith(codecs.BOM_UTF8): raw = raw.decode('utf-8')[1:] else: raw = raw.decode('utf-8') for line in raw.splitlines(): line = line.strip() if not line: continue fname, title = line.partition(':')[0], line.partition(':')[-1] fname = fname.replace('#', '_') fname = os.path.join(tdir, *fname.split('/')) if not title: title = os.path.basename(fname).rpartition('.')[0] if os.access(fname, os.R_OK): comics.append([title, fname]) if not comics: raise ValueError('%s has no comics' % stream.name) return comics
def get_comics_from_collection(self, stream): from calibre.libunzip import extract as zipextract tdir = PersistentTemporaryDirectory('_comic_collection') zipextract(stream, tdir) comics = [] with CurrentDir(tdir): if not os.path.exists('comics.txt'): raise ValueError(( '%s is not a valid comic collection' ' no comics.txt was found in the file') %stream.name) raw = open('comics.txt', 'rb').read() if raw.startswith(codecs.BOM_UTF16_BE): raw = raw.decode('utf-16-be')[1:] elif raw.startswith(codecs.BOM_UTF16_LE): raw = raw.decode('utf-16-le')[1:] elif raw.startswith(codecs.BOM_UTF8): raw = raw.decode('utf-8')[1:] else: raw = raw.decode('utf-8') for line in raw.splitlines(): line = line.strip() if not line: continue fname, title = line.partition(':')[0], line.partition(':')[-1] fname = fname.replace('#', '_') fname = os.path.join(tdir, *fname.split('/')) if not title: title = os.path.basename(fname).rpartition('.')[0] if os.access(fname, os.R_OK): comics.append([title, fname]) if not comics: raise ValueError('%s has no comics'%stream.name) return comics
def docx_exploder(path, tdir, question=lambda x:True): zipextract(path, tdir) from calibre.ebooks.docx.dump import pretty_all_xml_in_dir pretty_all_xml_in_dir(tdir) for f in walk(tdir): if os.path.basename(f) == 'document.xml': return f raise Error('Invalid book: Could not find document.xml')
def process_epub(input_file, output_file): from calibre import CurrentDir from calibre.libunzip import extract as zipextract from calibre.ptempfile import TemporaryDirectory from calibre.utils.logging import Log from calibre_plugins.modify_epub.container import ExtendedContainer input_file = os.path.abspath(input_file) output_file = os.path.abspath(output_file) # Extract the epub into a temp directory with TemporaryDirectory('fb2-hyphens') as tdir: with CurrentDir(tdir): zipextract(input_file, tdir) # Use our own simplified wrapper around an ePub that will # preserve the file structure and css container = ExtendedContainer(tdir, Log()) is_modified = process_epub_file(container) if is_modified: container.write(output_file)
def process_epub(input_file, output_file): from calibre import CurrentDir from calibre.libunzip import extract as zipextract from calibre.ptempfile import TemporaryDirectory from calibre.utils.logging import Log from calibre_plugins.modify_epub.container import ExtendedContainer input_file = os.path.abspath(input_file) output_file = os.path.abspath(output_file) # Extract the epub into a temp directory with TemporaryDirectory("fb2-hyphens") as tdir: with CurrentDir(tdir): zipextract(input_file, tdir) # Use our own simplified wrapper around an ePub that will # preserve the file structure and css container = ExtendedContainer(tdir, Log()) is_modified = process_epub_file(container) if is_modified: container.write(output_file)
def zip_exploder(path, tdir, question=lambda x:True): zipextract(path, tdir) for f in walk(tdir): if f.lower().endswith('.opf'): return f raise Error('Invalid book: Could not find .opf')