Populate streams tasks

This commit is contained in:
Mouse Reeve 2021-08-07 17:38:07 -07:00
parent 48a8b014ba
commit 590338138c
4 changed files with 30 additions and 7 deletions

View file

@ -4,6 +4,7 @@ from django.db.models import signals, Q
from bookwyrm import models from bookwyrm import models
from bookwyrm.redis_store import RedisStore, r from bookwyrm.redis_store import RedisStore, r
from bookwyrm.tasks import app
from bookwyrm.views.helpers import privacy_filter from bookwyrm.views.helpers import privacy_filter
@ -374,3 +375,11 @@ def remove_statuses_on_shelve(sender, instance, *args, **kwargs):
return return
BooksStream().remove_book_statuses(instance.user, instance.book) BooksStream().remove_book_statuses(instance.user, instance.book)
@app.task
def populate_stream_task(stream, user_id):
"""background task for populating an empty activitystream"""
user = models.User.objects.get(id=user_id)
stream = streams[stream]
stream.populate_streams(user)

View file

@ -3,22 +3,35 @@ from django.core.management.base import BaseCommand
from bookwyrm import activitystreams, models from bookwyrm import activitystreams, models
def populate_streams(): def populate_streams(stream=None):
"""build all the streams for all the users""" """build all the streams for all the users"""
streams = [stream] if stream else activitystreams.streams.keys()
print("Populations streams", streams)
users = models.User.objects.filter( users = models.User.objects.filter(
local=True, local=True,
is_active=True, is_active=True,
).order_by("last_active_date") ).order_by("-last_active_date")
print("This may take a long time! Please be patient.")
for user in users: for user in users:
for stream in activitystreams.streams.values(): for stream_key in streams:
stream.populate_streams(user) print(".", end="")
activitystreams.populate_stream_task.delay(stream_key, user.id)
class Command(BaseCommand): class Command(BaseCommand):
"""start all over with user streams""" """start all over with user streams"""
help = "Populate streams for all users" help = "Populate streams for all users"
def add_arguments(self, parser):
parser.add_argument(
"--stream",
default=None,
help="Specifies which time of stream to populate",
)
# pylint: disable=no-self-use,unused-argument # pylint: disable=no-self-use,unused-argument
def handle(self, *args, **options): def handle(self, *args, **options):
"""run feed builder""" """run feed builder"""
populate_streams() stream = options.get("stream")
populate_streams(stream=stream)

4
bw-dev
View file

@ -121,7 +121,7 @@ case "$CMD" in
makeitblack makeitblack
;; ;;
populate_streams) populate_streams)
runweb python manage.py populate_streams runweb python manage.py populate_streams $@
;; ;;
populate_suggestions) populate_suggestions)
runweb python manage.py populate_suggestions runweb python manage.py populate_suggestions
@ -169,7 +169,7 @@ case "$CMD" in
echo " build" echo " build"
echo " clean" echo " clean"
echo " black" echo " black"
echo " populate_streams" echo " populate_streams [--stream=<stream name>]"
echo " populate_suggestions" echo " populate_suggestions"
echo " generate_preview_images [--all]" echo " generate_preview_images [--all]"
echo " copy_media_to_s3" echo " copy_media_to_s3"

View file

@ -20,6 +20,7 @@ app.config_from_object("django.conf:settings", namespace="CELERY")
# Load task modules from all registered Django app configs. # Load task modules from all registered Django app configs.
app.autodiscover_tasks() app.autodiscover_tasks()
app.autodiscover_tasks(["bookwyrm"], related_name="activitypub.base_activity") app.autodiscover_tasks(["bookwyrm"], related_name="activitypub.base_activity")
app.autodiscover_tasks(["bookwyrm"], related_name="activitystreams")
app.autodiscover_tasks(["bookwyrm"], related_name="broadcast") app.autodiscover_tasks(["bookwyrm"], related_name="broadcast")
app.autodiscover_tasks(["bookwyrm"], related_name="connectors.abstract_connector") app.autodiscover_tasks(["bookwyrm"], related_name="connectors.abstract_connector")
app.autodiscover_tasks(["bookwyrm"], related_name="emailing") app.autodiscover_tasks(["bookwyrm"], related_name="emailing")