Changed migration coding style.

This commit is contained in:
Norman Jäckel 2016-09-08 11:40:58 +02:00
parent 4ffe2b5a80
commit cd3c470919
3 changed files with 35 additions and 34 deletions

View File

@ -1,5 +0,0 @@
from ..utils.exceptions import OpenSlidesError
class UsersError(OpenSlidesError):
pass

View File

@ -2,47 +2,53 @@
# Generated by Django 1.9.7 on 2016-08-01 14:54 # Generated by Django 1.9.7 on 2016-08-01 14:54
from __future__ import unicode_literals from __future__ import unicode_literals
from django.core.exceptions import ObjectDoesNotExist from django.db import migrations, models
from django.db import migrations
def migrate_groups_and_user_permissions(apps, schema_editor): def migrate_groups_and_user_permissions(apps, schema_editor):
""" """
This function migrates the database to the new groups logic: This function migrates the database to the new groups logic:
- Rename Group 'Anonymous' (pk=1) to 'Default' - Rename group 'Anonymous' (pk=1) to 'Default'
- Rename Group 'Registered users' (pk=2) to 'Previous group Registered' - Rename group 'Registered users' (pk=2) to 'Previous group Registered'
- Add all users who are not in any group to this group (pk=2) - Add all users who are not in any group to this group (pk=2)
- Add all permissions of 'Previous group Registered' to all other groups (exclude 'Default') - Add all permissions of 'Previous group Registered' to all other groups (except 'Default')
But only do this migration if: But only run this migration if:
- there are groups in the database - there are groups in the database,
- the name of the first group is 'Guests'. - the name of the first group is 'Guests',
- the name of the second group is 'Registered users'.
""" """
# Disconnect autoupdate. We do not want to trigger it here.
models.signals.post_save.disconnect(dispatch_uid='inform_changed_data_receiver')
User = apps.get_model('users', 'User') User = apps.get_model('users', 'User')
Group = apps.get_model('auth', 'Group') Group = apps.get_model('auth', 'Group')
if Group.objects.exists(): try:
try: group_default = Group.objects.get(pk=1)
group_default = Group.objects.filter(pk=1) group_registered = Group.objects.get(pk=2)
if group_default.get().name == 'Guests': except Group.DoesNotExist:
group_default.update(name='Default') # One of the groups does not exist. Just do nothing.
pass
else:
if group_default.name == 'Guests' and group_registered.name == 'Registered users':
# Rename groups pk 1 and 2.
group_default.name = 'Default'
group_default.save()
group_registered.name = 'Previous group Registered'
group_registered.save()
group_old_registered = Group.objects.filter(pk=2) # Move users without groups to group pk 2.
group_old_registered.update(name='Previous group Registered') users = User.objects.all()
group_old_registered = group_old_registered.get() for user in users:
if not user.groups.exists():
user.groups.add(group_registered)
users = User.objects.all() # Copy permissions of group pk 2 to all other groups except pk 1.
for user in users: groups = Group.objects.filter(pk__gt=2)
if not user.groups.exists(): for group in groups:
user.groups.add(group_old_registered.pk) for permission in group_registered.permissions.all():
group.permissions.add(permission)
groups = Group.objects.filter(pk__gt=2)
for group in groups:
for permission in group_old_registered.permissions.all():
group.permissions.add(permission)
except ObjectDoesNotExist:
# If the first or second group doesn't exists, just pass this migraition
pass
class Migration(migrations.Migration): class Migration(migrations.Migration):

View File

@ -12,7 +12,7 @@ def create_builtin_groups_and_admin(**kwargs):
""" """
# Check whether there are groups in the database. # Check whether there are groups in the database.
if Group.objects.exists(): if Group.objects.exists():
# Do completely nothing if there are already some of our groups in the database. # Do completely nothing if there are already some groups in the database.
return return
permission_strings = ( permission_strings = (