# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import migrations from django.db.models import Q def update_permissions(apps, schema_editor): Permission = apps.get_model('auth', 'Permission') ContentType = apps.get_model('contenttypes', 'ContentType') Account = apps.get_model('kfet', 'Account') # If `kfet.is_team` permission exists, rename it. Permission.objects.filter( content_type__app_label='kfet', content_type__model='account', codename='is_team', ).update(name="Membre de l'équipe") # If `kfet.view_negs` permission exists, move it as # `kfet.view_accountnegative`. try: view_negs_p = Permission.objects.get( content_type__app_label='kfet', content_type__model='accountnegative', codename='view_negs', ) except Permission.DoesNotExist: pass else: # Avoid failure due to unicity constraint if migrations were partially # applied. # Because `view_negs` still exists here, it should be safe to consider # that nothing uses `view_accountnegative` so that it can be deleted. Permission.objects.filter( content_type__app_label='kfet', content_type__model='accountnegative', codename='view_accountnegative', ).delete() view_negs_p.codename = 'view_accountnegative' view_negs_p.name = 'Can view Compte en négatif' view_negs_p.save() # Delete unused permissions. to_delete = { 'account': ['delete_account'], 'accountnegative': [ 'add_accountnegative', 'delete_accountnegative', 'view_negs'], 'article': ['delete_article'], 'articlecategory': ['add_articlecategory', 'delete_articlecategory'], 'articlerule': '__all__', 'checkout': ['delete_checkout'], 'checkoutstatement': ['delete_checkoutstatement'], 'checkouttransfer': '__all__', 'inventory': ['change_inventory', 'delete_inventory'], 'inventoryarticle': '__all__', 'operation': ['add_operation', 'change_operation', 'delete_operation'], 'operationgroup': '__all__', 'order': ['change_order', 'delete_order'], 'orderarticle': '__all__', 'supplier': ['add_supplier', 'delete_supplier'], 'supplierarticle': '__all__', 'transfer': ['change_transfer', 'delete_transfer'], 'transfergroup': '__all__', } to_delete_q = Q() for model_name, codenames in to_delete.items(): if codenames == '__all__': to_delete_q |= Q(content_type__model=model_name) else: to_delete_q |= Q( content_type__model=model_name, codename__in=codenames, ) to_delete_q &= Q(content_type__app_label='kfet') Permission.objects.filter(to_delete_q).delete() class Migration(migrations.Migration): """ Data migration which performs permissions cleaning. """ dependencies = [ ('kfet', '0062_change_models_opts'), ('auth', '0006_require_contenttypes_0002'), ('contenttypes', '0002_remove_content_type_name'), ] operations = [ migrations.RunPython(update_permissions), ]