def warm_team_member_images(sender, instance, **kwargs): ''' Ensures images are created post-save. Image sizes are stored in base.VERSATILEIMAGEFIELD_RENDITION_KEY_SETS. Using a thumbnail__AxA rendition key, the image fits in a AxA rectangle by maintaining the aspect ratio. Documentation link: https://django-versatileimagefield.readthedocs.io/en/latest/overview.html#create-images-wherever-you-need-them ''' for field in ['image', 'image_alt']: img_warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='Sizes', image_attr=field, verbose=True) img_warmer.warm()
def create_thumbnails(pk, model, size_set, image_attr=None): instance = model.objects.get(pk=pk) if not image_attr: image_attr = "image" image_instance = getattr(instance, image_attr) if image_instance.name == "": # There is no file, skip processing return warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set=size_set, image_attr=image_attr) logger.info("Creating thumbnails for %s", pk) num_created, failed_to_create = warmer.warm() if num_created: logger.info("Created %d thumbnails", num_created) if failed_to_create: logger.error("Failed to generate thumbnails", extra={"paths": failed_to_create})
def warm_activity_images(sender, instance, **kwargs): '''Ensures images are created post-save. Image sizes are stored in base.VERSATILEIMAGEFIELD_RENDITION_KEY_SETS. Using a thumbnail__AxA rendition key, the image fits in a AxA rectangle by maintaining the aspect ratio. Documentation link: https://django-versatileimagefield.readthedocs.io/en/latest/overview.html#create-images-wherever-you-need-them ''' if instance.image is not None: img_warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='Sizes', image_attr='image', verbose=True) num_created, failed_to_create = img_warmer.warm() else: logger.info('No image file added for this activity')
def generate_thumbnails(delete): """ Generate thumbnails for all images (avatars, covers, etc.). This can take a long time and generate a lot of I/O depending of the size of your library. """ click.echo("Deleting existing thumbnails…") if delete: try: # FileSystemStorage doesn't support deleting a non-empty directory # so we reimplemented a method to do so default_storage.force_delete("__sized__") except AttributeError: # backends doesn't support directory deletion pass MODELS = [ (Attachment, "file", "attachment_square"), ] for model, attribute, key_set in MODELS: click.echo("Generating thumbnails for {}.{}…".format( model._meta.label, attribute)) qs = model.objects.exclude(**{"{}__isnull".format(attribute): True}) qs = qs.exclude(**{attribute: ""}) cache_key = "*{}{}*".format( settings.MEDIA_URL, vif_settings.VERSATILEIMAGEFIELD_SIZED_DIRNAME) entries = cache.keys(cache_key) if entries: click.echo(" Clearing {} cache entries: {}…".format( len(entries), cache_key)) for keys in common_utils.batch(iter(entries)): cache.delete_many(keys) warmer = VersatileImageFieldWarmer( instance_or_queryset=qs, rendition_key_set=key_set, image_attr=attribute, verbose=True, ) click.echo(" Creating images") num_created, failed_to_create = warmer.warm() click.echo(" {} created, {} in error".format(num_created, len(failed_to_create)))
def save(self, *args, **kwargs): """ This saves the Image, tries to prewarm VersatileImageField and deletes itself again if it fails. Ideally this would be done in clean(), but VersatileImageField cannot prewarm before it is saved and does not have a clean that checks if the warming is bound to succeed. """ super().save(*args, **kwargs) image_warmer = VersatileImageFieldWarmer(instance_or_queryset=self, rendition_key_set="gallery", image_attr="file") num_created, failed_to_create = image_warmer.warm() if failed_to_create: self.delete() # Hey! Look at me! logger.warning( "Prewarming during save() of %s failed. Deleting again." % self) raise ValidationError("Corrupt image. Deleting")
def warm_Media_images(sender, instance, **kwargs): media_img_warmer = VersatileImageFieldWarmer( instance_or_queryset=instance, rendition_key_set='scaled_image', image_attr='full_image') num_created, failed_to_create = media_img_warmer.warm()
def warm_set_photo_images(sender, instance, **kwargs): set_img_warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='set_photo', image_attr='photo') num_created, failed_to_create = set_img_warmer.warm()
def warm_album_image_images(sender, instance, **kwargs): album_img_warmer = VersatileImageFieldWarmer( instance_or_queryset=instance, rendition_key_set='album_image', image_attr='main_image') num_created, failed_to_create = album_img_warmer.warm()
def warm_post_cover_photo_images(sender, instance, **kwargs): """Ensures Post cover photo files are created post-save""" post_img_warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='blog', image_attr='cover_photo') num_created, failed_to_create = post_img_warmer.warm()
def warm_image(sender, instance, **kwargs): image_warmer = VersatileImageFieldWarmer( instance_or_queryset=Post.objects.filter(pk=instance.pk), rendition_key_set='image_gallery', image_attr='image') num_created, failed_to_create = image_warmer.warm()
def warm_event_poster_images(sender, instance, **kwargs): news_img_warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='news_image', image_attr='image') num_created, failed_to_create = news_img_warmer.warm()
def warm_gallery_image_images(sender, instance, **kwargs): menu_img_warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='menu_image', image_attr='image') num_created, failed_to_create = menu_img_warmer.warm()
def warm_Photo_file_images(sender, instance, **kwargs): """Ensures Photo image files are created post-save""" photo_img_warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='gallery', image_attr='file') num_created, failed_to_create = photo_img_warmer.warm()
def warm_post_images(sender, instance, **kwargs): if instance.image: warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='post_image', image_attr='image') warmer.warm()
def create_member_profile_photos(sender, instance, **kwargs): # Note: this will run every time the model is saved, even if the photo field didn't change num_created, failed_to_create = VersatileImageFieldWarmer( instance_or_queryset=instance, rendition_key_set='memberphoto', image_attr='photo').warm()
def warm_all_media(): media_img_warmer = VersatileImageFieldWarmer( instance_or_queryset=Media.objects.all(), rendition_key_set='scaled_image', image_attr='full_image') num_created, failed_to_create = media_img_warmer.warm()
def warm_images(sender, instance, **kwargs): """Create all image size on POST""" image_warmer = VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='image_sizes', image_attr='image') image_warmer.warm()
def warm_patient_photo(sender, instance, **kwargs): """Prepare photos""" if instance.photo: VersatileImageFieldWarmer(instance_or_queryset=instance, rendition_key_set='main_set', image_attr='photo').warm()