forked from mirrors/bookwyrm
Clear cache regardless of view success
This commit is contained in:
parent
a3b9c621af
commit
4f24b05d60
2 changed files with 26 additions and 9 deletions
|
@ -39,15 +39,14 @@ class UserRelationship(BookWyrmModel):
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
"""clear the template cache"""
|
"""clear the template cache"""
|
||||||
# invalidate the template cache
|
clear_cache(self.user_subject, self.user_subject)
|
||||||
cache.delete_many(
|
|
||||||
[
|
|
||||||
f"relationship-{self.user_subject.id}-{self.user_object.id}",
|
|
||||||
f"relationship-{self.user_object.id}-{self.user_subject.id}",
|
|
||||||
]
|
|
||||||
)
|
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
def delete(self, *args, **kwargs):
|
||||||
|
"""clear the template cache"""
|
||||||
|
clear_cache(self.user_subject, self.user_subject)
|
||||||
|
super().delete(*args, **kwargs)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""relationships should be unique"""
|
"""relationships should be unique"""
|
||||||
|
|
||||||
|
@ -98,6 +97,7 @@ class UserFollows(ActivityMixin, UserRelationship):
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_request(cls, follow_request):
|
def from_request(cls, follow_request):
|
||||||
"""converts a follow request into a follow relationship"""
|
"""converts a follow request into a follow relationship"""
|
||||||
|
print("from!!", cls)
|
||||||
return cls.objects.create(
|
return cls.objects.create(
|
||||||
user_subject=follow_request.user_subject,
|
user_subject=follow_request.user_subject,
|
||||||
user_object=follow_request.user_object,
|
user_object=follow_request.user_object,
|
||||||
|
@ -115,6 +115,7 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship):
|
||||||
"""make sure the follow or block relationship doesn't already exist"""
|
"""make sure the follow or block relationship doesn't already exist"""
|
||||||
# if there's a request for a follow that already exists, accept it
|
# if there's a request for a follow that already exists, accept it
|
||||||
# without changing the local database state
|
# without changing the local database state
|
||||||
|
print("UHHH????")
|
||||||
if UserFollows.objects.filter(
|
if UserFollows.objects.filter(
|
||||||
user_subject=self.user_subject,
|
user_subject=self.user_subject,
|
||||||
user_object=self.user_object,
|
user_object=self.user_object,
|
||||||
|
@ -136,6 +137,7 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship):
|
||||||
raise IntegrityError(
|
raise IntegrityError(
|
||||||
"Attempting to follow blocked user", self.user_subject, self.user_object
|
"Attempting to follow blocked user", self.user_subject, self.user_object
|
||||||
)
|
)
|
||||||
|
print("super save!")
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
if broadcast and self.user_subject.local and not self.user_object.local:
|
if broadcast and self.user_subject.local and not self.user_object.local:
|
||||||
|
@ -144,10 +146,12 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship):
|
||||||
if self.user_object.local:
|
if self.user_object.local:
|
||||||
manually_approves = self.user_object.manually_approves_followers
|
manually_approves = self.user_object.manually_approves_followers
|
||||||
if not manually_approves:
|
if not manually_approves:
|
||||||
|
print("accept")
|
||||||
self.accept()
|
self.accept()
|
||||||
|
|
||||||
model = apps.get_model("bookwyrm.Notification", require_ready=True)
|
model = apps.get_model("bookwyrm.Notification", require_ready=True)
|
||||||
notification_type = "FOLLOW_REQUEST" if manually_approves else "FOLLOW"
|
notification_type = "FOLLOW_REQUEST" if manually_approves else "FOLLOW"
|
||||||
|
print("notification")
|
||||||
model.objects.create(
|
model.objects.create(
|
||||||
user=self.user_object,
|
user=self.user_object,
|
||||||
related_user=self.user_subject,
|
related_user=self.user_subject,
|
||||||
|
@ -175,6 +179,7 @@ class UserFollowRequest(ActivitypubMixin, UserRelationship):
|
||||||
return
|
return
|
||||||
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
|
print("from request")
|
||||||
UserFollows.from_request(self)
|
UserFollows.from_request(self)
|
||||||
self.delete()
|
self.delete()
|
||||||
|
|
||||||
|
@ -209,3 +214,12 @@ class UserBlocks(ActivityMixin, UserRelationship):
|
||||||
Q(user_subject=self.user_subject, user_object=self.user_object)
|
Q(user_subject=self.user_subject, user_object=self.user_object)
|
||||||
| Q(user_subject=self.user_object, user_object=self.user_subject)
|
| Q(user_subject=self.user_object, user_object=self.user_subject)
|
||||||
).delete()
|
).delete()
|
||||||
|
|
||||||
|
def clear_cache(user_subject, user_object):
|
||||||
|
"""clear relationship cache"""
|
||||||
|
cache.delete_many(
|
||||||
|
[
|
||||||
|
f"relationship-{user_subject.id}-{user_object.id}",
|
||||||
|
f"relationship-{user_object.id}-{user_subject.id}",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
|
@ -7,6 +7,7 @@ from django.template.response import TemplateResponse
|
||||||
from django.views.decorators.http import require_POST
|
from django.views.decorators.http import require_POST
|
||||||
|
|
||||||
from bookwyrm import models
|
from bookwyrm import models
|
||||||
|
from bookwyrm.models.relationship import clear_cache
|
||||||
from .helpers import (
|
from .helpers import (
|
||||||
get_user_from_username,
|
get_user_from_username,
|
||||||
handle_remote_webfinger,
|
handle_remote_webfinger,
|
||||||
|
@ -21,11 +22,13 @@ def follow(request):
|
||||||
"""follow another user, here or abroad"""
|
"""follow another user, here or abroad"""
|
||||||
username = request.POST["user"]
|
username = request.POST["user"]
|
||||||
to_follow = get_user_from_username(request.user, username)
|
to_follow = get_user_from_username(request.user, username)
|
||||||
|
clear_cache(request.user, to_follow)
|
||||||
|
|
||||||
follow_request, created = models.UserFollowRequest.objects.get_or_create(
|
follow_request, created = models.UserFollowRequest.objects.get_or_create(
|
||||||
user_subject=request.user,
|
user_subject=request.user,
|
||||||
user_object=to_follow,
|
user_object=to_follow,
|
||||||
)
|
)
|
||||||
|
|
||||||
if not created:
|
if not created:
|
||||||
# this request probably failed to connect with the remote
|
# this request probably failed to connect with the remote
|
||||||
# that means we should save to trigger a re-broadcast
|
# that means we should save to trigger a re-broadcast
|
||||||
|
@ -46,14 +49,14 @@ def unfollow(request):
|
||||||
user_subject=request.user, user_object=to_unfollow
|
user_subject=request.user, user_object=to_unfollow
|
||||||
).delete()
|
).delete()
|
||||||
except models.UserFollows.DoesNotExist:
|
except models.UserFollows.DoesNotExist:
|
||||||
pass
|
clear_cache(request.user, to_unfollow)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
models.UserFollowRequest.objects.get(
|
models.UserFollowRequest.objects.get(
|
||||||
user_subject=request.user, user_object=to_unfollow
|
user_subject=request.user, user_object=to_unfollow
|
||||||
).delete()
|
).delete()
|
||||||
except models.UserFollowRequest.DoesNotExist:
|
except models.UserFollowRequest.DoesNotExist:
|
||||||
pass
|
clear_cache(request.user, to_unfollow)
|
||||||
|
|
||||||
# this is handled with ajax so it shouldn't really matter
|
# this is handled with ajax so it shouldn't really matter
|
||||||
return redirect(request.headers.get("Referer", "/"))
|
return redirect(request.headers.get("Referer", "/"))
|
||||||
|
|
Loading…
Reference in a new issue