Carousel fixes.
[wolnelektury.git] / src / catalogue / models / book.py
index 068bae8..61d20fd 100644 (file)
@@ -26,7 +26,7 @@ from newtagging import managers
 from catalogue import constants
 from catalogue.fields import EbookField
 from catalogue.models import Tag, Fragment, BookMedia
 from catalogue import constants
 from catalogue.fields import EbookField
 from catalogue.models import Tag, Fragment, BookMedia
-from catalogue.utils import create_zip, gallery_url, gallery_path, split_tags
+from catalogue.utils import create_zip, gallery_url, gallery_path, split_tags, get_random_hash
 from catalogue.models.tag import prefetched_relations
 from catalogue import app_settings
 from catalogue import tasks
 from catalogue.models.tag import prefetched_relations
 from catalogue import app_settings
 from catalogue import tasks
@@ -76,6 +76,7 @@ class Book(models.Model):
     audio_length = models.CharField(_('audio length'), blank=True, max_length=8)
     preview = models.BooleanField(_('preview'), default=False)
     preview_until = models.DateField(_('preview until'), blank=True, null=True)
     audio_length = models.CharField(_('audio length'), blank=True, max_length=8)
     preview = models.BooleanField(_('preview'), default=False)
     preview_until = models.DateField(_('preview until'), blank=True, null=True)
+    preview_key = models.CharField(max_length=32, blank=True, null=True)
 
     # files generated during publication
     cover = EbookField(
 
     # files generated during publication
     cover = EbookField(
@@ -127,7 +128,7 @@ class Book(models.Model):
         verbose_name_plural = _('books')
         app_label = 'catalogue'
 
         verbose_name_plural = _('books')
         app_label = 'catalogue'
 
-    def __unicode__(self):
+    def __str__(self):
         return self.title
 
     def get_initial(self):
         return self.title
 
     def get_initial(self):
@@ -188,7 +189,7 @@ class Book(models.Model):
         from sortify import sortify
 
         self.sort_key = sortify(self.title)[:120]
         from sortify import sortify
 
         self.sort_key = sortify(self.title)[:120]
-        self.title = unicode(self.title)  # ???
+        self.title = str(self.title)  # ???
 
         try:
             author = self.authors().first().sort_key
 
         try:
             author = self.authors().first().sort_key
@@ -199,6 +200,9 @@ class Book(models.Model):
         self.cached_author = self.tag_unicode('author')
         self.has_audience = 'audience' in self.extra_info
 
         self.cached_author = self.tag_unicode('author')
         self.has_audience = 'audience' in self.extra_info
 
+        if self.preview and not self.preview_key:
+            self.preview_key = get_random_hash(self.slug)[:32]
+
         ret = super(Book, self).save(force_insert, force_update, **kwargs)
 
         return ret
         ret = super(Book, self).save(force_insert, force_update, **kwargs)
 
         return ret
@@ -207,11 +211,6 @@ class Book(models.Model):
     def get_absolute_url(self):
         return 'book_detail', [self.slug]
 
     def get_absolute_url(self):
         return 'book_detail', [self.slug]
 
-    @staticmethod
-    @permalink
-    def create_url(slug):
-        return 'book_detail', [slug]
-
     def gallery_path(self):
         return gallery_path(self.slug)
 
     def gallery_path(self):
         return gallery_path(self.slug)
 
@@ -289,7 +288,7 @@ class Book(models.Model):
         media = self.get_media(format_)
         if media:
             if self.preview:
         media = self.get_media(format_)
         if media:
             if self.preview:
-                return reverse('embargo_link', kwargs={'slug': self.slug, 'format_': format_})
+                return reverse('embargo_link', kwargs={'key': self.preview_key, 'slug': self.slug, 'format_': format_})
             else:
                 return media.url
         else:
             else:
                 return media.url
         else:
@@ -406,7 +405,7 @@ class Book(models.Model):
                 index.index_tags()
             if commit:
                 index.index.commit()
                 index.index_tags()
             if commit:
                 index.index.commit()
-        except Exception, e:
+        except Exception as e:
             index.index.rollback()
             raise e
 
             index.index.rollback()
             raise e
 
@@ -677,7 +676,7 @@ class Book(models.Model):
 
     def publisher(self):
         publisher = self.extra_info['publisher']
 
     def publisher(self):
         publisher = self.extra_info['publisher']
-        if isinstance(publisher, basestring):
+        if isinstance(publisher, str):
             return publisher
         elif isinstance(publisher, list):
             return ', '.join(publisher)
             return publisher
         elif isinstance(publisher, list):
             return ', '.join(publisher)
@@ -702,7 +701,7 @@ class Book(models.Model):
         """
 
         books_by_parent = {}
         """
 
         books_by_parent = {}
-        books = cls.objects.order_by('parent_number', 'sort_key').only('title', 'parent', 'slug')
+        books = cls.objects.order_by('parent_number', 'sort_key').only('title', 'parent', 'slug', 'extra_info')
         if book_filter:
             books = books.filter(book_filter).distinct()
 
         if book_filter:
             books = books.filter(book_filter).distinct()