From e9b47e84cb98d20e851047f031292449bdbeb6fe Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Tue, 25 May 2010 17:13:51 +0200 Subject: [PATCH] Book _short_html fix, Fragment _short_html translations --- .../0010_fragment_short_html_translations.py | 180 ++++++++++++++++++ apps/catalogue/models.py | 28 +-- wolnelektury/translation.py | 7 +- 3 files changed, 203 insertions(+), 12 deletions(-) create mode 100644 apps/catalogue/migrations/0010_fragment_short_html_translations.py diff --git a/apps/catalogue/migrations/0010_fragment_short_html_translations.py b/apps/catalogue/migrations/0010_fragment_short_html_translations.py new file mode 100644 index 000000000..e241a16de --- /dev/null +++ b/apps/catalogue/migrations/0010_fragment_short_html_translations.py @@ -0,0 +1,180 @@ +# encoding: utf-8 +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Adding field 'Fragment._short_html_de' + db.add_column('catalogue_fragment', '_short_html_de', self.gf('django.db.models.fields.TextField')(), keep_default=False) + + # Adding field 'Fragment._short_html_pl' + db.add_column('catalogue_fragment', '_short_html_pl', self.gf('django.db.models.fields.TextField')(), keep_default=False) + + # Adding field 'Fragment._short_html_lt' + db.add_column('catalogue_fragment', '_short_html_lt', self.gf('django.db.models.fields.TextField')(), keep_default=False) + + # Adding field 'Fragment._short_html_en' + db.add_column('catalogue_fragment', '_short_html_en', self.gf('django.db.models.fields.TextField')(), keep_default=False) + + # Adding field 'Fragment._short_html_fr' + db.add_column('catalogue_fragment', '_short_html_fr', self.gf('django.db.models.fields.TextField')(), keep_default=False) + + # Adding field 'Fragment._short_html_ru' + db.add_column('catalogue_fragment', '_short_html_ru', self.gf('django.db.models.fields.TextField')(), keep_default=False) + + # Adding field 'Fragment._short_html_es' + db.add_column('catalogue_fragment', '_short_html_es', self.gf('django.db.models.fields.TextField')(), keep_default=False) + + # Adding field 'Fragment._short_html_uk' + db.add_column('catalogue_fragment', '_short_html_uk', self.gf('django.db.models.fields.TextField')(), keep_default=False) + + + def backwards(self, orm): + + # Deleting field 'Fragment._short_html_de' + db.delete_column('catalogue_fragment', '_short_html_de') + + # Deleting field 'Fragment._short_html_pl' + db.delete_column('catalogue_fragment', '_short_html_pl') + + # Deleting field 'Fragment._short_html_lt' + db.delete_column('catalogue_fragment', '_short_html_lt') + + # Deleting field 'Fragment._short_html_en' + db.delete_column('catalogue_fragment', '_short_html_en') + + # Deleting field 'Fragment._short_html_fr' + db.delete_column('catalogue_fragment', '_short_html_fr') + + # Deleting field 'Fragment._short_html_ru' + db.delete_column('catalogue_fragment', '_short_html_ru') + + # Deleting field 'Fragment._short_html_es' + db.delete_column('catalogue_fragment', '_short_html_es') + + # Deleting field 'Fragment._short_html_uk' + db.delete_column('catalogue_fragment', '_short_html_uk') + + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'catalogue.book': { + 'Meta': {'object_name': 'Book'}, + '_short_html': ('django.db.models.fields.TextField', [], {}), + '_short_html_de': ('django.db.models.fields.TextField', [], {}), + '_short_html_en': ('django.db.models.fields.TextField', [], {}), + '_short_html_es': ('django.db.models.fields.TextField', [], {}), + '_short_html_fr': ('django.db.models.fields.TextField', [], {}), + '_short_html_lt': ('django.db.models.fields.TextField', [], {}), + '_short_html_pl': ('django.db.models.fields.TextField', [], {}), + '_short_html_ru': ('django.db.models.fields.TextField', [], {}), + '_short_html_uk': ('django.db.models.fields.TextField', [], {}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'extra_info': ('catalogue.fields.JSONField', [], {}), + 'gazeta_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}), + 'html_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mp3_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'odt_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'ogg_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['catalogue.Book']"}), + 'parent_number': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pdf_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '120', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '120'}), + 'txt_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}), + 'wiki_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}), + 'xml_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}) + }, + 'catalogue.bookstub': { + 'Meta': {'object_name': 'BookStub'}, + 'author': ('django.db.models.fields.CharField', [], {'max_length': '120'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'pd': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '120', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '120'}), + 'translator': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'translator_death': ('django.db.models.fields.TextField', [], {'blank': 'True'}) + }, + 'catalogue.fragment': { + 'Meta': {'object_name': 'Fragment'}, + '_short_html': ('django.db.models.fields.TextField', [], {}), + '_short_html_de': ('django.db.models.fields.TextField', [], {}), + '_short_html_en': ('django.db.models.fields.TextField', [], {}), + '_short_html_es': ('django.db.models.fields.TextField', [], {}), + '_short_html_fr': ('django.db.models.fields.TextField', [], {}), + '_short_html_lt': ('django.db.models.fields.TextField', [], {}), + '_short_html_pl': ('django.db.models.fields.TextField', [], {}), + '_short_html_ru': ('django.db.models.fields.TextField', [], {}), + '_short_html_uk': ('django.db.models.fields.TextField', [], {}), + 'anchor': ('django.db.models.fields.CharField', [], {'max_length': '120'}), + 'book': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'fragments'", 'to': "orm['catalogue.Book']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'short_text': ('django.db.models.fields.TextField', [], {}), + 'text': ('django.db.models.fields.TextField', [], {}) + }, + 'catalogue.tag': { + 'Meta': {'object_name': 'Tag'}, + 'book_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'category': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'death': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}), + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'gazeta_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'main_page': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True', 'blank': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}), + 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '120', 'db_index': 'True'}), + 'sort_key': ('django.db.models.fields.SlugField', [], {'max_length': '120', 'db_index': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}), + 'wiki_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}) + }, + 'catalogue.tagrelation': { + 'Meta': {'unique_together': "(('tag', 'content_type', 'object_id'),)", 'object_name': 'TagRelation', 'db_table': "'catalogue_tag_relation'"}, + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'items'", 'to': "orm['catalogue.Tag']"}) + }, + 'contenttypes.contenttype': { + 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + } + } + + complete_apps = ['catalogue'] diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py index ec225d4d9..2097e175f 100644 --- a/apps/catalogue/models.py +++ b/apps/catalogue/models.py @@ -9,6 +9,7 @@ from django.contrib.auth.models import User from django.core.files import File from django.template.loader import render_to_string from django.utils.safestring import mark_safe +from django.utils.translation import get_language from django.core.urlresolvers import reverse from datetime import datetime @@ -130,8 +131,11 @@ class Book(models.Model): return self.title def short_html(self): - if len(self._short_html): - return mark_safe(self._short_html) + key = '_short_html_%s' % get_language() + short_html = getattr(self, key) + + if len(short_html): + return mark_safe(short_html) else: tags = self.tags.filter(~Q(category__in=('set', 'theme', 'book'))) tags = [mark_safe(u'%s' % (tag.get_absolute_url(), tag.name)) for tag in tags] @@ -152,16 +156,16 @@ class Book(models.Model): formats = [mark_safe(format) for format in formats] - self._short_html = unicode(render_to_string('catalogue/book_short.html', - {'book': self, 'tags': tags, 'formats': formats})) + setattr(self, key, unicode(render_to_string('catalogue/book_short.html', + {'book': self, 'tags': tags, 'formats': formats}))) self.save(reset_short_html=False) - return mark_safe(self._short_html) + return mark_safe(getattr(self, key)) def save(self, force_insert=False, force_update=False, reset_short_html=True): if reset_short_html: # Reset _short_html during save for key in filter(lambda x: x.startswith('_short_html'), self.__dict__): - self.key = '' + self.__setattr__(key, '') book = super(Book, self).save(force_insert, force_update) @@ -339,16 +343,18 @@ class Fragment(models.Model): tags = managers.TagDescriptor(Tag) def short_html(self): - if len(self._short_html): - return mark_safe(self._short_html) + key = '_short_html_%s' % get_language() + short_html = getattr(self, key) + if len(short_html): + return mark_safe(short_html) else: book_authors = [mark_safe(u'%s' % (tag.get_absolute_url(), tag.name)) for tag in self.book.tags if tag.category == 'author'] - self._short_html = unicode(render_to_string('catalogue/fragment_short.html', - {'fragment': self, 'book': self.book, 'book_authors': book_authors})) + setattr(self, key, unicode(render_to_string('catalogue/fragment_short.html', + {'fragment': self, 'book': self.book, 'book_authors': book_authors}))) self.save() - return mark_safe(self._short_html) + return mark_safe(getattr(self, key)) def get_absolute_url(self): return '%s#m%s' % (reverse('book_text', kwargs={'slug': self.book.slug}), self.anchor) diff --git a/wolnelektury/translation.py b/wolnelektury/translation.py index 227896ee4..3b10a96d1 100644 --- a/wolnelektury/translation.py +++ b/wolnelektury/translation.py @@ -5,7 +5,7 @@ from modeltranslation.translator import translator, TranslationOptions from infopages.models import InfoPage -from catalogue.models import Book +from catalogue.models import Book, Fragment class InfoPageTranslationOptions(TranslationOptions): fields = ('page_title', 'title', 'left_column', 'right_column') @@ -17,3 +17,8 @@ class BookTranslationOptions(TranslationOptions): translator.register(Book, BookTranslationOptions) +class FragmentTranslationOptions(TranslationOptions): + fields = ('_short_html', ) + +translator.register(Fragment, FragmentTranslationOptions) + -- 2.20.1