Commit 00247e8ccbe7e6ba7294fb0bef898b2fc094cdba

Authored by Gust
1 parent 6b94127b

Adding new initial migrations and install readme

-Remove database dependency
-Add detailed installation of colab and all of its tools

Signed-off-by: Gustavo Jaruga <darksshades@gmail.com>
Showing 48 changed files with 635 additions and 5037 deletions   Show diff stats
@@ -43,6 +43,10 @@ to get results: natively in XML or JSON, PHP, Ruby and Python and then treatment @@ -43,6 +43,10 @@ to get results: natively in XML or JSON, PHP, Ruby and Python and then treatment
43 Installation (Development Environment) 43 Installation (Development Environment)
44 ========================================== 44 ==========================================
45 45
  46 +A detailed installation steps can be found in:
  47 +
  48 +`Detailed full environment installation <install.rst>`_
  49 +
46 Here we'll cover how to setup a development environment using a Vagrant 50 Here we'll cover how to setup a development environment using a Vagrant
47 virtual machine. 51 virtual machine.
48 52
@@ -64,7 +68,7 @@ First you will need to clone the repository: @@ -64,7 +68,7 @@ First you will need to clone the repository:
64 68
65 .. code-block:: 69 .. code-block::
66 70
67 - git clone git@github.com:interlegis/colab.git 71 + git clone git@github.com:colab-community/colab.git
68 72
69 73
70 *NOTE:* 74 *NOTE:*
install.rst 0 → 100644
@@ -0,0 +1,214 @@ @@ -0,0 +1,214 @@
  1 +.. -*- coding: utf-8 -*-
  2 +
  3 +.. highlight:: rest
  4 +
  5 +.. _colab_software:
  6 +
  7 +=================================
  8 +Installing a full colab environment
  9 +=================================
  10 +
  11 +This file will guide you through the installation of colab's dependencys,
  12 +external tools and its integration with colab to help you start using/working.
  13 +
  14 +The dependecys installation steps will be based of Ubuntu 13.04 but the tools,
  15 +integrations and the colab itself runs in a virtual machine so it'll be the same regardless of your system.
  16 +
  17 +
  18 +Fabric + VirtualBox + Vagrant
  19 +==============
  20 +
  21 +You can easily install fabric using pip with
  22 +
  23 +.. code-block::
  24 +
  25 + sudo apt-get install python-pip
  26 + sudo pip install fabric
  27 +
  28 +You can also instal Virtual Box with apt-get
  29 +
  30 +.. code-block::
  31 +
  32 + sudo apt-get install virtualbox
  33 +
  34 +Now, vagrant has an apt-get but its not supported anymore, so you'll have to manually download and install it from the site
  35 +
  36 + https://www.vagrantup.com/downloads.html
  37 +
  38 +Starting the VM and environment
  39 +===============================
  40 +
  41 +Clone the repository to your system
  42 +
  43 +.. code-block::
  44 +
  45 + git clone https://github.com/colab-community/colab.git
  46 + cd colab
  47 +
  48 +Create your local configuration file(we'll adjust it later)
  49 +
  50 +.. code-block::
  51 +
  52 + cp src/colab/local_settings-dev.py src/colab/local_settings.py
  53 +
  54 +To startup the VM simple do
  55 +
  56 +.. code-block::
  57 +
  58 + vagrant up
  59 +
  60 +*NOTE*
  61 +
  62 + In case you have problems creating the virtual machine you might need to download the linux header files
  63 +
  64 + .. code-block::
  65 +
  66 + linux-headers-generic
  67 +
  68 +Accessing the VM and configurating the database
  69 +===============================================
  70 +
  71 +You should now be able to access your VM through
  72 +
  73 +.. code-block::
  74 +
  75 + vagrant ssh
  76 +
  77 +*NOTE*
  78 +
  79 + In case you get a connection port refused or ssh error, you might need to activate manually an ssh server(rare)
  80 +
  81 + .. code-block::
  82 +
  83 + sudo apt-get install ssh; sudo service ssh start;
  84 +
  85 +The VM doesnt come with a databse so, you'll need to install one inside it.
  86 +Inside de VM download and install postgresql
  87 +
  88 +.. code-block::
  89 +
  90 + sudo apt-get install postgresql
  91 +
  92 +Access the postgresql database and create a new database and user colab user
  93 +
  94 +.. code-block::
  95 +
  96 + sudo -u postgres psql
  97 + CREATE USER colab SUPERUSER INHERIT CREATEDB CREATEROLE;
  98 + ALTER USER colab PASSWORD 'colab';
  99 + CREATE DATABASE colab;
  100 +
  101 +Also, create the Trac's database(note it needs to support UTF8)
  102 +
  103 +.. code-block::
  104 +
  105 + create database "trac_colab" with owner "colab" encoding 'UTF8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' TEMPLATE=template0;
  106 + \q
  107 +
  108 +That's the database used for Trac, but its needed so colab can make its migrations correctly and adjust solr accordinly
  109 +
  110 +Installing Trac on the VM
  111 +=========================
  112 +
  113 +Inside the VM(vagrant ssh) download e install trac
  114 +
  115 +.. code-block::
  116 +
  117 + sudo apt-get install trac
  118 + sudo pip install --upgrade Trac
  119 +
  120 +Now you'll need to configure trac so it can access the previously created database.
  121 +
  122 +.. code-block::
  123 +
  124 + mkdir -p /var/local/trac
  125 + sudo trac-admin /var/local/trac initenv
  126 +
  127 +Set the project name to 'Colab' when asked, and the following postgresql connection string
  128 +
  129 +.. code-block::
  130 +
  131 + postgres://colab:colab@/trac_colab?host=localhost
  132 +
  133 +The trac database should be populated with relations, now need to give trac write access to its folders
  134 +
  135 +.. code-block::
  136 +
  137 + sudo chown -R www-data /var/local/trac
  138 + sudo chmod -R 775 /var/local/trac
  139 +
  140 +Finally, trac can be run by
  141 +
  142 +.. code-block::
  143 +
  144 + tracd --port 5000 /var/local/trac
  145 +
  146 +Use port 8000 and access it on port 8080 in your local machine to see it works if you'd like(vagrant has port redirects)
  147 +
  148 +Setting up Colab
  149 +=========================
  150 +
  151 +You can exit the vagrant VM ('exit' inside the ssh shell) but for now leave it running Trac and start a new terminal tab
  152 +
  153 +Open the /src/colab/local_settings.py file
  154 +
  155 +Change COLAB_TRAC_URL to
  156 +
  157 +.. code-block::
  158 +
  159 + COLAB_TRAC_URL = 'http://localhost:5000/trac/'
  160 +
  161 +Or the port you're using to Trac
  162 +
  163 +Use fabric at colab's root to update the requirements to your VM
  164 +
  165 +.. code-block::
  166 +
  167 + fabric runserver:update
  168 +
  169 +*NOTE:*
  170 +
  171 + The fabric installation on ubuntu through 'pip install' might not be added to the path so you'll need to find
  172 + where it was installed if thats your case
  173 +
  174 +Now simply run fabric again to run the server (it'll also sync and migrate colab's database)
  175 +
  176 +.. code-block::
  177 +
  178 + fabric runserver
  179 +
  180 +You should be able to see colab with its cms service already working at port 8000(because of vagrant redirects)
  181 +
  182 +*NOTE*
  183 +
  184 + In case login doesn't work, change the SITE_URL in src/colab/local_settings.py the reflect the django's port
  185 + Also, add the following line riht bellow it
  186 + BROWSERID_AUDIENCES = [SITE_URL, SITE_URL.replace('https', 'http')]
  187 +
  188 +Installing Solr and indexing colab's schemas
  189 +==========================================
  190 +In Progress of making it readable
  191 + #http servlet jetty
  192 + sudo apt-get install jetty
  193 +
  194 + #solr
  195 + wget http://ftp.unicamp.br/pub/apache/lucene/solr/4.6.1/solr-4.6.1.tgz
  196 + tar xvzf solr-4.6.1.tgz
  197 + sudo mv solr-4.6.1 /usr/share/solr
  198 +
  199 + sudo cp /usr/share/solr/example/webapps/solr.war /usr/share/solr/example/solr/solr.war
  200 +
  201 + python manage.py build_solr_schema >> schema.xml
  202 + #existe mais de uma referencia a stopwords_en
  203 + trocar no schema.xml stopwords_en.txt por lang/stopwords_en.txt
  204 +
  205 + sudo cp schema.xml /usr/share/solr/example/solr/collection1/conf
  206 +
  207 + #inclusive a tag
  208 + Remova <updateLog> em solrconfig.xml localizado em /usr/share/solr/example/solr/collection1/conf
  209 +
  210 + #executa servidor
  211 + cd /usr/share/solr/example/; java -jar start.jar;
  212 +
  213 + #indexa
  214 + python manage.py update_index
0 \ No newline at end of file 215 \ No newline at end of file
src/accounts/migrations/0001_initial.py 0 → 100644
@@ -0,0 +1,116 @@ @@ -0,0 +1,116 @@
  1 +# -*- coding: utf-8 -*-
  2 +import datetime
  3 +from south.db import db
  4 +from south.v2 import SchemaMigration
  5 +from django.db import models
  6 +
  7 +
  8 +class Migration(SchemaMigration):
  9 +
  10 + def forwards(self, orm):
  11 + # Adding model 'User'
  12 + db.create_table(u'accounts_user', (
  13 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
  14 + ('password', self.gf('django.db.models.fields.CharField')(max_length=128)),
  15 + ('last_login', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
  16 + ('is_superuser', self.gf('django.db.models.fields.BooleanField')(default=False)),
  17 + ('username', self.gf('django.db.models.fields.CharField')(unique=True, max_length=30)),
  18 + ('first_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
  19 + ('last_name', self.gf('django.db.models.fields.CharField')(max_length=30, blank=True)),
  20 + ('email', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75, blank=True)),
  21 + ('is_staff', self.gf('django.db.models.fields.BooleanField')(default=False)),
  22 + ('is_active', self.gf('django.db.models.fields.BooleanField')(default=True)),
  23 + ('date_joined', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
  24 + ('institution', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
  25 + ('role', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
  26 + ('twitter', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
  27 + ('facebook', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
  28 + ('google_talk', self.gf('django.db.models.fields.EmailField')(max_length=75, null=True, blank=True)),
  29 + ('github', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
  30 + ('webpage', self.gf('django.db.models.fields.CharField')(max_length=256, null=True, blank=True)),
  31 + ('verification_hash', self.gf('django.db.models.fields.CharField')(max_length=32, null=True, blank=True)),
  32 + ('modified', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
  33 + ('bio', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)),
  34 + ))
  35 + db.send_create_signal(u'accounts', ['User'])
  36 +
  37 + # Adding M2M table for field groups on 'User'
  38 + m2m_table_name = db.shorten_name(u'accounts_user_groups')
  39 + db.create_table(m2m_table_name, (
  40 + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
  41 + ('user', models.ForeignKey(orm[u'accounts.user'], null=False)),
  42 + ('group', models.ForeignKey(orm[u'auth.group'], null=False))
  43 + ))
  44 + db.create_unique(m2m_table_name, ['user_id', 'group_id'])
  45 +
  46 + # Adding M2M table for field user_permissions on 'User'
  47 + m2m_table_name = db.shorten_name(u'accounts_user_user_permissions')
  48 + db.create_table(m2m_table_name, (
  49 + ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
  50 + ('user', models.ForeignKey(orm[u'accounts.user'], null=False)),
  51 + ('permission', models.ForeignKey(orm[u'auth.permission'], null=False))
  52 + ))
  53 + db.create_unique(m2m_table_name, ['user_id', 'permission_id'])
  54 +
  55 +
  56 + def backwards(self, orm):
  57 + # Deleting model 'User'
  58 + db.delete_table(u'accounts_user')
  59 +
  60 + # Removing M2M table for field groups on 'User'
  61 + db.delete_table(db.shorten_name(u'accounts_user_groups'))
  62 +
  63 + # Removing M2M table for field user_permissions on 'User'
  64 + db.delete_table(db.shorten_name(u'accounts_user_user_permissions'))
  65 +
  66 +
  67 + models = {
  68 + u'accounts.user': {
  69 + 'Meta': {'object_name': 'User'},
  70 + 'bio': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
  71 + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
  72 + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),
  73 + 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
  74 + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
  75 + 'github': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
  76 + 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
  77 + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
  78 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  79 + 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
  80 + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
  81 + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
  82 + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
  83 + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
  84 + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
  85 + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
  86 + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
  87 + 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
  88 + 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
  89 + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
  90 + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
  91 + 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
  92 + 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})
  93 + },
  94 + u'auth.group': {
  95 + 'Meta': {'object_name': 'Group'},
  96 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  97 + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
  98 + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
  99 + },
  100 + u'auth.permission': {
  101 + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
  102 + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
  103 + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
  104 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  105 + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
  106 + },
  107 + u'contenttypes.contenttype': {
  108 + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
  109 + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
  110 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  111 + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
  112 + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
  113 + }
  114 + }
  115 +
  116 + complete_apps = ['accounts']
0 \ No newline at end of file 117 \ No newline at end of file
src/accounts/migrations/0001_rename_auth_user_to_accounts_user.py
@@ -1,59 +0,0 @@ @@ -1,59 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - db.rename_table('auth_user', 'accounts_user')  
12 - db.rename_table('auth_user_groups', 'accounts_user_groups')  
13 - db.rename_table('auth_user_user_permissions', 'accounts_user_user_permissions')  
14 -  
15 - def backwards(self, orm):  
16 - db.rename_table('accounts_user', 'auth_user')  
17 - db.rename_table('accounts_user_groups', 'auth_user_groups')  
18 - db.rename_table('accounts_user_user_permissions', 'auth_user_user_permissions')  
19 -  
20 - models = {  
21 - u'accounts.user': {  
22 - 'Meta': {'object_name': 'User'},  
23 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
24 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
25 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
26 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
27 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
28 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
29 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
30 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
31 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
32 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
33 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
34 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
35 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
36 - },  
37 - u'auth.group': {  
38 - 'Meta': {'object_name': 'Group'},  
39 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
40 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
41 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
42 - },  
43 - u'auth.permission': {  
44 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
45 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
46 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
47 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
48 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
49 - },  
50 - u'contenttypes.contenttype': {  
51 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
52 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
53 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
54 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
55 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
56 - }  
57 - }  
58 -  
59 - complete_apps = ['accounts']  
src/accounts/migrations/0002_delete_sussumu_dup.py
@@ -1,138 +0,0 @@ @@ -1,138 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import DataMigration  
5 -from django.db import models  
6 -  
7 -class Migration(DataMigration):  
8 -  
9 - def forwards(self, orm):  
10 - try:  
11 - sussumu = orm['accounts.User'].objects.get(username='Sussumu')  
12 - except orm['accounts.User'].DoesNotExist:  
13 - return  
14 - profile = orm['super_archives.UserProfile'].objects.get(user_id=sussumu.pk)  
15 - sussumu.delete()  
16 - profile.delete()  
17 -  
18 - def backwards(self, orm):  
19 - "Write your backwards methods here."  
20 -  
21 - models = {  
22 - u'accounts.user': {  
23 - 'Meta': {'object_name': 'User'},  
24 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
25 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
26 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
27 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
28 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
29 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
30 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
31 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
32 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
33 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
34 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
35 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
36 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
37 - },  
38 - u'auth.group': {  
39 - 'Meta': {'object_name': 'Group'},  
40 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
41 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
42 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
43 - },  
44 - u'auth.permission': {  
45 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
46 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
47 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
48 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
49 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
50 - },  
51 - u'contenttypes.contenttype': {  
52 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
53 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
54 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
57 - },  
58 - u'super_archives.emailaddress': {  
59 - 'Meta': {'object_name': 'EmailAddress'},  
60 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
61 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
63 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
64 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': u"orm['accounts.User']"})  
65 - },  
66 - u'super_archives.mailinglist': {  
67 - 'Meta': {'object_name': 'MailingList'},  
68 - 'description': ('django.db.models.fields.TextField', [], {}),  
69 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
70 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
71 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
72 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
73 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
74 - },  
75 - u'super_archives.mailinglistmembership': {  
76 - 'Meta': {'object_name': 'MailingListMembership'},  
77 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
78 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
79 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
80 - },  
81 - u'super_archives.message': {  
82 - 'Meta': {'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
83 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
84 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
85 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
86 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
87 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
88 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
89 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
90 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
91 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
92 - },  
93 - u'super_archives.messagemetadata': {  
94 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
95 - 'Meta': {'object_name': 'MessageMetadata'},  
96 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
97 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
98 - 'value': ('django.db.models.fields.TextField', [], {})  
99 - },  
100 - u'super_archives.pagehit': {  
101 - 'Meta': {'object_name': 'PageHit'},  
102 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
103 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
105 - },  
106 - u'super_archives.thread': {  
107 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
108 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
109 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
110 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
111 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
112 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
113 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
114 - },  
115 - u'super_archives.userprofile': {  
116 - 'Meta': {'object_name': 'UserProfile'},  
117 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
118 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
119 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
120 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
121 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
122 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
123 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['accounts.User']", 'unique': 'True'}),  
124 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
125 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'})  
126 - },  
127 - u'super_archives.vote': {  
128 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
129 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
130 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
131 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
132 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
133 - }  
134 - }  
135 -  
136 - complete_apps = ['accounts', 'super_archives']  
137 - symmetrical = True  
138 -  
src/accounts/migrations/0003_auto__add_field_user_institution__add_field_user_role__add_field_user_.py
@@ -1,122 +0,0 @@ @@ -1,122 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding field 'User.institution'  
12 - db.add_column(u'accounts_user', 'institution',  
13 - self.gf('django.db.models.fields.CharField')(max_length=128, null=True),  
14 - keep_default=False)  
15 -  
16 - # Adding field 'User.role'  
17 - db.add_column(u'accounts_user', 'role',  
18 - self.gf('django.db.models.fields.CharField')(max_length=128, null=True),  
19 - keep_default=False)  
20 -  
21 - # Adding field 'User.twitter'  
22 - db.add_column(u'accounts_user', 'twitter',  
23 - self.gf('django.db.models.fields.CharField')(max_length=128, null=True),  
24 - keep_default=False)  
25 -  
26 - # Adding field 'User.facebook'  
27 - db.add_column(u'accounts_user', 'facebook',  
28 - self.gf('django.db.models.fields.CharField')(max_length=128, null=True),  
29 - keep_default=False)  
30 -  
31 - # Adding field 'User.google_talk'  
32 - db.add_column(u'accounts_user', 'google_talk',  
33 - self.gf('django.db.models.fields.EmailField')(max_length=75, null=True),  
34 - keep_default=False)  
35 -  
36 - # Adding field 'User.webpage'  
37 - db.add_column(u'accounts_user', 'webpage',  
38 - self.gf('django.db.models.fields.CharField')(max_length=256, null=True),  
39 - keep_default=False)  
40 -  
41 - # Adding field 'User.verification_hash'  
42 - db.add_column(u'accounts_user', 'verification_hash',  
43 - self.gf('django.db.models.fields.CharField')(max_length=32, null=True),  
44 - keep_default=False)  
45 -  
46 - # Adding unique constraint on 'User', fields ['email']  
47 - db.create_unique(u'accounts_user', ['email'])  
48 -  
49 -  
50 - def backwards(self, orm):  
51 - # Removing unique constraint on 'User', fields ['email']  
52 - db.delete_unique(u'accounts_user', ['email'])  
53 -  
54 - # Deleting field 'User.institution'  
55 - db.delete_column(u'accounts_user', 'institution')  
56 -  
57 - # Deleting field 'User.role'  
58 - db.delete_column(u'accounts_user', 'role')  
59 -  
60 - # Deleting field 'User.twitter'  
61 - db.delete_column(u'accounts_user', 'twitter')  
62 -  
63 - # Deleting field 'User.facebook'  
64 - db.delete_column(u'accounts_user', 'facebook')  
65 -  
66 - # Deleting field 'User.google_talk'  
67 - db.delete_column(u'accounts_user', 'google_talk')  
68 -  
69 - # Deleting field 'User.webpage'  
70 - db.delete_column(u'accounts_user', 'webpage')  
71 -  
72 - # Deleting field 'User.verification_hash'  
73 - db.delete_column(u'accounts_user', 'verification_hash')  
74 -  
75 -  
76 - models = {  
77 - u'accounts.user': {  
78 - 'Meta': {'object_name': 'User'},  
79 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
80 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
81 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
82 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
83 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
84 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
85 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
86 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
87 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
88 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
89 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
90 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
91 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
92 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
93 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
94 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
95 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
96 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
97 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
98 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'})  
99 - },  
100 - u'auth.group': {  
101 - 'Meta': {'object_name': 'Group'},  
102 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
103 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
104 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
105 - },  
106 - u'auth.permission': {  
107 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
108 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
109 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
110 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
111 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
112 - },  
113 - u'contenttypes.contenttype': {  
114 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
115 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
116 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
117 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
118 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
119 - }  
120 - }  
121 -  
122 - complete_apps = ['accounts']  
123 \ No newline at end of file 0 \ No newline at end of file
src/accounts/migrations/0004_copy_profile_data.py
@@ -1,81 +0,0 @@ @@ -1,81 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import DataMigration  
5 -from django.db import models  
6 -  
7 -class Migration(DataMigration):  
8 -  
9 - def forwards(self, orm):  
10 - fields = ('institution', 'role', 'twitter', 'facebook',  
11 - 'google_talk', 'webpage')  
12 -  
13 - for userprofile in orm['super_archives.UserProfile'].objects.iterator():  
14 - user = orm['accounts.User'].objects.get(id=userprofile.user_id)  
15 - for field in fields:  
16 - setattr(user, field, getattr(userprofile, field))  
17 - user.save()  
18 -  
19 - def backwards(self, orm):  
20 - "Write your backwards methods here."  
21 -  
22 - models = {  
23 - u'accounts.user': {  
24 - 'Meta': {'object_name': 'User'},  
25 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
26 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
27 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
28 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
29 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
30 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
31 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
32 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
33 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
34 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
35 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
36 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
37 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
38 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
39 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
40 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
41 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
42 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
43 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
44 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'})  
45 - },  
46 - u'auth.group': {  
47 - 'Meta': {'object_name': 'Group'},  
48 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
49 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
50 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
51 - },  
52 - u'auth.permission': {  
53 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
54 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
55 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
56 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
57 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
58 - },  
59 - u'contenttypes.contenttype': {  
60 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
61 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
62 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
63 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
64 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
65 - },  
66 - u'super_archives.userprofile': {  
67 - 'Meta': {'object_name': 'UserProfile'},  
68 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
69 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
70 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
71 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
72 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
73 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
74 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['accounts.User']", 'unique': 'True'}),  
75 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
76 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'})  
77 - }  
78 - }  
79 -  
80 - complete_apps = ['accounts']  
81 - symmetrical = True  
src/accounts/migrations/0005_remove_host_from_social_accounts.py
@@ -1,74 +0,0 @@ @@ -1,74 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -import urlparse  
4 -from south.db import db  
5 -from south.v2 import DataMigration  
6 -from django.db import models  
7 -  
8 -class Migration(DataMigration):  
9 -  
10 - def forwards(self, orm):  
11 - for user in orm.User.objects.iterator():  
12 - if user.twitter:  
13 - user.twitter = user.twitter.split('/')[-1]  
14 - if user.facebook:  
15 - if '?' in user.facebook:  
16 - query_string = user.facebook.split('?')[-1]  
17 - query_dict = dict(urlparse.parse_qsl(query_string))  
18 - user.facebook = query_dict.get('id')  
19 - else:  
20 - user.facebook = user.facebook.split('/')[-1]  
21 -  
22 - user.save()  
23 -  
24 - def backwards(self, orm):  
25 - "Write your backwards methods here."  
26 -  
27 - models = {  
28 - u'accounts.user': {  
29 - 'Meta': {'object_name': 'User'},  
30 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
31 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
32 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
33 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
34 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
35 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
36 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
37 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
38 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
39 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
40 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
41 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
42 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
43 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
44 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
45 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
46 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
47 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
48 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
49 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
50 - },  
51 - u'auth.group': {  
52 - 'Meta': {'object_name': 'Group'},  
53 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
54 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
55 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
56 - },  
57 - u'auth.permission': {  
58 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
59 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
60 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
61 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
63 - },  
64 - u'contenttypes.contenttype': {  
65 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
66 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
69 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
70 - }  
71 - }  
72 -  
73 - complete_apps = ['accounts']  
74 - symmetrical = True  
src/accounts/migrations/0006_auto__add_field_user_modified.py
@@ -1,69 +0,0 @@ @@ -1,69 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -from south.db import db  
3 -from south.v2 import SchemaMigration  
4 -from django.db import models  
5 -from django.utils import timezone  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding field 'User.modified'  
12 - db.add_column(u'accounts_user', 'modified',  
13 - self.gf('django.db.models.fields.DateTimeField')(auto_now=True, default=timezone.now, blank=True),  
14 - keep_default=False)  
15 -  
16 -  
17 - def backwards(self, orm):  
18 - # Deleting field 'User.modified'  
19 - db.delete_column(u'accounts_user', 'modified')  
20 -  
21 -  
22 - models = {  
23 - u'accounts.user': {  
24 - 'Meta': {'object_name': 'User'},  
25 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
26 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
27 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
28 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
29 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
30 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
31 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
32 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
33 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
34 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
35 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
36 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
37 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
38 - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),  
39 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
40 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
41 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
42 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
43 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
44 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
45 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
46 - },  
47 - u'auth.group': {  
48 - 'Meta': {'object_name': 'Group'},  
49 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
50 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
51 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
52 - },  
53 - u'auth.permission': {  
54 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
55 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
57 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
58 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
59 - },  
60 - u'contenttypes.contenttype': {  
61 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
62 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
63 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
64 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
65 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
66 - }  
67 - }  
68 -  
69 - complete_apps = ['accounts']  
src/accounts/migrations/0007_remove_at_from_username.py
@@ -1,69 +0,0 @@ @@ -1,69 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import DataMigration  
5 -from django.db import models  
6 -  
7 -class Migration(DataMigration):  
8 -  
9 - def forwards(self, orm):  
10 - "Write your forwards methods here."  
11 - # Note: Don't use "from appname.models import ModelName".  
12 - # Use orm.ModelName to refer to models in this application,  
13 - # and orm['appname.ModelName'] for models in other applications.  
14 - for u in orm.User.objects.filter(username__contains='@'):  
15 - u.username = u.username.split('@')[0]  
16 - u.save()  
17 -  
18 - def backwards(self, orm):  
19 - pass  
20 -  
21 - models = {  
22 - u'accounts.user': {  
23 - 'Meta': {'object_name': 'User'},  
24 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
25 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
26 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
27 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
28 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
29 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
30 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
31 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
32 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
33 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
34 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
35 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
36 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
37 - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),  
38 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
39 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
40 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
41 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
42 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
43 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
44 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
45 - },  
46 - u'auth.group': {  
47 - 'Meta': {'object_name': 'Group'},  
48 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
49 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
50 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
51 - },  
52 - u'auth.permission': {  
53 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
54 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
55 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
56 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
57 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
58 - },  
59 - u'contenttypes.contenttype': {  
60 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
61 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
62 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
63 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
64 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
65 - }  
66 - }  
67 -  
68 - complete_apps = ['accounts']  
69 - symmetrical = True  
src/accounts/migrations/0008_auto__add_field_user_bio.py
@@ -1,70 +0,0 @@ @@ -1,70 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding field 'User.bio'  
12 - db.add_column(u'accounts_user', 'bio',  
13 - self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),  
14 - keep_default=False)  
15 -  
16 -  
17 - def backwards(self, orm):  
18 - # Deleting field 'User.bio'  
19 - db.delete_column(u'accounts_user', 'bio')  
20 -  
21 -  
22 - models = {  
23 - u'accounts.user': {  
24 - 'Meta': {'object_name': 'User'},  
25 - 'bio': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
26 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
27 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
28 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
29 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
30 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
31 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
32 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
33 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
34 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
35 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
36 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
37 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
38 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
39 - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),  
40 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
41 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
42 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
43 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
44 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
45 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
46 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
47 - },  
48 - u'auth.group': {  
49 - 'Meta': {'object_name': 'Group'},  
50 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
51 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
52 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
53 - },  
54 - u'auth.permission': {  
55 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
56 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
57 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
58 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
59 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
60 - },  
61 - u'contenttypes.contenttype': {  
62 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
63 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
64 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
65 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
66 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
67 - }  
68 - }  
69 -  
70 - complete_apps = ['accounts']  
71 \ No newline at end of file 0 \ No newline at end of file
src/accounts/migrations/0009_auto__add_field_user_identi_ca.py
@@ -1,71 +0,0 @@ @@ -1,71 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding field 'User.identi_ca'  
12 - db.add_column(u'accounts_user', 'identi_ca',  
13 - self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True),  
14 - keep_default=False)  
15 -  
16 -  
17 - def backwards(self, orm):  
18 - # Deleting field 'User.identi_ca'  
19 - db.delete_column(u'accounts_user', 'identi_ca')  
20 -  
21 -  
22 - models = {  
23 - u'accounts.user': {  
24 - 'Meta': {'object_name': 'User'},  
25 - 'bio': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
26 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
27 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
28 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
29 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
30 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
31 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
32 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
33 - 'identi_ca': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
34 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
35 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
36 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
37 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
38 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
39 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
40 - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),  
41 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
42 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
43 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
44 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
45 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
46 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
47 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
48 - },  
49 - u'auth.group': {  
50 - 'Meta': {'object_name': 'Group'},  
51 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
52 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
53 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
54 - },  
55 - u'auth.permission': {  
56 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
57 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
58 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
59 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
60 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
61 - },  
62 - u'contenttypes.contenttype': {  
63 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
64 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
65 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
66 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
67 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
68 - }  
69 - }  
70 -  
71 - complete_apps = ['accounts']  
72 \ No newline at end of file 0 \ No newline at end of file
src/accounts/migrations/0010_auto__del_field_user_identi_ca__add_field_user_github.py
@@ -1,79 +0,0 @@ @@ -1,79 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Deleting field 'User.identi_ca'  
12 - db.delete_column(u'accounts_user', 'identi_ca')  
13 -  
14 - # Adding field 'User.github'  
15 - db.add_column(u'accounts_user', 'github',  
16 - self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True),  
17 - keep_default=False)  
18 -  
19 -  
20 - def backwards(self, orm):  
21 - # Adding field 'User.identi_ca'  
22 - db.add_column(u'accounts_user', 'identi_ca',  
23 - self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True),  
24 - keep_default=False)  
25 -  
26 - # Deleting field 'User.github'  
27 - db.delete_column(u'accounts_user', 'github')  
28 -  
29 -  
30 - models = {  
31 - u'accounts.user': {  
32 - 'Meta': {'object_name': 'User'},  
33 - 'bio': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
34 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
35 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
36 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
37 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
38 - 'github': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
39 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
40 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
41 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
42 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
43 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
44 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
45 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
46 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
47 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
48 - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),  
49 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
50 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
51 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
52 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
53 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
54 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
55 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
56 - },  
57 - u'auth.group': {  
58 - 'Meta': {'object_name': 'Group'},  
59 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
60 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
61 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
62 - },  
63 - u'auth.permission': {  
64 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
65 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
66 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
69 - },  
70 - u'contenttypes.contenttype': {  
71 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
72 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
73 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
74 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
75 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
76 - }  
77 - }  
78 -  
79 - complete_apps = ['accounts']  
80 \ No newline at end of file 0 \ No newline at end of file
src/badger/migrations/0001_initial.py
@@ -11,13 +11,14 @@ class Migration(SchemaMigration): @@ -11,13 +11,14 @@ class Migration(SchemaMigration):
11 # Adding model 'Badge' 11 # Adding model 'Badge'
12 db.create_table(u'badger_badge', ( 12 db.create_table(u'badger_badge', (
13 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), 13 (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
14 - ('title', self.gf('django.db.models.fields.CharField')(max_length=200)),  
15 - ('description', self.gf('django.db.models.fields.CharField')(max_length=200)),  
16 - ('image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)), 14 + ('title', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)),
  15 + ('description', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)),
  16 + ('image_base64', self.gf('django.db.models.fields.TextField')()),
17 ('type', self.gf('django.db.models.fields.CharField')(max_length=200)), 17 ('type', self.gf('django.db.models.fields.CharField')(max_length=200)),
18 ('user_attr', self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True)), 18 ('user_attr', self.gf('django.db.models.fields.CharField')(max_length=100, null=True, blank=True)),
19 ('comparison', self.gf('django.db.models.fields.CharField')(max_length=10, null=True, blank=True)), 19 ('comparison', self.gf('django.db.models.fields.CharField')(max_length=10, null=True, blank=True)),
20 ('value', self.gf('django.db.models.fields.PositiveSmallIntegerField')(null=True, blank=True)), 20 ('value', self.gf('django.db.models.fields.PositiveSmallIntegerField')(null=True, blank=True)),
  21 + ('order', self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=100)),
21 )) 22 ))
22 db.send_create_signal(u'badger', ['Badge']) 23 db.send_create_signal(u'badger', ['Badge'])
23 24
@@ -30,22 +31,43 @@ class Migration(SchemaMigration): @@ -30,22 +31,43 @@ class Migration(SchemaMigration):
30 )) 31 ))
31 db.create_unique(m2m_table_name, ['badge_id', 'user_id']) 32 db.create_unique(m2m_table_name, ['badge_id', 'user_id'])
32 33
  34 + # Adding model 'BadgeI18N'
  35 + db.create_table(u'badger_badgei18n', (
  36 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
  37 + ('i18n_language', self.gf('django.db.models.fields.CharField')(max_length=10)),
  38 + ('title', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)),
  39 + ('description', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)),
  40 + ('i18n_source', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', to=orm['badger.Badge'])),
  41 + ))
  42 + db.send_create_signal(u'badger', ['BadgeI18N'])
  43 +
  44 + # Adding unique constraint on 'BadgeI18N', fields ['i18n_source', 'i18n_language']
  45 + db.create_unique(u'badger_badgei18n', ['i18n_source_id', 'i18n_language'])
  46 +
33 47
34 def backwards(self, orm): 48 def backwards(self, orm):
  49 + # Removing unique constraint on 'BadgeI18N', fields ['i18n_source', 'i18n_language']
  50 + db.delete_unique(u'badger_badgei18n', ['i18n_source_id', 'i18n_language'])
  51 +
35 # Deleting model 'Badge' 52 # Deleting model 'Badge'
36 db.delete_table(u'badger_badge') 53 db.delete_table(u'badger_badge')
37 54
38 # Removing M2M table for field awardees on 'Badge' 55 # Removing M2M table for field awardees on 'Badge'
39 db.delete_table(db.shorten_name(u'badger_badge_awardees')) 56 db.delete_table(db.shorten_name(u'badger_badge_awardees'))
40 57
  58 + # Deleting model 'BadgeI18N'
  59 + db.delete_table(u'badger_badgei18n')
  60 +
41 61
42 models = { 62 models = {
43 u'accounts.user': { 63 u'accounts.user': {
44 'Meta': {'object_name': 'User'}, 64 'Meta': {'object_name': 'User'},
  65 + 'bio': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
45 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 66 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
46 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}), 67 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),
47 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), 68 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
48 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), 69 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
  70 + 'github': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
49 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}), 71 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
50 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), 72 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
51 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 73 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
@@ -55,6 +77,7 @@ class Migration(SchemaMigration): @@ -55,6 +77,7 @@ class Migration(SchemaMigration):
55 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 77 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
56 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 78 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
57 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), 79 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
  80 + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
58 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), 81 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
59 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), 82 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
60 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}), 83 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
@@ -77,17 +100,26 @@ class Migration(SchemaMigration): @@ -77,17 +100,26 @@ class Migration(SchemaMigration):
77 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) 100 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
78 }, 101 },
79 u'badger.badge': { 102 u'badger.badge': {
80 - 'Meta': {'object_name': 'Badge'}, 103 + 'Meta': {'ordering': "['order']", 'object_name': 'Badge'},
81 'awardees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['accounts.User']", 'null': 'True', 'blank': 'True'}), 104 'awardees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['accounts.User']", 'null': 'True', 'blank': 'True'}),
82 'comparison': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}), 105 'comparison': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
83 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200'}), 106 + 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
84 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 107 u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
85 - 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),  
86 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'}), 108 + 'image_base64': ('django.db.models.fields.TextField', [], {}),
  109 + 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}),
  110 + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
87 'type': ('django.db.models.fields.CharField', [], {'max_length': '200'}), 111 'type': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
88 'user_attr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), 112 'user_attr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
89 'value': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}) 113 'value': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'})
90 }, 114 },
  115 + u'badger.badgei18n': {
  116 + 'Meta': {'unique_together': "(('i18n_source', 'i18n_language'),)", 'object_name': 'BadgeI18N'},
  117 + 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
  118 + 'i18n_language': ('django.db.models.fields.CharField', [], {'max_length': '10'}),
  119 + 'i18n_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': u"orm['badger.Badge']"}),
  120 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  121 + 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})
  122 + },
91 u'contenttypes.contenttype': { 123 u'contenttypes.contenttype': {
92 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, 124 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
93 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 125 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
src/badger/migrations/0002_auto__add_field_badge_title_en__add_field_badge_title_es__add_field_ba.py
@@ -1,120 +0,0 @@ @@ -1,120 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding field 'Badge.title_en'  
12 - db.add_column(u'badger_badge', 'title_en',  
13 - self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),  
14 - keep_default=False)  
15 -  
16 - # Adding field 'Badge.title_es'  
17 - db.add_column(u'badger_badge', 'title_es',  
18 - self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),  
19 - keep_default=False)  
20 -  
21 - # Adding field 'Badge.description_en'  
22 - db.add_column(u'badger_badge', 'description_en',  
23 - self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),  
24 - keep_default=False)  
25 -  
26 - # Adding field 'Badge.description_es'  
27 - db.add_column(u'badger_badge', 'description_es',  
28 - self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),  
29 - keep_default=False)  
30 -  
31 -  
32 - # Changing field 'Badge.description'  
33 - db.alter_column(u'badger_badge', 'description', self.gf('django.db.models.fields.CharField')(max_length=200, null=True))  
34 -  
35 - # Changing field 'Badge.title'  
36 - db.alter_column(u'badger_badge', 'title', self.gf('django.db.models.fields.CharField')(max_length=200, null=True))  
37 -  
38 - def backwards(self, orm):  
39 - # Deleting field 'Badge.title_en'  
40 - db.delete_column(u'badger_badge', 'title_en')  
41 -  
42 - # Deleting field 'Badge.title_es'  
43 - db.delete_column(u'badger_badge', 'title_es')  
44 -  
45 - # Deleting field 'Badge.description_en'  
46 - db.delete_column(u'badger_badge', 'description_en')  
47 -  
48 - # Deleting field 'Badge.description_es'  
49 - db.delete_column(u'badger_badge', 'description_es')  
50 -  
51 -  
52 - # Changing field 'Badge.description'  
53 - db.alter_column(u'badger_badge', 'description', self.gf('django.db.models.fields.CharField')(default='', max_length=200))  
54 -  
55 - # Changing field 'Badge.title'  
56 - db.alter_column(u'badger_badge', 'title', self.gf('django.db.models.fields.CharField')(default='', max_length=200))  
57 -  
58 - models = {  
59 - u'accounts.user': {  
60 - 'Meta': {'object_name': 'User'},  
61 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
62 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
63 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
64 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
65 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
66 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
69 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
70 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
71 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
72 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
73 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
74 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
75 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
76 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
77 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
78 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
79 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
80 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
81 - },  
82 - u'auth.group': {  
83 - 'Meta': {'object_name': 'Group'},  
84 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
85 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
86 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
87 - },  
88 - u'auth.permission': {  
89 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
90 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
91 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
92 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
93 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
94 - },  
95 - u'badger.badge': {  
96 - 'Meta': {'object_name': 'Badge'},  
97 - 'awardees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['accounts.User']", 'null': 'True', 'blank': 'True'}),  
98 - 'comparison': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),  
99 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
100 - 'description_en': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
101 - 'description_es': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
102 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
103 - 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),  
104 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
105 - 'title_en': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
106 - 'title_es': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
107 - 'type': ('django.db.models.fields.CharField', [], {'max_length': '200'}),  
108 - 'user_attr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),  
109 - 'value': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'})  
110 - },  
111 - u'contenttypes.contenttype': {  
112 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
113 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
114 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
115 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
116 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
117 - }  
118 - }  
119 -  
120 - complete_apps = ['badger']  
121 \ No newline at end of file 0 \ No newline at end of file
src/badger/migrations/0003_auto__add_badgei18n__add_unique_badgei18n_i18n_source_i18n_language__d.py
@@ -1,131 +0,0 @@ @@ -1,131 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding model 'BadgeI18N'  
12 - db.create_table(u'badger_badgei18n', (  
13 - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
14 - ('i18n_language', self.gf('django.db.models.fields.CharField')(max_length=10)),  
15 - ('title', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)),  
16 - ('description', self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True)),  
17 - ('i18n_source', self.gf('django.db.models.fields.related.ForeignKey')(related_name='translations', to=orm['badger.Badge'])),  
18 - ))  
19 - db.send_create_signal(u'badger', ['BadgeI18N'])  
20 -  
21 - # Adding unique constraint on 'BadgeI18N', fields ['i18n_source', 'i18n_language']  
22 - db.create_unique(u'badger_badgei18n', ['i18n_source_id', 'i18n_language'])  
23 -  
24 - # Deleting field 'Badge.title_en'  
25 - db.delete_column(u'badger_badge', 'title_en')  
26 -  
27 - # Deleting field 'Badge.description_en'  
28 - db.delete_column(u'badger_badge', 'description_en')  
29 -  
30 - # Deleting field 'Badge.title_es'  
31 - db.delete_column(u'badger_badge', 'title_es')  
32 -  
33 - # Deleting field 'Badge.description_es'  
34 - db.delete_column(u'badger_badge', 'description_es')  
35 -  
36 -  
37 - def backwards(self, orm):  
38 - # Removing unique constraint on 'BadgeI18N', fields ['i18n_source', 'i18n_language']  
39 - db.delete_unique(u'badger_badgei18n', ['i18n_source_id', 'i18n_language'])  
40 -  
41 - # Deleting model 'BadgeI18N'  
42 - db.delete_table(u'badger_badgei18n')  
43 -  
44 - # Adding field 'Badge.title_en'  
45 - db.add_column(u'badger_badge', 'title_en',  
46 - self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),  
47 - keep_default=False)  
48 -  
49 - # Adding field 'Badge.description_en'  
50 - db.add_column(u'badger_badge', 'description_en',  
51 - self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),  
52 - keep_default=False)  
53 -  
54 - # Adding field 'Badge.title_es'  
55 - db.add_column(u'badger_badge', 'title_es',  
56 - self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),  
57 - keep_default=False)  
58 -  
59 - # Adding field 'Badge.description_es'  
60 - db.add_column(u'badger_badge', 'description_es',  
61 - self.gf('django.db.models.fields.CharField')(max_length=200, null=True, blank=True),  
62 - keep_default=False)  
63 -  
64 -  
65 - models = {  
66 - u'accounts.user': {  
67 - 'Meta': {'object_name': 'User'},  
68 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
69 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
70 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
71 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
72 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
73 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
74 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
75 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
76 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
77 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
78 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
79 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
80 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
81 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
82 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
83 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
84 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
85 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
86 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
87 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
88 - },  
89 - u'auth.group': {  
90 - 'Meta': {'object_name': 'Group'},  
91 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
92 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
93 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
94 - },  
95 - u'auth.permission': {  
96 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
97 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
98 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
99 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
100 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
101 - },  
102 - u'badger.badge': {  
103 - 'Meta': {'object_name': 'Badge'},  
104 - 'awardees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['accounts.User']", 'null': 'True', 'blank': 'True'}),  
105 - 'comparison': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),  
106 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
107 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
108 - 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),  
109 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
110 - 'type': ('django.db.models.fields.CharField', [], {'max_length': '200'}),  
111 - 'user_attr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),  
112 - 'value': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'})  
113 - },  
114 - u'badger.badgei18n': {  
115 - 'Meta': {'unique_together': "(('i18n_source', 'i18n_language'),)", 'object_name': 'BadgeI18N'},  
116 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
117 - 'i18n_language': ('django.db.models.fields.CharField', [], {'max_length': '10'}),  
118 - 'i18n_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': u"orm['badger.Badge']"}),  
119 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
120 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})  
121 - },  
122 - u'contenttypes.contenttype': {  
123 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
124 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
125 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
126 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
127 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
128 - }  
129 - }  
130 -  
131 - complete_apps = ['badger']  
132 \ No newline at end of file 0 \ No newline at end of file
src/badger/migrations/0004_auto__add_field_badge_order.py
@@ -1,89 +0,0 @@ @@ -1,89 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding field 'Badge.order'  
12 - db.add_column(u'badger_badge', 'order',  
13 - self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=100),  
14 - keep_default=False)  
15 -  
16 -  
17 - def backwards(self, orm):  
18 - # Deleting field 'Badge.order'  
19 - db.delete_column(u'badger_badge', 'order')  
20 -  
21 -  
22 - models = {  
23 - u'accounts.user': {  
24 - 'Meta': {'object_name': 'User'},  
25 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
26 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
27 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
28 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
29 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
30 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
31 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
32 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
33 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
34 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
35 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
36 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
37 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
38 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
39 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
40 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
41 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
42 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
43 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
44 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
45 - },  
46 - u'auth.group': {  
47 - 'Meta': {'object_name': 'Group'},  
48 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
49 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
50 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
51 - },  
52 - u'auth.permission': {  
53 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
54 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
55 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
56 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
57 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
58 - },  
59 - u'badger.badge': {  
60 - 'Meta': {'ordering': "['order']", 'object_name': 'Badge'},  
61 - 'awardees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['accounts.User']", 'null': 'True', 'blank': 'True'}),  
62 - 'comparison': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),  
63 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
64 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
65 - 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),  
66 - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}),  
67 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
68 - 'type': ('django.db.models.fields.CharField', [], {'max_length': '200'}),  
69 - 'user_attr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),  
70 - 'value': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'})  
71 - },  
72 - u'badger.badgei18n': {  
73 - 'Meta': {'unique_together': "(('i18n_source', 'i18n_language'),)", 'object_name': 'BadgeI18N'},  
74 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
75 - 'i18n_language': ('django.db.models.fields.CharField', [], {'max_length': '10'}),  
76 - 'i18n_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': u"orm['badger.Badge']"}),  
77 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
78 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})  
79 - },  
80 - u'contenttypes.contenttype': {  
81 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
82 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
83 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
84 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
85 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
86 - }  
87 - }  
88 -  
89 - complete_apps = ['badger']  
90 \ No newline at end of file 0 \ No newline at end of file
src/badger/migrations/0005_auto__add_field_badge_image_base64.py
@@ -1,91 +0,0 @@ @@ -1,91 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding field 'Badge.image_base64'  
12 - db.add_column(u'badger_badge', 'image_base64',  
13 - self.gf('django.db.models.fields.TextField')(default=''),  
14 - keep_default=False)  
15 -  
16 -  
17 - def backwards(self, orm):  
18 - # Deleting field 'Badge.image_base64'  
19 - db.delete_column(u'badger_badge', 'image_base64')  
20 -  
21 -  
22 - models = {  
23 - u'accounts.user': {  
24 - 'Meta': {'object_name': 'User'},  
25 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
26 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
27 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
28 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
29 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
30 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
31 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
32 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
33 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
34 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
35 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
36 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
37 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
38 - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),  
39 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
40 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
41 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
42 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
43 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
44 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
45 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
46 - },  
47 - u'auth.group': {  
48 - 'Meta': {'object_name': 'Group'},  
49 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
50 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
51 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
52 - },  
53 - u'auth.permission': {  
54 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
55 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
57 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
58 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
59 - },  
60 - u'badger.badge': {  
61 - 'Meta': {'ordering': "['order']", 'object_name': 'Badge'},  
62 - 'awardees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['accounts.User']", 'null': 'True', 'blank': 'True'}),  
63 - 'comparison': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),  
64 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
65 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
66 - 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),  
67 - 'image_base64': ('django.db.models.fields.TextField', [], {}),  
68 - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}),  
69 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
70 - 'type': ('django.db.models.fields.CharField', [], {'max_length': '200'}),  
71 - 'user_attr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),  
72 - 'value': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'})  
73 - },  
74 - u'badger.badgei18n': {  
75 - 'Meta': {'unique_together': "(('i18n_source', 'i18n_language'),)", 'object_name': 'BadgeI18N'},  
76 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
77 - 'i18n_language': ('django.db.models.fields.CharField', [], {'max_length': '10'}),  
78 - 'i18n_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': u"orm['badger.Badge']"}),  
79 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
80 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})  
81 - },  
82 - u'contenttypes.contenttype': {  
83 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
84 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
85 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
86 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
87 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
88 - }  
89 - }  
90 -  
91 - complete_apps = ['badger']  
92 \ No newline at end of file 0 \ No newline at end of file
src/badger/migrations/0006_imgpath_to_base64_field.py
@@ -1,94 +0,0 @@ @@ -1,94 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import base64  
3 -import os  
4 -  
5 -import datetime  
6 -from south.db import db  
7 -from south.v2 import DataMigration  
8 -from django.db import models  
9 -from django.conf import settings  
10 -  
11 -class Migration(DataMigration):  
12 -  
13 - def forwards(self, orm):  
14 - for obj in orm.Badge.objects.all():  
15 - img = open(os.path.join(settings.MEDIA_ROOT, obj.image.path))  
16 - obj.image_base64 = base64.b64encode(img.read())  
17 - obj.save()  
18 -  
19 - def backwards(self, orm):  
20 - for obj in orm.Badge.objects.all():  
21 - obj.image_base64 = ''  
22 - obj.save()  
23 -  
24 - models = {  
25 - u'accounts.user': {  
26 - 'Meta': {'object_name': 'User'},  
27 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
28 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
29 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
30 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
31 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
32 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
33 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
34 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
35 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
36 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
37 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
38 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
39 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
40 - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),  
41 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
42 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
43 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
44 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
45 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
46 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
47 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
48 - },  
49 - u'auth.group': {  
50 - 'Meta': {'object_name': 'Group'},  
51 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
52 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
53 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
54 - },  
55 - u'auth.permission': {  
56 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
57 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
58 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
59 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
60 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
61 - },  
62 - u'badger.badge': {  
63 - 'Meta': {'ordering': "['order']", 'object_name': 'Badge'},  
64 - 'awardees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['accounts.User']", 'null': 'True', 'blank': 'True'}),  
65 - 'comparison': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),  
66 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),  
69 - 'image_base64': ('django.db.models.fields.TextField', [], {}),  
70 - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}),  
71 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
72 - 'type': ('django.db.models.fields.CharField', [], {'max_length': '200'}),  
73 - 'user_attr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),  
74 - 'value': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'})  
75 - },  
76 - u'badger.badgei18n': {  
77 - 'Meta': {'unique_together': "(('i18n_source', 'i18n_language'),)", 'object_name': 'BadgeI18N'},  
78 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
79 - 'i18n_language': ('django.db.models.fields.CharField', [], {'max_length': '10'}),  
80 - 'i18n_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': u"orm['badger.Badge']"}),  
81 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
82 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})  
83 - },  
84 - u'contenttypes.contenttype': {  
85 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
86 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
87 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
88 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
89 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
90 - }  
91 - }  
92 -  
93 - complete_apps = ['badger']  
94 - symmetrical = True  
src/badger/migrations/0007_auto__del_field_badge_image.py
@@ -1,90 +0,0 @@ @@ -1,90 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Deleting field 'Badge.image'  
12 - db.delete_column(u'badger_badge', 'image')  
13 -  
14 -  
15 - def backwards(self, orm):  
16 - # Adding field 'Badge.image'  
17 - db.add_column(u'badger_badge', 'image',  
18 - self.gf('django.db.models.fields.files.ImageField')(default='', max_length=100),  
19 - keep_default=False)  
20 -  
21 -  
22 - models = {  
23 - u'accounts.user': {  
24 - 'Meta': {'object_name': 'User'},  
25 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
26 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
27 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
28 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
29 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
30 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
31 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
32 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
33 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
34 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
35 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
36 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
37 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
38 - 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),  
39 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
40 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
41 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
42 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
43 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
44 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
45 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
46 - },  
47 - u'auth.group': {  
48 - 'Meta': {'object_name': 'Group'},  
49 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
50 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
51 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
52 - },  
53 - u'auth.permission': {  
54 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
55 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
57 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
58 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
59 - },  
60 - u'badger.badge': {  
61 - 'Meta': {'ordering': "['order']", 'object_name': 'Badge'},  
62 - 'awardees': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': u"orm['accounts.User']", 'null': 'True', 'blank': 'True'}),  
63 - 'comparison': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),  
64 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
65 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
66 - 'image_base64': ('django.db.models.fields.TextField', [], {}),  
67 - 'order': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}),  
68 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
69 - 'type': ('django.db.models.fields.CharField', [], {'max_length': '200'}),  
70 - 'user_attr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),  
71 - 'value': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'})  
72 - },  
73 - u'badger.badgei18n': {  
74 - 'Meta': {'unique_together': "(('i18n_source', 'i18n_language'),)", 'object_name': 'BadgeI18N'},  
75 - 'description': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),  
76 - 'i18n_language': ('django.db.models.fields.CharField', [], {'max_length': '10'}),  
77 - 'i18n_source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'translations'", 'to': u"orm['badger.Badge']"}),  
78 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
79 - 'title': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'})  
80 - },  
81 - u'contenttypes.contenttype': {  
82 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
83 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
84 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
85 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
86 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
87 - }  
88 - }  
89 -  
90 - complete_apps = ['badger']  
91 \ No newline at end of file 0 \ No newline at end of file
src/proxy/migrations/0001_create_views.py
@@ -1,115 +0,0 @@ @@ -1,115 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from django.db import connections  
4 -from south.db import db  
5 -from south.v2 import DataMigration  
6 -from django.db import models  
7 -  
8 -  
9 -class Migration(DataMigration):  
10 -  
11 - def forwards(self, orm):  
12 - # Selecting trac database  
13 - connection = connections['trac']  
14 -  
15 - cursor = connection.cursor()  
16 - cursor.execute('''  
17 - CREATE OR REPLACE VIEW wiki_view AS SELECT  
18 - wiki.name AS name,  
19 - (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name  
20 - AND wiki2.version = MAX(wiki.version)) AS wiki_text,  
21 - (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name  
22 - AND wiki3.version = 1) AS author,  
23 - string_agg(DISTINCT wiki.author, ', ') AS collaborators,  
24 - TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS created,  
25 - TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS modified  
26 - FROM wiki  
27 - GROUP BY wiki.name;  
28 -  
29 - CREATE OR REPLACE VIEW ticket_view AS SELECT  
30 - ticket.id AS id,  
31 - ticket.summary as summary,  
32 - ticket.description as description,  
33 - ticket.milestone as milestone,  
34 - ticket.priority as priority,  
35 - ticket.component as component,  
36 - ticket.version as version,  
37 - ticket.severity as severity,  
38 - ticket.reporter as reporter,  
39 - ticket.reporter as author,  
40 - ticket.status as status,  
41 - ticket.keywords as keywords,  
42 - (SELECT  
43 - string_agg(DISTINCT ticket_change.author, ', ')  
44 - FROM ticket_change WHERE ticket_change.ticket = ticket.id  
45 - GROUP BY ticket_change.ticket) as collaborators,  
46 - TIMESTAMP WITH TIME ZONE 'epoch' + (time/1000000)* INTERVAL '1s' AS created,  
47 - TIMESTAMP WITH TIME ZONE 'epoch' + (changetime/1000000) * INTERVAL '1s' AS modified  
48 - FROM ticket;  
49 -  
50 - CREATE OR REPLACE VIEW revision_view AS SELECT  
51 - revision.rev,  
52 - revision.author,  
53 - revision.message,  
54 - repository.value AS repository_name,  
55 - TIMESTAMP WITH TIME ZONE 'epoch' + (revision.time/1000000) * INTERVAL '1s' AS created  
56 - FROM revision  
57 - INNER JOIN repository ON(  
58 - repository.id = revision.repos  
59 - AND repository.name = 'name'  
60 - AND repository.value != ''  
61 - );  
62 - ''')  
63 -  
64 - def backwards(self, orm):  
65 - # Selecting trac database  
66 - connection = connections['trac']  
67 -  
68 - cursor = connection.cursor()  
69 - cursor.execute('''  
70 - DROP VIEW IF EXISTS revision_view;  
71 - DROP VIEW IF EXISTS ticket_view;  
72 - DROP VIEW IF EXISTS wiki_view;  
73 - ''')  
74 -  
75 -  
76 - models = {  
77 - u'proxy.revision': {  
78 - 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'},  
79 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
80 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
81 - 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
82 - 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
83 - 'rev': ('django.db.models.fields.TextField', [], {'primary_key': 'True'})  
84 - },  
85 - u'proxy.ticket': {  
86 - 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'},  
87 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
88 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
89 - 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
90 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
91 - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
92 - 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),  
93 - 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
94 - 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
95 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
96 - 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
97 - 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
98 - 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
99 - 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
100 - 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
101 - 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
102 - },  
103 - u'proxy.wiki': {  
104 - 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'},  
105 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
106 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
107 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
108 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
109 - 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
110 - 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
111 - }  
112 - }  
113 -  
114 - complete_apps = ['proxy']  
115 - symmetrical = True  
src/proxy/migrations/0001_initial.py 0 → 100644
@@ -0,0 +1,79 @@ @@ -0,0 +1,79 @@
  1 +# -*- coding: utf-8 -*-
  2 +import datetime
  3 +from south.db import db
  4 +from south.v2 import SchemaMigration
  5 +from django.db import models
  6 +
  7 +
  8 +class Migration(SchemaMigration):
  9 +
  10 + def forwards(self, orm):
  11 + pass
  12 +
  13 + def backwards(self, orm):
  14 + pass
  15 +
  16 + models = {
  17 + u'proxy.attachment': {
  18 + 'Meta': {'object_name': 'Attachment', 'db_table': "'attachment_view'", 'managed': 'False'},
  19 + 'attach_id': ('django.db.models.fields.TextField', [], {}),
  20 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  21 + 'created': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),
  22 + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  23 + 'filename': ('django.db.models.fields.TextField', [], {}),
  24 + 'mimetype': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  25 + 'size': ('django.db.models.fields.IntegerField', [], {'blank': 'True'}),
  26 + 'url': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),
  27 + 'used_by': ('django.db.models.fields.TextField', [], {})
  28 + },
  29 + u'proxy.revision': {
  30 + 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'},
  31 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  32 + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  33 + 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),
  34 + 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  35 + 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  36 + 'rev': ('django.db.models.fields.TextField', [], {'blank': 'True'})
  37 + },
  38 + u'proxy.ticket': {
  39 + 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'},
  40 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  41 + 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  42 + 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  43 + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  44 + 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  45 + 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),
  46 + 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  47 + 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  48 + 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  49 + 'modified_by': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  50 + 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  51 + 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  52 + 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  53 + 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  54 + 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  55 + 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'})
  56 + },
  57 + u'proxy.ticketcollabcount': {
  58 + 'Meta': {'object_name': 'TicketCollabCount', 'db_table': "'ticket_collab_count_view'", 'managed': 'False'},
  59 + 'author': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),
  60 + 'count': ('django.db.models.fields.IntegerField', [], {})
  61 + },
  62 + u'proxy.wiki': {
  63 + 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'},
  64 + 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  65 + 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  66 + 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  67 + 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
  68 + 'modified_by': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
  69 + 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),
  70 + 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'})
  71 + },
  72 + u'proxy.wikicollabcount': {
  73 + 'Meta': {'object_name': 'WikiCollabCount', 'db_table': "'wiki_collab_count_view'", 'managed': 'False'},
  74 + 'author': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),
  75 + 'count': ('django.db.models.fields.IntegerField', [], {})
  76 + }
  77 + }
  78 +
  79 + complete_apps = ['proxy']
0 \ No newline at end of file 80 \ No newline at end of file
src/proxy/migrations/0002_add_key_to_revision_view.py
@@ -1,79 +0,0 @@ @@ -1,79 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from django.db import connections  
4 -from south.db import db  
5 -from south.v2 import DataMigration  
6 -from django.db import models  
7 -  
8 -class Migration(DataMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Selecting trac database  
12 - connection = connections['trac']  
13 -  
14 - cursor = connection.cursor()  
15 - cursor.execute('''  
16 - CREATE OR REPLACE VIEW revision_view AS SELECT  
17 - revision.rev,  
18 - revision.author,  
19 - revision.message,  
20 - repository.value AS repository_name,  
21 - TIMESTAMP WITH TIME ZONE 'epoch' + (revision.time/1000000) * INTERVAL '1s' AS created,  
22 - CONCAT(revision.repos, '-', revision.rev) AS key  
23 - FROM revision  
24 - INNER JOIN repository ON(  
25 - repository.id = revision.repos  
26 - AND repository.name = 'name'  
27 - AND repository.value != ''  
28 - );  
29 - ''')  
30 -  
31 - def backwards(self, orm):  
32 - # Selecting trac database  
33 - connection = connections['trac']  
34 -  
35 - cursor = connection.cursor()  
36 - cursor.execute('''  
37 - ALTER VIEW revision_view ALTER COLUMN key DROP DEFAULT;  
38 - ''')  
39 -  
40 - models = {  
41 - u'proxy.revision': {  
42 - 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'},  
43 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
44 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
45 - 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
46 - 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
47 - 'rev': ('django.db.models.fields.TextField', [], {'primary_key': 'True'})  
48 - },  
49 - u'proxy.ticket': {  
50 - 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'},  
51 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
52 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
53 - 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
54 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
55 - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
56 - 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),  
57 - 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
58 - 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
59 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
60 - 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
61 - 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
62 - 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
63 - 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
64 - 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
65 - 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
66 - },  
67 - u'proxy.wiki': {  
68 - 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'},  
69 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
70 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
71 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
72 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
73 - 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
74 - 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
75 - }  
76 - }  
77 -  
78 - complete_apps = ['proxy']  
79 - symmetrical = True  
src/proxy/migrations/0003_create_attachment_view.py
@@ -1,87 +0,0 @@ @@ -1,87 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from django.db import connections  
5 -from south.v2 import DataMigration  
6 -from django.db import models  
7 -  
8 -class Migration(DataMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Selecting trac database  
12 - connection = connections['trac']  
13 -  
14 - cursor = connection.cursor()  
15 - cursor.execute('''  
16 - CREATE OR REPLACE VIEW attachment_view AS SELECT  
17 - CONCAT(attachment.type, '/' , attachment.id, '/', attachment.filename) AS url,  
18 - attachment.type AS used_by,  
19 - attachment.filename AS filename,  
20 - attachment.id as attach_id,  
21 - (SELECT LOWER(SUBSTRING(attachment.filename FROM '\.(\w+)$'))) AS mimetype,  
22 - attachment.author AS author,  
23 - attachment.description AS description,  
24 - attachment.size AS size,  
25 - TIMESTAMP WITH TIME ZONE 'epoch' + (attachment.time/1000000)* INTERVAL '1s' AS created  
26 - FROM attachment;  
27 - ''')  
28 -  
29 - def backwards(self, orm):  
30 - # Selecting trac database  
31 - connection = connections['trac']  
32 -  
33 - cursor = connection.cursor()  
34 - cursor.execute('DROP VIEW IF EXISTS attachment_view;')  
35 -  
36 - models = {  
37 - u'proxy.attachment': {  
38 - 'Meta': {'object_name': 'Attachment', 'db_table': "'attachment'", 'managed': 'False'},  
39 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
40 - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
41 - 'filename': ('django.db.models.fields.TextField', [], {}),  
42 - 'id': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
43 - 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
44 - 'size': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),  
45 - 'time': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),  
46 - 'type': ('django.db.models.fields.TextField', [], {})  
47 - },  
48 - u'proxy.revision': {  
49 - 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'},  
50 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
51 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
52 - 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
53 - 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
54 - 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
55 - 'rev': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
56 - },  
57 - u'proxy.ticket': {  
58 - 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'},  
59 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
60 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
61 - 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
62 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
63 - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
64 - 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),  
65 - 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
66 - 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
67 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
68 - 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
69 - 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
70 - 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
71 - 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
72 - 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
73 - 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
74 - },  
75 - u'proxy.wiki': {  
76 - 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'},  
77 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
78 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
79 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
80 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
81 - 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
82 - 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
83 - }  
84 - }  
85 -  
86 - complete_apps = ['proxy']  
87 - symmetrical = True  
src/proxy/migrations/0004_replace_wiki_view.py
@@ -1,102 +0,0 @@ @@ -1,102 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from django.db import connections  
4 -from south.db import db  
5 -from south.v2 import DataMigration  
6 -from django.db import models  
7 -  
8 -class Migration(DataMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Selecting trac database  
12 - connection = connections['trac']  
13 -  
14 - cursor = connection.cursor()  
15 -  
16 - cursor.execute('''  
17 - CREATE OR REPLACE VIEW wiki_view AS SELECT  
18 - wiki.name AS name,  
19 - (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name  
20 - AND wiki2.version = MAX(wiki.version)) AS wiki_text,  
21 - (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name  
22 - AND wiki3.version = 1) AS author,  
23 - string_agg(DISTINCT wiki.author, ', ') AS collaborators,  
24 - TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS created,  
25 - TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS modified  
26 - FROM wiki  
27 - GROUP BY wiki.name;  
28 - ''')  
29 -  
30 - def backwards(self, orm):  
31 - # Selecting trac database  
32 - connection = connections['trac']  
33 -  
34 - cursor = connection.cursor()  
35 -  
36 - cursor.execute('''  
37 - CREATE OR REPLACE VIEW wiki_view AS SELECT  
38 - wiki.name AS name,  
39 - (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name  
40 - AND wiki2.version = MAX(wiki.version)) AS wiki_text,  
41 - (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name  
42 - AND wiki3.version = 1) AS author,  
43 - string_agg(DISTINCT wiki.author, ', ') AS collaborators,  
44 - TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS created,  
45 - TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS modified  
46 - FROM wiki  
47 - GROUP BY wiki.name;  
48 - ''')  
49 -  
50 - models = {  
51 - u'proxy.attachment': {  
52 - 'Meta': {'object_name': 'Attachment', 'db_table': "'attachment_view'", 'managed': 'False'},  
53 - 'attach_id': ('django.db.models.fields.TextField', [], {}),  
54 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
55 - 'created': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),  
56 - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
57 - 'filename': ('django.db.models.fields.TextField', [], {}),  
58 - 'mimetype': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
59 - 'size': ('django.db.models.fields.IntegerField', [], {'blank': 'True'}),  
60 - 'url': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
61 - 'used_by': ('django.db.models.fields.TextField', [], {})  
62 - },  
63 - u'proxy.revision': {  
64 - 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'},  
65 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
66 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
67 - 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
68 - 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
69 - 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
70 - 'rev': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
71 - },  
72 - u'proxy.ticket': {  
73 - 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'},  
74 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
75 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
76 - 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
77 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
78 - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
79 - 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),  
80 - 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
81 - 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
82 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
83 - 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
84 - 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
85 - 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
86 - 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
87 - 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
88 - 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
89 - },  
90 - u'proxy.wiki': {  
91 - 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'},  
92 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
93 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
94 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
95 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
96 - 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
97 - 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
98 - }  
99 - }  
100 -  
101 - complete_apps = ['proxy']  
102 - symmetrical = True  
src/proxy/migrations/0005_adding_modified_by.py
@@ -1,125 +0,0 @@ @@ -1,125 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from django.db import connections  
4 -from south.db import db  
5 -from south.v2 import DataMigration  
6 -from django.db import models  
7 -  
8 -class Migration(DataMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Selecting trac database  
12 - connection = connections['trac']  
13 -  
14 - cursor = connection.cursor()  
15 - cursor.execute('''  
16 - CREATE OR REPLACE VIEW wiki_view AS SELECT  
17 - wiki.name AS name,  
18 - (SELECT wiki2.text FROM wiki AS wiki2 WHERE wiki2.name = wiki.name  
19 - AND wiki2.version = MAX(wiki.version)) AS wiki_text,  
20 - (SELECT wiki3.author FROM wiki AS wiki3 WHERE wiki3.name = wiki.name  
21 - AND wiki3.version = 1) AS author,  
22 - string_agg(DISTINCT wiki.author, ', ') AS collaborators,  
23 - TIMESTAMP WITH TIME ZONE 'epoch' + (MIN(wiki.time)/1000000) * INTERVAL '1s' AS created,  
24 - TIMESTAMP WITH TIME ZONE 'epoch' + (MAX(wiki.time)/1000000) * INTERVAL '1s' AS modified,  
25 - (SELECT wiki4.author FROM wiki AS wiki4 WHERE wiki4.name = wiki.name  
26 - AND wiki4.version = MAX(wiki.version)) AS modified_by  
27 - FROM wiki  
28 - GROUP BY wiki.name;  
29 -  
30 - CREATE OR REPLACE VIEW ticket_view AS SELECT  
31 - ticket.id AS id,  
32 - ticket.summary as summary,  
33 - ticket.description as description,  
34 - ticket.milestone as milestone,  
35 - ticket.priority as priority,  
36 - ticket.component as component,  
37 - ticket.version as version,  
38 - ticket.severity as severity,  
39 - ticket.reporter as reporter,  
40 - ticket.reporter as author,  
41 - ticket.status as status,  
42 - ticket.keywords as keywords,  
43 - (SELECT  
44 - string_agg(DISTINCT ticket_change.author, ', ')  
45 - FROM ticket_change WHERE ticket_change.ticket = ticket.id  
46 - GROUP BY ticket_change.ticket) as collaborators,  
47 - TIMESTAMP WITH TIME ZONE 'epoch' + (time/1000000)* INTERVAL '1s' AS created,  
48 - TIMESTAMP WITH TIME ZONE 'epoch' + (changetime/1000000) * INTERVAL '1s' AS modified,  
49 - (SELECT  
50 - ticket_change.author  
51 - FROM ticket_change  
52 - WHERE ticket_change.ticket = ticket.id  
53 - AND ticket_change.time = ticket.changetime  
54 - LIMIT 1  
55 - ) AS modified_by  
56 - FROM ticket;  
57 - ''')  
58 -  
59 -  
60 - def backwards(self, orm):  
61 - # Selecting trac database  
62 - connection = connections['trac']  
63 -  
64 - cursor = connection.cursor()  
65 - cursor.execute('''  
66 - ALTER VIEW wiki_view ALTER COLUMN modified_by DROP DEFAULT;  
67 - ALTER VIEW ticket_view ALTER COLUMN modified_by DROP DEFAULT;  
68 - ''')  
69 -  
70 -  
71 - models = {  
72 - u'proxy.attachment': {  
73 - 'Meta': {'object_name': 'Attachment', 'db_table': "'attachment_view'", 'managed': 'False'},  
74 - 'attach_id': ('django.db.models.fields.TextField', [], {}),  
75 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
76 - 'created': ('django.db.models.fields.DateTimeField', [], {'blank': 'True'}),  
77 - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
78 - 'filename': ('django.db.models.fields.TextField', [], {}),  
79 - 'mimetype': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
80 - 'size': ('django.db.models.fields.IntegerField', [], {'blank': 'True'}),  
81 - 'url': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
82 - 'used_by': ('django.db.models.fields.TextField', [], {})  
83 - },  
84 - u'proxy.revision': {  
85 - 'Meta': {'object_name': 'Revision', 'db_table': "'revision_view'", 'managed': 'False'},  
86 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
87 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
88 - 'key': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
89 - 'message': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
90 - 'repository_name': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
91 - 'rev': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
92 - },  
93 - u'proxy.ticket': {  
94 - 'Meta': {'object_name': 'Ticket', 'db_table': "'ticket_view'", 'managed': 'False'},  
95 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
96 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
97 - 'component': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
98 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
99 - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
100 - 'id': ('django.db.models.fields.IntegerField', [], {'primary_key': 'True'}),  
101 - 'keywords': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
102 - 'milestone': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
103 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
104 - 'modified_by': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
105 - 'priority': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
106 - 'reporter': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
107 - 'severity': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
108 - 'status': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
109 - 'summary': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
110 - 'version': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
111 - },  
112 - u'proxy.wiki': {  
113 - 'Meta': {'object_name': 'Wiki', 'db_table': "'wiki_view'", 'managed': 'False'},  
114 - 'author': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
115 - 'collaborators': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
116 - 'created': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
117 - 'modified': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),  
118 - 'modified_by': ('django.db.models.fields.TextField', [], {'blank': 'True'}),  
119 - 'name': ('django.db.models.fields.TextField', [], {'primary_key': 'True'}),  
120 - 'wiki_text': ('django.db.models.fields.TextField', [], {'blank': 'True'})  
121 - }  
122 - }  
123 -  
124 - complete_apps = ['proxy']  
125 - symmetrical = True  
src/proxy/migrations/0006_views_to_count_collabs.py
@@ -1,46 +0,0 @@ @@ -1,46 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -from django.db import connections  
3 -from south.v2 import DataMigration  
4 -  
5 -class Migration(DataMigration):  
6 -  
7 - def forwards(self, orm):  
8 - # Selecting trac database  
9 - connection = connections['trac']  
10 -  
11 - cursor = connection.cursor()  
12 - cursor.execute('''  
13 - CREATE OR REPLACE VIEW ticket_collab_count_view AS  
14 - SELECT  
15 - COALESCE (t1.author, t2.author) as author,  
16 - (COALESCE(t1.count, 0) + COALESCE(t2.count, 0)) as count  
17 - FROM  
18 - (SELECT author, count(*) as count  
19 - FROM ticket_change  
20 - GROUP BY author  
21 - ORDER BY author  
22 - ) AS t1  
23 - FULL OUTER JOIN  
24 - (SELECT reporter as author, count(*) as count  
25 - FROM ticket  
26 - GROUP BY reporter  
27 - ORDER BY reporter  
28 - ) AS t2  
29 - ON t1.author = t2.author;  
30 -  
31 - CREATE OR REPLACE VIEW wiki_collab_count_view AS  
32 - SELECT author, count(*) from wiki GROUP BY author;  
33 - ''')  
34 -  
35 - def backwards(self, orm):  
36 - # Selecting trac database  
37 - connection = connections['trac']  
38 -  
39 - cursor = connection.cursor()  
40 - cursor.execute('''  
41 - DROP VIEW ticket_collab_count_view;  
42 - DROP VIEW wiki_collab_count_view;  
43 - ''')  
44 -  
45 - complete_apps = ['proxy']  
46 - symmetrical = True  
src/super_archives/migrations/0001_initial.py
1 -# encoding: utf-8 1 +# -*- coding: utf-8 -*-
2 import datetime 2 import datetime
3 from south.db import db 3 from south.db import db
4 from south.v2 import SchemaMigration 4 from south.v2 import SchemaMigration
5 from django.db import models 5 from django.db import models
6 6
  7 +
7 class Migration(SchemaMigration): 8 class Migration(SchemaMigration):
8 9
9 def forwards(self, orm): 10 def forwards(self, orm):
10 -  
11 - # Adding model 'PageHit'  
12 - db.create_table('super_archives_pagehit', (  
13 - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
14 - ('url_path', self.gf('django.db.models.fields.CharField')(unique=True, max_length=2048, db_index=True)),  
15 - ('hit_count', self.gf('django.db.models.fields.IntegerField')(default=0)), 11 + # Adding model 'EmailAddressValidation'
  12 + db.create_table(u'super_archives_emailaddressvalidation', (
  13 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
  14 + ('address', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75)),
  15 + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='emails_not_validated', null=True, to=orm['accounts.User'])),
  16 + ('validation_key', self.gf('django.db.models.fields.CharField')(default='143df80aa814429f9938d3b165148480', max_length=32, null=True)),
  17 + ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
16 )) 18 ))
17 - db.send_create_signal('super_archives', ['PageHit']) 19 + db.send_create_signal(u'super_archives', ['EmailAddressValidation'])
  20 +
  21 + # Adding unique constraint on 'EmailAddressValidation', fields ['user', 'address']
  22 + db.create_unique(u'super_archives_emailaddressvalidation', ['user_id', 'address'])
18 23
19 # Adding model 'EmailAddress' 24 # Adding model 'EmailAddress'
20 - db.create_table('super_archives_emailaddress', (  
21 - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
22 - ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='emails', null=True, to=orm['auth.User'])), 25 + db.create_table(u'super_archives_emailaddress', (
  26 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
  27 + ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='emails', null=True, on_delete=models.SET_NULL, to=orm['accounts.User'])),
23 ('address', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75)), 28 ('address', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75)),
24 - ('real_name', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)), 29 + ('real_name', self.gf('django.db.models.fields.CharField')(db_index=True, max_length=64, blank=True)),
25 ('md5', self.gf('django.db.models.fields.CharField')(max_length=32, null=True)), 30 ('md5', self.gf('django.db.models.fields.CharField')(max_length=32, null=True)),
26 )) 31 ))
27 - db.send_create_signal('super_archives', ['EmailAddress'])  
28 -  
29 - # Adding model 'UserProfile'  
30 - db.create_table('super_archives_userprofile', (  
31 - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
32 - ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),  
33 - ('institution', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),  
34 - ('role', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),  
35 - ('twitter', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),  
36 - ('facebook', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),  
37 - ('google_talk', self.gf('django.db.models.fields.EmailField')(max_length=75, null=True)),  
38 - ('webpage', self.gf('django.db.models.fields.CharField')(max_length=256)),  
39 - ))  
40 - db.send_create_signal('super_archives', ['UserProfile']) 32 + db.send_create_signal(u'super_archives', ['EmailAddress'])
41 33
42 # Adding model 'MailingList' 34 # Adding model 'MailingList'
43 - db.create_table('super_archives_mailinglist', (  
44 - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), 35 + db.create_table(u'super_archives_mailinglist', (
  36 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
45 ('name', self.gf('django.db.models.fields.CharField')(max_length=80)), 37 ('name', self.gf('django.db.models.fields.CharField')(max_length=80)),
46 ('email', self.gf('django.db.models.fields.EmailField')(max_length=75)), 38 ('email', self.gf('django.db.models.fields.EmailField')(max_length=75)),
47 ('description', self.gf('django.db.models.fields.TextField')()), 39 ('description', self.gf('django.db.models.fields.TextField')()),
48 ('logo', self.gf('django.db.models.fields.files.FileField')(max_length=100)), 40 ('logo', self.gf('django.db.models.fields.files.FileField')(max_length=100)),
49 ('last_imported_index', self.gf('django.db.models.fields.IntegerField')(default=0)), 41 ('last_imported_index', self.gf('django.db.models.fields.IntegerField')(default=0)),
50 )) 42 ))
51 - db.send_create_signal('super_archives', ['MailingList']) 43 + db.send_create_signal(u'super_archives', ['MailingList'])
52 44
53 # Adding model 'MailingListMembership' 45 # Adding model 'MailingListMembership'
54 - db.create_table('super_archives_mailinglistmembership', (  
55 - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
56 - ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), 46 + db.create_table(u'super_archives_mailinglistmembership', (
  47 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
  48 + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['accounts.User'])),
57 ('mailinglist', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.MailingList'])), 49 ('mailinglist', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.MailingList'])),
58 )) 50 ))
59 - db.send_create_signal('super_archives', ['MailingListMembership']) 51 + db.send_create_signal(u'super_archives', ['MailingListMembership'])
  52 +
  53 + # Adding model 'Keyword'
  54 + db.create_table(u'super_archives_keyword', (
  55 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
  56 + ('keyword', self.gf('django.db.models.fields.CharField')(max_length='128')),
  57 + ('weight', self.gf('django.db.models.fields.IntegerField')(default=0)),
  58 + ('thread', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Thread'])),
  59 + ))
  60 + db.send_create_signal(u'super_archives', ['Keyword'])
60 61
61 # Adding model 'Thread' 62 # Adding model 'Thread'
62 - db.create_table('super_archives_thread', (  
63 - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), 63 + db.create_table(u'super_archives_thread', (
  64 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
64 ('subject_token', self.gf('django.db.models.fields.CharField')(max_length=512)), 65 ('subject_token', self.gf('django.db.models.fields.CharField')(max_length=512)),
65 ('mailinglist', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.MailingList'])), 66 ('mailinglist', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.MailingList'])),
66 ('latest_message', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, null=True, to=orm['super_archives.Message'])), 67 ('latest_message', self.gf('django.db.models.fields.related.OneToOneField')(related_name='+', unique=True, null=True, to=orm['super_archives.Message'])),
  68 + ('score', self.gf('django.db.models.fields.IntegerField')(default=0)),
  69 + ('spam', self.gf('django.db.models.fields.BooleanField')(default=False)),
67 )) 70 ))
68 - db.send_create_signal('super_archives', ['Thread']) 71 + db.send_create_signal(u'super_archives', ['Thread'])
69 72
70 # Adding unique constraint on 'Thread', fields ['subject_token', 'mailinglist'] 73 # Adding unique constraint on 'Thread', fields ['subject_token', 'mailinglist']
71 - db.create_unique('super_archives_thread', ['subject_token', 'mailinglist_id']) 74 + db.create_unique(u'super_archives_thread', ['subject_token', 'mailinglist_id'])
72 75
73 # Adding model 'Vote' 76 # Adding model 'Vote'
74 - db.create_table('super_archives_vote', (  
75 - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
76 - ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), 77 + db.create_table(u'super_archives_vote', (
  78 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
  79 + ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['accounts.User'])),
77 ('message', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Message'])), 80 ('message', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Message'])),
  81 + ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
78 )) 82 ))
79 - db.send_create_signal('super_archives', ['Vote']) 83 + db.send_create_signal(u'super_archives', ['Vote'])
80 84
81 # Adding unique constraint on 'Vote', fields ['user', 'message'] 85 # Adding unique constraint on 'Vote', fields ['user', 'message']
82 - db.create_unique('super_archives_vote', ['user_id', 'message_id']) 86 + db.create_unique(u'super_archives_vote', ['user_id', 'message_id'])
83 87
84 # Adding model 'Message' 88 # Adding model 'Message'
85 - db.create_table('super_archives_message', (  
86 - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), 89 + db.create_table(u'super_archives_message', (
  90 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
87 ('from_address', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.EmailAddress'])), 91 ('from_address', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.EmailAddress'])),
88 - ('mailinglist', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.MailingList'])),  
89 ('thread', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Thread'], null=True)), 92 ('thread', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Thread'], null=True)),
90 - ('subject', self.gf('django.db.models.fields.CharField')(max_length=512)),  
91 - ('subject_clean', self.gf('django.db.models.fields.CharField')(max_length=512)), 93 + ('subject', self.gf('django.db.models.fields.CharField')(max_length=512, db_index=True)),
  94 + ('subject_clean', self.gf('django.db.models.fields.CharField')(max_length=512, db_index=True)),
92 ('body', self.gf('django.db.models.fields.TextField')(default='')), 95 ('body', self.gf('django.db.models.fields.TextField')(default='')),
93 - ('received_time', self.gf('django.db.models.fields.DateTimeField')()), 96 + ('received_time', self.gf('django.db.models.fields.DateTimeField')(db_index=True)),
94 ('message_id', self.gf('django.db.models.fields.CharField')(max_length=512)), 97 ('message_id', self.gf('django.db.models.fields.CharField')(max_length=512)),
  98 + ('spam', self.gf('django.db.models.fields.BooleanField')(default=False)),
95 )) 99 ))
96 - db.send_create_signal('super_archives', ['Message']) 100 + db.send_create_signal(u'super_archives', ['Message'])
  101 +
  102 + # Adding unique constraint on 'Message', fields ['thread', 'message_id']
  103 + db.create_unique(u'super_archives_message', ['thread_id', 'message_id'])
  104 +
  105 + # Adding model 'MessageBlock'
  106 + db.create_table(u'super_archives_messageblock', (
  107 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
  108 + ('message', self.gf('django.db.models.fields.related.ForeignKey')(related_name='blocks', to=orm['super_archives.Message'])),
  109 + ('text', self.gf('django.db.models.fields.TextField')()),
  110 + ('is_reply', self.gf('django.db.models.fields.BooleanField')()),
  111 + ('order', self.gf('django.db.models.fields.IntegerField')()),
  112 + ))
  113 + db.send_create_signal(u'super_archives', ['MessageBlock'])
97 114
98 # Adding model 'MessageMetadata' 115 # Adding model 'MessageMetadata'
99 - db.create_table('super_archives_messagemetadata', (  
100 - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), 116 + db.create_table(u'super_archives_messagemetadata', (
  117 + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
101 ('Message', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Message'])), 118 ('Message', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Message'])),
102 ('name', self.gf('django.db.models.fields.CharField')(max_length=512)), 119 ('name', self.gf('django.db.models.fields.CharField')(max_length=512)),
103 ('value', self.gf('django.db.models.fields.TextField')()), 120 ('value', self.gf('django.db.models.fields.TextField')()),
104 )) 121 ))
105 - db.send_create_signal('super_archives', ['MessageMetadata']) 122 + db.send_create_signal(u'super_archives', ['MessageMetadata'])
106 123
107 124
108 def backwards(self, orm): 125 def backwards(self, orm):
109 - 126 + # Removing unique constraint on 'Message', fields ['thread', 'message_id']
  127 + db.delete_unique(u'super_archives_message', ['thread_id', 'message_id'])
  128 +
110 # Removing unique constraint on 'Vote', fields ['user', 'message'] 129 # Removing unique constraint on 'Vote', fields ['user', 'message']
111 - db.delete_unique('super_archives_vote', ['user_id', 'message_id']) 130 + db.delete_unique(u'super_archives_vote', ['user_id', 'message_id'])
112 131
113 # Removing unique constraint on 'Thread', fields ['subject_token', 'mailinglist'] 132 # Removing unique constraint on 'Thread', fields ['subject_token', 'mailinglist']
114 - db.delete_unique('super_archives_thread', ['subject_token', 'mailinglist_id']) 133 + db.delete_unique(u'super_archives_thread', ['subject_token', 'mailinglist_id'])
115 134
116 - # Deleting model 'PageHit'  
117 - db.delete_table('super_archives_pagehit') 135 + # Removing unique constraint on 'EmailAddressValidation', fields ['user', 'address']
  136 + db.delete_unique(u'super_archives_emailaddressvalidation', ['user_id', 'address'])
118 137
119 - # Deleting model 'EmailAddress'  
120 - db.delete_table('super_archives_emailaddress') 138 + # Deleting model 'EmailAddressValidation'
  139 + db.delete_table(u'super_archives_emailaddressvalidation')
121 140
122 - # Deleting model 'UserProfile'  
123 - db.delete_table('super_archives_userprofile') 141 + # Deleting model 'EmailAddress'
  142 + db.delete_table(u'super_archives_emailaddress')
124 143
125 # Deleting model 'MailingList' 144 # Deleting model 'MailingList'
126 - db.delete_table('super_archives_mailinglist') 145 + db.delete_table(u'super_archives_mailinglist')
127 146
128 # Deleting model 'MailingListMembership' 147 # Deleting model 'MailingListMembership'
129 - db.delete_table('super_archives_mailinglistmembership') 148 + db.delete_table(u'super_archives_mailinglistmembership')
  149 +
  150 + # Deleting model 'Keyword'
  151 + db.delete_table(u'super_archives_keyword')
130 152
131 # Deleting model 'Thread' 153 # Deleting model 'Thread'
132 - db.delete_table('super_archives_thread') 154 + db.delete_table(u'super_archives_thread')
133 155
134 # Deleting model 'Vote' 156 # Deleting model 'Vote'
135 - db.delete_table('super_archives_vote') 157 + db.delete_table(u'super_archives_vote')
136 158
137 # Deleting model 'Message' 159 # Deleting model 'Message'
138 - db.delete_table('super_archives_message') 160 + db.delete_table(u'super_archives_message')
  161 +
  162 + # Deleting model 'MessageBlock'
  163 + db.delete_table(u'super_archives_messageblock')
139 164
140 # Deleting model 'MessageMetadata' 165 # Deleting model 'MessageMetadata'
141 - db.delete_table('super_archives_messagemetadata') 166 + db.delete_table(u'super_archives_messagemetadata')
142 167
143 168
144 models = { 169 models = {
145 - 'auth.group': {  
146 - 'Meta': {'object_name': 'Group'},  
147 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
148 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
149 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
150 - },  
151 - 'auth.permission': {  
152 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
153 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
154 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
155 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
156 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
157 - },  
158 - 'auth.user': { 170 + u'accounts.user': {
159 'Meta': {'object_name': 'User'}, 171 'Meta': {'object_name': 'User'},
  172 + 'bio': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
160 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 173 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
161 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), 174 + 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),
  175 + 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
162 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), 176 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
163 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
164 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 177 + 'github': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
  178 + 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
  179 + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
  180 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  181 + 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
165 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), 182 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
166 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 183 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
167 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 184 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
168 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), 185 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
169 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), 186 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
  187 + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
170 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), 188 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
171 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
172 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) 189 + 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
  190 + 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
  191 + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
  192 + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
  193 + 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
  194 + 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})
  195 + },
  196 + u'auth.group': {
  197 + 'Meta': {'object_name': 'Group'},
  198 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  199 + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
  200 + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
  201 + },
  202 + u'auth.permission': {
  203 + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
  204 + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
  205 + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
  206 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  207 + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
173 }, 208 },
174 - 'contenttypes.contenttype': { 209 + u'contenttypes.contenttype': {
175 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, 210 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
176 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 211 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
177 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 212 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
178 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), 213 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
179 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) 214 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
180 }, 215 },
181 - 'super_archives.emailaddress': {  
182 - 'Meta': {'object_name': 'EmailAddress'}, 216 + u'super_archives.emailaddress': {
  217 + 'Meta': {'ordering': "('id',)", 'object_name': 'EmailAddress'},
183 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}), 218 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),
184 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 219 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
185 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), 220 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
186 - 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),  
187 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"}) 221 + 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),
  222 + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['accounts.User']"})
  223 + },
  224 + u'super_archives.emailaddressvalidation': {
  225 + 'Meta': {'unique_together': "(('user', 'address'),)", 'object_name': 'EmailAddressValidation'},
  226 + 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),
  227 + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
  228 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  229 + 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),
  230 + 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'aa4ac05f39464a05932308e9fda2daf5'", 'max_length': '32', 'null': 'True'})
188 }, 231 },
189 - 'super_archives.mailinglist': { 232 + u'super_archives.keyword': {
  233 + 'Meta': {'ordering': "('?',)", 'object_name': 'Keyword'},
  234 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  235 + 'keyword': ('django.db.models.fields.CharField', [], {'max_length': "'128'"}),
  236 + 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']"}),
  237 + 'weight': ('django.db.models.fields.IntegerField', [], {'default': '0'})
  238 + },
  239 + u'super_archives.mailinglist': {
190 'Meta': {'object_name': 'MailingList'}, 240 'Meta': {'object_name': 'MailingList'},
191 'description': ('django.db.models.fields.TextField', [], {}), 241 'description': ('django.db.models.fields.TextField', [], {}),
192 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}), 242 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),
193 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 243 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
194 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}), 244 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
195 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}), 245 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
196 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}) 246 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})
197 }, 247 },
198 - 'super_archives.mailinglistmembership': { 248 + u'super_archives.mailinglistmembership': {
199 'Meta': {'object_name': 'MailingListMembership'}, 249 'Meta': {'object_name': 'MailingListMembership'},
200 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
201 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
202 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) 250 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  251 + 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),
  252 + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})
203 }, 253 },
204 - 'super_archives.message': {  
205 - 'Meta': {'object_name': 'Message'}, 254 + u'super_archives.message': {
  255 + 'Meta': {'ordering': "('received_time',)", 'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},
206 'body': ('django.db.models.fields.TextField', [], {'default': "''"}), 256 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),
207 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
208 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
209 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}), 257 + 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),
  258 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
210 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 259 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
211 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
212 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
213 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
214 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'}) 260 + 'received_time': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),
  261 + 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
  262 + 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),
  263 + 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),
  264 + 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})
  265 + },
  266 + u'super_archives.messageblock': {
  267 + 'Meta': {'ordering': "('order',)", 'object_name': 'MessageBlock'},
  268 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  269 + 'is_reply': ('django.db.models.fields.BooleanField', [], {}),
  270 + 'message': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'blocks'", 'to': u"orm['super_archives.Message']"}),
  271 + 'order': ('django.db.models.fields.IntegerField', [], {}),
  272 + 'text': ('django.db.models.fields.TextField', [], {})
215 }, 273 },
216 - 'super_archives.messagemetadata': {  
217 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}), 274 + u'super_archives.messagemetadata': {
  275 + 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),
218 'Meta': {'object_name': 'MessageMetadata'}, 276 'Meta': {'object_name': 'MessageMetadata'},
219 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 277 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
220 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}), 278 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),
221 'value': ('django.db.models.fields.TextField', [], {}) 279 'value': ('django.db.models.fields.TextField', [], {})
222 }, 280 },
223 - 'super_archives.pagehit': {  
224 - 'Meta': {'object_name': 'PageHit'},  
225 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
226 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
227 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
228 - },  
229 - 'super_archives.thread': {  
230 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
231 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
232 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
233 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}), 281 + u'super_archives.thread': {
  282 + 'Meta': {'ordering': "('-latest_message__received_time',)", 'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},
  283 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  284 + 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),
  285 + 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),
  286 + 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
  287 + 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
234 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'}) 288 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})
235 }, 289 },
236 - 'super_archives.userprofile': {  
237 - 'Meta': {'object_name': 'UserProfile'},  
238 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
239 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
240 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
241 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
242 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
243 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
244 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
245 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
246 - },  
247 - 'super_archives.vote': { 290 + u'super_archives.vote': {
248 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'}, 291 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},
249 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
250 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
251 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) 292 + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
  293 + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
  294 + 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),
  295 + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})
252 } 296 }
253 } 297 }
254 298
255 - complete_apps = ['super_archives'] 299 - complete_apps = ['super_archives']
  300 + complete_apps = ['super_archives']
256 \ No newline at end of file 301 \ No newline at end of file
src/super_archives/migrations/0002_auto__add_field_userprofile_verification_hash.py
@@ -1,133 +0,0 @@ @@ -1,133 +0,0 @@
1 -# encoding: utf-8  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -class Migration(SchemaMigration):  
8 -  
9 - def forwards(self, orm):  
10 -  
11 - # Adding field 'UserProfile.verification_hash'  
12 - db.add_column('super_archives_userprofile', 'verification_hash', self.gf('django.db.models.fields.CharField')(max_length=32, null=True), keep_default=False)  
13 -  
14 -  
15 - def backwards(self, orm):  
16 -  
17 - # Deleting field 'UserProfile.verification_hash'  
18 - db.delete_column('super_archives_userprofile', 'verification_hash')  
19 -  
20 -  
21 - models = {  
22 - 'auth.group': {  
23 - 'Meta': {'object_name': 'Group'},  
24 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
25 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
26 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
27 - },  
28 - 'auth.permission': {  
29 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
30 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
31 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
32 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
33 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
34 - },  
35 - 'auth.user': {  
36 - 'Meta': {'object_name': 'User'},  
37 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
38 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
39 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
40 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
41 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
42 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
43 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
44 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
45 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
46 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
47 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
48 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
49 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
50 - },  
51 - 'contenttypes.contenttype': {  
52 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
53 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
54 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
57 - },  
58 - 'super_archives.emailaddress': {  
59 - 'Meta': {'object_name': 'EmailAddress'},  
60 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
61 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
63 - 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),  
64 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"})  
65 - },  
66 - 'super_archives.mailinglist': {  
67 - 'Meta': {'object_name': 'MailingList'},  
68 - 'description': ('django.db.models.fields.TextField', [], {}),  
69 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
70 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
71 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
72 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
73 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
74 - },  
75 - 'super_archives.mailinglistmembership': {  
76 - 'Meta': {'object_name': 'MailingListMembership'},  
77 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
78 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
79 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
80 - },  
81 - 'super_archives.message': {  
82 - 'Meta': {'object_name': 'Message'},  
83 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
84 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
85 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
86 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
87 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
88 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
89 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
90 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
91 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'})  
92 - },  
93 - 'super_archives.messagemetadata': {  
94 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
95 - 'Meta': {'object_name': 'MessageMetadata'},  
96 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
97 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
98 - 'value': ('django.db.models.fields.TextField', [], {})  
99 - },  
100 - 'super_archives.pagehit': {  
101 - 'Meta': {'object_name': 'PageHit'},  
102 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
103 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
105 - },  
106 - 'super_archives.thread': {  
107 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
108 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
109 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
110 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
111 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
112 - },  
113 - 'super_archives.userprofile': {  
114 - 'Meta': {'object_name': 'UserProfile'},  
115 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
116 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
117 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
118 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
119 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
120 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
121 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
122 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
123 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
124 - },  
125 - 'super_archives.vote': {  
126 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
127 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
128 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
129 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
130 - }  
131 - }  
132 -  
133 - complete_apps = ['super_archives']  
src/super_archives/migrations/0003_auto__add_field_thread_score.py
@@ -1,134 +0,0 @@ @@ -1,134 +0,0 @@
1 -# encoding: utf-8  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -class Migration(SchemaMigration):  
8 -  
9 - def forwards(self, orm):  
10 -  
11 - # Adding field 'Thread.score'  
12 - db.add_column('super_archives_thread', 'score', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)  
13 -  
14 -  
15 - def backwards(self, orm):  
16 -  
17 - # Deleting field 'Thread.score'  
18 - db.delete_column('super_archives_thread', 'score')  
19 -  
20 -  
21 - models = {  
22 - 'auth.group': {  
23 - 'Meta': {'object_name': 'Group'},  
24 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
25 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
26 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
27 - },  
28 - 'auth.permission': {  
29 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
30 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
31 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
32 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
33 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
34 - },  
35 - 'auth.user': {  
36 - 'Meta': {'object_name': 'User'},  
37 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
38 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
39 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
40 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
41 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
42 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
43 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
44 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
45 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
46 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
47 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
48 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
49 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
50 - },  
51 - 'contenttypes.contenttype': {  
52 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
53 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
54 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
57 - },  
58 - 'super_archives.emailaddress': {  
59 - 'Meta': {'object_name': 'EmailAddress'},  
60 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
61 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
63 - 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),  
64 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"})  
65 - },  
66 - 'super_archives.mailinglist': {  
67 - 'Meta': {'object_name': 'MailingList'},  
68 - 'description': ('django.db.models.fields.TextField', [], {}),  
69 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
70 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
71 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
72 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
73 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
74 - },  
75 - 'super_archives.mailinglistmembership': {  
76 - 'Meta': {'object_name': 'MailingListMembership'},  
77 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
78 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
79 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
80 - },  
81 - 'super_archives.message': {  
82 - 'Meta': {'object_name': 'Message'},  
83 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
84 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
85 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
86 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
87 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
88 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
89 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
90 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
91 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'})  
92 - },  
93 - 'super_archives.messagemetadata': {  
94 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
95 - 'Meta': {'object_name': 'MessageMetadata'},  
96 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
97 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
98 - 'value': ('django.db.models.fields.TextField', [], {})  
99 - },  
100 - 'super_archives.pagehit': {  
101 - 'Meta': {'object_name': 'PageHit'},  
102 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
103 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
105 - },  
106 - 'super_archives.thread': {  
107 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
108 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
109 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
110 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
111 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
112 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
113 - },  
114 - 'super_archives.userprofile': {  
115 - 'Meta': {'object_name': 'UserProfile'},  
116 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
117 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
118 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
119 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
120 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
121 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
122 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
123 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
124 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
125 - },  
126 - 'super_archives.vote': {  
127 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
128 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
129 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
130 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
131 - }  
132 - }  
133 -  
134 - complete_apps = ['super_archives']  
src/super_archives/migrations/0004_auto__add_field_vote_created.py
@@ -1,135 +0,0 @@ @@ -1,135 +0,0 @@
1 -# encoding: utf-8  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -class Migration(SchemaMigration):  
8 -  
9 - def forwards(self, orm):  
10 -  
11 - # Adding field 'Vote.created'  
12 - db.add_column('super_archives_vote', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, default=datetime.datetime(2012, 1, 19, 18, 8, 46, 813949), blank=True), keep_default=False)  
13 -  
14 -  
15 - def backwards(self, orm):  
16 -  
17 - # Deleting field 'Vote.created'  
18 - db.delete_column('super_archives_vote', 'created')  
19 -  
20 -  
21 - models = {  
22 - 'auth.group': {  
23 - 'Meta': {'object_name': 'Group'},  
24 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
25 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
26 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
27 - },  
28 - 'auth.permission': {  
29 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
30 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
31 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
32 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
33 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
34 - },  
35 - 'auth.user': {  
36 - 'Meta': {'object_name': 'User'},  
37 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
38 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
39 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
40 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
41 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
42 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
43 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
44 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
45 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
46 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
47 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
48 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
49 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
50 - },  
51 - 'contenttypes.contenttype': {  
52 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
53 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
54 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
57 - },  
58 - 'super_archives.emailaddress': {  
59 - 'Meta': {'object_name': 'EmailAddress'},  
60 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
61 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
63 - 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),  
64 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"})  
65 - },  
66 - 'super_archives.mailinglist': {  
67 - 'Meta': {'object_name': 'MailingList'},  
68 - 'description': ('django.db.models.fields.TextField', [], {}),  
69 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
70 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
71 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
72 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
73 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
74 - },  
75 - 'super_archives.mailinglistmembership': {  
76 - 'Meta': {'object_name': 'MailingListMembership'},  
77 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
78 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
79 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
80 - },  
81 - 'super_archives.message': {  
82 - 'Meta': {'object_name': 'Message'},  
83 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
84 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
85 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
86 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
87 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
88 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
89 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
90 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
91 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'})  
92 - },  
93 - 'super_archives.messagemetadata': {  
94 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
95 - 'Meta': {'object_name': 'MessageMetadata'},  
96 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
97 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
98 - 'value': ('django.db.models.fields.TextField', [], {})  
99 - },  
100 - 'super_archives.pagehit': {  
101 - 'Meta': {'object_name': 'PageHit'},  
102 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
103 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
105 - },  
106 - 'super_archives.thread': {  
107 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
108 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
109 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
110 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
111 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
112 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
113 - },  
114 - 'super_archives.userprofile': {  
115 - 'Meta': {'object_name': 'UserProfile'},  
116 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
117 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
118 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
119 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
120 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
121 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
122 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
123 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
124 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
125 - },  
126 - 'super_archives.vote': {  
127 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
128 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
129 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
130 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
131 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
132 - }  
133 - }  
134 -  
135 - complete_apps = ['super_archives']  
src/super_archives/migrations/0005_auto__add_field_message_spam__add_field_thread_spam.py
@@ -1,143 +0,0 @@ @@ -1,143 +0,0 @@
1 -# encoding: utf-8  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -class Migration(SchemaMigration):  
8 -  
9 - def forwards(self, orm):  
10 -  
11 - # Adding field 'Message.spam'  
12 - db.add_column('super_archives_message', 'spam', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False)  
13 -  
14 - # Adding field 'Thread.spam'  
15 - db.add_column('super_archives_thread', 'spam', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False)  
16 -  
17 -  
18 - def backwards(self, orm):  
19 -  
20 - # Deleting field 'Message.spam'  
21 - db.delete_column('super_archives_message', 'spam')  
22 -  
23 - # Deleting field 'Thread.spam'  
24 - db.delete_column('super_archives_thread', 'spam')  
25 -  
26 -  
27 - models = {  
28 - 'auth.group': {  
29 - 'Meta': {'object_name': 'Group'},  
30 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
31 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
32 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
33 - },  
34 - 'auth.permission': {  
35 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
36 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
37 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
38 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
39 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
40 - },  
41 - 'auth.user': {  
42 - 'Meta': {'object_name': 'User'},  
43 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
44 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
45 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
46 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
47 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
48 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
49 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
50 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
51 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
52 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
53 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
54 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
55 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
56 - },  
57 - 'contenttypes.contenttype': {  
58 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
59 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
60 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
61 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
62 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
63 - },  
64 - 'super_archives.emailaddress': {  
65 - 'Meta': {'object_name': 'EmailAddress'},  
66 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
67 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
69 - 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),  
70 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"})  
71 - },  
72 - 'super_archives.mailinglist': {  
73 - 'Meta': {'object_name': 'MailingList'},  
74 - 'description': ('django.db.models.fields.TextField', [], {}),  
75 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
76 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
77 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
78 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
79 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
80 - },  
81 - 'super_archives.mailinglistmembership': {  
82 - 'Meta': {'object_name': 'MailingListMembership'},  
83 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
84 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
85 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
86 - },  
87 - 'super_archives.message': {  
88 - 'Meta': {'object_name': 'Message'},  
89 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
90 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
91 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
92 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
93 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
94 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
95 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
96 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
97 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
98 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'})  
99 - },  
100 - 'super_archives.messagemetadata': {  
101 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
102 - 'Meta': {'object_name': 'MessageMetadata'},  
103 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
105 - 'value': ('django.db.models.fields.TextField', [], {})  
106 - },  
107 - 'super_archives.pagehit': {  
108 - 'Meta': {'object_name': 'PageHit'},  
109 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
110 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
111 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
112 - },  
113 - 'super_archives.thread': {  
114 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
115 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
116 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
117 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
118 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
119 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
120 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
121 - },  
122 - 'super_archives.userprofile': {  
123 - 'Meta': {'object_name': 'UserProfile'},  
124 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
125 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
126 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
127 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
128 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
129 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
130 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
131 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
132 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
133 - },  
134 - 'super_archives.vote': {  
135 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
136 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
137 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
138 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
139 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
140 - }  
141 - }  
142 -  
143 - complete_apps = ['super_archives']  
src/super_archives/migrations/0006_auto.py
@@ -1,143 +0,0 @@ @@ -1,143 +0,0 @@
1 -# encoding: utf-8  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -class Migration(SchemaMigration):  
8 -  
9 - def forwards(self, orm):  
10 -  
11 - # Adding index on 'Message', fields ['subject_clean']  
12 - db.create_index('super_archives_message', ['subject_clean'])  
13 -  
14 - # Adding index on 'Message', fields ['subject']  
15 - db.create_index('super_archives_message', ['subject'])  
16 -  
17 -  
18 - def backwards(self, orm):  
19 -  
20 - # Removing index on 'Message', fields ['subject']  
21 - db.delete_index('super_archives_message', ['subject'])  
22 -  
23 - # Removing index on 'Message', fields ['subject_clean']  
24 - db.delete_index('super_archives_message', ['subject_clean'])  
25 -  
26 -  
27 - models = {  
28 - 'auth.group': {  
29 - 'Meta': {'object_name': 'Group'},  
30 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
31 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
32 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
33 - },  
34 - 'auth.permission': {  
35 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
36 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
37 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
38 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
39 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
40 - },  
41 - 'auth.user': {  
42 - 'Meta': {'object_name': 'User'},  
43 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
44 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
45 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
46 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
47 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
48 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
49 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
50 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
51 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
52 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
53 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
54 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
55 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
56 - },  
57 - 'contenttypes.contenttype': {  
58 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
59 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
60 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
61 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
62 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
63 - },  
64 - 'super_archives.emailaddress': {  
65 - 'Meta': {'object_name': 'EmailAddress'},  
66 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
67 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
69 - 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),  
70 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"})  
71 - },  
72 - 'super_archives.mailinglist': {  
73 - 'Meta': {'object_name': 'MailingList'},  
74 - 'description': ('django.db.models.fields.TextField', [], {}),  
75 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
76 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
77 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
78 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
79 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
80 - },  
81 - 'super_archives.mailinglistmembership': {  
82 - 'Meta': {'object_name': 'MailingListMembership'},  
83 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
84 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
85 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
86 - },  
87 - 'super_archives.message': {  
88 - 'Meta': {'object_name': 'Message'},  
89 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
90 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
91 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
92 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
93 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
94 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
95 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
96 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
97 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
98 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'})  
99 - },  
100 - 'super_archives.messagemetadata': {  
101 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
102 - 'Meta': {'object_name': 'MessageMetadata'},  
103 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
105 - 'value': ('django.db.models.fields.TextField', [], {})  
106 - },  
107 - 'super_archives.pagehit': {  
108 - 'Meta': {'object_name': 'PageHit'},  
109 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
110 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
111 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
112 - },  
113 - 'super_archives.thread': {  
114 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
115 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
116 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
117 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
118 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
119 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
120 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
121 - },  
122 - 'super_archives.userprofile': {  
123 - 'Meta': {'object_name': 'UserProfile'},  
124 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
125 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
126 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
127 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
128 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
129 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
130 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
131 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
132 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
133 - },  
134 - 'super_archives.vote': {  
135 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
136 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
137 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
138 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
139 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
140 - }  
141 - }  
142 -  
143 - complete_apps = ['super_archives']  
src/super_archives/migrations/0007_auto.py
@@ -1,137 +0,0 @@ @@ -1,137 +0,0 @@
1 -# encoding: utf-8  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -class Migration(SchemaMigration):  
8 -  
9 - def forwards(self, orm):  
10 -  
11 - # Adding index on 'EmailAddress', fields ['real_name']  
12 - db.create_index('super_archives_emailaddress', ['real_name'])  
13 -  
14 -  
15 - def backwards(self, orm):  
16 -  
17 - # Removing index on 'EmailAddress', fields ['real_name']  
18 - db.delete_index('super_archives_emailaddress', ['real_name'])  
19 -  
20 -  
21 - models = {  
22 - 'auth.group': {  
23 - 'Meta': {'object_name': 'Group'},  
24 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
25 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
26 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
27 - },  
28 - 'auth.permission': {  
29 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
30 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
31 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
32 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
33 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
34 - },  
35 - 'auth.user': {  
36 - 'Meta': {'object_name': 'User'},  
37 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
38 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
39 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
40 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
41 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
42 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
43 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
44 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
45 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
46 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
47 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
48 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
49 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
50 - },  
51 - 'contenttypes.contenttype': {  
52 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
53 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
54 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
57 - },  
58 - 'super_archives.emailaddress': {  
59 - 'Meta': {'object_name': 'EmailAddress'},  
60 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
61 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
63 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
64 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"})  
65 - },  
66 - 'super_archives.mailinglist': {  
67 - 'Meta': {'object_name': 'MailingList'},  
68 - 'description': ('django.db.models.fields.TextField', [], {}),  
69 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
70 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
71 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
72 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
73 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
74 - },  
75 - 'super_archives.mailinglistmembership': {  
76 - 'Meta': {'object_name': 'MailingListMembership'},  
77 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
78 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
79 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
80 - },  
81 - 'super_archives.message': {  
82 - 'Meta': {'object_name': 'Message'},  
83 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
84 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
85 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
86 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
87 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
88 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
89 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
90 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
91 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
92 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'})  
93 - },  
94 - 'super_archives.messagemetadata': {  
95 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
96 - 'Meta': {'object_name': 'MessageMetadata'},  
97 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
98 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
99 - 'value': ('django.db.models.fields.TextField', [], {})  
100 - },  
101 - 'super_archives.pagehit': {  
102 - 'Meta': {'object_name': 'PageHit'},  
103 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
104 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
105 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
106 - },  
107 - 'super_archives.thread': {  
108 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
109 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
110 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
111 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
112 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
113 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
114 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
115 - },  
116 - 'super_archives.userprofile': {  
117 - 'Meta': {'object_name': 'UserProfile'},  
118 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
119 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
120 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
121 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
122 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
123 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
124 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
125 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
126 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
127 - },  
128 - 'super_archives.vote': {  
129 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
130 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
131 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
132 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
133 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
134 - }  
135 - }  
136 -  
137 - complete_apps = ['super_archives']  
src/super_archives/migrations/0008_add_mailinglist_name_to_url.py
@@ -1,142 +0,0 @@ @@ -1,142 +0,0 @@
1 -# encoding: utf-8  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import DataMigration  
5 -from django.db import models  
6 -  
7 -class Migration(DataMigration):  
8 -  
9 - def forwards(self, orm):  
10 - page_hits = orm.PageHit.objects.all()  
11 - for page_hit in page_hits:  
12 - if page_hit.url_path.startswith('/archives/thread/'):  
13 - token = page_hit.url_path.split('/')[-1]  
14 - threads = orm.Thread.objects.filter(subject_token=token)  
15 - if not len(threads): continue  
16 - thread = threads[0]  
17 - new_url = '/archives/thread/%s/%s' % (thread.mailinglist.name,  
18 - thread.subject_token)  
19 - page_hit.url_path = new_url  
20 - page_hit.save()  
21 -  
22 -  
23 - def backwards(self, orm):  
24 - raise RuntimeError("Cannot reverse this migration.")  
25 -  
26 - models = {  
27 - 'auth.group': {  
28 - 'Meta': {'object_name': 'Group'},  
29 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
30 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
31 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
32 - },  
33 - 'auth.permission': {  
34 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
35 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
36 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
37 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
38 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
39 - },  
40 - 'auth.user': {  
41 - 'Meta': {'object_name': 'User'},  
42 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
43 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
44 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
45 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
46 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
47 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
48 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
49 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
50 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
51 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
52 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
53 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
54 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
55 - },  
56 - 'contenttypes.contenttype': {  
57 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
58 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
59 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
60 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
61 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
62 - },  
63 - 'super_archives.emailaddress': {  
64 - 'Meta': {'object_name': 'EmailAddress'},  
65 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
66 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
67 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
68 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
69 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"})  
70 - },  
71 - 'super_archives.mailinglist': {  
72 - 'Meta': {'object_name': 'MailingList'},  
73 - 'description': ('django.db.models.fields.TextField', [], {}),  
74 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
75 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
76 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
77 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
78 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
79 - },  
80 - 'super_archives.mailinglistmembership': {  
81 - 'Meta': {'object_name': 'MailingListMembership'},  
82 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
83 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
84 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
85 - },  
86 - 'super_archives.message': {  
87 - 'Meta': {'object_name': 'Message'},  
88 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
89 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
90 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
91 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
92 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
93 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
94 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
95 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
96 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
97 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'})  
98 - },  
99 - 'super_archives.messagemetadata': {  
100 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
101 - 'Meta': {'object_name': 'MessageMetadata'},  
102 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
103 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
104 - 'value': ('django.db.models.fields.TextField', [], {})  
105 - },  
106 - 'super_archives.pagehit': {  
107 - 'Meta': {'object_name': 'PageHit'},  
108 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
109 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
110 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
111 - },  
112 - 'super_archives.thread': {  
113 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
114 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
115 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
116 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
117 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
118 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
119 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
120 - },  
121 - 'super_archives.userprofile': {  
122 - 'Meta': {'object_name': 'UserProfile'},  
123 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
124 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
125 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
126 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
127 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
128 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
129 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
130 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
131 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
132 - },  
133 - 'super_archives.vote': {  
134 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
135 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
136 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
137 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
138 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
139 - }  
140 - }  
141 -  
142 - complete_apps = ['super_archives']  
src/super_archives/migrations/0009_auto__del_field_message_mailinglist.py
@@ -1,136 +0,0 @@ @@ -1,136 +0,0 @@
1 -# encoding: utf-8  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -class Migration(SchemaMigration):  
8 -  
9 - def forwards(self, orm):  
10 -  
11 - # Deleting field 'Message.mailinglist'  
12 - db.delete_column('super_archives_message', 'mailinglist_id')  
13 -  
14 -  
15 - def backwards(self, orm):  
16 -  
17 - # User chose to not deal with backwards NULL issues for 'Message.mailinglist'  
18 - raise RuntimeError("Cannot reverse this migration. 'Message.mailinglist' and its values cannot be restored.")  
19 -  
20 -  
21 - models = {  
22 - 'auth.group': {  
23 - 'Meta': {'object_name': 'Group'},  
24 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
25 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
26 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
27 - },  
28 - 'auth.permission': {  
29 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
30 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
31 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
32 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
33 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
34 - },  
35 - 'auth.user': {  
36 - 'Meta': {'object_name': 'User'},  
37 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
38 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
39 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
40 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
41 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
42 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
43 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
44 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
45 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
46 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
47 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
48 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
49 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
50 - },  
51 - 'contenttypes.contenttype': {  
52 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
53 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
54 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
57 - },  
58 - 'super_archives.emailaddress': {  
59 - 'Meta': {'object_name': 'EmailAddress'},  
60 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
61 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
63 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
64 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"})  
65 - },  
66 - 'super_archives.mailinglist': {  
67 - 'Meta': {'object_name': 'MailingList'},  
68 - 'description': ('django.db.models.fields.TextField', [], {}),  
69 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
70 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
71 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
72 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
73 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
74 - },  
75 - 'super_archives.mailinglistmembership': {  
76 - 'Meta': {'object_name': 'MailingListMembership'},  
77 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
78 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
79 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
80 - },  
81 - 'super_archives.message': {  
82 - 'Meta': {'object_name': 'Message'},  
83 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
84 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
85 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
86 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
87 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
88 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
89 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
90 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
91 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'})  
92 - },  
93 - 'super_archives.messagemetadata': {  
94 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
95 - 'Meta': {'object_name': 'MessageMetadata'},  
96 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
97 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
98 - 'value': ('django.db.models.fields.TextField', [], {})  
99 - },  
100 - 'super_archives.pagehit': {  
101 - 'Meta': {'object_name': 'PageHit'},  
102 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
103 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
105 - },  
106 - 'super_archives.thread': {  
107 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
108 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
109 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
110 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
111 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
112 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
113 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
114 - },  
115 - 'super_archives.userprofile': {  
116 - 'Meta': {'object_name': 'UserProfile'},  
117 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
118 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
119 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
120 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
121 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
122 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
123 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
124 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
125 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
126 - },  
127 - 'super_archives.vote': {  
128 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
129 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
130 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
131 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
132 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
133 - }  
134 - }  
135 -  
136 - complete_apps = ['super_archives']  
src/super_archives/migrations/0010_auto__add_unique_message_message_id_thread.py
@@ -1,136 +0,0 @@ @@ -1,136 +0,0 @@
1 -# encoding: utf-8  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -class Migration(SchemaMigration):  
8 -  
9 - def forwards(self, orm):  
10 -  
11 - # Adding unique constraint on 'Message', fields ['message_id', 'thread']  
12 - db.create_unique('super_archives_message', ['message_id', 'thread_id'])  
13 -  
14 -  
15 - def backwards(self, orm):  
16 -  
17 - # Removing unique constraint on 'Message', fields ['message_id', 'thread']  
18 - db.delete_unique('super_archives_message', ['message_id', 'thread_id'])  
19 -  
20 -  
21 - models = {  
22 - 'auth.group': {  
23 - 'Meta': {'object_name': 'Group'},  
24 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
25 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
26 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
27 - },  
28 - 'auth.permission': {  
29 - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},  
30 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
31 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),  
32 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
33 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
34 - },  
35 - 'auth.user': {  
36 - 'Meta': {'object_name': 'User'},  
37 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
38 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
39 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
40 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
41 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
42 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
43 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
44 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
45 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
46 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
47 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
48 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
49 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
50 - },  
51 - 'contenttypes.contenttype': {  
52 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
53 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
54 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
56 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
57 - },  
58 - 'super_archives.emailaddress': {  
59 - 'Meta': {'object_name': 'EmailAddress'},  
60 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
61 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
63 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
64 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': "orm['auth.User']"})  
65 - },  
66 - 'super_archives.mailinglist': {  
67 - 'Meta': {'object_name': 'MailingList'},  
68 - 'description': ('django.db.models.fields.TextField', [], {}),  
69 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
70 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
71 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
72 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
73 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
74 - },  
75 - 'super_archives.mailinglistmembership': {  
76 - 'Meta': {'object_name': 'MailingListMembership'},  
77 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
78 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
79 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
80 - },  
81 - 'super_archives.message': {  
82 - 'Meta': {'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
83 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
84 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.EmailAddress']"}),  
85 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
86 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
87 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
88 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
89 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
90 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
91 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Thread']", 'null': 'True'})  
92 - },  
93 - 'super_archives.messagemetadata': {  
94 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
95 - 'Meta': {'object_name': 'MessageMetadata'},  
96 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
97 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
98 - 'value': ('django.db.models.fields.TextField', [], {})  
99 - },  
100 - 'super_archives.pagehit': {  
101 - 'Meta': {'object_name': 'PageHit'},  
102 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
103 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
105 - },  
106 - 'super_archives.thread': {  
107 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
108 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
109 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': "orm['super_archives.Message']"}),  
110 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.MailingList']"}),  
111 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
112 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
113 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
114 - },  
115 - 'super_archives.userprofile': {  
116 - 'Meta': {'object_name': 'UserProfile'},  
117 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
118 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
119 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
120 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
121 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
122 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
123 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True'}),  
124 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
125 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256'})  
126 - },  
127 - 'super_archives.vote': {  
128 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
129 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
130 - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
131 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['super_archives.Message']"}),  
132 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})  
133 - }  
134 - }  
135 -  
136 - complete_apps = ['super_archives']  
src/super_archives/migrations/0011_auto__chg_field_userprofile_webpage.py
@@ -1,135 +0,0 @@ @@ -1,135 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 -  
12 - # Changing field 'UserProfile.webpage'  
13 - db.alter_column(u'super_archives_userprofile', 'webpage', self.gf('django.db.models.fields.CharField')(max_length=256, null=True))  
14 -  
15 - def backwards(self, orm):  
16 -  
17 - # User chose to not deal with backwards NULL issues for 'UserProfile.webpage'  
18 - raise RuntimeError("Cannot reverse this migration. 'UserProfile.webpage' and its values cannot be restored.")  
19 -  
20 - models = {  
21 - u'auth.group': {  
22 - 'Meta': {'object_name': 'Group'},  
23 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
24 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
25 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
26 - },  
27 - u'auth.permission': {  
28 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
29 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
30 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
31 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
32 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
33 - },  
34 - u'auth.user': {  
35 - 'Meta': {'object_name': 'User'},  
36 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
37 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),  
38 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
39 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
40 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
41 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
42 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
43 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
44 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
45 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
46 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
47 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
48 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})  
49 - },  
50 - u'contenttypes.contenttype': {  
51 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
52 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
53 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
54 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
55 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
56 - },  
57 - u'super_archives.emailaddress': {  
58 - 'Meta': {'object_name': 'EmailAddress'},  
59 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
60 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
61 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
62 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
63 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': u"orm['auth.User']"})  
64 - },  
65 - u'super_archives.mailinglist': {  
66 - 'Meta': {'object_name': 'MailingList'},  
67 - 'description': ('django.db.models.fields.TextField', [], {}),  
68 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
69 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
70 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
71 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
72 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
73 - },  
74 - u'super_archives.mailinglistmembership': {  
75 - 'Meta': {'object_name': 'MailingListMembership'},  
76 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
77 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
78 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})  
79 - },  
80 - u'super_archives.message': {  
81 - 'Meta': {'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
82 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
83 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
84 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
85 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
86 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
87 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
88 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
89 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
90 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
91 - },  
92 - u'super_archives.messagemetadata': {  
93 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
94 - 'Meta': {'object_name': 'MessageMetadata'},  
95 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
96 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
97 - 'value': ('django.db.models.fields.TextField', [], {})  
98 - },  
99 - u'super_archives.pagehit': {  
100 - 'Meta': {'object_name': 'PageHit'},  
101 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
102 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
103 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
104 - },  
105 - u'super_archives.thread': {  
106 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
107 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
108 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
109 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
110 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
111 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
112 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
113 - },  
114 - u'super_archives.userprofile': {  
115 - 'Meta': {'object_name': 'UserProfile'},  
116 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
117 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
118 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
119 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
120 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
121 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
122 - 'user': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['auth.User']", 'unique': 'True'}),  
123 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
124 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'})  
125 - },  
126 - u'super_archives.vote': {  
127 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
128 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
129 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
130 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
131 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"})  
132 - }  
133 - }  
134 -  
135 - complete_apps = ['super_archives']  
136 \ No newline at end of file 0 \ No newline at end of file
src/super_archives/migrations/0012_auto__del_userprofile__chg_field_vote_user__chg_field_emailaddress_use.py
@@ -1,159 +0,0 @@ @@ -1,159 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Deleting model 'UserProfile'  
12 - db.delete_table(u'super_archives_userprofile')  
13 -  
14 -  
15 - # Changing field 'Vote.user'  
16 - db.alter_column(u'super_archives_vote', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['accounts.User']))  
17 -  
18 - # Changing field 'EmailAddress.user'  
19 - db.alter_column(u'super_archives_emailaddress', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['accounts.User']))  
20 -  
21 - # Changing field 'MailingListMembership.user'  
22 - db.alter_column(u'super_archives_mailinglistmembership', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['accounts.User']))  
23 -  
24 - def backwards(self, orm):  
25 - # Adding model 'UserProfile'  
26 - db.create_table(u'super_archives_userprofile', (  
27 - ('google_talk', self.gf('django.db.models.fields.EmailField')(max_length=75, null=True)),  
28 - ('facebook', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),  
29 - ('user', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True)),  
30 - ('webpage', self.gf('django.db.models.fields.CharField')(max_length=256, null=True)),  
31 - ('role', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),  
32 - ('twitter', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),  
33 - ('verification_hash', self.gf('django.db.models.fields.CharField')(max_length=32, null=True)),  
34 - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
35 - ('institution', self.gf('django.db.models.fields.CharField')(max_length=128, null=True)),  
36 - ))  
37 - db.send_create_signal(u'super_archives', ['UserProfile'])  
38 -  
39 -  
40 - # Changing field 'Vote.user'  
41 - db.alter_column(u'super_archives_vote', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User']))  
42 -  
43 - # Changing field 'EmailAddress.user'  
44 - db.alter_column(u'super_archives_emailaddress', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['auth.User']))  
45 -  
46 - # Changing field 'MailingListMembership.user'  
47 - db.alter_column(u'super_archives_mailinglistmembership', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User']))  
48 -  
49 - models = {  
50 - u'accounts.user': {  
51 - 'Meta': {'object_name': 'User'},  
52 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
53 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
54 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
55 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
56 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True'}),  
57 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),  
58 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
59 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
60 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
61 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
62 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
63 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
64 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
65 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
66 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
67 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),  
68 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),  
69 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
70 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
71 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'})  
72 - },  
73 - u'auth.group': {  
74 - 'Meta': {'object_name': 'Group'},  
75 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
76 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
77 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
78 - },  
79 - u'auth.permission': {  
80 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
81 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
82 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
83 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
84 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
85 - },  
86 - u'contenttypes.contenttype': {  
87 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
88 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
89 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
90 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
91 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
92 - },  
93 - u'super_archives.emailaddress': {  
94 - 'Meta': {'object_name': 'EmailAddress'},  
95 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
96 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
97 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
98 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
99 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': u"orm['accounts.User']"})  
100 - },  
101 - u'super_archives.mailinglist': {  
102 - 'Meta': {'object_name': 'MailingList'},  
103 - 'description': ('django.db.models.fields.TextField', [], {}),  
104 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
105 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
106 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
107 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
108 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
109 - },  
110 - u'super_archives.mailinglistmembership': {  
111 - 'Meta': {'object_name': 'MailingListMembership'},  
112 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
113 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
114 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
115 - },  
116 - u'super_archives.message': {  
117 - 'Meta': {'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
118 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
119 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
120 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
121 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
122 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
123 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
124 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
125 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
126 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
127 - },  
128 - u'super_archives.messagemetadata': {  
129 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
130 - 'Meta': {'object_name': 'MessageMetadata'},  
131 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
132 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
133 - 'value': ('django.db.models.fields.TextField', [], {})  
134 - },  
135 - u'super_archives.pagehit': {  
136 - 'Meta': {'object_name': 'PageHit'},  
137 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
138 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
139 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
140 - },  
141 - u'super_archives.thread': {  
142 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
143 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
144 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
145 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
146 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
147 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
148 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
149 - },  
150 - u'super_archives.vote': {  
151 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
152 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
153 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
154 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
155 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
156 - }  
157 - }  
158 -  
159 - complete_apps = ['super_archives']  
160 \ No newline at end of file 0 \ No newline at end of file
src/super_archives/migrations/0013_auto__add_emailaddressvalidation.py
@@ -1,145 +0,0 @@ @@ -1,145 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding model 'EmailAddressValidation'  
12 - db.create_table(u'super_archives_emailaddressvalidation', (  
13 - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
14 - ('address', self.gf('django.db.models.fields.EmailField')(unique=True, max_length=75)),  
15 - ('user', self.gf('django.db.models.fields.related.ForeignKey')(related_name='emails_not_validated', null=True, to=orm['accounts.User'])),  
16 - ('validation_key', self.gf('django.db.models.fields.CharField')(default='2a261e5a2f944d36b252629b1a108e7b', max_length=32)),  
17 - ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),  
18 - ))  
19 - db.send_create_signal(u'super_archives', ['EmailAddressValidation'])  
20 -  
21 -  
22 - def backwards(self, orm):  
23 - # Deleting model 'EmailAddressValidation'  
24 - db.delete_table(u'super_archives_emailaddressvalidation')  
25 -  
26 -  
27 - models = {  
28 - u'accounts.user': {  
29 - 'Meta': {'object_name': 'User'},  
30 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
31 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
32 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
33 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
34 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
35 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
36 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
37 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
38 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
39 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
40 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
41 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
42 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
43 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
44 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
45 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
46 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
47 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
48 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
49 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
50 - },  
51 - u'auth.group': {  
52 - 'Meta': {'object_name': 'Group'},  
53 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
54 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
55 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
56 - },  
57 - u'auth.permission': {  
58 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
59 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
60 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
61 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
63 - },  
64 - u'contenttypes.contenttype': {  
65 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
66 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
69 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
70 - },  
71 - u'super_archives.emailaddress': {  
72 - 'Meta': {'object_name': 'EmailAddress'},  
73 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
74 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
75 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
76 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
77 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': u"orm['accounts.User']"})  
78 - },  
79 - u'super_archives.emailaddressvalidation': {  
80 - 'Meta': {'object_name': 'EmailAddressValidation'},  
81 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
82 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
83 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
84 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),  
85 - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'0dd1ae4b49bc43ff904c1cfa3b2e6ef6'", 'max_length': '32'})  
86 - },  
87 - u'super_archives.mailinglist': {  
88 - 'Meta': {'object_name': 'MailingList'},  
89 - 'description': ('django.db.models.fields.TextField', [], {}),  
90 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
91 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
92 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
93 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
94 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
95 - },  
96 - u'super_archives.mailinglistmembership': {  
97 - 'Meta': {'object_name': 'MailingListMembership'},  
98 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
99 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
100 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
101 - },  
102 - u'super_archives.message': {  
103 - 'Meta': {'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
104 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
105 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
106 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
107 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
108 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
109 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
110 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
111 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
112 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
113 - },  
114 - u'super_archives.messagemetadata': {  
115 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
116 - 'Meta': {'object_name': 'MessageMetadata'},  
117 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
118 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
119 - 'value': ('django.db.models.fields.TextField', [], {})  
120 - },  
121 - u'super_archives.pagehit': {  
122 - 'Meta': {'object_name': 'PageHit'},  
123 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
124 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
125 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
126 - },  
127 - u'super_archives.thread': {  
128 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
129 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
130 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
131 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
132 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
133 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
134 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
135 - },  
136 - u'super_archives.vote': {  
137 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
138 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
139 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
140 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
141 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
142 - }  
143 - }  
144 -  
145 - complete_apps = ['super_archives']  
146 \ No newline at end of file 0 \ No newline at end of file
src/super_archives/migrations/0014_auto__chg_field_emailaddressvalidation_validation_key.py
@@ -1,138 +0,0 @@ @@ -1,138 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 -  
12 - # Changing field 'EmailAddressValidation.validation_key'  
13 - db.alter_column(u'super_archives_emailaddressvalidation', 'validation_key', self.gf('django.db.models.fields.CharField')(max_length=32, null=True))  
14 -  
15 - def backwards(self, orm):  
16 -  
17 - # Changing field 'EmailAddressValidation.validation_key'  
18 - db.alter_column(u'super_archives_emailaddressvalidation', 'validation_key', self.gf('django.db.models.fields.CharField')(max_length=32))  
19 -  
20 - models = {  
21 - u'accounts.user': {  
22 - 'Meta': {'object_name': 'User'},  
23 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
24 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
25 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
26 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
27 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
28 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
29 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
30 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
31 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
32 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
33 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
34 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
35 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
36 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
37 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
38 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
39 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
40 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
41 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
42 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
43 - },  
44 - u'auth.group': {  
45 - 'Meta': {'object_name': 'Group'},  
46 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
47 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
48 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
49 - },  
50 - u'auth.permission': {  
51 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
52 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
53 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
54 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
56 - },  
57 - u'contenttypes.contenttype': {  
58 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
59 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
60 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
61 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
62 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
63 - },  
64 - u'super_archives.emailaddress': {  
65 - 'Meta': {'object_name': 'EmailAddress'},  
66 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
69 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
70 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'to': u"orm['accounts.User']"})  
71 - },  
72 - u'super_archives.emailaddressvalidation': {  
73 - 'Meta': {'object_name': 'EmailAddressValidation'},  
74 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
75 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
76 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
77 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),  
78 - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'30a2065c72c1402986a11e7c5369f5a5'", 'max_length': '32', 'null': 'True'})  
79 - },  
80 - u'super_archives.mailinglist': {  
81 - 'Meta': {'object_name': 'MailingList'},  
82 - 'description': ('django.db.models.fields.TextField', [], {}),  
83 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
84 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
85 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
86 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
87 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
88 - },  
89 - u'super_archives.mailinglistmembership': {  
90 - 'Meta': {'object_name': 'MailingListMembership'},  
91 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
92 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
93 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
94 - },  
95 - u'super_archives.message': {  
96 - 'Meta': {'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
97 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
98 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
99 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
100 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
101 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
102 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
103 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
104 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
105 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
106 - },  
107 - u'super_archives.messagemetadata': {  
108 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
109 - 'Meta': {'object_name': 'MessageMetadata'},  
110 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
111 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
112 - 'value': ('django.db.models.fields.TextField', [], {})  
113 - },  
114 - u'super_archives.pagehit': {  
115 - 'Meta': {'object_name': 'PageHit'},  
116 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
117 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
118 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
119 - },  
120 - u'super_archives.thread': {  
121 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
122 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
123 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
124 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
125 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
126 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
127 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
128 - },  
129 - u'super_archives.vote': {  
130 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
131 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
132 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
133 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
134 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
135 - }  
136 - }  
137 -  
138 - complete_apps = ['super_archives']  
139 \ No newline at end of file 0 \ No newline at end of file
src/super_archives/migrations/0015_auto__chg_field_emailaddress_user.py
@@ -1,138 +0,0 @@ @@ -1,138 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 -  
12 - # Changing field 'EmailAddress.user'  
13 - db.alter_column(u'super_archives_emailaddress', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, on_delete=models.SET_NULL, to=orm['accounts.User']))  
14 -  
15 - def backwards(self, orm):  
16 -  
17 - # Changing field 'EmailAddress.user'  
18 - db.alter_column(u'super_archives_emailaddress', 'user_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['accounts.User']))  
19 -  
20 - models = {  
21 - u'accounts.user': {  
22 - 'Meta': {'object_name': 'User'},  
23 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
24 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
25 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
26 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
27 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
28 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
29 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
30 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
31 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
32 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
33 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
34 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
35 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
36 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
37 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
38 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
39 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
40 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
41 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
42 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
43 - },  
44 - u'auth.group': {  
45 - 'Meta': {'object_name': 'Group'},  
46 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
47 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
48 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
49 - },  
50 - u'auth.permission': {  
51 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
52 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
53 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
54 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
56 - },  
57 - u'contenttypes.contenttype': {  
58 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
59 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
60 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
61 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
62 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
63 - },  
64 - u'super_archives.emailaddress': {  
65 - 'Meta': {'ordering': "('id',)", 'object_name': 'EmailAddress'},  
66 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
69 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
70 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['accounts.User']"})  
71 - },  
72 - u'super_archives.emailaddressvalidation': {  
73 - 'Meta': {'object_name': 'EmailAddressValidation'},  
74 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
75 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
76 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
77 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),  
78 - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'a9cfbe23d1be41e4beeafa7790325e26'", 'max_length': '32', 'null': 'True'})  
79 - },  
80 - u'super_archives.mailinglist': {  
81 - 'Meta': {'object_name': 'MailingList'},  
82 - 'description': ('django.db.models.fields.TextField', [], {}),  
83 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
84 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
85 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
86 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
87 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
88 - },  
89 - u'super_archives.mailinglistmembership': {  
90 - 'Meta': {'object_name': 'MailingListMembership'},  
91 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
92 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
93 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
94 - },  
95 - u'super_archives.message': {  
96 - 'Meta': {'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
97 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
98 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
99 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
100 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
101 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
102 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
103 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
104 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
105 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
106 - },  
107 - u'super_archives.messagemetadata': {  
108 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
109 - 'Meta': {'object_name': 'MessageMetadata'},  
110 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
111 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
112 - 'value': ('django.db.models.fields.TextField', [], {})  
113 - },  
114 - u'super_archives.pagehit': {  
115 - 'Meta': {'object_name': 'PageHit'},  
116 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
117 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
118 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
119 - },  
120 - u'super_archives.thread': {  
121 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
122 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
123 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
124 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
125 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
126 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
127 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
128 - },  
129 - u'super_archives.vote': {  
130 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
131 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
132 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
133 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
134 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
135 - }  
136 - }  
137 -  
138 - complete_apps = ['super_archives']  
139 \ No newline at end of file 0 \ No newline at end of file
src/super_archives/migrations/0016_auto__add_unique_emailaddressvalidation_user_address.py
@@ -1,138 +0,0 @@ @@ -1,138 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding unique constraint on 'EmailAddressValidation', fields ['user', 'address']  
12 - db.create_unique(u'super_archives_emailaddressvalidation', ['user_id', 'address'])  
13 -  
14 -  
15 - def backwards(self, orm):  
16 - # Removing unique constraint on 'EmailAddressValidation', fields ['user', 'address']  
17 - db.delete_unique(u'super_archives_emailaddressvalidation', ['user_id', 'address'])  
18 -  
19 -  
20 - models = {  
21 - u'accounts.user': {  
22 - 'Meta': {'object_name': 'User'},  
23 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
24 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
25 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
26 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
27 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
28 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
29 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
30 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
31 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
32 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
33 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
34 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
35 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
36 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
37 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
38 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
39 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
40 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
41 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
42 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
43 - },  
44 - u'auth.group': {  
45 - 'Meta': {'object_name': 'Group'},  
46 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
47 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
48 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
49 - },  
50 - u'auth.permission': {  
51 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
52 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
53 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
54 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
56 - },  
57 - u'contenttypes.contenttype': {  
58 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
59 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
60 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
61 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
62 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
63 - },  
64 - u'super_archives.emailaddress': {  
65 - 'Meta': {'ordering': "('id',)", 'object_name': 'EmailAddress'},  
66 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
69 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
70 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['accounts.User']"})  
71 - },  
72 - u'super_archives.emailaddressvalidation': {  
73 - 'Meta': {'unique_together': "(('user', 'address'),)", 'object_name': 'EmailAddressValidation'},  
74 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
75 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
76 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
77 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),  
78 - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'cfda46852e7e4e4a9e34a57c3d3b2330'", 'max_length': '32', 'null': 'True'})  
79 - },  
80 - u'super_archives.mailinglist': {  
81 - 'Meta': {'object_name': 'MailingList'},  
82 - 'description': ('django.db.models.fields.TextField', [], {}),  
83 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
84 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
85 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
86 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
87 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
88 - },  
89 - u'super_archives.mailinglistmembership': {  
90 - 'Meta': {'object_name': 'MailingListMembership'},  
91 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
92 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
93 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
94 - },  
95 - u'super_archives.message': {  
96 - 'Meta': {'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
97 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
98 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
99 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
100 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
101 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
102 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
103 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
104 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
105 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
106 - },  
107 - u'super_archives.messagemetadata': {  
108 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
109 - 'Meta': {'object_name': 'MessageMetadata'},  
110 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
111 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
112 - 'value': ('django.db.models.fields.TextField', [], {})  
113 - },  
114 - u'super_archives.pagehit': {  
115 - 'Meta': {'object_name': 'PageHit'},  
116 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
117 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
118 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
119 - },  
120 - u'super_archives.thread': {  
121 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
122 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
123 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
124 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
125 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
126 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
127 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
128 - },  
129 - u'super_archives.vote': {  
130 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
131 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
132 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
133 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
134 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
135 - }  
136 - }  
137 -  
138 - complete_apps = ['super_archives']  
139 \ No newline at end of file 0 \ No newline at end of file
src/super_archives/migrations/0017_auto__add_keyword.py
@@ -1,151 +0,0 @@ @@ -1,151 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding model 'Keyword'  
12 - db.create_table(u'super_archives_keyword', (  
13 - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
14 - ('keyword', self.gf('django.db.models.fields.CharField')(max_length='128')),  
15 - ('weight', self.gf('django.db.models.fields.IntegerField')(default=0)),  
16 - ('thread', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['super_archives.Thread'])),  
17 - ))  
18 - db.send_create_signal(u'super_archives', ['Keyword'])  
19 -  
20 -  
21 - def backwards(self, orm):  
22 - # Deleting model 'Keyword'  
23 - db.delete_table(u'super_archives_keyword')  
24 -  
25 -  
26 - models = {  
27 - u'accounts.user': {  
28 - 'Meta': {'object_name': 'User'},  
29 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
30 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
31 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
32 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
33 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
34 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
35 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
36 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
37 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
38 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
39 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
40 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
41 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
42 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
43 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
44 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
45 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
46 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
47 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
48 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
49 - },  
50 - u'auth.group': {  
51 - 'Meta': {'object_name': 'Group'},  
52 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
53 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
54 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
55 - },  
56 - u'auth.permission': {  
57 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
58 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
59 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
60 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
61 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
62 - },  
63 - u'contenttypes.contenttype': {  
64 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
65 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
66 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
67 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
68 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
69 - },  
70 - u'super_archives.emailaddress': {  
71 - 'Meta': {'ordering': "('id',)", 'object_name': 'EmailAddress'},  
72 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
73 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
74 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
75 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
76 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['accounts.User']"})  
77 - },  
78 - u'super_archives.emailaddressvalidation': {  
79 - 'Meta': {'unique_together': "(('user', 'address'),)", 'object_name': 'EmailAddressValidation'},  
80 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
81 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
82 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
83 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),  
84 - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'e2d18f1f8d6445fc91c04d17acdbe23a'", 'max_length': '32', 'null': 'True'})  
85 - },  
86 - u'super_archives.keyword': {  
87 - 'Meta': {'object_name': 'Keyword'},  
88 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
89 - 'keyword': ('django.db.models.fields.CharField', [], {'max_length': "'128'"}),  
90 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']"}),  
91 - 'weight': ('django.db.models.fields.IntegerField', [], {'default': '0'})  
92 - },  
93 - u'super_archives.mailinglist': {  
94 - 'Meta': {'object_name': 'MailingList'},  
95 - 'description': ('django.db.models.fields.TextField', [], {}),  
96 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
97 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
98 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
99 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
100 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
101 - },  
102 - u'super_archives.mailinglistmembership': {  
103 - 'Meta': {'object_name': 'MailingListMembership'},  
104 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
105 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
106 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
107 - },  
108 - u'super_archives.message': {  
109 - 'Meta': {'ordering': "('received_time',)", 'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
110 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
111 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
112 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
113 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
114 - 'received_time': ('django.db.models.fields.DateTimeField', [], {}),  
115 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
116 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
117 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
118 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
119 - },  
120 - u'super_archives.messagemetadata': {  
121 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
122 - 'Meta': {'object_name': 'MessageMetadata'},  
123 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
124 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
125 - 'value': ('django.db.models.fields.TextField', [], {})  
126 - },  
127 - u'super_archives.pagehit': {  
128 - 'Meta': {'object_name': 'PageHit'},  
129 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
130 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
131 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
132 - },  
133 - u'super_archives.thread': {  
134 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
135 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
136 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
137 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
138 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
139 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
140 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
141 - },  
142 - u'super_archives.vote': {  
143 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
144 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
145 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
146 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
147 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
148 - }  
149 - }  
150 -  
151 - complete_apps = ['super_archives']  
152 \ No newline at end of file 0 \ No newline at end of file
src/super_archives/migrations/0018_auto__add_index_message_received_time.py
@@ -1,145 +0,0 @@ @@ -1,145 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding index on 'Message', fields ['received_time']  
12 - db.create_index(u'super_archives_message', ['received_time'])  
13 -  
14 -  
15 - def backwards(self, orm):  
16 - # Removing index on 'Message', fields ['received_time']  
17 - db.delete_index(u'super_archives_message', ['received_time'])  
18 -  
19 -  
20 - models = {  
21 - u'accounts.user': {  
22 - 'Meta': {'object_name': 'User'},  
23 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
24 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
25 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
26 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
27 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
28 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
29 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
30 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
31 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
32 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
33 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
34 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
35 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
36 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
37 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
38 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
39 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
40 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
41 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
42 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
43 - },  
44 - u'auth.group': {  
45 - 'Meta': {'object_name': 'Group'},  
46 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
47 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
48 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
49 - },  
50 - u'auth.permission': {  
51 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
52 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
53 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
54 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
55 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
56 - },  
57 - u'contenttypes.contenttype': {  
58 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
59 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
60 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
61 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
62 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
63 - },  
64 - u'super_archives.emailaddress': {  
65 - 'Meta': {'ordering': "('id',)", 'object_name': 'EmailAddress'},  
66 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
69 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
70 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['accounts.User']"})  
71 - },  
72 - u'super_archives.emailaddressvalidation': {  
73 - 'Meta': {'unique_together': "(('user', 'address'),)", 'object_name': 'EmailAddressValidation'},  
74 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
75 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
76 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
77 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),  
78 - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'1775e2bdc5e341a9b9b8a6346eec1024'", 'max_length': '32', 'null': 'True'})  
79 - },  
80 - u'super_archives.keyword': {  
81 - 'Meta': {'ordering': "('?',)", 'object_name': 'Keyword'},  
82 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
83 - 'keyword': ('django.db.models.fields.CharField', [], {'max_length': "'128'"}),  
84 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']"}),  
85 - 'weight': ('django.db.models.fields.IntegerField', [], {'default': '0'})  
86 - },  
87 - u'super_archives.mailinglist': {  
88 - 'Meta': {'object_name': 'MailingList'},  
89 - 'description': ('django.db.models.fields.TextField', [], {}),  
90 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
91 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
92 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
93 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
94 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
95 - },  
96 - u'super_archives.mailinglistmembership': {  
97 - 'Meta': {'object_name': 'MailingListMembership'},  
98 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
99 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
100 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
101 - },  
102 - u'super_archives.message': {  
103 - 'Meta': {'ordering': "('received_time',)", 'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
104 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
105 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
106 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
107 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
108 - 'received_time': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),  
109 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
110 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
111 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
112 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
113 - },  
114 - u'super_archives.messagemetadata': {  
115 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
116 - 'Meta': {'object_name': 'MessageMetadata'},  
117 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
118 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
119 - 'value': ('django.db.models.fields.TextField', [], {})  
120 - },  
121 - u'super_archives.pagehit': {  
122 - 'Meta': {'object_name': 'PageHit'},  
123 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
124 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
125 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
126 - },  
127 - u'super_archives.thread': {  
128 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
129 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
130 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
131 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
132 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
133 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
134 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
135 - },  
136 - u'super_archives.vote': {  
137 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
138 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
139 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
140 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
141 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
142 - }  
143 - }  
144 -  
145 - complete_apps = ['super_archives']  
146 \ No newline at end of file 0 \ No newline at end of file
src/super_archives/migrations/0019_auto__add_messageblock.py
@@ -1,160 +0,0 @@ @@ -1,160 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Adding model 'MessageBlock'  
12 - db.create_table(u'super_archives_messageblock', (  
13 - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
14 - ('message', self.gf('django.db.models.fields.related.ForeignKey')(related_name='blocks', to=orm['super_archives.Message'])),  
15 - ('text', self.gf('django.db.models.fields.TextField')()),  
16 - ('is_reply', self.gf('django.db.models.fields.BooleanField')()),  
17 - ('order', self.gf('django.db.models.fields.IntegerField')()),  
18 - ))  
19 - db.send_create_signal(u'super_archives', ['MessageBlock'])  
20 -  
21 -  
22 - def backwards(self, orm):  
23 - # Deleting model 'MessageBlock'  
24 - db.delete_table(u'super_archives_messageblock')  
25 -  
26 -  
27 - models = {  
28 - u'accounts.user': {  
29 - 'Meta': {'object_name': 'User'},  
30 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
31 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
32 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
33 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
34 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
35 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
36 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
37 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
38 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
39 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
40 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
41 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
42 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
43 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
44 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
45 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
46 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
47 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
48 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
49 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
50 - },  
51 - u'auth.group': {  
52 - 'Meta': {'object_name': 'Group'},  
53 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
54 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
55 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
56 - },  
57 - u'auth.permission': {  
58 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
59 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
60 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
61 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
62 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
63 - },  
64 - u'contenttypes.contenttype': {  
65 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
66 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
67 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
68 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
69 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
70 - },  
71 - u'super_archives.emailaddress': {  
72 - 'Meta': {'ordering': "('id',)", 'object_name': 'EmailAddress'},  
73 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
74 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
75 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
76 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
77 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['accounts.User']"})  
78 - },  
79 - u'super_archives.emailaddressvalidation': {  
80 - 'Meta': {'unique_together': "(('user', 'address'),)", 'object_name': 'EmailAddressValidation'},  
81 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
82 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
83 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
84 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),  
85 - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'f7c4c15797f34834bf5a8b9bd84fabee'", 'max_length': '32', 'null': 'True'})  
86 - },  
87 - u'super_archives.keyword': {  
88 - 'Meta': {'ordering': "('?',)", 'object_name': 'Keyword'},  
89 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
90 - 'keyword': ('django.db.models.fields.CharField', [], {'max_length': "'128'"}),  
91 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']"}),  
92 - 'weight': ('django.db.models.fields.IntegerField', [], {'default': '0'})  
93 - },  
94 - u'super_archives.mailinglist': {  
95 - 'Meta': {'object_name': 'MailingList'},  
96 - 'description': ('django.db.models.fields.TextField', [], {}),  
97 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
98 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
99 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
100 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
101 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
102 - },  
103 - u'super_archives.mailinglistmembership': {  
104 - 'Meta': {'object_name': 'MailingListMembership'},  
105 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
106 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
107 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
108 - },  
109 - u'super_archives.message': {  
110 - 'Meta': {'ordering': "('received_time',)", 'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
111 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
112 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
113 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
114 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
115 - 'received_time': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),  
116 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
117 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
118 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
119 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
120 - },  
121 - u'super_archives.messageblock': {  
122 - 'Meta': {'ordering': "('order',)", 'object_name': 'MessageBlock'},  
123 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
124 - 'is_reply': ('django.db.models.fields.BooleanField', [], {}),  
125 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'blocks'", 'to': u"orm['super_archives.Message']"}),  
126 - 'order': ('django.db.models.fields.IntegerField', [], {}),  
127 - 'text': ('django.db.models.fields.TextField', [], {})  
128 - },  
129 - u'super_archives.messagemetadata': {  
130 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
131 - 'Meta': {'object_name': 'MessageMetadata'},  
132 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
133 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
134 - 'value': ('django.db.models.fields.TextField', [], {})  
135 - },  
136 - u'super_archives.pagehit': {  
137 - 'Meta': {'object_name': 'PageHit'},  
138 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
139 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
140 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
141 - },  
142 - u'super_archives.thread': {  
143 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
144 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
145 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
146 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
147 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
148 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
149 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
150 - },  
151 - u'super_archives.vote': {  
152 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
153 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
154 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
155 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
156 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
157 - }  
158 - }  
159 -  
160 - complete_apps = ['super_archives']  
161 \ No newline at end of file 0 \ No newline at end of file
src/super_archives/migrations/0020_pagehit_to_hitcounter.py
@@ -1,190 +0,0 @@ @@ -1,190 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -  
3 -import datetime  
4 -  
5 -from south.db import db  
6 -from south.logger import _logger  
7 -from south.v2 import DataMigration  
8 -from django.core.urlresolvers import resolve  
9 -from django.db import models  
10 -  
11 -  
12 -class Migration(DataMigration):  
13 -  
14 - def forwards(self, orm):  
15 - """Migrate all data from the PageHit model to the given object with  
16 - the HitCounterMixin."""  
17 -  
18 - content_type = orm['contenttypes.ContentType'].objects.get(  
19 - model='thread',  
20 - app_label='super_archives'  
21 - )  
22 -  
23 - for obj in orm.PageHit.objects.all():  
24 - view = resolve(obj.url_path)  
25 -  
26 - try:  
27 - thread = orm.Thread.objects.get(  
28 - subject_token=view.kwargs.get('thread_token'),  
29 - mailinglist__name=view.kwargs.get('mailinglist'),  
30 - )  
31 - except orm.Thread.DoesNotExist:  
32 - continue  
33 -  
34 - hit_obj, created = orm['hitcounter.Hit'].objects.get_or_create(  
35 - content_type=content_type,  
36 - object_pk=thread.pk,  
37 - defaults={'hits': obj.hit_count},  
38 - )  
39 -  
40 - if not created:  
41 - hit_obj.hits = obj.hit_count  
42 - hit_obj.save()  
43 -  
44 - def backwards(self, orm):  
45 - _logger.warning(u"This backwards don't get the data of PageHit back.")  
46 -  
47 - models = {  
48 - u'accounts.user': {  
49 - 'Meta': {'object_name': 'User'},  
50 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
51 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
52 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
53 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
54 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
55 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
56 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
57 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
58 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
59 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
60 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
61 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
62 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
63 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
64 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
65 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
66 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
67 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
68 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
69 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
70 - },  
71 - u'auth.group': {  
72 - 'Meta': {'object_name': 'Group'},  
73 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
74 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
75 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
76 - },  
77 - u'auth.permission': {  
78 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
79 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
80 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
81 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
82 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
83 - },  
84 - u'contenttypes.contenttype': {  
85 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
86 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
87 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
88 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
89 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
90 - },  
91 - u'hitcounter.hit': {  
92 - 'Meta': {'unique_together': "(('content_type', 'object_pk'),)", 'object_name': 'Hit'},  
93 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
94 - 'created': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),  
95 - 'hits': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),  
96 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
97 - 'object_pk': ('django.db.models.fields.CharField', [], {'max_length': '256'}),  
98 - 'updated': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'})  
99 - },  
100 - u'super_archives.emailaddress': {  
101 - 'Meta': {'ordering': "('id',)", 'object_name': 'EmailAddress'},  
102 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
103 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
105 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
106 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['accounts.User']"})  
107 - },  
108 - u'super_archives.emailaddressvalidation': {  
109 - 'Meta': {'unique_together': "(('user', 'address'),)", 'object_name': 'EmailAddressValidation'},  
110 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
111 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
112 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
113 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),  
114 - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'60d2bcbd9d924d9f8139c2d1227223ed'", 'max_length': '32', 'null': 'True'})  
115 - },  
116 - u'super_archives.keyword': {  
117 - 'Meta': {'ordering': "('?',)", 'object_name': 'Keyword'},  
118 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
119 - 'keyword': ('django.db.models.fields.CharField', [], {'max_length': "'128'"}),  
120 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']"}),  
121 - 'weight': ('django.db.models.fields.IntegerField', [], {'default': '0'})  
122 - },  
123 - u'super_archives.mailinglist': {  
124 - 'Meta': {'object_name': 'MailingList'},  
125 - 'description': ('django.db.models.fields.TextField', [], {}),  
126 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
127 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
128 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
129 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
130 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
131 - },  
132 - u'super_archives.mailinglistmembership': {  
133 - 'Meta': {'object_name': 'MailingListMembership'},  
134 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
135 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
136 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
137 - },  
138 - u'super_archives.message': {  
139 - 'Meta': {'ordering': "('received_time',)", 'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
140 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
141 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
142 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
143 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
144 - 'received_time': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),  
145 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
146 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
147 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
148 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
149 - },  
150 - u'super_archives.messageblock': {  
151 - 'Meta': {'ordering': "('order',)", 'object_name': 'MessageBlock'},  
152 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
153 - 'is_reply': ('django.db.models.fields.BooleanField', [], {}),  
154 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'blocks'", 'to': u"orm['super_archives.Message']"}),  
155 - 'order': ('django.db.models.fields.IntegerField', [], {}),  
156 - 'text': ('django.db.models.fields.TextField', [], {})  
157 - },  
158 - u'super_archives.messagemetadata': {  
159 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
160 - 'Meta': {'object_name': 'MessageMetadata'},  
161 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
162 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
163 - 'value': ('django.db.models.fields.TextField', [], {})  
164 - },  
165 - u'super_archives.pagehit': {  
166 - 'Meta': {'object_name': 'PageHit'},  
167 - 'hit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
168 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
169 - 'url_path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'})  
170 - },  
171 - u'super_archives.thread': {  
172 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
173 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
174 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
175 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
176 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
177 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
178 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
179 - },  
180 - u'super_archives.vote': {  
181 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
182 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
183 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
184 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
185 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
186 - }  
187 - }  
188 -  
189 - complete_apps = ['hitcounter', 'super_archives']  
190 - symmetrical = True  
src/super_archives/migrations/0021_auto__del_pagehit.py
@@ -1,152 +0,0 @@ @@ -1,152 +0,0 @@
1 -# -*- coding: utf-8 -*-  
2 -import datetime  
3 -from south.db import db  
4 -from south.v2 import SchemaMigration  
5 -from django.db import models  
6 -  
7 -  
8 -class Migration(SchemaMigration):  
9 -  
10 - def forwards(self, orm):  
11 - # Deleting model 'PageHit'  
12 - db.delete_table(u'super_archives_pagehit')  
13 -  
14 -  
15 - def backwards(self, orm):  
16 - # Adding model 'PageHit'  
17 - db.create_table(u'super_archives_pagehit', (  
18 - (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),  
19 - ('hit_count', self.gf('django.db.models.fields.IntegerField')(default=0)),  
20 - ('url_path', self.gf('django.db.models.fields.CharField')(max_length=2048, unique=True, db_index=True)),  
21 - ))  
22 - db.send_create_signal(u'super_archives', ['PageHit'])  
23 -  
24 -  
25 - models = {  
26 - u'accounts.user': {  
27 - 'Meta': {'object_name': 'User'},  
28 - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
29 - 'email': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75', 'blank': 'True'}),  
30 - 'facebook': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
31 - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
32 - 'google_talk': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),  
33 - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),  
34 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
35 - 'institution': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
36 - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),  
37 - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
38 - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
39 - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),  
40 - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),  
41 - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),  
42 - 'role': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
43 - 'twitter': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),  
44 - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),  
45 - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),  
46 - 'verification_hash': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),  
47 - 'webpage': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'})  
48 - },  
49 - u'auth.group': {  
50 - 'Meta': {'object_name': 'Group'},  
51 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
52 - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),  
53 - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})  
54 - },  
55 - u'auth.permission': {  
56 - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},  
57 - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
58 - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),  
59 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
60 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})  
61 - },  
62 - u'contenttypes.contenttype': {  
63 - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},  
64 - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
65 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
66 - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),  
67 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})  
68 - },  
69 - u'super_archives.emailaddress': {  
70 - 'Meta': {'ordering': "('id',)", 'object_name': 'EmailAddress'},  
71 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
72 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
73 - 'md5': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),  
74 - 'real_name': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '64', 'blank': 'True'}),  
75 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails'", 'null': 'True', 'on_delete': 'models.SET_NULL', 'to': u"orm['accounts.User']"})  
76 - },  
77 - u'super_archives.emailaddressvalidation': {  
78 - 'Meta': {'unique_together': "(('user', 'address'),)", 'object_name': 'EmailAddressValidation'},  
79 - 'address': ('django.db.models.fields.EmailField', [], {'unique': 'True', 'max_length': '75'}),  
80 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
81 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
82 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'emails_not_validated'", 'null': 'True', 'to': u"orm['accounts.User']"}),  
83 - 'validation_key': ('django.db.models.fields.CharField', [], {'default': "'dabb0135cf6c436da11caf5dac7e8c10'", 'max_length': '32', 'null': 'True'})  
84 - },  
85 - u'super_archives.keyword': {  
86 - 'Meta': {'ordering': "('?',)", 'object_name': 'Keyword'},  
87 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
88 - 'keyword': ('django.db.models.fields.CharField', [], {'max_length': "'128'"}),  
89 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']"}),  
90 - 'weight': ('django.db.models.fields.IntegerField', [], {'default': '0'})  
91 - },  
92 - u'super_archives.mailinglist': {  
93 - 'Meta': {'object_name': 'MailingList'},  
94 - 'description': ('django.db.models.fields.TextField', [], {}),  
95 - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75'}),  
96 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
97 - 'last_imported_index': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
98 - 'logo': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),  
99 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '80'})  
100 - },  
101 - u'super_archives.mailinglistmembership': {  
102 - 'Meta': {'object_name': 'MailingListMembership'},  
103 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
104 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
105 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
106 - },  
107 - u'super_archives.message': {  
108 - 'Meta': {'ordering': "('received_time',)", 'unique_together': "(('thread', 'message_id'),)", 'object_name': 'Message'},  
109 - 'body': ('django.db.models.fields.TextField', [], {'default': "''"}),  
110 - 'from_address': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.EmailAddress']"}),  
111 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
112 - 'message_id': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
113 - 'received_time': ('django.db.models.fields.DateTimeField', [], {'db_index': 'True'}),  
114 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
115 - 'subject': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
116 - 'subject_clean': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),  
117 - 'thread': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Thread']", 'null': 'True'})  
118 - },  
119 - u'super_archives.messageblock': {  
120 - 'Meta': {'ordering': "('order',)", 'object_name': 'MessageBlock'},  
121 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
122 - 'is_reply': ('django.db.models.fields.BooleanField', [], {}),  
123 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'blocks'", 'to': u"orm['super_archives.Message']"}),  
124 - 'order': ('django.db.models.fields.IntegerField', [], {}),  
125 - 'text': ('django.db.models.fields.TextField', [], {})  
126 - },  
127 - u'super_archives.messagemetadata': {  
128 - 'Message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
129 - 'Meta': {'object_name': 'MessageMetadata'},  
130 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
131 - 'name': ('django.db.models.fields.CharField', [], {'max_length': '512'}),  
132 - 'value': ('django.db.models.fields.TextField', [], {})  
133 - },  
134 - u'super_archives.thread': {  
135 - 'Meta': {'unique_together': "(('subject_token', 'mailinglist'),)", 'object_name': 'Thread'},  
136 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
137 - 'latest_message': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'+'", 'unique': 'True', 'null': 'True', 'to': u"orm['super_archives.Message']"}),  
138 - 'mailinglist': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.MailingList']"}),  
139 - 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),  
140 - 'spam': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),  
141 - 'subject_token': ('django.db.models.fields.CharField', [], {'max_length': '512'})  
142 - },  
143 - u'super_archives.vote': {  
144 - 'Meta': {'unique_together': "(('user', 'message'),)", 'object_name': 'Vote'},  
145 - 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),  
146 - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),  
147 - 'message': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['super_archives.Message']"}),  
148 - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['accounts.User']"})  
149 - }  
150 - }  
151 -  
152 - complete_apps = ['super_archives']  
153 \ No newline at end of file 0 \ No newline at end of file