Upgrade to Django 1.7: migration (2) + data migration ldt.user for group permission is_owner_group
authordurandn
Fri, 24 Apr 2015 12:56:15 +0200
changeset 1366 b52d0f2347ab
parent 1365 bdf0b7f45431
child 1367 1b5550516ceb
Upgrade to Django 1.7: migration (2) + data migration ldt.user for group permission is_owner_group
src/ldt/ldt/ldt_utils/migrations/0001_initial.py
src/ldt/ldt/ldt_utils/migrations/0002_auto_20150423_0935.py
src/ldt/ldt/text/migrations/0001_initial.py
src/ldt/ldt/user/migrations/0001_initial.py
src/ldt/ldt/user/migrations/0002_auto_20150424_1042.py
--- a/src/ldt/ldt/ldt_utils/migrations/0001_initial.py	Thu Apr 23 12:12:33 2015 +0200
+++ b/src/ldt/ldt/ldt_utils/migrations/0001_initial.py	Fri Apr 24 12:56:15 2015 +0200
@@ -1,261 +1,139 @@
-#@PydevCodeAnalysisIgnore
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-import uuid
-
-class Migration(SchemaMigration):
-    
-    depends_on = (
-        ("core", "0001_initial"),
-    )
-
-    def forwards(self, orm):
-        
-        # Adding model 'Author'
-        db.create_table('ldt_utils_author', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('handle', self.gf('django.db.models.fields.CharField')(max_length=255, unique=True, null=True, blank=True)), #this does not match modeldefinition because of mysql limitations
-            ('email', self.gf('django.db.models.fields.EmailField')(max_length=75, null=True, blank=True)),
-            ('firstname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
-            ('lastname', self.gf('django.db.models.fields.CharField')(max_length=512, null=True, blank=True)),
-        ))
-        db.send_create_signal('ldt_utils', ['Author'])
-
-        # Adding model 'Media'
-        db.create_table('ldt_utils_media', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('external_id', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('external_permalink', self.gf('django.db.models.fields.URLField')(max_length=1024, null=True, blank=True)),
-            ('external_publication_url', self.gf('django.db.models.fields.URLField')(max_length=1024, null=True, blank=True)),
-            ('external_src_url', self.gf('django.db.models.fields.URLField')(max_length=1024, null=True, blank=True)),
-            ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('media_creation_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
-            ('update_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-            ('videopath', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('duration', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
-            ('creator', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True)),
-            ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('title', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('src', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-        ))
-        db.send_create_signal('ldt_utils', ['Media'])
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
 
-        # Adding model 'Content'
-        db.create_table('ldt_utils_content', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('iri_id', self.gf('django.db.models.fields.CharField')(default=lambda: unicode(uuid.uuid1()), unique=True, max_length=255)), #this does not match modeldefinition because of mysql limitations
-            ('iriurl', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-            ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('update_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-            ('title', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('duration', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
-            ('content_creation_date', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
-            ('tags', self.gf('tagging.fields.TagField')(max_length=2048, null=True)),
-            ('media_obj', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ldt_utils.Media'], null=True, blank=True)),
-        ))
-        db.send_create_signal('ldt_utils', ['Content'])
-
-        # Adding M2M table for field authors on 'Content'
-        db.create_table('ldt_utils_content_authors', (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('content', models.ForeignKey(orm['ldt_utils.content'], null=False)),
-            ('author', models.ForeignKey(orm['ldt_utils.author'], null=False))
-        ))
-        db.create_unique('ldt_utils_content_authors', ['content_id', 'author_id'])
-
-        # Adding model 'Project'
-        db.create_table('ldt_utils_project', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('owner', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['core.Owner'], null=True, blank=True)),
-            ('ldt_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=255)), #this does not match modeldefinition because of mysql limitations
-            ('ldt', self.gf('django.db.models.fields.TextField')(null=True)),
-            ('title', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-            ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('modification_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-            ('created_by', self.gf('django.db.models.fields.CharField')(max_length=70)),
-            ('changed_by', self.gf('django.db.models.fields.CharField')(max_length=70)),
-            ('state', self.gf('django.db.models.fields.IntegerField')(default=1)),
-        ))
-        db.send_create_signal('ldt_utils', ['Project'])
-
-        # Adding M2M table for field contents on 'Project'
-        db.create_table('ldt_utils_project_contents', (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('project', models.ForeignKey(orm['ldt_utils.project'], null=False)),
-            ('content', models.ForeignKey(orm['ldt_utils.content'], null=False))
-        ))
-        db.create_unique('ldt_utils_project_contents', ['project_id', 'content_id'])
-
-        # Adding model 'Segment'
-        db.create_table('ldt_utils_segment', (
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('project_obj', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ldt_utils.Project'], null=True)),
-            ('content', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['ldt_utils.Content'])),
-            ('project_id', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('iri_id', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-            ('ensemble_id', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-            ('cutting_id', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-            ('element_id', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-            ('tags', self.gf('tagging.fields.TagField')(max_length=2048, null=True)),
-            ('title', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)),
-            ('duration', self.gf('django.db.models.fields.IntegerField')(null=True)),
-            ('start_ts', self.gf('django.db.models.fields.IntegerField')(null=True)),
-            ('author', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('date', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
-            ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-        ))
-        db.send_create_signal('ldt_utils', ['Segment'])
-
-        # Adding unique constraint on 'Segment', fields ['project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id']
-        #db.create_unique('ldt_utils_segment', ['project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'])
+from django.db import models, migrations
+import sorl.thumbnail.fields
+import datetime
+import ldt.ldt_utils.utils
+import taggit.managers
 
 
-    def backwards(self, orm):
-        
-        # Removing unique constraint on 'Segment', fields ['project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id']
-        #db.delete_unique('ldt_utils_segment', ['project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'])
-
-        # Deleting model 'Author'
-        db.delete_table('ldt_utils_author')
-
-        # Deleting model 'Media'
-        db.delete_table('ldt_utils_media')
+class Migration(migrations.Migration):
 
-        # Deleting model 'Content'
-        db.delete_table('ldt_utils_content')
-
-        # Removing M2M table for field authors on 'Content'
-        db.delete_table('ldt_utils_content_authors')
-
-        # Deleting model 'Project'
-        db.delete_table('ldt_utils_project')
-
-        # Removing M2M table for field contents on 'Project'
-        db.delete_table('ldt_utils_project_contents')
-
-        # Deleting model 'Segment'
-        db.delete_table('ldt_utils_segment')
-
+    dependencies = [
+        ('taggit', '0001_initial'),
+    ]
 
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'core.owner': {
-            'Meta': {'object_name': 'Owner'},
-            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'})
-        },
-        'ldt_utils.author': {
-            'Meta': {'object_name': 'Author'},
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
-            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
-            'handle': ('django.db.models.fields.CharField', [], {'max_length': '512', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
-        },
-        'ldt_utils.content': {
-            'Meta': {'ordering': "['title']", 'object_name': 'Content'},
-            'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ldt_utils.Author']", 'symmetrical': 'False', 'blank': 'True'}),
-            'content_creation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'iri_id': ('django.db.models.fields.CharField', [], {'default': "u'54150594-c974-11e0-a397-58b035f6b93d'", 'unique': 'True', 'max_length': '1024'}),
-            'iriurl': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'media_obj': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ldt_utils.Media']", 'null': 'True', 'blank': 'True'}),
-            'tags': ('tagging.fields.TagField', [], {'max_length': '2048', 'null': 'True'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'update_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
-        },
-        'ldt_utils.media': {
-            'Meta': {'object_name': 'Media'},
-            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
-            'external_id': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'external_permalink': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'external_publication_url': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'external_src_url': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'media_creation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
-            'src': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'update_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'videopath': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'})
-        },
-        'ldt_utils.project': {
-            'Meta': {'ordering': "['title']", 'object_name': 'Project'},
-            'changed_by': ('django.db.models.fields.CharField', [], {'max_length': '70'}),
-            'contents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ldt_utils.Content']", 'symmetrical': 'False'}),
-            'created_by': ('django.db.models.fields.CharField', [], {'max_length': '70'}),
-            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'ldt': ('django.db.models.fields.TextField', [], {'null': 'True'}),
-            'ldt_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}),
-            'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['core.Owner']", 'null': 'True', 'blank': 'True'}),
-            'state': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
-        },
-        'ldt_utils.segment': {
-            'Meta': {'unique_together': "(('project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'),)", 'object_name': 'Segment'},
-            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'author': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'content': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ldt_utils.Content']"}),
-            'cutting_id': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'date': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
-            'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'element_id': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'ensemble_id': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'iri_id': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'project_id': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'project_obj': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ldt_utils.Project']", 'null': 'True'}),
-            'start_ts': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
-            'tags': ('tagging.fields.TagField', [], {'max_length': '2048', 'null': 'True'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
-        }
-    }
-
-    complete_apps = ['ldt_utils']
+    operations = [
+        migrations.CreateModel(
+            name='Author',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('handle', models.CharField(max_length=255, unique=True, null=True, blank=True)),
+                ('email', models.EmailField(max_length=75, null=True, blank=True)),
+                ('firstname', models.CharField(max_length=512, null=True, blank=True)),
+                ('lastname', models.CharField(max_length=512, null=True, blank=True)),
+            ],
+            options={
+                'permissions': (('view_author', 'Can view author'),),
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='Content',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('iri_id', models.CharField(default=ldt.ldt_utils.utils.generate_uuid, unique=True, max_length=255, verbose_name='iri id')),
+                ('iriurl', models.CharField(max_length=1024, verbose_name='iri url')),
+                ('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='content creation date')),
+                ('update_date', models.DateTimeField(auto_now=True, verbose_name='content update date')),
+                ('title', models.CharField(max_length=1024, null=True, verbose_name='title', blank=True)),
+                ('description', models.TextField(null=True, verbose_name='description', blank=True)),
+                ('duration', models.IntegerField(null=True, verbose_name='duration (ms)', blank=True)),
+                ('content_creation_date', models.DateTimeField(null=True, verbose_name='content creation date', blank=True)),
+                ('image', sorl.thumbnail.fields.ImageField(default=b'thumbnails/contents/content_default_icon.png', max_length=200, upload_to=b'thumbnails/contents/')),
+            ],
+            options={
+                'ordering': ['title'],
+                'permissions': (('view_content', 'Can view content'),),
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='ContentStat',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('annotation_volume_str', models.CommaSeparatedIntegerField(max_length=1024, null=True, verbose_name='annotation volume', blank=True)),
+                ('polemics_volume_str', models.CommaSeparatedIntegerField(max_length=1024, null=True, verbose_name='Annotation volume', blank=True)),
+                ('nb_annotations', models.IntegerField(default=0, verbose_name='annotation number', db_index=True)),
+                ('last_annotated', models.DateTimeField(default=datetime.datetime.now, null=True, verbose_name='last annotated', blank=True)),
+            ],
+            options={
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='Media',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('external_id', models.CharField(max_length=1024, null=True, verbose_name='external id', blank=True)),
+                ('external_permalink', models.URLField(max_length=1024, null=True, verbose_name='media permalink', blank=True)),
+                ('external_publication_url', models.URLField(max_length=1024, null=True, verbose_name='media publication url', blank=True)),
+                ('external_src_url', models.CharField(max_length=1024, null=True, verbose_name='media external source url', blank=True)),
+                ('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='media object creation date')),
+                ('media_creation_date', models.DateTimeField(null=True, verbose_name='media creation date', blank=True)),
+                ('update_date', models.DateTimeField(auto_now=True, verbose_name='update date')),
+                ('videopath', models.CharField(max_length=1024, null=True, verbose_name='videopath', blank=True)),
+                ('duration', models.IntegerField(null=True, verbose_name='duration (ms)', blank=True)),
+                ('description', models.TextField(null=True, verbose_name='description', blank=True)),
+                ('title', models.CharField(max_length=1024, null=True, verbose_name='title', blank=True)),
+                ('src', models.CharField(max_length=1024, verbose_name='media source')),
+                ('src_hash', models.CharField(unique=True, max_length=128, verbose_name='source hash', blank=True)),
+                ('mimetype_field', models.CharField(max_length=512, null=True, verbose_name='mimetype', blank=True)),
+            ],
+            options={
+                'permissions': (('view_media', 'Can view media'),),
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='Project',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('ldt_id', models.CharField(unique=True, max_length=255)),
+                ('ldt', models.TextField(null=True)),
+                ('title', models.CharField(max_length=1024)),
+                ('creation_date', models.DateTimeField(auto_now_add=True)),
+                ('modification_date', models.DateTimeField(auto_now=True)),
+                ('created_by', models.CharField(max_length=70, verbose_name='created by')),
+                ('changed_by', models.CharField(max_length=70, verbose_name='changed by')),
+                ('state', models.IntegerField(default=1, choices=[(1, b'edition'), (2, b'published'), (3, b'moderated'), (4, b'rejected'), (5, b'deleted')])),
+                ('description', models.TextField(null=True, blank=True)),
+                ('image', sorl.thumbnail.fields.ImageField(default=b'thumbnails/projects/project_default_icon.png', max_length=200, upload_to=b'thumbnails/projects/')),
+                ('contents', models.ManyToManyField(to='ldt_utils.Content')),
+            ],
+            options={
+                'ordering': ['title'],
+                'permissions': (('view_project', 'Can view project'),),
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='Segment',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('project_id', models.CharField(db_index=True, max_length=255, null=True, blank=True)),
+                ('iri_id', models.CharField(max_length=255, db_index=True)),
+                ('ensemble_id', models.CharField(max_length=512, db_index=True)),
+                ('cutting_id', models.CharField(max_length=512, db_index=True)),
+                ('element_id', models.CharField(max_length=512, db_index=True)),
+                ('title', models.CharField(max_length=2048, null=True, blank=True)),
+                ('duration', models.IntegerField(null=True)),
+                ('start_ts', models.IntegerField(null=True)),
+                ('author', models.CharField(max_length=1024, null=True, blank=True)),
+                ('date', models.CharField(max_length=128, null=True, blank=True)),
+                ('abstract', models.TextField(null=True, blank=True)),
+                ('polemics', models.IntegerField(default=0, null=True, blank=True)),
+                ('id_hash', models.CharField(unique=True, max_length=128, blank=True)),
+                ('audio_src', models.CharField(max_length=255, null=True, blank=True)),
+                ('audio_href', models.CharField(max_length=512, null=True, blank=True)),
+                ('content', models.ForeignKey(to='ldt_utils.Content')),
+                ('project_obj', models.ForeignKey(to='ldt_utils.Project', null=True)),
+                ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', help_text='A comma-separated list of tags.', verbose_name='Tags')),
+            ],
+            options={
+                'permissions': (('view_segment', 'Can view segment'),),
+            },
+            bases=(models.Model,),
+        ),
+    ]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/ldt_utils/migrations/0002_auto_20150423_0935.py	Fri Apr 24 12:56:15 2015 +0200
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+from django.conf import settings
+import taggit.managers
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('taggit', '0001_initial'),
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('ldt_utils', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='project',
+            name='owner',
+            field=models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='media',
+            name='creator',
+            field=models.ForeignKey(verbose_name='media creator', blank=True, to=settings.AUTH_USER_MODEL, null=True),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='contentstat',
+            name='content',
+            field=models.OneToOneField(related_name='stat_annotation', verbose_name='annotation statistics', to='ldt_utils.Content'),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='content',
+            name='authors',
+            field=models.ManyToManyField(to='ldt_utils.Author', verbose_name='authors', blank=True),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='content',
+            name='front_project',
+            field=models.ForeignKey(blank=True, to='ldt_utils.Project', null=True),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='content',
+            name='media_obj',
+            field=models.ForeignKey(blank=True, to='ldt_utils.Media', null=True),
+            preserve_default=True,
+        ),
+        migrations.AddField(
+            model_name='content',
+            name='tags',
+            field=taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', help_text='A comma-separated list of tags.', verbose_name='Tags'),
+            preserve_default=True,
+        ),
+    ]
--- a/src/ldt/ldt/text/migrations/0001_initial.py	Thu Apr 23 12:12:33 2015 +0200
+++ b/src/ldt/ldt/text/migrations/0001_initial.py	Fri Apr 24 12:56:15 2015 +0200
@@ -1,51 +1,36 @@
-# encoding: utf-8
-from south.db import db
-from south.v2 import SchemaMigration
-
-class Migration(SchemaMigration):
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
 
-    def forwards(self, orm):
-        
-        # Adding model 'Annotation'
-        db.create_table('text_annotation', (  # @UndefinedVariable
-            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
-            ('external_id', self.gf('django.db.models.fields.CharField')(default=u'5393f930-c975-11e0-bf36-58b035f6b93d', unique=True, max_length=255)),
-            ('uri', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-            ('tags_field', self.gf('tagging.fields.TagField')(max_length=2048, null=True)),
-            ('title', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('text', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-            ('color', self.gf('django.db.models.fields.CharField')(max_length=1024)),
-            ('creator', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('contributor', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)),
-            ('creation_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)),
-            ('update_date', self.gf('django.db.models.fields.DateTimeField')(auto_now=True, blank=True)),
-        ))
-        db.send_create_signal('text', ['Annotation'])  # @UndefinedVariable
+from django.db import models, migrations
+import ldt.text.utils
+import taggit.managers
 
 
-    def backwards(self, orm):
-        
-        # Deleting model 'Annotation'
-        db.delete_table('text_annotation')  # @UndefinedVariable
+class Migration(migrations.Migration):
 
+    dependencies = [
+        ('taggit', '0001_initial'),
+    ]
 
-    models = {
-        'text.annotation': {
-            'Meta': {'object_name': 'Annotation'},
-            'color': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
-            'contributor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
-            'creator': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'external_id': ('django.db.models.fields.CharField', [], {'default': "u'53952d00-c975-11e0-b311-58b035f6b93d'", 'unique': 'True', 'max_length': '1024'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'tags_field': ('tagging.fields.TagField', [], {'max_length': '2048', 'null': 'True'}),
-            'text': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
-            'update_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
-            'uri': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
-        }
-    }
-
-    complete_apps = ['text']
+    operations = [
+        migrations.CreateModel(
+            name='Annotation',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('external_id', models.CharField(default=ldt.text.utils.generate_uuid, unique=True, max_length=255, verbose_name='external id')),
+                ('uri', models.CharField(max_length=1024, verbose_name='annotation uri')),
+                ('title', models.CharField(max_length=1024, null=True, verbose_name='title', blank=True)),
+                ('description', models.TextField(null=True, verbose_name='description', blank=True)),
+                ('text', models.TextField(null=True, verbose_name='text', blank=True)),
+                ('color', models.CharField(max_length=1024, verbose_name='color')),
+                ('creator', models.CharField(max_length=1024, null=True, verbose_name='title', blank=True)),
+                ('contributor', models.CharField(max_length=1024, null=True, verbose_name='title', blank=True)),
+                ('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='creation date')),
+                ('update_date', models.DateTimeField(auto_now=True, verbose_name='update date')),
+                ('tags_field', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', help_text='A comma-separated list of tags.', verbose_name='Tags')),
+            ],
+            options={
+            },
+            bases=(models.Model,),
+        ),
+    ]
--- a/src/ldt/ldt/user/migrations/0001_initial.py	Thu Apr 23 12:12:33 2015 +0200
+++ b/src/ldt/ldt/user/migrations/0001_initial.py	Fri Apr 24 12:56:15 2015 +0200
@@ -1,95 +1,55 @@
-#@PydevCodeAnalysisIgnore
-# encoding: utf-8
-import datetime
-from south.db import db
-from south.v2 import SchemaMigration
-from django.db import models
-
-class Migration(SchemaMigration):
-
-    def forwards(self, orm):
-        
-        # Adding model 'IriGroup'
-        db.create_table('user_irigroup', (
-            ('group_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.Group'], unique=True, primary_key=True)),
-            ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)),
-        ))
-        db.send_create_signal('user', ['IriGroup'])
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
 
-        # Adding model 'ldt'
-        db.create_table('user_ldt', (
-            ('user_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['auth.User'], unique=True, primary_key=True)),
-        ))
-        db.send_create_signal('user', ['ldt'])
-
-        # Adding M2M table for field irigroups on 'ldt'
-        db.create_table('user_ldt_irigroups', (
-            ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)),
-            ('ldt', models.ForeignKey(orm['user.ldt'], null=False)),
-            ('irigroup', models.ForeignKey(orm['user.irigroup'], null=False))
-        ))
-        db.create_unique('user_ldt_irigroups', ['ldt_id', 'irigroup_id'])
-
-
-    def backwards(self, orm):
-        
-        # Deleting model 'IriGroup'
-        db.delete_table('user_irigroup')
-
-        # Deleting model 'ldt'
-        db.delete_table('user_ldt')
-
-        # Removing M2M table for field irigroups on 'ldt'
-        db.delete_table('user_ldt_irigroups')
+from django.db import models, migrations
+import sorl.thumbnail.fields
+import django.utils.timezone
+import django.core.validators
 
 
-    models = {
-        'auth.group': {
-            'Meta': {'object_name': 'Group'},
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
-            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
-        },
-        'auth.permission': {
-            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
-            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
-        },
-        'auth.user': {
-            'Meta': {'object_name': 'User'},
-            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
-            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
-            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
-            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
-            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
-            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
-            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
-            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
-        },
-        'contenttypes.contenttype': {
-            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
-            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
-            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
-            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
-        },
-        'user.irigroup': {
-            'Meta': {'object_name': 'IriGroup', '_ormbases': ['auth.Group']},
-            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
-            'group_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.Group']", 'unique': 'True', 'primary_key': 'True'})
-        },
-        'user.ldt': {
-            'Meta': {'object_name': 'ldt', '_ormbases': ['auth.User']},
-            'irigroups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['user.IriGroup']", 'symmetrical': 'False', 'blank': 'True'}),
-            'user_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'primary_key': 'True'})
-        }
-    }
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('auth', '0001_initial'),
+    ]
 
-    complete_apps = ['user']
+    operations = [
+        migrations.CreateModel(
+            name='LdtUser',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('password', models.CharField(max_length=128, verbose_name='password')),
+                ('last_login', models.DateTimeField(default=django.utils.timezone.now, verbose_name='last login')),
+                ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
+                ('username', models.CharField(help_text='Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only.', unique=True, max_length=30, verbose_name='username', validators=[django.core.validators.RegexValidator('^[\\w.@+-]+$', 'Enter a valid username.', 'invalid')])),
+                ('first_name', models.CharField(max_length=30, verbose_name='first name', blank=True)),
+                ('last_name', models.CharField(max_length=30, verbose_name='last name', blank=True)),
+                ('email', models.EmailField(max_length=75, verbose_name='email address', blank=True)),
+                ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
+                ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
+                ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
+                ('language', models.CharField(default=b'fr', max_length=2)),
+                ('image', sorl.thumbnail.fields.ImageField(default=b'thumbnails/users/user_default_icon.png', max_length=200, upload_to=b'thumbnails/users/')),
+                ('groups', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Group', blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of his/her group.', verbose_name='groups')),
+                ('user_permissions', models.ManyToManyField(related_query_name='user', related_name='user_set', to='auth.Permission', blank=True, help_text='Specific permissions for this user.', verbose_name='user permissions')),
+            ],
+            options={
+                'abstract': False,
+                'verbose_name': 'user',
+                'verbose_name_plural': 'users',
+            },
+            bases=(models.Model,),
+        ),
+        migrations.CreateModel(
+            name='GroupProfile',
+            fields=[
+                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+                ('description', models.TextField()),
+                ('image', sorl.thumbnail.fields.ImageField(default=b'thumbnails/groups/group_default_icon.png', max_length=200, upload_to=b'/Users/durandn/IRIProjects/platform_web/web/static/media/thumbnails/groups/')),
+                ('group', models.OneToOneField(related_name='profile', to='auth.Group')),
+            ],
+            options={
+            },
+            bases=(models.Model,),
+        ),
+    ]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/user/migrations/0002_auto_20150424_1042.py	Fri Apr 24 12:56:15 2015 +0200
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+from django.contrib.contenttypes.models import ContentType
+from django.contrib.auth.models import Permission
+
+class Migration(migrations.Migration):
+    
+    def add_permission_is_owner_group(apps, schema_editor):
+        content_type = ContentType.objects.get(app_label='auth', model='group')
+        Permission.objects.create(
+            codename='is_owner_group', 
+            name='Can add/delete admins to the group',
+            content_type=content_type
+        )        
+
+
+    
+    dependencies = [
+        ('user', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RunPython(add_permission_is_owner_group)
+    ]