Python 3.4-3.7 support;
[librarian.git] / librarian / mobi.py
old mode 100755 (executable)
new mode 100644 (file)
index 1e7569b..6f1f5d6
@@ -3,58 +3,54 @@
 # This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 # This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
+from __future__ import unicode_literals
+
 from copy import deepcopy
 import os
 import subprocess
 from tempfile import NamedTemporaryFile
 
 from librarian import OutputFile
 from copy import deepcopy
 import os
 import subprocess
 from tempfile import NamedTemporaryFile
 
 from librarian import OutputFile
-from librarian.cover import WLCover
-from librarian import get_resource
 
 
 
 
-def transform(wldoc, verbose=False,
-              sample=None, cover=None, flags=None):
+def transform(wldoc, verbose=False, sample=None, cover=None,
+              use_kindlegen=False, flags=None, hyphenate=True, ilustr_path='',
+              converter_path=None):
     """ produces a MOBI file
 
     wldoc: a WLDocument
     sample=n: generate sample e-book (with at least n paragraphs)
     """ produces a MOBI file
 
     wldoc: a WLDocument
     sample=n: generate sample e-book (with at least n paragraphs)
-    cover: a cover.Cover object
+    cover: a cover.Cover factory overriding default
     flags: less-advertising,
     flags: less-advertising,
+    converter_path: override path to MOBI converter,
+      either ebook-convert or kindlegen
     """
 
     document = deepcopy(wldoc)
     del wldoc
     """
 
     document = deepcopy(wldoc)
     del wldoc
-    book_info = document.book_info
-
-    # provide a cover by default
-    if not cover:
-        cover = WLCover
-    cover_file = NamedTemporaryFile(suffix='.png', delete=False)
-    c = cover(book_info)
-    c.save(cover_file)
-
-    if cover.uses_dc_cover:
-        if document.book_info.cover_by:
-            document.edoc.getroot().set('data-cover-by', document.book_info.cover_by)
-        if document.book_info.cover_source:
-            document.edoc.getroot().set('data-cover-source', document.book_info.cover_source)
-
-    if not flags:
-        flags = []
-    flags = list(flags) + ['without-fonts']
-    epub = document.as_epub(verbose=verbose, sample=sample, html_toc=True,
-            flags=flags, style=get_resource('mobi/style.css'))
 
 
+    epub = document.as_epub(verbose=verbose, sample=sample,
+                            html_toc=True, cover=cover or True, flags=flags,
+                            hyphenate=hyphenate, ilustr_path=ilustr_path, output_type='mobi')
     if verbose:
         kwargs = {}
     else:
         devnull = open("/dev/null", 'w')
         kwargs = {"stdout": devnull, "stderr": devnull}
 
     if verbose:
         kwargs = {}
     else:
         devnull = open("/dev/null", 'w')
         kwargs = {"stdout": devnull, "stderr": devnull}
 
-    output_file = NamedTemporaryFile(prefix='librarian', suffix='.mobi', delete=False)
+    output_file = NamedTemporaryFile(prefix='librarian', suffix='.mobi',
+                                     delete=False)
     output_file.close()
     output_file.close()
-    subprocess.check_call(['ebook-convert', epub.get_filename(), output_file.name,
-            '--no-inline-toc', '--cover=%s' % cover_file.name], **kwargs)
-    os.unlink(cover_file.name)
-    return OutputFile.from_filename(output_file.name)
\ No newline at end of file
+
+    if use_kindlegen:
+        output_file_basename = os.path.basename(output_file.name)
+        subprocess.check_call([converter_path or 'kindlegen',
+                               '-c2', epub.get_filename(),
+                               '-o', output_file_basename], **kwargs)
+    else:
+        subprocess.check_call([converter_path or 'ebook-convert',
+                               epub.get_filename(),
+                               output_file.name, '--no-inline-toc',
+                               '--mobi-file-type=both',
+                               '--mobi-ignore-margins'], **kwargs)
+    return OutputFile.from_filename(output_file.name)