From 0e24494d8833d9d0e4a6b8fd3662f013400ddb20 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Tue, 27 Nov 2018 15:50:09 +0000 Subject: [PATCH] Create a squashed migration for wagtailimages (#4917) * Create a squashed migration for wagtailimages * Remove unneeded image updates As this is the initial migration, there won't be any images. Not in Wagtail's or a customised image model. * Move RunPython blocks to the end of the migration They can all be run on the latest schema without changes. This allows the schema changes to be squashed. * Simplify migration --- .../images/migrations/0001_squashed_0021.py | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 wagtail/images/migrations/0001_squashed_0021.py diff --git a/wagtail/images/migrations/0001_squashed_0021.py b/wagtail/images/migrations/0001_squashed_0021.py new file mode 100644 index 000000000..6ff2ee7a2 --- /dev/null +++ b/wagtail/images/migrations/0001_squashed_0021.py @@ -0,0 +1,159 @@ +# Generated by Django 2.1.3 on 2018-11-20 22:22 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import taggit.managers +import wagtail.core.models +import wagtail.images.models +import wagtail.search.index + + +# Functions from wagtail.images.migrations.0002_initial_data + + +def add_image_permissions_to_admin_groups(apps, schema_editor): + ContentType = apps.get_model('contenttypes.ContentType') + Permission = apps.get_model('auth.Permission') + Group = apps.get_model('auth.Group') + + # Get image permissions + image_content_type, _created = ContentType.objects.get_or_create( + model='image', + app_label='wagtailimages' + ) + + add_image_permission, _created = Permission.objects.get_or_create( + content_type=image_content_type, + codename='add_image', + defaults={'name': 'Can add image'} + ) + change_image_permission, _created = Permission.objects.get_or_create( + content_type=image_content_type, + codename='change_image', + defaults={'name': 'Can change image'} + ) + delete_image_permission, _created = Permission.objects.get_or_create( + content_type=image_content_type, + codename='delete_image', + defaults={'name': 'Can delete image'} + ) + + # Assign it to Editors and Moderators groups + for group in Group.objects.filter(name__in=['Editors', 'Moderators']): + group.permissions.add(add_image_permission, change_image_permission, delete_image_permission) + + +def remove_image_permissions(apps, schema_editor): + """Reverse the above additions of permissions.""" + ContentType = apps.get_model('contenttypes.ContentType') + Permission = apps.get_model('auth.Permission') + image_content_type = ContentType.objects.get( + model='image', + app_label='wagtailimages', + ) + # This cascades to Group + Permission.objects.filter( + content_type=image_content_type, + codename__in=('add_image', 'change_image', 'delete_image') + ).delete() + + +# Functions from wagtail.images.migrations.0012_copy_image_permissions_to_collections + + +def get_image_permissions(apps): + # return a queryset of the 'add_image' and 'change_image' permissions + Permission = apps.get_model('auth.Permission') + ContentType = apps.get_model('contenttypes.ContentType') + + image_content_type, _created = ContentType.objects.get_or_create( + model='image', + app_label='wagtailimages', + ) + return Permission.objects.filter( + content_type=image_content_type, + codename__in=['add_image', 'change_image'] + ) + + +def copy_image_permissions_to_collections(apps, schema_editor): + Collection = apps.get_model('wagtailcore.Collection') + Group = apps.get_model('auth.Group') + GroupCollectionPermission = apps.get_model('wagtailcore.GroupCollectionPermission') + + root_collection = Collection.objects.get(depth=1) + + for permission in get_image_permissions(apps): + for group in Group.objects.filter(permissions=permission): + GroupCollectionPermission.objects.create( + group=group, + collection=root_collection, + permission=permission + ) + + +def remove_image_permissions_from_collections(apps, schema_editor): + GroupCollectionPermission = apps.get_model('wagtailcore.GroupCollectionPermission') + image_permissions = get_image_permissions(apps) + + GroupCollectionPermission.objects.filter(permission__in=image_permissions).delete() + + +class Migration(migrations.Migration): + + replaces = [('wagtailimages', '0001_initial'), ('wagtailimages', '0002_initial_data'), ('wagtailimages', '0003_fix_focal_point_fields'), ('wagtailimages', '0004_make_focal_point_key_not_nullable'), ('wagtailimages', '0005_make_filter_spec_unique'), ('wagtailimages', '0006_add_verbose_names'), ('wagtailimages', '0007_image_file_size'), ('wagtailimages', '0008_image_created_at_index'), ('wagtailimages', '0009_capitalizeverbose'), ('wagtailimages', '0010_change_on_delete_behaviour'), ('wagtailimages', '0011_image_collection'), ('wagtailimages', '0012_copy_image_permissions_to_collections'), ('wagtailimages', '0013_make_rendition_upload_callable'), ('wagtailimages', '0014_add_filter_spec_field'), ('wagtailimages', '0015_fill_filter_spec_field'), ('wagtailimages', '0016_deprecate_rendition_filter_relation'), ('wagtailimages', '0017_reduce_focal_point_key_max_length'), ('wagtailimages', '0018_remove_rendition_filter'), ('wagtailimages', '0019_delete_filter'), ('wagtailimages', '0020_add-verbose-name'), ('wagtailimages', '0021_image_file_hash')] + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('wagtailcore', '0002_initial_data'), + ('taggit', '0001_initial'), + ('wagtailcore', '0026_group_collection_permission'), + ] + + operations = [ + migrations.CreateModel( + name='Image', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255, verbose_name='title')), + ('file', models.ImageField(height_field='height', upload_to=wagtail.images.models.get_upload_to, verbose_name='file', width_field='width')), + ('width', models.IntegerField(editable=False, verbose_name='width')), + ('height', models.IntegerField(editable=False, verbose_name='height')), + ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='created at')), + ('focal_point_x', models.PositiveIntegerField(blank=True, null=True)), + ('focal_point_y', models.PositiveIntegerField(blank=True, null=True)), + ('focal_point_width', models.PositiveIntegerField(blank=True, null=True)), + ('focal_point_height', models.PositiveIntegerField(blank=True, null=True)), + ('tags', taggit.managers.TaggableManager(blank=True, help_text=None, through='taggit.TaggedItem', to='taggit.Tag', verbose_name='tags')), + ('uploaded_by_user', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='uploaded by user')), + ('file_size', models.PositiveIntegerField(editable=False, null=True)), + ('collection', models.ForeignKey(default=wagtail.core.models.get_root_collection_id, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='wagtailcore.Collection', verbose_name='collection')), + ('file_hash', models.CharField(blank=True, editable=False, max_length=40)), + ], + options={ + 'abstract': False, + 'verbose_name': 'image', + 'verbose_name_plural': 'images', + }, + bases=(models.Model, wagtail.search.index.Indexed), + ), + migrations.CreateModel( + name='Rendition', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('file', models.ImageField(height_field='height', upload_to=wagtail.images.models.get_rendition_upload_to, width_field='width')), + ('width', models.IntegerField(editable=False)), + ('height', models.IntegerField(editable=False)), + ('focal_point_key', models.CharField(blank=True, default='', editable=False, max_length=16)), + ('filter_spec', models.CharField(db_index=True, max_length=255)), + ('image', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='renditions', to='wagtailimages.Image')), + ], + ), + migrations.AlterUniqueTogether( + name='rendition', + unique_together={('image', 'filter_spec', 'focal_point_key')}, + ), + migrations.RunPython(add_image_permissions_to_admin_groups, remove_image_permissions), + migrations.RunPython(copy_image_permissions_to_collections, remove_image_permissions_from_collections), + ]