Fundraising in PDF.
[wolnelektury.git] / src / picture / models.py
index 1ad09e2..dec9960 100644 (file)
@@ -1,5 +1,5 @@
-# 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.
 #
 from django.db import models, transaction
 import catalogue.models
@@ -22,7 +22,6 @@ import re
 
 from PIL import Image
 
-from django.utils.translation import ugettext_lazy as _
 from newtagging import managers
 from os import path
 
@@ -34,10 +33,11 @@ picture_storage = FileSystemStorage(location=path.join(
 
 class PictureArea(models.Model):
     picture = models.ForeignKey('picture.Picture', models.CASCADE, related_name='areas')
-    area = models.TextField(_('area'), default='{}', editable=False)
+    area = models.TextField('obszar', default='{}', editable=False)
     kind = models.CharField(
-        _('kind'), max_length=10, blank=False, null=False, db_index=True,
-        choices=(('thing', _('thing')), ('theme', _('theme'))))
+        'typ', max_length=10, blank=False, null=False, db_index=True,
+        choices=(('thing', 'przedmiot'), ('theme', 'motyw'))
+    )
 
     objects = models.Manager()
     tagged = managers.ModelTaggedItemManager(catalogue.models.Tag)
@@ -57,37 +57,24 @@ class PictureArea(models.Model):
     def get_area_json(self):
         return json.loads(self.area)
 
-    @cached_render('picture/picturearea_short.html')
-    def midi_box(self):
-        themes = self.tags.filter(category='theme')
-        things = self.tags.filter(category='thing')
-        return {
-            'area': self,
-            'theme': themes[0] if themes else None,
-            'thing': things[0] if things else None,
-        }
-
-    def clear_cache(self):
-        clear_cached_renders(self.midi_box)
-
 
 class Picture(models.Model):
     """
     Picture resource.
 
     """
-    title = models.CharField(_('title'), max_length=32767)
-    slug = models.SlugField(_('slug'), max_length=120, db_index=True, unique=True)
-    sort_key = models.CharField(_('sort key'), max_length=120, db_index=True, editable=False)
+    title = models.CharField('tytuł', max_length=32767)
+    slug = models.SlugField('slug', max_length=120, db_index=True, unique=True)
+    sort_key = models.CharField('klucz sortowania', max_length=120, db_index=True, editable=False)
     sort_key_author = models.CharField(
-        _('sort key by author'), max_length=120, db_index=True, editable=False, default='')
-    created_at = models.DateTimeField(_('creation date'), auto_now_add=True, db_index=True)
-    changed_at = models.DateTimeField(_('creation date'), auto_now=True, db_index=True)
-    xml_file = models.FileField(_('xml file'), upload_to="xml", storage=picture_storage)
-    image_file = ImageField(_('image file'), upload_to="images", storage=picture_storage)
-    html_file = models.FileField(_('html file'), upload_to="html", storage=picture_storage)
-    areas_json = models.TextField(_('picture areas JSON'), default='{}', editable=False)
-    extra_info = models.TextField(_('extra information'), default='{}')
+        'klucz sortowania wg autora', max_length=120, db_index=True, editable=False, default='')
+    created_at = models.DateTimeField('data utworzenia', auto_now_add=True, db_index=True)
+    changed_at = models.DateTimeField('data zmiany', auto_now=True, db_index=True)
+    xml_file = models.FileField('plik xml', upload_to="xml", storage=picture_storage)
+    image_file = ImageField('plik obrazu', upload_to="images", storage=picture_storage)
+    html_file = models.FileField('plik html', upload_to="html", storage=picture_storage)
+    areas_json = models.TextField('obszary w JSON', default='{}', editable=False)
+    extra_info = models.TextField('dodatkowa informacja', default='{}')
     culturepl_link = models.CharField(blank=True, max_length=240)
     wiki_link = models.CharField(blank=True, max_length=240)
 
@@ -101,14 +88,19 @@ class Picture(models.Model):
 
     short_html_url_name = 'picture_short'
 
+    is_picture = True
+
     class AlreadyExists(Exception):
         pass
 
     class Meta:
         ordering = ('sort_key_author', 'sort_key')
 
-        verbose_name = _('picture')
-        verbose_name_plural = _('pictures')
+        verbose_name = 'obraz'
+        verbose_name_plural = 'obrazy'
+
+    def get_extra_info_json(self):
+        return json.loads(self.extra_info or '{}')
 
     def save(self, force_insert=False, force_update=False, **kwargs):
         from sortify import sortify
@@ -118,7 +110,7 @@ class Picture(models.Model):
         try:
             author = self.authors().first().sort_key
         except AttributeError:
-            author = u''
+            author = ''
         self.sort_key_author = author
 
         ret = super(Picture, self).save(force_insert, force_update)
@@ -131,6 +123,15 @@ class Picture(models.Model):
     def authors(self):
         return self.tags.filter(category='author')
 
+    def epochs(self):
+        return self.tags.filter(category='epoch')
+
+    def genres(self):
+        return self.tags.filter(category='genre')
+
+    def kinds(self):
+        return self.tags.filter(category='kind')
+
     def tag_unicode(self, category):
         relations = prefetched_relations(self, category)
         if relations:
@@ -166,7 +167,7 @@ class Picture(models.Model):
             return None
 
     @classmethod
-    def from_xml_file(cls, xml_file, image_file=None, image_store=None, overwrite=False, search_index=True):
+    def from_xml_file(cls, xml_file, image_file=None, image_store=None, overwrite=False):
         """
         Import xml and it's accompanying image file.
         If image file is missing, it will be fetched by librarian.picture.ImageStore
@@ -291,8 +292,6 @@ class Picture(models.Model):
             picture.xml_file.save("%s.xml" % picture.slug, File(xml_file))
             picture.save()
             tasks.generate_picture_html(picture.id)
-            if not settings.NO_SEARCH_INDEX and search_index:
-                tasks.index_picture.delay(picture.id, picture_info=picture_xml.picture_info)
 
         if close_xml_file:
             xml_file.close()
@@ -351,30 +350,9 @@ class Picture(models.Model):
             'picture': self,
         }
 
-    @cached_render('picture/picture_short.html')
-    def midi_box(self):
-        return {
-            'picture': self,
-        }
-
     def related_themes(self):
         return catalogue.models.Tag.objects.usage_for_queryset(
             self.areas.all(), counts=True).filter(category__in=('theme', 'thing'))
 
     def clear_cache(self):
         clear_cached_renders(self.mini_box)
-        clear_cached_renders(self.midi_box)
-
-    def search_index(self, picture_info=None, index=None, index_tags=True, commit=True):
-        if index is None:
-            from search.index import Index
-            index = Index()
-        try:
-            index.index_picture(self, picture_info)
-            if index_tags:
-                index.index_tags()
-            if commit:
-                index.index.commit()
-        except Exception as e:
-            index.index.rollback()
-            raise e