Files
kakigoori/images/management/commands/regenerate_variants.py

56 lines
1.8 KiB
Python

from django.core.management.base import BaseCommand
from images.models import ImageVariant
from images.utils import get_b2_resource
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument("variants", nargs="+", type=str)
def handle(self, *args, **options):
if options["variants"] and len(options["variants"]) > 0:
variants = options["variants"]
else:
variants = ImageVariant.objects.all()
bucket = get_b2_resource()
for variant_id in variants:
print("Regenerating variant %s" % variant_id)
image_variant = ImageVariant.objects.filter(id=variant_id).first()
if image_variant.is_full_size and (
image_variant.file_type == "jpg" or image_variant.file_type == "png"
):
print("Can't regenerate original image")
continue
if image_variant.file_type == "webp" or image_variant.file_type == "avif":
image_variant.regenerate = True
image_variant.save()
continue
image, file_extension = image_variant.image.create_resized_image(
image_variant.height,
image_variant.width,
image_variant.gaussian_blur,
image_variant.brightness,
)
if file_extension == "jpg":
content_type = "image/jpeg"
elif file_extension == "png":
content_type = "image/png"
else:
content_type = "binary/octet-stream"
image_variant.file_type = file_extension
bucket.upload_fileobj(
image,
image_variant.backblaze_filepath,
ExtraArgs={"ContentType": content_type},
)