Protect generate_preview_images command

- add `--all` argument
- send computation intensive tasks to Celery
This commit is contained in:
Joachim 2021-05-28 17:25:20 +02:00
parent f206f61e9a
commit 61367c3f4f
2 changed files with 46 additions and 38 deletions

View file

@ -6,44 +6,52 @@ from django.core.management.base import BaseCommand
from bookwyrm import activitystreams, models, settings, preview_images from bookwyrm import activitystreams, models, settings, preview_images
def generate_preview_images(): class Command(BaseCommand):
help = "Generate preview images"
def add_arguments(self, parser):
parser.add_argument('--all', '-a', action="store_true", help="Generates images for ALL types: site, users and books. Can use a lot of computing power.")
# pylint: disable=no-self-use,unused-argument
def handle(self, *args, **options):
"""generate preview images""" """generate preview images"""
print(" | Hello! I will be generating preview images for your instance.") self.stdout.write(" | Hello! I will be generating preview images for your instance.")
print( if options['all']:
self.stdout.write(
"🧑‍🎨 ⎨ This might take quite long if your instance has a lot of books and users." "🧑‍🎨 ⎨ This might take quite long if your instance has a lot of books and users."
) )
print(" | ✧ Thank you for your patience ✧") self.stdout.write(" | ✧ Thank you for your patience ✧")
else:
self.stdout.write(
"🧑‍🎨 ⎨ I will only generate the instance preview image."
)
self.stdout.write(" | ✧ Be right back! ✧")
# Site # Site
sys.stdout.write(" → Site preview image: ") self.stdout.write(" → Site preview image: ", ending='')
preview_images.generate_site_preview_image_task() preview_images.generate_site_preview_image_task.delay()
sys.stdout.write(" OK 🖼\n") self.stdout.write(" OK 🖼")
if options['all']:
# Users # Users
users = models.User.objects.filter( users = models.User.objects.filter(
local=True, local=True,
is_active=True, is_active=True,
) )
sys.stdout.write(" → User preview images ({}): ".format(len(users))) self.stdout.write(" → User preview images ({}): ".format(len(users)), ending='')
for user in users: for user in users:
preview_images.generate_user_preview_image_task(user.id) preview_images.generate_user_preview_image_task.delay(user.id)
sys.stdout.write(".") self.stdout.write(".", ending='')
sys.stdout.write(" OK 🖼\n") self.stdout.write(" OK 🖼")
# Books # Books
books = models.Book.objects.select_subclasses().filter() books = models.Book.objects.select_subclasses().filter()
sys.stdout.write(" → Book preview images ({}): ".format(len(books))) self.stdout.write(" → Book preview images ({}): ".format(len(books)), ending='')
for book in books: for book in books:
preview_images.generate_edition_preview_image_task(book.id) preview_images.generate_edition_preview_image_task.delay(book.id)
sys.stdout.write(".") self.stdout.write(".", ending='')
sys.stdout.write(" OK 🖼\n") self.stdout.write(" OK 🖼")
print("🧑‍🎨 ⎨ Im all done! ✧ Enjoy ✧") self.stdout.write("🧑‍🎨 ⎨ Im all done! ✧ Enjoy ✧")
class Command(BaseCommand):
help = "Generate preview images"
# pylint: disable=no-self-use,unused-argument
def handle(self, *args, **options):
"""run feed builder"""
generate_preview_images()

2
bw-dev
View file

@ -108,7 +108,7 @@ case "$CMD" in
runweb python manage.py populate_streams runweb python manage.py populate_streams
;; ;;
generate_preview_images) generate_preview_images)
runweb python manage.py generate_preview_images runweb python manage.py generate_preview_images $@
;; ;;
*) *)
echo "Unrecognised command. Try: build, clean, up, initdb, resetdb, makemigrations, migrate, bash, shell, dbshell, restart_celery, test, pytest, test_report, black, populate_feeds, generate_preview_images" echo "Unrecognised command. Try: build, clean, up, initdb, resetdb, makemigrations, migrate, bash, shell, dbshell, restart_celery, test, pytest, test_report, black, populate_feeds, generate_preview_images"