diff --git a/Dockerfile b/Dockerfile index f03d84dd1..7456996e6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,15 @@ -FROM python:3 -ENV PYTHONUNBUFFERED 1 +FROM python:3.9 + +ENV PYTHONUNBUFFERED 1 + RUN mkdir /app RUN mkdir /app/static RUN mkdir /app/images + WORKDIR /app + COPY requirements.txt /app/ RUN pip install -r requirements.txt + COPY ./bookwyrm /app COPY ./celerywyrm /app diff --git a/bookwyrm/activitypub/base_activity.py b/bookwyrm/activitypub/base_activity.py index 5f16906b7..ee4eefbdd 100644 --- a/bookwyrm/activitypub/base_activity.py +++ b/bookwyrm/activitypub/base_activity.py @@ -76,11 +76,12 @@ class ActivityObject: if not isinstance(self, model.activity_serializer): raise TypeError('Wrong activity type for model') - # check for an existing instance - try: - return model.objects.get(remote_id=self.id) - except model.DoesNotExist: - pass + # check for an existing instance, if we're not updating a known obj + if not instance: + try: + return model.objects.get(remote_id=self.id) + except model.DoesNotExist: + pass model_fields = [m.name for m in model._meta.get_fields()] mapped_fields = {} diff --git a/bookwyrm/incoming.py b/bookwyrm/incoming.py index a7823f43f..bcb021ca7 100644 --- a/bookwyrm/incoming.py +++ b/bookwyrm/incoming.py @@ -269,7 +269,12 @@ def handle_favorite(activity): @app.task def handle_unfavorite(activity): ''' approval of your good good post ''' - like = activitypub.Like(**activity['object']).to_model(models.Favorite) + try: + like = models.Favorite.objects.filter( + remote_id=activity['object']['id'] + ).first() + except models.Favorite.DoesNotExist: + return like.delete() @@ -294,7 +299,7 @@ def handle_unboost(activity): remote_id=activity['object']['id'] ).first() if boost: - status_builder.delete_status(boost) + boost.delete() @app.task diff --git a/bookwyrm/outgoing.py b/bookwyrm/outgoing.py index 1b21603e4..c0253a99a 100644 --- a/bookwyrm/outgoing.py +++ b/bookwyrm/outgoing.py @@ -299,7 +299,8 @@ def handle_unfavorite(user, status): # can't find that status, idk return - fav_activity = activitypub.Undo(actor=user, object=favorite) + fav_activity = favorite.to_undo_activity(user) + favorite.delete() broadcast(user, fav_activity, direct_recipients=[status.user]) @@ -319,6 +320,17 @@ def handle_boost(user, status): broadcast(user, boost_activity) +def handle_unboost(user, status): + ''' a user regrets boosting a status ''' + boost = models.Boost.objects.filter( + boosted_status=status, user=user + ).first() + activity = boost.to_undo_activity(user) + + boost.delete() + broadcast(user, activity) + + def handle_update_book(user, book): ''' broadcast the news about our book ''' broadcast(user, book.to_update_activity(user)) diff --git a/bookwyrm/templates/snippets/boost_button.html b/bookwyrm/templates/snippets/boost_button.html index 7133e818d..57765bed1 100644 --- a/bookwyrm/templates/snippets/boost_button.html +++ b/bookwyrm/templates/snippets/boost_button.html @@ -1,6 +1,6 @@ {% load fr_display %} -{% with activity.id|uuid as uuid %} -
-