-# -*- coding: utf-8 -*-
-#
-# 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 print_function, unicode_literals
-
-import os
-from librarian import pdf, epub, mobi, DirDocProvider, ParseError
-from librarian.parser import WLDocument
-
-from .util import makedirs
-
-
-class Packager(object):
- cover = None
- flags = None
-
- @classmethod
- def transform(cls, *args, **kwargs):
- return cls.converter.transform(*args, **kwargs)
-
- @classmethod
- def prepare_file(cls, main_input, output_dir, verbose=False, overwrite=False):
- path, fname = os.path.realpath(main_input).rsplit('/', 1)
- provider = DirDocProvider(path)
- slug, ext = os.path.splitext(fname)
-
- if output_dir != '':
- makedirs(output_dir)
- outfile = os.path.join(output_dir, slug + '.' + cls.ext)
- if os.path.exists(outfile) and not overwrite:
- return
-
- doc = WLDocument.from_file(main_input, provider=provider)
- output_file = cls.transform(doc, cover=cls.cover, flags=cls.flags)
- doc.save_output_file(output_file, output_path=outfile)
-
- @classmethod
- def prepare(cls, input_filenames, output_dir='', verbose=False, overwrite=False):
- try:
- for main_input in input_filenames:
- if verbose:
- print(main_input)
- cls.prepare_file(main_input, output_dir, verbose, overwrite)
- except ParseError as e:
- print('%(file)s:%(name)s:%(message)s' % {
- 'file': main_input,
- 'name': e.__class__.__name__,
- 'message': e.message
- })
-
-
-class EpubPackager(Packager):
- converter = epub
- ext = 'epub'
-
-
-class MobiPackager(Packager):
- converter = mobi
- ext = 'mobi'
-
-
-class PdfPackager(Packager):
- converter = pdf
- ext = 'pdf'
-
- @classmethod
- def transform(cls, *args, **kwargs):
- return cls.converter.transform(*args, morefloats='new', **kwargs)