# HG changeset patch # User ymh # Date 1431434427 -7200 # Node ID e7cd1595f512450cf98fa9fc5fab1abd4a59e8fa # Parent 1d9fc32ec8abb7ff62bff963a7cadc66406197cc correct migrations + new version diff -r 1d9fc32ec8ab -r e7cd1595f512 .settings/org.eclipse.core.resources.prefs --- a/.settings/org.eclipse.core.resources.prefs Thu Apr 30 13:29:53 2015 +0200 +++ b/.settings/org.eclipse.core.resources.prefs Tue May 12 14:40:27 2015 +0200 @@ -1,6 +1,4 @@ eclipse.preferences.version=1 -encoding//src/ldt/ldt/core/migrations/0001_initial.py=utf-8 -encoding//src/ldt/ldt/core/migrations/0002_auto__del_owner.py=utf-8 encoding//src/ldt/ldt/indexation/backends/elasticsearch_backend.py=utf-8 encoding//src/ldt/ldt/indexation/highlighter.py=utf-8 encoding//src/ldt/ldt/indexation/models.py=utf-8 @@ -9,51 +7,12 @@ encoding//src/ldt/ldt/indexation/signals.py=utf-8 encoding//src/ldt/ldt/indexation/tests.py=utf-8 encoding//src/ldt/ldt/ldt_utils/events.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0001_initial.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0002_auto__add_field_media_mimetype_field__chg_field_media_external_src_url.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0003_auto__chg_field_project_owner.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0004_auto__add_field_project_description.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0005_add_permissions.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0006_auto__add_field_media_image.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0007_auto__add_field_content_image__del_field_media_image.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0008_auto__add_field_project_image.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0009_auto__chg_field_content_image__chg_field_project_image.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0010_auto__add_annotationstat.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0011_gen_stat_annotation.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0012_auto__add_field_content_last_annotated.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0013_auto__add_field_content_front_project__chg_field_content_last_annotate.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0014_auto__del_annotationstat__chg_field_content_last_annotated.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0015_auto__add_contentstat__del_field_content_last_annotated__del_field_con.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0016_one_to_one_stat_annotation.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0017_correct_image_path.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0018_auto__chg_field_content_iri_id__chg_field_project_ldt_id__chg_field_au.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0019_recalculate_media_hash_src.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0020_auto__add_field_segment_id_hash__chg_field_segment_iri_id__chg_field_s.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0021_recalculate_segment_id_hash_script.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0022_auto__add_unique_media_src_hash__chg_field_segment_cutting_id__chg_fie.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0023_auto__add_field_segment_audio_src__add_field_segment_audio_href.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0024_auto__chg_field_tag_name.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0025_chg_site_domain.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0026_set_relative_ldtproject.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0027_auto__chg_field_project_owner__chg_field_media_creator.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0028_all_users_in_everyone.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/migrations/0029_tagging_to_taggit.py=utf-8 -encoding//src/ldt/ldt/ldt_utils/views/json.py=utf-8 +encoding//src/ldt/ldt/ldt_utils/views/ldt_json.py=utf-8 encoding//src/ldt/ldt/management/commands/createmediacontent.py=utf-8 encoding//src/ldt/ldt/management/commands/synciri.py=utf-8 encoding//src/ldt/ldt/management/commands/updateiriurlinprojects.py=utf-8 encoding//src/ldt/ldt/management/utils.py=utf-8 encoding//src/ldt/ldt/test/test_runner.py=utf-8 encoding//src/ldt/ldt/text/migrations/0001_initial.py=utf-8 -encoding//src/ldt/ldt/text/migrations/0002_auto__chg_field_annotation_external_id.py=utf-8 -encoding//src/ldt/ldt/text/migrations/0003_auto__del_field_annotation_tags_field.py=utf-8 -encoding//src/ldt/ldt/user/migrations/0001_initial.py=utf-8 -encoding//src/ldt/ldt/user/migrations/0005_add_permission_owner_group.py=utf-8 -encoding//src/ldt/ldt/user/migrations/0008_auto__chg_field_groupprofile_image__chg_field_groupprofile_group__chg_.py=utf-8 -encoding//src/ldt/ldt/user/migrations/0009_rename_auth_user_to_user_ldt_user.py=utf-8 -encoding//src/ldt/ldt/user/migrations/0010_auto__add_field_ldtuser_language__add_field_ldtuser_image.py=utf-8 -encoding//src/ldt/ldt/user/migrations/0011_copy_image_language_ldt_user.py=utf-8 -encoding//src/ldt/ldt/user/migrations/0012_auto__del_userprofile.py=utf-8 -encoding//src/ldt/ldt/user/migrations/0013_auto__del_ldt.py=utf-8 encoding//virtualenv/web/env/guardianenv/Lib/site-packages/guardian/migrations/0001_initial.py=utf-8 encoding/=UTF-8 diff -r 1d9fc32ec8ab -r e7cd1595f512 src/ldt/ldt/__init__.py --- a/src/ldt/ldt/__init__.py Thu Apr 30 13:29:53 2015 +0200 +++ b/src/ldt/ldt/__init__.py Tue May 12 14:40:27 2015 +0200 @@ -1,6 +1,6 @@ __all__ = ["VERSION", "get_version", "__version__"] -VERSION = (1, 55, 00, "final", 0) +VERSION = (1, 56, 00, "final", 0) def get_version(): diff -r 1d9fc32ec8ab -r e7cd1595f512 src/ldt/ldt/ldt_utils/migrations/0001_initial.py --- a/src/ldt/ldt/ldt_utils/migrations/0001_initial.py Thu Apr 30 13:29:53 2015 +0200 +++ b/src/ldt/ldt/ldt_utils/migrations/0001_initial.py Tue May 12 14:40:27 2015 +0200 @@ -5,6 +5,8 @@ import sorl.thumbnail.fields import datetime import ldt.ldt_utils.utils +from django.conf import settings +import ldt.ldt_utils.models import taggit.managers @@ -12,6 +14,7 @@ dependencies = [ ('taggit', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ @@ -40,7 +43,8 @@ ('description', models.TextField(null=True, verbose_name='content.description', blank=True)), ('duration', models.IntegerField(null=True, verbose_name='content.duration', blank=True)), ('content_creation_date', models.DateTimeField(null=True, verbose_name='content.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/')), + ('image', sorl.thumbnail.fields.ImageField(default=ldt.ldt_utils.models.get_content_image_default, max_length=200, upload_to=b'thumbnails/contents/')), + ('authors', models.ManyToManyField(to='ldt_utils.Author', verbose_name='content.authors', blank=True)), ], options={ 'ordering': ['title'], @@ -55,6 +59,7 @@ ('polemics_volume_str', models.CommaSeparatedIntegerField(max_length=1024, null=True, verbose_name='content_stat.polemics_volume', blank=True)), ('nb_annotations', models.IntegerField(default=0, verbose_name='content.nb_annotation', db_index=True)), ('last_annotated', models.DateTimeField(default=datetime.datetime.now, null=True, verbose_name='content.last_annotated', blank=True)), + ('content', models.OneToOneField(related_name='stat_annotation', verbose_name='content_stat.content', to='ldt_utils.Content')), ], ), migrations.CreateModel( @@ -75,6 +80,7 @@ ('src', models.CharField(max_length=1024, verbose_name='media.src')), ('src_hash', models.CharField(unique=True, max_length=128, verbose_name='media.src_hash', blank=True)), ('mimetype_field', models.CharField(max_length=512, null=True, verbose_name='media.mimetype', blank=True)), + ('creator', models.ForeignKey(verbose_name='media.creator', blank=True, to=settings.AUTH_USER_MODEL, null=True)), ], options={ 'permissions': (('view_media', 'Can view media'),), @@ -93,8 +99,9 @@ ('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/')), + ('image', sorl.thumbnail.fields.ImageField(default=ldt.ldt_utils.models.get_project_image_default, max_length=200, upload_to=b'thumbnails/projects/')), ('contents', models.ManyToManyField(to='ldt_utils.Content')), + ('owner', models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True)), ], options={ 'ordering': ['title'], @@ -128,4 +135,19 @@ 'permissions': (('view_segment', 'Can view segment'),), }, ), + migrations.AddField( + model_name='content', + name='front_project', + field=models.ForeignKey(blank=True, to='ldt_utils.Project', null=True), + ), + migrations.AddField( + model_name='content', + name='media_obj', + field=models.ForeignKey(blank=True, to='ldt_utils.Media', null=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'), + ), ] diff -r 1d9fc32ec8ab -r e7cd1595f512 src/ldt/ldt/ldt_utils/migrations/0002_auto_20150430_0951.py --- a/src/ldt/ldt/ldt_utils/migrations/0002_auto_20150430_0951.py Thu Apr 30 13:29:53 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -# -*- 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), - ), - migrations.AddField( - model_name='media', - name='creator', - field=models.ForeignKey(verbose_name='media.creator', blank=True, to=settings.AUTH_USER_MODEL, null=True), - ), - migrations.AddField( - model_name='contentstat', - name='content', - field=models.OneToOneField(related_name='stat_annotation', verbose_name='content_stat.content', to='ldt_utils.Content'), - ), - migrations.AddField( - model_name='content', - name='authors', - field=models.ManyToManyField(to='ldt_utils.Author', verbose_name='content.authors', blank=True), - ), - migrations.AddField( - model_name='content', - name='front_project', - field=models.ForeignKey(blank=True, to='ldt_utils.Project', null=True), - ), - migrations.AddField( - model_name='content', - name='media_obj', - field=models.ForeignKey(blank=True, to='ldt_utils.Media', null=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'), - ), - ] diff -r 1d9fc32ec8ab -r e7cd1595f512 src/ldt/ldt/ldt_utils/migrations/0003_adding_is_owner_group_permission.py --- a/src/ldt/ldt/ldt_utils/migrations/0003_adding_is_owner_group_permission.py Thu Apr 30 13:29:53 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - -class Migration(migrations.Migration): - - def add_permission_is_owner_group(apps, schema_editor): - from django.contrib.contenttypes.management import update_contenttypes - for app_config in apps.get_app_configs(): - app_config.models_module=True - update_contenttypes(app_config) - app_config.models_module=None - - Permission = apps.get_model("auth", "Permission") - ContentType = apps.get_model("contenttypes", "ContentType") - 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 = [ - ('contenttypes', '0001_initial'), - ('auth', '0006_require_contenttypes_0002'), - ('ldt_utils', '0002_auto_20150430_0951'), - ] - - operations = [ - migrations.RunPython(add_permission_is_owner_group) - ] \ No newline at end of file diff -r 1d9fc32ec8ab -r e7cd1595f512 src/ldt/ldt/ldt_utils/models.py --- a/src/ldt/ldt/ldt_utils/models.py Thu Apr 30 13:29:53 2015 +0200 +++ b/src/ldt/ldt/ldt_utils/models.py Tue May 12 14:40:27 2015 +0200 @@ -165,6 +165,9 @@ def get_by_natural_key(self, iri_id): return self.get(iri_id=iri_id) +def get_content_image_default(): + return settings.DEFAULT_CONTENT_ICON + class Content(SafeModel): objects = ContentManager() @@ -179,7 +182,7 @@ content_creation_date = models.DateTimeField(null=True, blank=True, verbose_name=_('content.content_creation_date')) tags = TaggableManager() media_obj = models.ForeignKey("Media", blank=True, null=True) - image = ImageField(upload_to="thumbnails/contents/", default=settings.DEFAULT_CONTENT_ICON, max_length=200) + image = ImageField(upload_to="thumbnails/contents/", default=get_content_image_default, max_length=200) front_project = models.ForeignKey("Project", null=True, blank=True) class Meta: @@ -589,8 +592,11 @@ class Meta: app_label="ldt_utils" - - + + +def get_project_image_default(): + return settings.DEFAULT_PROJECT_ICON + class Project(Document, SafeModel): EDITION = 1 @@ -616,7 +622,7 @@ changed_by = models.CharField(_("changed by"), max_length=70) state = models.IntegerField(choices=STATE_CHOICES, default=1) description = models.TextField(null=True, blank=True) - image = ImageField(upload_to="thumbnails/projects/", default=settings.DEFAULT_PROJECT_ICON, max_length=200) + image = ImageField(upload_to="thumbnails/projects/", default=get_project_image_default, max_length=200) class Meta: app_label="ldt_utils" diff -r 1d9fc32ec8ab -r e7cd1595f512 src/ldt/ldt/user/migrations/0001_initial.py --- a/src/ldt/ldt/user/migrations/0001_initial.py Thu Apr 30 13:29:53 2015 +0200 +++ b/src/ldt/ldt/user/migrations/0001_initial.py Tue May 12 14:40:27 2015 +0200 @@ -3,6 +3,7 @@ from django.db import models, migrations import sorl.thumbnail.fields +import ldt.user.models import django.utils.timezone import django.core.validators @@ -28,15 +29,13 @@ ('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/')), + ('language', models.CharField(default=ldt.user.models.get_ldtuser_language_default, max_length=2)), + ('image', sorl.thumbnail.fields.ImageField(default=ldt.user.models.get_ldtuser_image_default, 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 their groups.', 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', + 'permissions': ((),), }, ), migrations.CreateModel( @@ -44,7 +43,7 @@ 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/')), + ('image', sorl.thumbnail.fields.ImageField(default=ldt.user.models.get_group_image_default, max_length=200, upload_to=ldt.user.models.get_group_image_upload_to)), ('group', models.OneToOneField(related_name='profile', to='auth.Group')), ], ), diff -r 1d9fc32ec8ab -r e7cd1595f512 src/ldt/ldt/user/models.py --- a/src/ldt/ldt/user/models.py Thu Apr 30 13:29:53 2015 +0200 +++ b/src/ldt/ldt/user/models.py Tue May 12 14:40:27 2015 +0200 @@ -1,10 +1,14 @@ from django.conf import settings -from django.contrib.auth.models import (AbstractUser, UserManager, Group, - BaseUserManager) +from django.contrib.auth import models as auth_models +from django.contrib.auth.models import (AbstractUser, UserManager, Group, + BaseUserManager, Permission) +from django.contrib.contenttypes.models import ContentType from django.db import models from django.db.models.signals import post_save from django.utils import timezone from sorl.thumbnail import ImageField +from south.signals import post_migrate + class LdtUserManager(BaseUserManager): @@ -34,10 +38,17 @@ u.save(using=self._db) return u +# This method was added to stabilize migrations +def get_group_image_upload_to(instance, filename): + return settings.MEDIA_ROOT+"thumbnails/groups/" + +def get_group_image_default(): + return settings.DEFAULT_GROUP_ICON + class GroupProfile(models.Model): group = models.OneToOneField(Group, primary_key=False, related_name='profile') description = models.TextField() - image = ImageField(upload_to=settings.MEDIA_ROOT+"thumbnails/groups/", default=settings.DEFAULT_GROUP_ICON, max_length=200) + image = ImageField(upload_to=get_group_image_upload_to, default=get_group_image_default, max_length=200) @staticmethod def create_group_profile(sender, instance, created, **kwargs): @@ -49,18 +60,34 @@ if admins: admin_user = admins[0] admin_user.groups.add(instance) - admin_user.save() + admin_user.save() + +def get_ldtuser_image_default(): + return settings.DEFAULT_USER_ICON + +def get_ldtuser_language_default(): + if hasattr(settings, 'LANGUAGE_CODE'): + return settings.LANGUAGE_CODE[:2] + else : + return 'en' class LdtUser(AbstractUser): - language = models.CharField(max_length=2, default=settings.LANGUAGE_CODE[:2]) - image = ImageField(upload_to="thumbnails/users/", default=settings.DEFAULT_USER_ICON, max_length=200) + language = models.CharField(max_length=2, default=get_ldtuser_language_default) + image = ImageField(upload_to="thumbnails/users/", default=get_ldtuser_image_default, max_length=200) objects = LdtUserManager() - + def get_profile(self): return self.profile Group.add_to_class("get_profile", get_profile) # @UndefinedVariable post_save.connect(GroupProfile.create_group_profile, sender=Group) + +def add_group_permissions(sender, **kwargs): + ct = ContentType.objects.get(app_label='auth', model='group') + Permission.objects.get_or_create(codename='is_owner_group', name='Can add/delete admins to the group',content_type=ct) + +post_migrate.connect(add_group_permissions, sender=auth_models) +