diff --git a/src/accounts/migrations/0001_initial.py b/src/accounts/migrations/0001_initial.py index bcb0ae7..59fd7a6 100644 --- a/src/accounts/migrations/0001_initial.py +++ b/src/accounts/migrations/0001_initial.py @@ -1,116 +1,50 @@ # -*- coding: 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 'User' - db.create_table(u'accounts_user', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('password', self.gf('django.db.models.fields.CharField')(max_length=128)), - ('last_login', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), - ('is_superuser', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('username', self.gf('django.db.models.fields.CharField')(unique=True, max_length=30)), - ('first_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)), - ('last_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)), - ('email', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75, blank=True)), - ('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('is_active', self.gf('django.db.models.fields.BooleanField')(default=True)), - ('date_joined', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)), - ('institution', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)), - ('role', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)), - ('twitter', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)), - ('facebook', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)), - ('google_talk', self.gf('django.db.models.fields.EmailField')(max_length=75, null=True, blank=True)), - ('github', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)), - ('webpage', self.gf('django.db.models.fields.CharField')(max_length=256, null=True, blank=True)), - ('verification_hash', self.gf('django.db.models.fields.CharField')(max_length=32, null=True, blank=True)), - ('modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)), - ('bio', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), - )) - db.send_create_signal(u'accounts', ['User']) - - # Adding M2M table for field groups on 'User' - m2m_table_name = db.shorten_name(u'accounts_user_groups') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('user', models.ForeignKey(orm[u'accounts.user'], null=False)), - ('group', models.ForeignKey(orm[u'auth.group'], null=False)) - )) - db.create_unique(m2m_table_name, ['user_id', 'group_id']) - - # Adding M2M table for field user_permissions on 'User' - m2m_table_name = db.shorten_name(u'accounts_user_user_permissions') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('user', models.ForeignKey(orm[u'accounts.user'], null=False)), - ('permission', models.ForeignKey(orm[u'auth.permission'], null=False)) - )) - db.create_unique(m2m_table_name, ['user_id', 'permission_id']) - - - def backwards(self, orm): - # Deleting model 'User' - db.delete_table(u'accounts_user') - - # Removing M2M table for field groups on 'User' - db.delete_table(db.shorten_name(u'accounts_user_groups')) - - # Removing M2M table for field user_permissions on 'User' - db.delete_table(db.shorten_name(u'accounts_user_user_permissions')) - - - models = { - u'accounts.user': { - 'Meta': {'object_name': 'User'}, - 'bio': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}), - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'github': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', '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'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}), - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'}) - }, - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'contenttypes.contenttype': { - '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'}), - u'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 = ['accounts'] \ No newline at end of file +from __future__ import unicode_literals + +from django.db import models, migrations +import django.utils.timezone +import django.core.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('auth', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(default=django.utils.timezone.now, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(help_text='Required. 30 characters or fewer. Letters, digits and ./+/-/_ only.', unique=True, max_length=30, verbose_name='username', validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username.', 'invalid')])), + ('first_name', models.CharField(max_length=30, verbose_name='first name', blank=True)), + ('last_name', models.CharField(max_length=30, verbose_name='last name', blank=True)), + ('email', models.EmailField(unique=True, max_length=75, verbose_name='email address', blank=True)), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('institution', models.CharField(max_length=128, null=True, blank=True)), + ('role', models.CharField(max_length=128, null=True, blank=True)), + ('twitter', models.CharField(max_length=128, null=True, blank=True)), + ('facebook', models.CharField(max_length=128, null=True, blank=True)), + ('google_talk', models.EmailField(max_length=75, null=True, blank=True)), + ('github', models.CharField(max_length=128, null=True, verbose_name='github', blank=True)), + ('webpage', models.CharField(max_length=256, null=True, blank=True)), + ('verification_hash', models.CharField(max_length=32, null=True, blank=True)), + ('modified', models.DateTimeField(auto_now=True)), + ('bio', models.CharField(max_length=200, null=True, blank=True)), + ('groups', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Group', blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of his/her group.', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Permission', blank=True, help_text='Specific permissions for this user.', verbose_name='user permissions')), + ], + options={ + 'abstract': False, + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + }, + bases=(models.Model,), + ), + ] diff --git a/src/badger/migrations/0001_initial.py b/src/badger/migrations/0001_initial.py deleted file mode 100644 index 62df770..0000000 --- a/src/badger/migrations/0001_initial.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: 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 'Badge' - db.create_table(u'badger_badge', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('title', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), - ('description', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), - ('image_base64', self.gf('django.db.models.fields.TextField')()), - ('type', self.gf('django.db.models.fields.CharField')(max_length=200)), - ('user_attr', self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True)), - ('comparison', self.gf('django.db.models.fields.CharField')(max_length=10, null=True, blank=True)), - ('value', self.gf('django.db.models.fields.PositiveSmallIntegerField')(null=True, blank=True)), - ('order', self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=100)), - )) - db.send_create_signal(u'badger', ['Badge']) - - # Adding M2M table for field awardees on 'Badge' - m2m_table_name = db.shorten_name(u'badger_badge_awardees') - db.create_table(m2m_table_name, ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('badge', models.ForeignKey(orm[u'badger.badge'], null=False)), - ('user', models.ForeignKey(orm[u'accounts.user'], null=False)) - )) - db.create_unique(m2m_table_name, ['badge_id', 'user_id']) - - # Adding model 'BadgeI18N' - db.create_table(u'badger_badgei18n', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('i18n_language', self.gf('django.db.models.fields.CharField')(max_length=10)), - ('title', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), - ('description', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)), - ('i18n_source', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', to=orm['badger.Badge'])), - )) - db.send_create_signal(u'badger', ['BadgeI18N']) - - # Adding unique constraint on 'BadgeI18N', fields ['i18n_source', 'i18n_language'] - db.create_unique(u'badger_badgei18n', ['i18n_source_id', 'i18n_language']) - - - def backwards(self, orm): - # Removing unique constraint on 'BadgeI18N', fields ['i18n_source', 'i18n_language'] - db.delete_unique(u'badger_badgei18n', ['i18n_source_id', 'i18n_language']) - - # Deleting model 'Badge' - db.delete_table(u'badger_badge') - - # Removing M2M table for field awardees on 'Badge' - db.delete_table(db.shorten_name(u'badger_badge_awardees')) - - # Deleting model 'BadgeI18N' - db.delete_table(u'badger_badgei18n') - - - models = { - u'accounts.user': { - 'Meta': {'object_name': 'User'}, - 'bio': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}), - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'github': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', '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'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}), - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'}) - }, - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'badger.badge': { - 'Meta': {'ordering': "['order']", 'object_name': 'Badge'}, - 'awardees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['accounts.User']", 'null': 'True', 'blank': 'True'}), - 'comparison': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image_base64': ('django.db.models.fields.TextField', [], {}), - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}), - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), - 'type': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'user_attr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), - 'value': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}) - }, - u'badger.badgei18n': { - 'Meta': {'unique_together': "(('i18n_source', 'i18n_language'),)", 'object_name': 'BadgeI18N'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), - 'i18n_language': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'i18n_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': u"orm['badger.Badge']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}) - }, - u'contenttypes.contenttype': { - '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'}), - u'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 = ['badger'] \ No newline at end of file diff --git a/src/badger/migrations/__init__.py b/src/badger/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/src/badger/migrations/__init__.py +++ /dev/null diff --git a/src/colab/custom_settings.py b/src/colab/custom_settings.py index f03d9b7..e4aee86 100644 --- a/src/colab/custom_settings.py +++ b/src/colab/custom_settings.py @@ -93,7 +93,6 @@ INSTALLED_APPS += ( 'accounts', # Not standard apps - 'south', 'raven.contrib.django.raven_compat', 'cliauth', 'django_mobile', diff --git a/src/proxy/trac/migrations/0001_initial.py b/src/proxy/trac/migrations/0001_initial.py index 1fe5d32..260e159 100644 --- a/src/proxy/trac/migrations/0001_initial.py +++ b/src/proxy/trac/migrations/0001_initial.py @@ -1,250 +1,142 @@ # -*- coding: utf-8 -*- -import datetime +from __future__ import unicode_literals + +from django.db import models, migrations from django.db import connections -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - connection = connections['trac'] - - cursor = connection.cursor() - cursor.execute(''' - CREATE OR REPLACE VIEW wiki_view AS SELECT - wiki.name AS name, - (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name - AND wiki2.version = MAX(wiki.version)) AS wiki_text, - (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name - AND wiki3.version = 1) AS author, - string_agg(DISTINCT wiki.author, ', ') AS collaborators, - TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS created, - TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS modified - FROM wiki - GROUP BY wiki.name; - - CREATE OR REPLACE VIEW ticket_view AS SELECT - ticket.id AS id, - ticket.summary as summary, - ticket.description as description, - ticket.milestone as milestone, - ticket.priority as priority, - ticket.component as component, - ticket.version as version, - ticket.severity as severity, - ticket.reporter as reporter, - ticket.reporter as author, - ticket.status as status, - ticket.keywords as keywords, - (SELECT - string_agg(DISTINCT ticket_change.author, ', ') - FROM ticket_change WHERE ticket_change.ticket = ticket.id - GROUP BY ticket_change.ticket) as collaborators, - TIMESTAMP WITH TIME ZONE 'epoch' + (time/1000000)* INTERVAL '1s' AS created, - TIMESTAMP WITH TIME ZONE 'epoch' + (changetime/1000000) * INTERVAL '1s' AS modified - FROM ticket; - - CREATE OR REPLACE VIEW revision_view AS SELECT - revision.rev, - revision.author, - revision.message, - repository.value AS repository_name, - TIMESTAMP WITH TIME ZONE 'epoch' + (revision.time/1000000) * INTERVAL '1s' AS created - FROM revision - INNER JOIN repository ON( - repository.id = revision.repos - AND repository.name = 'name' - AND repository.value != '' - ); + + +def create_views(apps, schema_editor): + connection = connections['trac'] + + cursor = connection.cursor() + + # revision_view + cursor.execute(''' + CREATE OR REPLACE VIEW revision_view AS SELECT + revision.rev, + revision.author, + revision.message, + repository.value AS repository_name, + TIMESTAMP WITH TIME ZONE 'epoch' + (revision.time/1000000) * INTERVAL '1s' AS created, + CONCAT(revision.repos, '-', revision.rev) AS key + FROM revision + INNER JOIN repository ON( + repository.id = revision.repos + AND repository.name = 'name' + AND repository.value != '' + ); + ''') + + # attachment_view + cursor.execute(''' + CREATE OR REPLACE VIEW attachment_view AS SELECT + CONCAT(attachment.type, '/' , attachment.id, '/', attachment.filename) AS url, + attachment.type AS used_by, + attachment.filename AS filename, + attachment.id as attach_id, + (SELECT LOWER(SUBSTRING(attachment.filename FROM '\.(\w+)$'))) AS mimetype, + attachment.author AS author, + attachment.description AS description, + attachment.size AS size, + TIMESTAMP WITH TIME ZONE 'epoch' + (attachment.time/1000000)* INTERVAL '1s' AS created + FROM attachment; + ''') + + # wiki_view + cursor.execute(''' + CREATE OR REPLACE VIEW wiki_view AS SELECT + wiki.name AS name, + (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name + AND wiki2.version = MAX(wiki.version)) AS wiki_text, + (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name + AND wiki3.version = 1) AS author, + string_agg(DISTINCT wiki.author, ', ') AS collaborators, + TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS created, + TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS modified, + (SELECT wiki4.author FROM wiki AS wiki4 WHERE wiki4.name = wiki.name + AND wiki4.version = MAX(wiki.version)) AS modified_by + FROM wiki + GROUP BY wiki.name; ''') - cursor.execute(''' - CREATE OR REPLACE VIEW revision_view AS SELECT - revision.rev, - revision.author, - revision.message, - repository.value AS repository_name, - TIMESTAMP WITH TIME ZONE 'epoch' + (revision.time/1000000) * INTERVAL '1s' AS created, - CONCAT(revision.repos, '-', revision.rev) AS key - FROM revision - INNER JOIN repository ON( - repository.id = revision.repos - AND repository.name = 'name' - AND repository.value != '' - ); - ''') - cursor.execute(''' - CREATE OR REPLACE VIEW attachment_view AS SELECT - CONCAT(attachment.type, '/' , attachment.id, '/', attachment.filename) AS url, - attachment.type AS used_by, - attachment.filename AS filename, - attachment.id as attach_id, - (SELECT LOWER(SUBSTRING(attachment.filename FROM '\.(\w+)$'))) AS mimetype, - attachment.author AS author, - attachment.description AS description, - attachment.size AS size, - TIMESTAMP WITH TIME ZONE 'epoch' + (attachment.time/1000000)* INTERVAL '1s' AS created - FROM attachment; - ''') - cursor.execute(''' - CREATE OR REPLACE VIEW wiki_view AS SELECT - wiki.name AS name, - (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name - AND wiki2.version = MAX(wiki.version)) AS wiki_text, - (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name - AND wiki3.version = 1) AS author, - string_agg(DISTINCT wiki.author, ', ') AS collaborators, - TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS created, - TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS modified - FROM wiki - GROUP BY wiki.name; - ''') - cursor.execute(''' - CREATE OR REPLACE VIEW wiki_view AS SELECT - wiki.name AS name, - (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name - AND wiki2.version = MAX(wiki.version)) AS wiki_text, - (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name - AND wiki3.version = 1) AS author, - string_agg(DISTINCT wiki.author, ', ') AS collaborators, - TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS created, - TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS modified, - (SELECT wiki4.author FROM wiki AS wiki4 WHERE wiki4.name = wiki.name - AND wiki4.version = MAX(wiki.version)) AS modified_by - FROM wiki - GROUP BY wiki.name; - - CREATE OR REPLACE VIEW ticket_view AS SELECT - ticket.id AS id, - ticket.summary as summary, - ticket.description as description, - ticket.milestone as milestone, - ticket.priority as priority, - ticket.component as component, - ticket.version as version, - ticket.severity as severity, - ticket.reporter as reporter, - ticket.reporter as author, - ticket.status as status, - ticket.keywords as keywords, - (SELECT - string_agg(DISTINCT ticket_change.author, ', ') - FROM ticket_change WHERE ticket_change.ticket = ticket.id - GROUP BY ticket_change.ticket) as collaborators, - TIMESTAMP WITH TIME ZONE 'epoch' + (time/1000000)* INTERVAL '1s' AS created, - TIMESTAMP WITH TIME ZONE 'epoch' + (changetime/1000000) * INTERVAL '1s' AS modified, - (SELECT - ticket_change.author - FROM ticket_change - WHERE ticket_change.ticket = ticket.id - AND ticket_change.time = ticket.changetime - LIMIT 1 - ) AS modified_by - FROM ticket; - ''') - cursor.execute(''' - CREATE OR REPLACE VIEW ticket_collab_count_view AS - SELECT - COALESCE (t1.author, t2.author) as author, - (COALESCE(t1.count, 0) + COALESCE(t2.count, 0)) as count - FROM - (SELECT author, count(*) as count - FROM ticket_change - GROUP BY author - ORDER BY author - ) AS t1 - FULL OUTER JOIN - (SELECT reporter as author, count(*) as count - FROM ticket - GROUP BY reporter - ORDER BY reporter - ) AS t2 - ON t1.author = t2.author; - - CREATE OR REPLACE VIEW wiki_collab_count_view AS - SELECT author, count(*) from wiki GROUP BY author; - ''') - - pass - - def backwards(self, orm): - connection = connections['trac'] - - cursor = connection.cursor() - cursor.execute(''' - DROP VIEW IF EXISTS revision_view; - DROP VIEW IF EXISTS ticket_view; - DROP VIEW IF EXISTS wiki_view; - DROP VIEW IF EXISTS ticket_collab_count_view; - DROP VIEW IF EXISTS wiki_collab_count_view; - DROP VIEW IF EXISTS attachment_view; - ''') - - pass - - models = { - u'proxy.attachment': { - 'Meta': {'object_name': 'Attachment', 'db_table': "'attachment_view'", 'managed': 'False'}, - 'attach_id': ('django.db.models.fields.TextField', [], {}), - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'filename': ('django.db.models.fields.TextField', [], {}), - 'mimetype': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'size': ('django.db.models.fields.IntegerField', [], {'blank': 'True'}), - 'url': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}), - 'used_by': ('django.db.models.fields.TextField', [], {}) - }, - u'proxy.revision': { - 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'}, - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'rev': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - u'proxy.ticket': { - 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'}, - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}), - 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'modified_by': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - u'proxy.ticketcollabcount': { - 'Meta': {'object_name': 'TicketCollabCount', 'db_table': "'ticket_collab_count_view'", 'managed': 'False'}, - 'author': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}), - 'count': ('django.db.models.fields.IntegerField', [], {}) - }, - u'proxy.wiki': { - 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'}, - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'modified_by': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}), - 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - u'proxy.wikicollabcount': { - 'Meta': {'object_name': 'WikiCollabCount', 'db_table': "'wiki_collab_count_view'", 'managed': 'False'}, - 'author': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}), - 'count': ('django.db.models.fields.IntegerField', [], {}) - } - } - - complete_apps = ['proxy'] - symmetrical = True \ No newline at end of file + + # ticket_view + cursor.execute(''' + CREATE OR REPLACE VIEW ticket_view AS SELECT + ticket.id AS id, + ticket.summary as summary, + ticket.description as description, + ticket.milestone as milestone, + ticket.priority as priority, + ticket.component as component, + ticket.version as version, + ticket.severity as severity, + ticket.reporter as reporter, + ticket.reporter as author, + ticket.status as status, + ticket.keywords as keywords, + (SELECT + string_agg(DISTINCT ticket_change.author, ', ') + FROM ticket_change WHERE ticket_change.ticket = ticket.id + GROUP BY ticket_change.ticket) as collaborators, + TIMESTAMP WITH TIME ZONE 'epoch' + (time/1000000)* INTERVAL '1s' AS created, + TIMESTAMP WITH TIME ZONE 'epoch' + (changetime/1000000) * INTERVAL '1s' AS modified, + (SELECT + ticket_change.author + FROM ticket_change + WHERE ticket_change.ticket = ticket.id + AND ticket_change.time = ticket.changetime + LIMIT 1 + ) AS modified_by + FROM ticket; + ''') + + # ticket_collab_count_view + cursor.execute(''' + CREATE OR REPLACE VIEW ticket_collab_count_view AS + SELECT + COALESCE (t1.author, t2.author) as author, + (COALESCE(t1.count, 0) + COALESCE(t2.count, 0)) as count + FROM + (SELECT author, count(*) as count + FROM ticket_change + GROUP BY author + ORDER BY author + ) AS t1 + FULL OUTER JOIN + (SELECT reporter as author, count(*) as count + FROM ticket + GROUP BY reporter + ORDER BY reporter + ) AS t2 + ON t1.author = t2.author; + ''') + + # wiki_collab_count_view + cursor.execute(''' + CREATE OR REPLACE VIEW wiki_collab_count_view AS + SELECT author, count(*) from wiki GROUP BY author; + ''') + + +def drop_views(apps, schema_editor): + connection = connections['trac'] + + cursor = connection.cursor() + cursor.execute(''' + DROP VIEW IF EXISTS revision_view; + DROP VIEW IF EXISTS ticket_view; + DROP VIEW IF EXISTS wiki_view; + DROP VIEW IF EXISTS ticket_collab_count_view; + DROP VIEW IF EXISTS wiki_collab_count_view; + DROP VIEW IF EXISTS attachment_view; + ''') + + +class Migration(migrations.Migration): + + dependencies = [ + ] + + operations = [ + migrations.RunPython(code=create_views, reverse_code=drop_views) + ] diff --git a/src/super_archives/migrations/0001_initial.py b/src/super_archives/migrations/0001_initial.py deleted file mode 100644 index 9490c21..0000000 --- a/src/super_archives/migrations/0001_initial.py +++ /dev/null @@ -1,299 +0,0 @@ -# -*- coding: 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 'EmailAddressValidation' - db.create_table(u'super_archives_emailaddressvalidation', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('address', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75)), - ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='emails_not_validated', null=True, to=orm['accounts.User'])), - ('validation_key', self.gf('django.db.models.fields.CharField')(default='143df80aa814429f9938d3b165148480', max_length=32, null=True)), - ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), - )) - db.send_create_signal(u'super_archives', ['EmailAddressValidation']) - - # Adding unique constraint on 'EmailAddressValidation', fields ['user', 'address'] - db.create_unique(u'super_archives_emailaddressvalidation', ['user_id', 'address']) - - # Adding model 'EmailAddress' - db.create_table(u'super_archives_emailaddress', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='emails', null=True, on_delete=models.SET_NULL, to=orm['accounts.User'])), - ('address', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75)), - ('real_name', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=64, blank=True)), - ('md5', self.gf('django.db.models.fields.CharField')(max_length=32, null=True)), - )) - db.send_create_signal(u'super_archives', ['EmailAddress']) - - # Adding model 'MailingList' - db.create_table(u'super_archives_mailinglist', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=80)), - ('email', self.gf('django.db.models.fields.EmailField')(max_length=75)), - ('description', self.gf('django.db.models.fields.TextField')()), - ('logo', self.gf('django.db.models.fields.files.FileField')(max_length=100)), - ('last_imported_index', self.gf('django.db.models.fields.IntegerField')(default=0)), - )) - db.send_create_signal(u'super_archives', ['MailingList']) - - # Adding model 'MailingListMembership' - db.create_table(u'super_archives_mailinglistmembership', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['accounts.User'])), - ('mailinglist', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.MailingList'])), - )) - db.send_create_signal(u'super_archives', ['MailingListMembership']) - - # Adding model 'Keyword' - db.create_table(u'super_archives_keyword', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('keyword', self.gf('django.db.models.fields.CharField')(max_length='128')), - ('weight', self.gf('django.db.models.fields.IntegerField')(default=0)), - ('thread', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Thread'])), - )) - db.send_create_signal(u'super_archives', ['Keyword']) - - # Adding model 'Thread' - db.create_table(u'super_archives_thread', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('subject_token', self.gf('django.db.models.fields.CharField')(max_length=512)), - ('mailinglist', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.MailingList'])), - ('latest_message', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, null=True, to=orm['super_archives.Message'])), - ('score', self.gf('django.db.models.fields.IntegerField')(default=0)), - ('spam', self.gf('django.db.models.fields.BooleanField')(default=False)), - )) - db.send_create_signal(u'super_archives', ['Thread']) - - # Adding unique constraint on 'Thread', fields ['subject_token', 'mailinglist'] - db.create_unique(u'super_archives_thread', ['subject_token', 'mailinglist_id']) - - # Adding model 'Vote' - db.create_table(u'super_archives_vote', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['accounts.User'])), - ('message', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Message'])), - ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), - )) - db.send_create_signal(u'super_archives', ['Vote']) - - # Adding unique constraint on 'Vote', fields ['user', 'message'] - db.create_unique(u'super_archives_vote', ['user_id', 'message_id']) - - # Adding model 'Message' - db.create_table(u'super_archives_message', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('from_address', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.EmailAddress'])), - ('thread', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Thread'], null=True)), - ('subject', self.gf('django.db.models.fields.CharField')(max_length=512, db_index=True)), - ('subject_clean', self.gf('django.db.models.fields.CharField')(max_length=512, db_index=True)), - ('body', self.gf('django.db.models.fields.TextField')(default='')), - ('received_time', self.gf('django.db.models.fields.DateTimeField')(db_index=True)), - ('message_id', self.gf('django.db.models.fields.CharField')(max_length=512)), - ('spam', self.gf('django.db.models.fields.BooleanField')(default=False)), - )) - db.send_create_signal(u'super_archives', ['Message']) - - # Adding unique constraint on 'Message', fields ['thread', 'message_id'] - db.create_unique(u'super_archives_message', ['thread_id', 'message_id']) - - # Adding model 'MessageBlock' - db.create_table(u'super_archives_messageblock', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('message', self.gf('django.db.models.fields.related.ForeignKey')(related_name='blocks', to=orm['super_archives.Message'])), - ('text', self.gf('django.db.models.fields.TextField')()), - ('is_reply', self.gf('django.db.models.fields.BooleanField')()), - ('order', self.gf('django.db.models.fields.IntegerField')()), - )) - db.send_create_signal(u'super_archives', ['MessageBlock']) - - # Adding model 'MessageMetadata' - db.create_table(u'super_archives_messagemetadata', ( - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('Message', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Message'])), - ('name', self.gf('django.db.models.fields.CharField')(max_length=512)), - ('value', self.gf('django.db.models.fields.TextField')()), - )) - db.send_create_signal(u'super_archives', ['MessageMetadata']) - - - def backwards(self, orm): - # Removing unique constraint on 'Message', fields ['thread', 'message_id'] - db.delete_unique(u'super_archives_message', ['thread_id', 'message_id']) - - # Removing unique constraint on 'Vote', fields ['user', 'message'] - db.delete_unique(u'super_archives_vote', ['user_id', 'message_id']) - - # Removing unique constraint on 'Thread', fields ['subject_token', 'mailinglist'] - db.delete_unique(u'super_archives_thread', ['subject_token', 'mailinglist_id']) - - # Removing unique constraint on 'EmailAddressValidation', fields ['user', 'address'] - db.delete_unique(u'super_archives_emailaddressvalidation', ['user_id', 'address']) - - # Deleting model 'EmailAddressValidation' - db.delete_table(u'super_archives_emailaddressvalidation') - - # Deleting model 'EmailAddress' - db.delete_table(u'super_archives_emailaddress') - - # Deleting model 'MailingList' - db.delete_table(u'super_archives_mailinglist') - - # Deleting model 'MailingListMembership' - db.delete_table(u'super_archives_mailinglistmembership') - - # Deleting model 'Keyword' - db.delete_table(u'super_archives_keyword') - - # Deleting model 'Thread' - db.delete_table(u'super_archives_thread') - - # Deleting model 'Vote' - db.delete_table(u'super_archives_vote') - - # Deleting model 'Message' - db.delete_table(u'super_archives_message') - - # Deleting model 'MessageBlock' - db.delete_table(u'super_archives_messageblock') - - # Deleting model 'MessageMetadata' - db.delete_table(u'super_archives_messagemetadata') - - - models = { - u'accounts.user': { - 'Meta': {'object_name': 'User'}, - 'bio': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}), - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}), - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'github': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', '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'}), - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}), - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}), - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'}) - }, - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'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': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'contenttypes.contenttype': { - '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'}), - u'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'}) - }, - u'super_archives.emailaddress': { - 'Meta': {'ordering': "('id',)", 'object_name': 'EmailAddress'}, - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['accounts.User']"}) - }, - u'super_archives.emailaddressvalidation': { - 'Meta': {'unique_together': "(('user', 'address'),)", 'object_name': 'EmailAddressValidation'}, - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}), - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'aa4ac05f39464a05932308e9fda2daf5'", 'max_length': '32', 'null': 'True'}) - }, - u'super_archives.keyword': { - 'Meta': {'ordering': "('?',)", 'object_name': 'Keyword'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'keyword': ('django.db.models.fields.CharField', [], {'max_length': "'128'"}), - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']"}), - 'weight': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - u'super_archives.mailinglist': { - 'Meta': {'object_name': 'MailingList'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}) - }, - u'super_archives.mailinglistmembership': { - 'Meta': {'object_name': 'MailingListMembership'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"}) - }, - u'super_archives.message': { - 'Meta': {'ordering': "('received_time',)", 'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'}, - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}), - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'received_time': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}), - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}), - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}), - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'}) - }, - u'super_archives.messageblock': { - 'Meta': {'ordering': "('order',)", 'object_name': 'MessageBlock'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_reply': ('django.db.models.fields.BooleanField', [], {}), - 'message': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'blocks'", 'to': u"orm['super_archives.Message']"}), - 'order': ('django.db.models.fields.IntegerField', [], {}), - 'text': ('django.db.models.fields.TextField', [], {}) - }, - u'super_archives.messagemetadata': { - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}), - 'Meta': {'object_name': 'MessageMetadata'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - u'super_archives.thread': { - 'Meta': {'ordering': "('-latest_message__received_time',)", 'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}), - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}), - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - u'super_archives.vote': { - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'}, - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"}) - } - } - - complete_apps = ['super_archives'] \ No newline at end of file diff --git a/src/super_archives/migrations/__init__.py b/src/super_archives/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/src/super_archives/migrations/__init__.py +++ /dev/null -- libgit2 0.21.2