style
[librarian.git] / librarian / packagers.py
index ebeb5b3..0dbb6e8 100644 (file)
@@ -8,38 +8,38 @@ from copy import deepcopy
 from lxml import etree
 from librarian import pdf, epub, DirDocProvider, ParseError, cover
 from librarian.parser import WLDocument
 from lxml import etree
 from librarian import pdf, epub, DirDocProvider, ParseError, cover
 from librarian.parser import WLDocument
+from librarian.styles.wolnelektury.partners import cover
 
 
 class Packager(object):
     cover = None
     flags = None
 
 
 class Packager(object):
     cover = None
     flags = None
+    converter = NotImplemented
+    ext = NotImplemented
 
     @classmethod
 
     @classmethod
-    def prepare_file(cls, main_input, output_dir, verbose=False):
+    def prepare_file(cls, main_input, output_dir):
         path, fname = os.path.realpath(main_input).rsplit('/', 1)
         provider = DirDocProvider(path)
         slug, ext = os.path.splitext(fname)
 
         if output_dir != '':
         path, fname = os.path.realpath(main_input).rsplit('/', 1)
         provider = DirDocProvider(path)
         slug, ext = os.path.splitext(fname)
 
         if output_dir != '':
-            try:
+            if not os.path.isdir(output_dir):
                 os.makedirs(output_dir)
                 os.makedirs(output_dir)
-            except:
-                pass
         outfile = os.path.join(output_dir, slug + '.' + cls.ext)
 
         doc = WLDocument.from_file(main_input, provider=provider)
         outfile = os.path.join(output_dir, slug + '.' + cls.ext)
 
         doc = WLDocument.from_file(main_input, provider=provider)
-        output_file = cls.converter.transform(doc,
-                cover=cls.cover, flags=cls.flags)
+        output_file = cls.converter.transform(doc, cover=cls.cover, flags=cls.flags)
         doc.save_output_file(output_file, output_path=outfile)
 
         doc.save_output_file(output_file, output_path=outfile)
 
-
     @classmethod
     def prepare(cls, input_filenames, output_dir='', verbose=False):
     @classmethod
     def prepare(cls, input_filenames, output_dir='', verbose=False):
+        main_input = None
         try:
             for main_input in input_filenames:
                 if verbose:
                     print main_input
         try:
             for main_input in input_filenames:
                 if verbose:
                     print main_input
-                cls.prepare_file(main_input, output_dir, verbose)
+                cls.prepare_file(main_input, output_dir)
         except ParseError, e:
             print '%(file)s:%(name)s:%(message)s' % {
                 'file': main_input,
         except ParseError, e:
             print '%(file)s:%(name)s:%(message)s' % {
                 'file': main_input,
@@ -52,6 +52,7 @@ class EpubPackager(Packager):
     converter = epub
     ext = 'epub'
 
     converter = epub
     ext = 'epub'
 
+
 class PdfPackager(Packager):
     converter = pdf
     ext = 'pdf'
 class PdfPackager(Packager):
     converter = pdf
     ext = 'pdf'
@@ -60,22 +61,26 @@ class PdfPackager(Packager):
 class GandalfEpubPackager(EpubPackager):
     cover = cover.GandalfCover
 
 class GandalfEpubPackager(EpubPackager):
     cover = cover.GandalfCover
 
+
 class GandalfPdfPackager(PdfPackager):
     cover = cover.GandalfCover
 
 class GandalfPdfPackager(PdfPackager):
     cover = cover.GandalfCover
 
+
 class BookotekaEpubPackager(EpubPackager):
     cover = cover.BookotekaCover
 
 class BookotekaEpubPackager(EpubPackager):
     cover = cover.BookotekaCover
 
+
 class PrestigioEpubPackager(EpubPackager):
     cover = cover.PrestigioCover
     flags = ('less-advertising',)
 
 class PrestigioEpubPackager(EpubPackager):
     cover = cover.PrestigioCover
     flags = ('less-advertising',)
 
+
 class PrestigioPdfPackager(PdfPackager):
     cover = cover.PrestigioCover
     flags = ('less-advertising',)
 
 
 class PrestigioPdfPackager(PdfPackager):
     cover = cover.PrestigioCover
     flags = ('less-advertising',)
 
 
-class VirtualoEpubPackager(Packager):
+class VirtualoPackager(Packager):
     @staticmethod
     def utf_trunc(text, limit):
         """ truncates text to at most `limit' bytes in utf-8 """
     @staticmethod
     def utf_trunc(text, limit):
         """ truncates text to at most `limit' bytes in utf-8 """
@@ -107,6 +112,7 @@ class VirtualoEpubPackager(Packager):
                 <language>PL</language>
             </product>""")
 
                 <language>PL</language>
             </product>""")
 
+        main_input = None
         try:
             for main_input in input_filenames:
                 if verbose:
         try:
             for main_input in input_filenames:
                 if verbose:
@@ -130,16 +136,16 @@ class VirtualoEpubPackager(Packager):
                 product_elem[4][0][1].text = cls.utf_trunc(info.author.last_name, 100)
                 xml.append(product_elem)
 
                 product_elem[4][0][1].text = cls.utf_trunc(info.author.last_name, 100)
                 xml.append(product_elem)
 
-                cover.VirtualoCover(
-                    u' '.join(info.author.first_names + (info.author.last_name,)),
-                    info.title
-                    ).save(os.path.join(outfile_dir, slug+'.jpg'))
+                cover.VirtualoCover(info).save(os.path.join(outfile_dir, slug+'.jpg'))
                 outfile = os.path.join(outfile_dir, '1.epub')
                 outfile_sample = os.path.join(outfile_dir, '1.sample.epub')
                 outfile = os.path.join(outfile_dir, '1.epub')
                 outfile_sample = os.path.join(outfile_dir, '1.sample.epub')
-                doc.save_output_file(epub.transform(doc),
-                        output_path=outfile)
-                doc.save_output_file(epub.transform(doc, sample=25), 
-                        output_path=outfile_sample)
+                doc.save_output_file(doc.as_epub(), output_path=outfile)
+                doc.save_output_file(doc.as_epub(doc, sample=25), output_path=outfile_sample)
+                outfile = os.path.join(outfile_dir, '1.mobi')
+                outfile_sample = os.path.join(outfile_dir, '1.sample.mobi')
+                doc.save_output_file(doc.as_mobi(cover=cover.VirtualoCover), output_path=outfile)
+                doc.save_output_file(
+                    doc.as_mobi(doc, cover=cover.VirtualoCover, sample=25), output_path=outfile_sample)
         except ParseError, e:
             print '%(file)s:%(name)s:%(message)s' % {
                 'file': main_input,
         except ParseError, e:
             print '%(file)s:%(name)s:%(message)s' % {
                 'file': main_input,