1 # -*- coding: utf-8 -*-
2 # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
3 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
7 from django.core.management.base import BaseCommand
8 from django.core.files import File
10 from catalogue.models import Book, BookMedia
11 from catalogue.utils import ExistingFile
14 class Command(BaseCommand):
15 help = "Saves uploaded media with a given book and a given name. If media has a source SHA1 info - matching media is replaced."
16 args = 'path slug name'
18 def handle(self, *args, **options):
19 from django.db import transaction
21 path, slug, name = args
23 # Start transaction management.
24 transaction.commit_unless_managed()
25 transaction.enter_transaction_management()
26 transaction.managed(True)
28 book = Book.objects.get(slug=slug)
30 root, ext = os.path.splitext(path)
37 source_sha1 = BookMedia.read_source_sha1(path, ext)
38 print "Source file SHA1:", source_sha1
41 bm = book.media.get(type=ext, source_sha1=source_sha1)
42 print "Replacing media: %s (%s)" % (bm.name.encode('utf-8'), ext)
43 except (AssertionError, BookMedia.DoesNotExist):
44 bm = BookMedia(book=book, type=ext)
45 print "Creating new media"
47 bm.file.save(None, ExistingFile(path))
50 transaction.leave_transaction_management()