|
| 1 | +from pathlib import Path |
| 2 | + |
| 3 | +from django.core.management.base import BaseCommand |
| 4 | +from django.db.models.fields.files import default_storage |
| 5 | + |
| 6 | +from fragdenstaat_de.fds_cms.tasks import generate_avif_thumbnail |
| 7 | + |
| 8 | + |
| 9 | +def walk_folder(storage, base): |
| 10 | + folders, files = storage.listdir(base) |
| 11 | + |
| 12 | + for subfolder in folders: |
| 13 | + # On S3, we don't really have subfolders, so exclude "." |
| 14 | + if subfolder == ".": |
| 15 | + continue |
| 16 | + |
| 17 | + new_base = str(Path(base, subfolder)) |
| 18 | + yield from walk_folder(storage, new_base) |
| 19 | + |
| 20 | + for file in files: |
| 21 | + yield Path(base, file) |
| 22 | + |
| 23 | + |
| 24 | +class Command(BaseCommand): |
| 25 | + help = "Generate missing avif files for thumbnails" |
| 26 | + |
| 27 | + def add_arguments(self, parser): |
| 28 | + parser.add_argument("--base-path", type=str, default="media/thumbnails") |
| 29 | + |
| 30 | + def handle(self, *args, base_path, **kwargs): |
| 31 | + storage = default_storage |
| 32 | + for file in walk_folder(storage, base_path): |
| 33 | + if file.suffix in (".avif", ".svg"): |
| 34 | + continue |
| 35 | + if not storage.exists(str(file) + ".avif"): |
| 36 | + print("Generating avif for", file) |
| 37 | + generate_avif_thumbnail(str(file), storage) |
0 commit comments