56 lines
1.8 KiB
Python
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},
|
|
)
|