X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/99f6dd4f1ff0390de9a9bbd4e3352b953cb9a235..0e9ce396fab5cdfc2f1806bae43f05de77cb1e21:/apps/picture/models.py diff --git a/apps/picture/models.py b/apps/picture/models.py index a0179de53..74d86313f 100644 --- a/apps/picture/models.py +++ b/apps/picture/models.py @@ -7,21 +7,19 @@ import catalogue.models from django.db.models import permalink from sorl.thumbnail import ImageField from django.conf import settings +from django.contrib.contenttypes.fields import GenericRelation from django.core.files.storage import FileSystemStorage from django.utils.datastructures import SortedDict from django.template.loader import render_to_string from django.utils.safestring import mark_safe -from django.core.cache import get_cache -from catalogue.utils import split_tags, related_tag_name -from django.utils.safestring import mark_safe +from django.core.cache import caches +from catalogue.utils import split_tags from fnpdjango.utils.text.slughifi import slughifi from picture import tasks from StringIO import StringIO import jsonfield import itertools import logging -from sorl.thumbnail import get_thumbnail, default -from .engine import CustomCroppingEngine from PIL import Image @@ -30,7 +28,7 @@ from newtagging import managers from os import path -permanent_cache = get_cache('permanent') +permanent_cache = caches['permanent'] picture_storage = FileSystemStorage(location=path.join( settings.MEDIA_ROOT, 'pictures'), @@ -40,14 +38,15 @@ picture_storage = FileSystemStorage(location=path.join( class PictureArea(models.Model): picture = models.ForeignKey('picture.Picture', related_name='areas') area = jsonfield.JSONField(_('area'), default={}, editable=False) - kind = models.CharField(_('kind'), max_length=10, blank=False, - null=False, db_index=True, - choices=(('thing', _('thing')), + kind = models.CharField(_('kind'), max_length=10, blank=False, + null=False, db_index=True, + choices=(('thing', _('thing')), ('theme', _('theme')))) objects = models.Manager() tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) tags = managers.TagDescriptor(catalogue.models.Tag) + tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) @classmethod def rectangle(cls, picture, kind, coords): @@ -72,7 +71,7 @@ class PictureArea(models.Model): short_html = permanent_cache.get(cache_key) else: short_html = None - + if short_html is not None: return mark_safe(short_html) else: @@ -115,6 +114,7 @@ class Picture(models.Model): objects = models.Manager() tagged = managers.ModelTaggedItemManager(catalogue.models.Tag) tags = managers.TagDescriptor(catalogue.models.Tag) + tag_relations = GenericRelation(catalogue.models.Tag.intermediary_table_model) class AlreadyExists(Exception): pass @@ -166,7 +166,7 @@ class Picture(models.Model): if not isinstance(xml_file, File): xml_file = File(open(xml_file)) close_xml_file = True - + try: # use librarian to parse meta-data if image_store is None: @@ -278,8 +278,8 @@ class Picture(models.Model): from PIL import ImageDraw, ImageFont from librarian import get_resource - annotated = Image.new(img.mode, - (img.size[0], img.size[1] + 40), + annotated = Image.new(img.mode, + (img.size[0], img.size[1] + 40), (255, 255, 255) ) annotated.paste(img, (0, 0)) @@ -332,12 +332,12 @@ class Picture(models.Model): def reset_short_html(self): if self.id is None: return - + type(self).objects.filter(pk=self.pk).update(_related_info=None) for area in self.areas.all().iterator(): area.reset_short_html() - try: + try: author = self.tags.filter(category='author')[0].sort_key except IndexError: author = u'' @@ -402,13 +402,13 @@ class Picture(models.Model): tag_info["name_%s" % lc] = tag_name cat.append(tag_info) rel['tags'][category] = cat - + if self.pk: type(self).objects.filter(pk=self.pk).update(_related_info=rel) return rel - # copied from book.py, figure out + # copied from book.py, figure out def related_themes(self): # self.theme_counter hides a computation, so a line below actually makes sense theme_counter = self.theme_counter @@ -462,7 +462,7 @@ class Picture(models.Model): if tags is None: tags = {} for area in PictureArea.objects.filter(picture=self).order_by().iterator(): - for tag in area.tags.filter(category__in=('theme','thing')).order_by().iterator(): + for tag in area.tags.filter(category__in=('theme', 'thing')).order_by().iterator(): tags[tag.pk] = tags.get(tag.pk, 0) + 1 if self.id: