django 1.2, compatibility fixes
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Thu, 16 Sep 2010 15:14:55 +0000 (17:14 +0200)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Thu, 16 Sep 2010 15:16:02 +0000 (17:16 +0200)
17 files changed:
apps/catalogue/fields.py
apps/catalogue/migrations/0001_initial.py
apps/catalogue/migrations/0002_auto__add_bookstub__add_field_tag_death.py [deleted file]
apps/catalogue/migrations/0003_fix_book_count_on_shelves.py [deleted file]
apps/catalogue/migrations/0004_book_html_shorts_translations.py [deleted file]
apps/catalogue/migrations/0005_fragment_html_shorts_translations.py [deleted file]
apps/catalogue/migrations/0006_epub_tag_counters_and_ltags_descendants.py [deleted file]
apps/catalogue/migrations/0007_remove_empty_html.py [deleted file]
apps/catalogue/migrations/0008_unique_tag_category_slug.py [deleted file]
apps/catalogue/migrations/0009_chg_book_count__heavy_cleaning.py [deleted file]
apps/catalogue/migrations/0010_auto__add_filerecord.py [deleted file]
apps/catalogue/views.py
apps/newtagging/models.py
apps/sponsors/fields.py
requirements.txt
wolnelektury/settings.py
wolnelektury/urls.py

index 11c730c..e2d94b9 100644 (file)
@@ -14,7 +14,6 @@ from django.utils import simplejson as json
 from django.utils.html import escape
 from django.utils.safestring import mark_safe
 from django.utils.translation import ugettext_lazy as _
-from south.modelsinspector import add_introspection_rules
 
 
 class JSONEncoder(json.JSONEncoder):
@@ -53,7 +52,7 @@ class JSONField(models.TextField):
         defaults.update(kwargs)
         return super(JSONField, self).formfield(**defaults)
 
-    def db_type(self):
+    def db_type(self, connection):
         return 'text'
 
     def get_internal_type(self):
@@ -70,8 +69,6 @@ class JSONField(models.TextField):
             return setattr(model_instance, self.attname, dumps(json))
         setattr(cls, 'set_%s_value' % self.name, set_value)
 
-add_introspection_rules([], ["^catalogue\.fields\.JSONField"])
-
 
 class JQueryAutoCompleteWidget(forms.TextInput):
     def __init__(self, source, options=None, *args, **kwargs):
index 2aabb82..045b2f2 100644 (file)
@@ -7,27 +7,31 @@ from django.db import models
 class Migration(SchemaMigration):
 
     def forwards(self, orm):
-
+        
         # Adding model 'Tag'
         db.create_table('catalogue_tag', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('name', self.gf('django.db.models.fields.CharField')(max_length=50, db_index=True)),
+            ('slug', self.gf('django.db.models.fields.SlugField')(max_length=120, db_index=True)),
+            ('sort_key', self.gf('django.db.models.fields.SlugField')(max_length=120, db_index=True)),
             ('category', self.gf('django.db.models.fields.CharField')(max_length=50, db_index=True)),
-            ('gazeta_link', self.gf('django.db.models.fields.CharField')(max_length=240, blank=True)),
             ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
-            ('main_page', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True, blank=True)),
-            ('sort_key', self.gf('django.db.models.fields.SlugField')(max_length=120, db_index=True)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('wiki_link', self.gf('django.db.models.fields.CharField')(max_length=240, blank=True)),
+            ('main_page', self.gf('django.db.models.fields.BooleanField')(default=False, db_index=True)),
             ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True)),
-            ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=120, db_index=True)),
-            ('book_count', self.gf('django.db.models.fields.IntegerField')(default=0)),
-            ('name', self.gf('django.db.models.fields.CharField')(max_length=50, db_index=True)),
+            ('book_count', self.gf('django.db.models.fields.IntegerField')(null=True)),
+            ('death', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
+            ('gazeta_link', self.gf('django.db.models.fields.CharField')(max_length=240, blank=True)),
+            ('wiki_link', self.gf('django.db.models.fields.CharField')(max_length=240, blank=True)),
         ))
         db.send_create_signal('catalogue', ['Tag'])
 
+        # Adding unique constraint on 'Tag', fields ['slug', 'category']
+        db.create_unique('catalogue_tag', ['slug', 'category'])
+
         # Adding model 'TagRelation'
         db.create_table('catalogue_tag_relation', (
-            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='items', to=orm['catalogue.Tag'])),
             ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('tag', self.gf('django.db.models.fields.related.ForeignKey')(related_name='items', to=orm['catalogue.Tag'])),
             ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])),
             ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')(db_index=True)),
         ))
@@ -38,40 +42,87 @@ class Migration(SchemaMigration):
 
         # Adding model 'Book'
         db.create_table('catalogue_book', (
-            ('parent', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='children', null=True, to=orm['catalogue.Book'])),
-            ('mp3_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
-            ('xml_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
-            ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
-            ('wiki_link', self.gf('django.db.models.fields.CharField')(max_length=240, blank=True)),
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
             ('title', self.gf('django.db.models.fields.CharField')(max_length=120)),
-            ('txt_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
+            ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=120, db_index=True)),
+            ('description', self.gf('django.db.models.fields.TextField')(blank=True)),
             ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-            ('pdf_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('html_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
             ('_short_html', self.gf('django.db.models.fields.TextField')()),
+            ('_short_html_de', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_en', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_es', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_fr', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_lt', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_pl', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_ru', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_uk', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
             ('parent_number', self.gf('django.db.models.fields.IntegerField')(default=0)),
-            ('ogg_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
-            ('odt_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
-            ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=120, db_index=True)),
-            ('gazeta_link', self.gf('django.db.models.fields.CharField')(max_length=240, blank=True)),
             ('extra_info', self.gf('catalogue.fields.JSONField')()),
+            ('gazeta_link', self.gf('django.db.models.fields.CharField')(max_length=240, blank=True)),
+            ('wiki_link', self.gf('django.db.models.fields.CharField')(max_length=240, blank=True)),
+            ('xml_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
+            ('html_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
+            ('pdf_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
+            ('epub_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
+            ('odt_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
+            ('txt_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
+            ('mp3_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
+            ('ogg_file', self.gf('django.db.models.fields.files.FileField')(max_length=100, blank=True)),
+            ('parent', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='children', null=True, to=orm['catalogue.Book'])),
+            ('_tag_counter', self.gf('catalogue.fields.JSONField')(null=True)),
+            ('_theme_counter', self.gf('catalogue.fields.JSONField')(null=True)),
         ))
         db.send_create_signal('catalogue', ['Book'])
 
         # Adding model 'Fragment'
         db.create_table('catalogue_fragment', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
             ('text', self.gf('django.db.models.fields.TextField')()),
-            ('anchor', self.gf('django.db.models.fields.CharField')(max_length=120)),
+            ('short_text', self.gf('django.db.models.fields.TextField')()),
             ('_short_html', self.gf('django.db.models.fields.TextField')()),
+            ('_short_html_de', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_en', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_es', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_fr', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_lt', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_pl', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_ru', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('_short_html_uk', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
+            ('anchor', self.gf('django.db.models.fields.CharField')(max_length=120)),
             ('book', self.gf('django.db.models.fields.related.ForeignKey')(related_name='fragments', to=orm['catalogue.Book'])),
-            ('short_text', self.gf('django.db.models.fields.TextField')()),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
         ))
         db.send_create_signal('catalogue', ['Fragment'])
 
+        # Adding model 'BookStub'
+        db.create_table('catalogue_bookstub', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('title', self.gf('django.db.models.fields.CharField')(max_length=120)),
+            ('author', self.gf('django.db.models.fields.CharField')(max_length=120)),
+            ('pd', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
+            ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=120, db_index=True)),
+            ('translator', self.gf('django.db.models.fields.TextField')(blank=True)),
+            ('translator_death', self.gf('django.db.models.fields.TextField')(blank=True)),
+        ))
+        db.send_create_signal('catalogue', ['BookStub'])
+
+        # Adding model 'FileRecord'
+        db.create_table('catalogue_filerecord', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('slug', self.gf('django.db.models.fields.SlugField')(max_length=120, db_index=True)),
+            ('type', self.gf('django.db.models.fields.CharField')(max_length=20, db_index=True)),
+            ('sha1', self.gf('django.db.models.fields.CharField')(max_length=40)),
+            ('time', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
+        ))
+        db.send_create_signal('catalogue', ['FileRecord'])
+
 
     def backwards(self, orm):
+        
+        # Removing unique constraint on 'TagRelation', fields ['tag', 'content_type', 'object_id']
+        db.delete_unique('catalogue_tag_relation', ['tag_id', 'content_type_id', 'object_id'])
+
+        # Removing unique constraint on 'Tag', fields ['slug', 'category']
+        db.delete_unique('catalogue_tag', ['slug', 'category'])
 
         # Deleting model 'Tag'
         db.delete_table('catalogue_tag')
@@ -79,25 +130,28 @@ class Migration(SchemaMigration):
         # Deleting model 'TagRelation'
         db.delete_table('catalogue_tag_relation')
 
-        # Removing unique constraint on 'TagRelation', fields ['tag', 'content_type', 'object_id']
-        db.delete_unique('catalogue_tag_relation', ['tag_id', 'content_type_id', 'object_id'])
-
         # Deleting model 'Book'
         db.delete_table('catalogue_book')
 
         # Deleting model 'Fragment'
         db.delete_table('catalogue_fragment')
 
+        # Deleting model 'BookStub'
+        db.delete_table('catalogue_bookstub')
+
+        # Deleting model 'FileRecord'
+        db.delete_table('catalogue_filerecord')
+
 
     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'})
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
         },
         'auth.permission': {
-            'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", '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'}),
@@ -108,22 +162,33 @@ class Migration(SchemaMigration):
             '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'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', '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'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
             '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'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
             'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
         },
         'catalogue.book': {
-            'Meta': {'object_name': 'Book'},
+            'Meta': {'ordering': "('title',)", 'object_name': 'Book'},
             '_short_html': ('django.db.models.fields.TextField', [], {}),
+            '_short_html_de': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_tag_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
+            '_theme_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
             'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
             'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'epub_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', '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'}),
@@ -140,9 +205,35 @@ class Migration(SchemaMigration):
             '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': {'ordering': "('title',)", '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.filerecord': {
+            'Meta': {'ordering': "('-time', '-slug', '-type')", 'object_name': 'FileRecord'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'sha1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '120', 'db_index': 'True'}),
+            'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'type': ('django.db.models.fields.CharField', [], {'max_length': '20', 'db_index': 'True'})
+        },
         'catalogue.fragment': {
-            'Meta': {'object_name': 'Fragment'},
+            'Meta': {'ordering': "('book', 'anchor')", 'object_name': 'Fragment'},
             '_short_html': ('django.db.models.fields.TextField', [], {}),
+            '_short_html_de': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
+            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
             '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'}),
@@ -150,15 +241,16 @@ class Migration(SchemaMigration):
             'text': ('django.db.models.fields.TextField', [], {})
         },
         'catalogue.tag': {
-            'Meta': {'object_name': 'Tag'},
-            'book_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'Meta': {'ordering': "('sort_key',)", 'unique_together': "(('slug', 'category'),)", 'object_name': 'Tag'},
+            'book_count': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
             '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'}),
+            'main_page': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': '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'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'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'})
@@ -171,7 +263,7 @@ class Migration(SchemaMigration):
             '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'"},
+            'Meta': {'ordering': "('name',)", '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'}),
diff --git a/apps/catalogue/migrations/0002_auto__add_bookstub__add_field_tag_death.py b/apps/catalogue/migrations/0002_auto__add_bookstub__add_field_tag_death.py
deleted file mode 100644 (file)
index c278a83..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-# 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 model 'BookStub'
-        db.create_table('catalogue_bookstub', (
-            ('author', self.gf('django.db.models.fields.CharField')(max_length=120)),
-            ('title', self.gf('django.db.models.fields.CharField')(max_length=120)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('translator', self.gf('django.db.models.fields.TextField')(blank=True)),
-            ('translator_death', self.gf('django.db.models.fields.TextField')(blank=True)),
-            ('pd', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
-            ('slug', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=120, db_index=True)),
-        ))
-        db.send_create_signal('catalogue', ['BookStub'])
-
-        # Adding field 'Tag.death'
-        db.add_column('catalogue_tag', 'death', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True), keep_default=False)
-
-
-    def backwards(self, orm):
-
-        # Deleting model 'BookStub'
-        db.delete_table('catalogue_bookstub')
-
-        # Deleting field 'Tag.death'
-        db.delete_column('catalogue_tag', 'death')
-
-
-    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', [], {}),
-            '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', [], {}),
-            '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/migrations/0003_fix_book_count_on_shelves.py b/apps/catalogue/migrations/0003_fix_book_count_on_shelves.py
deleted file mode 100644 (file)
index 8180311..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import connection, models
-qn = connection.ops.quote_name
-
-class Migration(DataMigration):
-
-    def forwards(self, orm):
-        model = orm.Book
-        model_table = qn(model._meta.db_table)
-        for tag in orm.Tag.objects.exclude(user=None):
-            query = """
-            SELECT COUNT(%(model_pk)s)        -- count books
-            FROM %(model)s, %(tagged_item)s   -- from books x tagged
-            WHERE
-              %(tagged_item)s.tag_id=%(tag_id)s   -- get only the shelf
-              AND %(model_pk)s = %(tagged_item)s.object_id  -- get only books on the shelf
-            GROUP BY %(tagged_item)s.tag_id""" % {
-                'model_pk': '%s.%s' % (model_table, qn(model._meta.pk.column)),
-                'model': model_table,
-                'tagged_item': qn(orm.TagRelation._meta.db_table),
-                'tag_id': tag.pk,
-            }
-
-            cursor = connection.cursor()
-            cursor.execute(query)
-            book_count = (cursor.fetchone() or (0,))[0]
-
-            tag.book_count = book_count
-            tag.save()
-
-    def backwards(self, orm):
-        "Write your backwards methods here."
-
-    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', [], {}),
-            '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', [], {}),
-            '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/migrations/0004_book_html_shorts_translations.py b/apps/catalogue/migrations/0004_book_html_shorts_translations.py
deleted file mode 100644 (file)
index d9e7b53..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# 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 'Book._short_html_en'
-        db.add_column('catalogue_book', '_short_html_en', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Book._short_html_es'
-        db.add_column('catalogue_book', '_short_html_es', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Book._short_html_de'
-        db.add_column('catalogue_book', '_short_html_de', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Book._short_html_fr'
-        db.add_column('catalogue_book', '_short_html_fr', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Book._short_html_uk'
-        db.add_column('catalogue_book', '_short_html_uk', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Book._short_html_pl'
-        db.add_column('catalogue_book', '_short_html_pl', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Book._short_html_ru'
-        db.add_column('catalogue_book', '_short_html_ru', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Book._short_html_lt'
-        db.add_column('catalogue_book', '_short_html_lt', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-
-    def backwards(self, orm):
-
-        # Deleting field 'Book._short_html_en'
-        db.delete_column('catalogue_book', '_short_html_en')
-
-        # Deleting field 'Book._short_html_es'
-        db.delete_column('catalogue_book', '_short_html_es')
-
-        # Deleting field 'Book._short_html_de'
-        db.delete_column('catalogue_book', '_short_html_de')
-
-        # Deleting field 'Book._short_html_fr'
-        db.delete_column('catalogue_book', '_short_html_fr')
-
-        # Deleting field 'Book._short_html_uk'
-        db.delete_column('catalogue_book', '_short_html_uk')
-
-        # Deleting field 'Book._short_html_pl'
-        db.delete_column('catalogue_book', '_short_html_pl')
-
-        # Deleting field 'Book._short_html_ru'
-        db.delete_column('catalogue_book', '_short_html_ru')
-
-        # Deleting field 'Book._short_html_lt'
-        db.delete_column('catalogue_book', '_short_html_lt')
-
-
-    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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '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', [], {}),
-            '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/migrations/0005_fragment_html_shorts_translations.py b/apps/catalogue/migrations/0005_fragment_html_shorts_translations.py
deleted file mode 100644 (file)
index 8322b4c..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-# 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')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Fragment._short_html_pl'
-        db.add_column('catalogue_fragment', '_short_html_pl', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Fragment._short_html_lt'
-        db.add_column('catalogue_fragment', '_short_html_lt', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Fragment._short_html_en'
-        db.add_column('catalogue_fragment', '_short_html_en', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Fragment._short_html_fr'
-        db.add_column('catalogue_fragment', '_short_html_fr', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Fragment._short_html_ru'
-        db.add_column('catalogue_fragment', '_short_html_ru', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Fragment._short_html_es'
-        db.add_column('catalogue_fragment', '_short_html_es', self.gf('django.db.models.fields.TextField')(null=True, blank=True), keep_default=False)
-
-        # Adding field 'Fragment._short_html_uk'
-        db.add_column('catalogue_fragment', '_short_html_uk', self.gf('django.db.models.fields.TextField')(null=True, blank=True), 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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '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/migrations/0006_epub_tag_counters_and_ltags_descendants.py b/apps/catalogue/migrations/0006_epub_tag_counters_and_ltags_descendants.py
deleted file mode 100644 (file)
index b990fc3..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-def get_ltag(book, orm):
-    ltag, created = orm.Tag.objects.get_or_create(slug='l-' + book.slug, category='book')
-    if created:
-        ltag.name = book.title
-        ltag.sort_key = ('l-' + book.slug)[:120]
-        ltag.save()
-    return ltag
-
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        """ Add _tag_counter and make sure all books carry their ancestors' l-tags """
-
-        # Adding fields
-        db.add_column('catalogue_book', '_tag_counter', self.gf('catalogue.fields.JSONField')(null=True))
-        db.add_column('catalogue_book', '_theme_counter', self.gf('catalogue.fields.JSONField')(null=True))
-        db.add_column('catalogue_book', 'epub_file', self.gf('django.db.models.fields.files.FileField')(default='', max_length=100, blank=True), keep_default=False)
-
-        def ltag_descendants(book, ltags=None):
-            if ltags is None:
-                ltags = []
-            for tag in ltags:
-                orm.TagRelation(object_id=book.pk, tag=tag, content_type=book_ct).save()
-                print book, tag
-            ltag = get_ltag(book, orm)
-            for child in book.children.all():
-                ltag_descendants(child, ltags + [ltag])
-
-        if not db.dry_run:
-            try:
-                book_ct = orm['contenttypes.contenttype'].objects.get(app_label='catalogue', model='book')
-            except:
-                return
-            # remove all l-tags on books
-            orm.TagRelation.objects.filter(content_type=book_ct, tag__category='book').delete()
-            for book in orm.Book.objects.filter(parent=None):
-                ltag_descendants(book)
-
-
-    def backwards(self, orm):
-        """ Delete _tag_counter and make sure books carry own l-tag. """
-
-        # Deleting fields
-        db.delete_column('catalogue_book', '_tag_counter')
-        db.delete_column('catalogue_book', '_theme_counter')
-        db.delete_column('catalogue_book', 'epub_file')
-
-        if not db.dry_run:
-            try:
-                book_ct = orm['contenttypes.contenttype'].objects.get(app_label='catalogue', model='book')
-            except:
-                return
-            # remove all l-tags on books
-            orm.TagRelation.objects.filter(content_type=book_ct, tag__category='book').delete()
-            for book in orm.Book.objects.filter(parent=None):
-                orm.TagRelation(object_id=book.pk, tag=get_ltag(book, orm), content_type=book_ct).save()
-
-
-    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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_tag_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            '_theme_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
-            'epub_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', '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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '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/migrations/0007_remove_empty_html.py b/apps/catalogue/migrations/0007_remove_empty_html.py
deleted file mode 100644 (file)
index 5b6f453..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import DataMigration
-from django.db import models
-
-class Migration(DataMigration):
-
-    def forwards(self, orm):
-        """ Look for HTML files without any real content and delete them """
-        from lxml import etree
-        from librarian.html import html_has_content
-
-        for book in orm.Book.objects.exclude(html_file=''):
-            if not html_has_content(etree.parse(book.html_file)):
-                book.html_file.delete()
-                # must do it by hand, we don't see real Book.save
-                for key in filter(lambda x: x.startswith('_short_html'), book.__dict__):
-                    book.__setattr__(key, '')
-                book.save()
-
-    def backwards(self, orm):
-        """ Do nothing. We don't want empty HTML files anyway. """
-        pass
-
-    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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_tag_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            '_theme_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
-            'epub_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', '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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '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/migrations/0008_unique_tag_category_slug.py b/apps/catalogue/migrations/0008_unique_tag_category_slug.py
deleted file mode 100644 (file)
index d130819..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-# 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):
-
-        # Removing unique constraint on 'Tag', fields ['slug']
-        db.delete_unique('catalogue_tag', ['slug'])
-
-        # Adding unique constraint on 'Tag', fields ['category', 'slug']
-        db.create_unique('catalogue_tag', ['category', 'slug'])
-
-
-    def backwards(self, orm):
-
-        # Adding unique constraint on 'Tag', fields ['slug']
-        db.create_unique('catalogue_tag', ['slug'])
-
-        # Removing unique constraint on 'Tag', fields ['category', 'slug']
-        db.delete_unique('catalogue_tag', ['category', 'slug'])
-
-
-    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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_tag_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            '_theme_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
-            'epub_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', '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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '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': {'unique_together': "(('slug', 'category'),)", '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', [], {'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/migrations/0009_chg_book_count__heavy_cleaning.py b/apps/catalogue/migrations/0009_chg_book_count__heavy_cleaning.py
deleted file mode 100644 (file)
index ed4f2b3..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-# 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):
-
-        # Changing field 'Tag.book_count'
-        db.alter_column('catalogue_tag', 'book_count', self.gf('django.db.models.fields.IntegerField')(null=True))
-
-        if not db.dry_run:
-            from django.contrib.contenttypes.models import ContentType
-            from django.utils.simplejson import loads, dumps
-
-            manager = orm.TagRelation.objects
-
-            def type_id(model):
-                return ContentType.objects.get_for_model(model).pk
-
-            def tagged_with_any(model, tags):
-                object_ids = {}
-                for relation in manager.filter(content_type=type_id(model), tag__in=tags):
-                    object_ids[relation.object_id] = 1
-                return model.objects.filter(pk__in=object_ids.keys())
-
-            def get_tags(instance):
-                return [relation.tag for relation in manager.filter(
-                            content_type=type_id(type(instance)), object_id=instance.pk).select_related()]
-
-            def refresh_book_count(tag):
-                if tag.category == 'theme':
-                    objects = tagged_with_any(orm.Fragment, [tag]).only()
-                else:
-                    objects = tagged_with_any(orm.Book, [tag]).only('slug')
-                    if tag.category != 'set':
-                        # eliminate descendants
-                        l_tags = orm.Tag.objects.filter(slug__in=['l-'+book.slug for book in objects])
-                        descendants_keys = [book.pk for book in tagged_with_any(orm.Book, l_tags)]
-                        if descendants_keys:
-                            objects = objects.exclude(pk__in=descendants_keys)
-                tag.book_count = objects.count()
-                tag.save()
-
-            def refresh_tag_counter(book):
-                tags = {}
-                for child in book.children.all().order_by():
-                    for tag_pk, value in tag_counter(child).iteritems():
-                        tags[tag_pk] = tags.get(tag_pk, 0) + value
-                for tag in [tag for tag in get_tags(book) if tag.category not in ('book', 'theme', 'set')]:
-                    tags[tag.pk] = 1
-                book._tag_counter = dumps(tags)
-                book.save()
-                return tags
-
-            def tag_counter(book):
-                if book._tag_counter is None:
-                    return refresh_tag_counter(book)
-                return dict((int(k), v) for k, v in loads(book._tag_counter).iteritems())
-
-            def theme_counter(book):
-                if book._theme_counter is None:
-                    tags = {}
-                    l_tag = orm.Tag.objects.get(slug='l-'+book.slug)
-                    for fragment in tagged_with_any(orm.Fragment, [l_tag]):
-                        for tag in [tag for tag in get_tags(fragment) if tag.category=='theme']:
-                            tags[tag.pk] = tags.get(tag.pk, 0) + 1
-                    book._theme_counter = dumps(tags)
-                    book.save()
-
-
-            # remove orphaned relations
-            book_type_id = type_id(orm.Book)
-            book_ids = [b.pk for b in orm.Book.objects.all().only()]
-            manager.filter(content_type=book_type_id).exclude(object_id__in=book_ids).delete()
-            del book_ids
-
-            fragment_type_id = type_id(orm.Fragment)
-            fragment_ids = [b.pk for b in orm.Fragment.objects.all().only()]
-            manager.filter(content_type=fragment_type_id).exclude(object_id__in=fragment_ids).delete()
-            del fragment_ids
-
-            tag_ids = [t.pk for t in orm.Tag.objects.all().only()]
-            manager.exclude(tag__in=tag_ids).delete()
-            del tag_ids
-
-            # remove theme tags for books
-            manager.filter(content_type=book_type_id).filter(tag__category='theme').delete()
-
-            # reset count fields
-            for tag in orm.Tag.objects.exclude(category__in=('book', 'set')).iterator():
-                refresh_book_count(tag)
-            for book in orm.Book.objects.all().iterator():
-                theme_counter(book)
-            for book in orm.Book.objects.filter(parent=None).iterator():
-                tag_counter(book)
-
-    def backwards(self, orm):
-
-        # Changing field 'Tag.book_count'
-        db.alter_column('catalogue_tag', 'book_count', self.gf('django.db.models.fields.IntegerField')())
-
-
-    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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_tag_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            '_theme_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
-            'epub_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', '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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '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': {'unique_together': "(('slug', 'category'),)", 'object_name': 'Tag'},
-            'book_count': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            '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', [], {'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/migrations/0010_auto__add_filerecord.py b/apps/catalogue/migrations/0010_auto__add_filerecord.py
deleted file mode 100644 (file)
index f072365..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-# 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 model 'FileRecord'
-        db.create_table('catalogue_filerecord', (
-            ('time', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('sha1', self.gf('django.db.models.fields.CharField')(max_length=40)),
-            ('type', self.gf('django.db.models.fields.CharField')(max_length=20, db_index=True)),
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('slug', self.gf('django.db.models.fields.SlugField')(max_length=120, db_index=True)),
-        ))
-        db.send_create_signal('catalogue', ['FileRecord'])
-    
-    
-    def backwards(self, orm):
-        
-        # Deleting model 'FileRecord'
-        db.delete_table('catalogue_filerecord')
-    
-    
-    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', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_tag_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            '_theme_counter': ('catalogue.fields.JSONField', [], {'null': 'True'}),
-            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
-            'epub_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', '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.filerecord': {
-            'Meta': {'object_name': 'FileRecord'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'sha1': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
-            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '120', 'db_index': 'True'}),
-            'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'type': ('django.db.models.fields.CharField', [], {'max_length': '20', 'db_index': 'True'})
-        },
-        'catalogue.fragment': {
-            'Meta': {'object_name': 'Fragment'},
-            '_short_html': ('django.db.models.fields.TextField', [], {}),
-            '_short_html_de': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_en': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_es': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_fr': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_lt': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_pl': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_ru': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '_short_html_uk': ('django.db.models.fields.TextField', [], {'null': True, 'blank': True}),
-            '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': {'unique_together': "(('slug', 'category'),)", 'object_name': 'Tag'},
-            'book_count': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            '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', [], {'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']
index 79faca7..d74ca75 100644 (file)
@@ -326,7 +326,7 @@ def _sqlite_word_starts_with(name, prefix):
     return Q(**kwargs)
 
 
-if settings.DATABASE_ENGINE == 'sqlite3':
+if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':
     _word_starts_with = _sqlite_word_starts_with
 
 
index ea2a41f..e9b1141 100644 (file)
@@ -215,8 +215,18 @@ class TagManager(models.Manager):
         if parse_lookup:
             raise AttributeError("'TagManager.usage_for_queryset' is not compatible with pre-queryset-refactor versions of Django.")
 
-        extra_joins = ' '.join(queryset.query.get_from_clause()[0][1:])
-        where, params = queryset.query.where.as_sql()
+        if getattr(queryset.query, 'get_compiler', None):
+            # Django 1.2+
+            compiler = queryset.query.get_compiler(using='default')
+            extra_joins = ' '.join(compiler.get_from_clause()[0][1:])
+            where, params = queryset.query.where.as_sql(
+                compiler.quote_name_unless_alias, compiler.connection
+            )
+        else:
+            # Django pre-1.2
+            extra_joins = ' '.join(queryset.query.get_from_clause()[0][1:])
+            where, params = queryset.query.where.as_sql()
+
         if where:
             extra_criteria = 'AND %s' % where
         else:
index c2098ec..ba98081 100644 (file)
@@ -47,7 +47,7 @@ class JSONField(models.TextField):
         defaults.update(kwargs)
         return super(JSONField, self).formfield(**defaults)
 
-    def db_type(self):
+    def db_type(self, connection):
         return 'text'
 
     def get_internal_type(self):
index 62485f3..abe5b7e 100644 (file)
@@ -1,7 +1,7 @@
 --find-links=http://www.pythonware.com/products/pil/
 
 # django
-Django>=1.1.1,<1.2
+Django>=1.2
 South>=0.7 # migrations for django
 django-pagination>=1.0
 django-rosetta>=0.5.3
index b3f3c78..0efb145 100644 (file)
@@ -14,12 +14,16 @@ ADMINS = [
 
 MANAGERS = ADMINS
 
-DATABASE_ENGINE = 'sqlite3'    # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
-DATABASE_NAME = path.join(PROJECT_DIR, 'dev.db')  # Or path to database file if using sqlite3.
-DATABASE_USER = ''             # Not used with sqlite3.
-DATABASE_PASSWORD = ''         # Not used with sqlite3.
-DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
-DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+        'NAME': path.join(PROJECT_DIR, 'dev.db'), # Or path to database file if using sqlite3.
+        'USER': '',                      # Not used with sqlite3.
+        'PASSWORD': '',                  # Not used with sqlite3.
+        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
+        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
+    }
+}
 
 # Local time zone for this installation. Choices can be found here:
 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
index 1a09a0a..a0b57b3 100644 (file)
@@ -32,7 +32,7 @@ urlpatterns = patterns('',
     # Admin panel
     url(r'^admin/catalogue/book/import$', 'catalogue.views.import_book', name='import_book'),
     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
-    url(r'^admin/(.*)$', admin.site.root),
+    url(r'^admin/', include(admin.site.urls)),
 
     # Authentication
     url(r'^uzytkownicy/zaloguj/$', 'catalogue.views.login', name='login'),