From b2541b6c5da10e4fbcd8e4975973b539af3fec21 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Rekucki?= Date: Thu, 27 May 2010 20:12:21 +0200 Subject: [PATCH 1/1] Squashed a bunch of buggy migrations. --- apps/catalogue/fields.py | 30 ++- apps/catalogue/migrations/0001_initial.py | 231 +++++++++++++----- .../migrations/0002_add_extra_info_to_book.py | 11 - .../0003_add_mp3_and_ogg_files_to_book.py | 13 - .../migrations/0004_add_gazeta_links.py | 13 - .../migrations/0005_add_wiki_links.py | 13 - 6 files changed, 191 insertions(+), 120 deletions(-) delete mode 100644 apps/catalogue/migrations/0002_add_extra_info_to_book.py delete mode 100644 apps/catalogue/migrations/0003_add_mp3_and_ogg_files_to_book.py delete mode 100644 apps/catalogue/migrations/0004_add_gazeta_links.py delete mode 100644 apps/catalogue/migrations/0005_add_wiki_links.py diff --git a/apps/catalogue/fields.py b/apps/catalogue/fields.py index 2c0c76503..ded6f0e93 100644 --- a/apps/catalogue/fields.py +++ b/apps/catalogue/fields.py @@ -38,7 +38,7 @@ def loads(str): class JSONFormField(forms.CharField): widget = forms.Textarea - + def clean(self, value): try: loads(value) @@ -61,7 +61,7 @@ class JSONField(models.TextField): def contribute_to_class(self, cls, name): super(JSONField, self).contribute_to_class(cls, name) - + def get_value(model_instance): return loads(getattr(model_instance, self.attname, None)) setattr(cls, 'get_%s_value' % self.name, get_value) @@ -80,23 +80,23 @@ class JQueryAutoCompleteWidget(forms.TextInput): if options: self.options = dumps(options) super(JQueryAutoCompleteWidget, self).__init__(*args, **kwargs) - + def render_js(self, field_id): source = "'%s'" % escape(self.source) options = '' if self.options: options += ', %s' % self.options - + return u'$(\'#%s\').autocomplete(%s%s).result(autocomplete_result_handler);' % (field_id, source, options) - + def render(self, name, value=None, attrs=None): final_attrs = self.build_attrs(attrs, name=name) if value: final_attrs['value'] = smart_unicode(value) - + if not self.attrs.has_key('id'): final_attrs['id'] = 'id_%s' % name - + html = u''' @@ -104,7 +104,7 @@ class JQueryAutoCompleteWidget(forms.TextInput): 'attrs' : flatatt(final_attrs), 'js' : self.render_js(final_attrs['id']), } - + return mark_safe(html) @@ -112,6 +112,18 @@ class JQueryAutoCompleteField(forms.CharField): def __init__(self, source, options=None, *args, **kwargs): if 'widget' not in kwargs: kwargs['widget'] = JQueryAutoCompleteWidget(source, options) - + super(JQueryAutoCompleteField, self).__init__(*args, **kwargs) +try: + # check for south + from south.modelsinspector import add_introspection_rules + + add_introspection_rules([ + ( + [JSONField], # Class(es) these apply to + [], # Positional arguments (not used) + {}, # Keyword argument + ), ], ["^catalogue\.fields\.JSONField"]) +except ImportError: + pass diff --git a/apps/catalogue/migrations/0001_initial.py b/apps/catalogue/migrations/0001_initial.py index 3b16076fd..05ba18d1e 100644 --- a/apps/catalogue/migrations/0001_initial.py +++ b/apps/catalogue/migrations/0001_initial.py @@ -1,73 +1,182 @@ -from django.db import models -from django.contrib.contenttypes.models import ContentType -from django.contrib.auth.models import User +# 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 'Tag' + db.create_table('catalogue_tag', ( + ('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)), + ('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)), + )) + db.send_create_signal('catalogue', ['Tag']) -# Mock gettext -_ = lambda s: s + # 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)), + ('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)), + )) + db.send_create_signal('catalogue', ['TagRelation']) + # Adding unique constraint on 'TagRelation', fields ['tag', 'content_type', 'object_id'] + db.create_unique('catalogue_tag_relation', ['tag_id', 'content_type_id', 'object_id']) -class Migration: - - def forwards(self): - # Model 'Book' - Book = db.mock_model(model_name='Book', db_table='catalogue_book', db_tablespace='', pk_field_name='id', pk_field_type=models.AutoField) + # Adding model 'Book' db.create_table('catalogue_book', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('title', models.CharField(_('title'), max_length=120)), - ('slug', models.SlugField(_('slug'), max_length=120, unique=True, db_index=True)), - ('description', models.TextField(_('description'), blank=True)), - ('created_at', models.DateTimeField(_('creation date'), auto_now=True)), - ('_short_html', models.TextField(_('short HTML'), editable=False)), - ('parent_number', models.IntegerField(_('parent number'), default=0)), - ('xml_file', models.FileField(_('XML file'), blank=True)), - ('html_file', models.FileField(_('HTML file'), blank=True)), - ('pdf_file', models.FileField(_('PDF file'), blank=True)), - ('odt_file', models.FileField(_('ODT file'), blank=True)), - ('txt_file', models.FileField(_('TXT file'), blank=True)), - ('parent', models.ForeignKey(Book, blank=True, null=True, related_name='children')), + ('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)), + ('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)), + ('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')()), + ('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')()), )) - - # Model 'Fragment' - Fragment = db.mock_model(model_name='Fragment', db_table='catalogue_fragment', db_tablespace='', pk_field_name='id', pk_field_type=models.AutoField) + db.send_create_signal('catalogue', ['Book']) + + # Adding model 'Fragment' db.create_table('catalogue_fragment', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('text', models.TextField()), - ('short_text', models.TextField(editable=False)), - ('_short_html', models.TextField(editable=False)), - ('anchor', models.CharField(max_length=120)), - ('book', models.ForeignKey(Book, related_name='fragments')), - )) - - # Model 'Tag' - Tag = db.mock_model(model_name='Tag', db_table='catalogue_tag', db_tablespace='', pk_field_name='id', pk_field_type=models.AutoField) - db.create_table('catalogue_tag', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('name', models.CharField(_('name'), max_length=50, db_index=True)), - ('slug', models.SlugField(_('slug'), max_length=120, unique=True, db_index=True)), - ('sort_key', models.SlugField(_('sort key'), max_length=120, db_index=True)), - ('category', models.CharField(_('category'), max_length=50, blank=False, null=False, db_index=True)), - ('description', models.TextField(_('description'), blank=True)), - ('main_page', models.BooleanField(_('main page'), default=False, db_index=True, help_text=_('Show tag on main page'))), - ('user', models.ForeignKey(User, blank=True, null=True)), - ('book_count', models.IntegerField(_('book count'), default=0, blank=False, null=False)), - )) - - # Model 'TagRelation' - TagRelation = db.mock_model(model_name='TagRelation', db_table='catalogue_tag_relation', db_tablespace='', pk_field_name='id', pk_field_type=models.AutoField) - db.create_table('catalogue_tag_relation', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('tag', models.ForeignKey(Tag, verbose_name=_('tag'), related_name='items')), - ('content_type', models.ForeignKey(ContentType, verbose_name=_('content type'))), - ('object_id', models.PositiveIntegerField(_('object id'), db_index=True)), + ('text', self.gf('django.db.models.fields.TextField')()), + ('anchor', self.gf('django.db.models.fields.CharField')(max_length=120)), + ('_short_html', self.gf('django.db.models.fields.TextField')()), + ('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', ['Book','Fragment']) + db.send_create_signal('catalogue', ['Fragment']) - def backwards(self): - db.delete_table('catalogue_tag_relation') + + def backwards(self, orm): + + # Deleting model 'Tag' db.delete_table('catalogue_tag') - db.delete_table('catalogue_fragment') + + # 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') + + + 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.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'}), + '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/0002_add_extra_info_to_book.py b/apps/catalogue/migrations/0002_add_extra_info_to_book.py deleted file mode 100644 index 6de40ba94..000000000 --- a/apps/catalogue/migrations/0002_add_extra_info_to_book.py +++ /dev/null @@ -1,11 +0,0 @@ -from south.db import db -from catalogue.fields import JSONField - -class Migration: - - def forwards(self): - db.add_column('catalogue_book', 'extra_info', JSONField(null=True)) - - def backwards(self): - db.delete_column('catalogue_book', 'extra_info') - diff --git a/apps/catalogue/migrations/0003_add_mp3_and_ogg_files_to_book.py b/apps/catalogue/migrations/0003_add_mp3_and_ogg_files_to_book.py deleted file mode 100644 index 80d94c049..000000000 --- a/apps/catalogue/migrations/0003_add_mp3_and_ogg_files_to_book.py +++ /dev/null @@ -1,13 +0,0 @@ -from south.db import db -from django.db.models import FileField - -class Migration: - - def forwards(self): - db.add_column('catalogue_book', 'mp3_file', FileField(null=True)) - db.add_column('catalogue_book', 'ogg_file', FileField(null=True)) - - def backwards(self): - db.delete_column('catalogue_book', 'mp3_file') - db.delete_column('catalogue_book', 'ogg_file') - diff --git a/apps/catalogue/migrations/0004_add_gazeta_links.py b/apps/catalogue/migrations/0004_add_gazeta_links.py deleted file mode 100644 index 1e8457d29..000000000 --- a/apps/catalogue/migrations/0004_add_gazeta_links.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -from south.db import db -from django.db import models - - -class Migration: - def forwards(self): - db.add_column('catalogue_tag', 'gazeta_link', models.CharField(blank=True, max_length=240, default='')) - db.add_column('catalogue_book', 'gazeta_link', models.CharField(blank=True, max_length=240, default='')) - - def backwards(self): - db.delete_column('catalogue_tag', 'gazeta_link') - db.delete_column('catalogue_book', 'gazeta_link') diff --git a/apps/catalogue/migrations/0005_add_wiki_links.py b/apps/catalogue/migrations/0005_add_wiki_links.py deleted file mode 100644 index 3fb423ae3..000000000 --- a/apps/catalogue/migrations/0005_add_wiki_links.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -from south.db import db -from django.db import models - - -class Migration: - def forwards(self): - db.add_column('catalogue_tag', 'wiki_link', models.CharField(blank=True, max_length=240, default='')) - db.add_column('catalogue_book', 'wiki_link', models.CharField(blank=True, max_length=240, default='')) - - def backwards(self): - db.delete_column('catalogue_tag', 'wiki_link') - db.delete_column('catalogue_book', 'wiki_link') -- 2.20.1