X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/9f9a701d95ee0e7eb222fdffbfd5e67a9cb4fbb8..7f302cfc1fac98e08e65061111fd1395bb399209:/apps/catalogue/models.py diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py index 922828440..8c83faa53 100644 --- a/apps/catalogue/models.py +++ b/apps/catalogue/models.py @@ -17,7 +17,7 @@ from newtagging.models import TagBase, tags_updated from newtagging import managers from catalogue.fields import JSONField -from librarian import html, dcparser +from librarian import dcparser, html, epub from mutagen import id3 @@ -332,6 +332,10 @@ class Book(models.Model): from tempfile import NamedTemporaryFile from slughifi import slughifi from markupstring import MarkupString + from hashlib import sha1 + from django.core.files.base import ContentFile + from django.core.files.storage import default_storage + from StringIO import StringIO # Read book metadata book_base, book_slug = book_info.url.rsplit('/', 1) @@ -400,6 +404,12 @@ class Book(models.Model): if html.transform(book.xml_file.path, html_file, parse_dublincore=False): book.html_file.save('%s.html' % book.slug, File(html_file), save=False) + # Create EPUB + epub_file = StringIO() + epub.transform(book.xml_file, epub_file) + book.epub_file.save('%s.epub' % book.slug, ContentFile(epub_file.getvalue()), save=False) + FileRecord(slug=book.slug, type='epub', sha1=sha1(epub_file.getvalue()).hexdigest()).save() + # Extract fragments closed_fragments, open_fragments = html.extract_fragments(book.html_file.path) for fragment in closed_fragments.values(): @@ -543,6 +553,21 @@ class BookStub(models.Model): return self.title +class FileRecord(models.Model): + slug = models.SlugField(_('slug'), max_length=120, db_index=True) + type = models.CharField(_('type'), max_length=20, db_index=True) + sha1 = models.CharField(_('sha-1 hash'), max_length=40) + time = models.DateTimeField(_('time'), auto_now_add=True) + + class Meta: + ordering = ('-time','-slug', '-type') + verbose_name = _('file record') + verbose_name_plural = _('file records') + + def __unicode__(self): + return "%s %s.%s" % (self.sha1, self.slug, self.type) + + def _tags_updated_handler(sender, affected_tags, **kwargs): # reset tag global counter Tag.objects.filter(pk__in=[tag.pk for tag in affected_tags]).update(book_count=None)