-# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
-# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+# This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
#
import os
import sys
from django.core.management.color import color_style
from django.core.files import File
from django.db import transaction
-from librarian.picture import ImageStore
-
from catalogue.models import Book
-from picture.models import Picture
-from search.index import Index
class Command(BaseCommand):
parser.add_argument(
'-D', '--dont-build', dest='dont_build', metavar="FORMAT,...",
help="Skip building specified formats")
- parser.add_argument(
- '-S', '--no-search-index', action='store_false',
- dest='search_index', default=True,
- help='Skip indexing imported works for search')
parser.add_argument(
'-F', '--not-findable', action='store_false',
dest='findable', default=True,
help='Set book as not findable.')
- parser.add_argument(
- '-p', '--picture', action='store_true', dest='import_picture',
- default=False, help='Import pictures')
parser.add_argument('directory', nargs='+')
def import_book(self, file_path, options):
file_base, ext = os.path.splitext(file_path)
book = Book.from_xml_file(file_path, overwrite=options.get('force'),
dont_build=dont_build,
- search_index_tags=False,
findable=options.get('findable'),
+ remote_gallery_url='file://' + os.path.dirname(os.path.abspath(file_base)) + '/img/'
)
for ebook_format in Book.ebook_formats:
if os.path.isfile(file_base + '.' + ebook_format):
print("Importing %s.%s" % (file_base, ebook_format))
book.save()
- def import_picture(self, file_path, options, continue_on_error=True):
- try:
- image_store = ImageStore(os.path.dirname(file_path))
- picture = Picture.from_xml_file(file_path, image_store=image_store, overwrite=options.get('force'))
- except Exception as ex:
- if continue_on_error:
- print("%s: %s" % (file_path, ex))
- return
- else:
- raise ex
- return picture
-
@transaction.atomic
def handle(self, **options):
self.style = color_style()
verbose = options.get('verbose')
- import_picture = options.get('import_picture')
-
- if options.get('search_index') and not settings.NO_SEARCH_INDEX:
- index = Index()
- try:
- index.index_tags()
- index.index.commit()
- except Exception as e:
- index.index.rollback()
- raise e
files_imported = 0
files_skipped = 0
# Import book files
try:
- if import_picture:
- self.import_picture(file_path, options)
- else:
- self.import_book(file_path, options)
-
+ self.import_book(file_path, options)
files_imported += 1
- except (Book.AlreadyExists, Picture.AlreadyExists):
+ except Book.AlreadyExists:
print(self.style.ERROR(
- '%s: Book or Picture already imported. Skipping. To overwrite use --force.' %
+ '%s: Book already imported. Skipping. To overwrite use --force.' %
file_path))
files_skipped += 1