diff --git a/activities/models/post.py b/activities/models/post.py index f8a5e75..ee1f393 100644 --- a/activities/models/post.py +++ b/activities/models/post.py @@ -15,7 +15,7 @@ from activities.models.hashtag import Hashtag from core.html import sanitize_post, strip_html from core.ld import canonicalise, format_ld_date, get_list, parse_ld_date from stator.models import State, StateField, StateGraph, StatorModel -from users.models.identity import Identity +from users.models.identity import Identity, IdentityStates from users.models.system_actor import SystemActor @@ -625,11 +625,15 @@ class Post(StatorModel): f"Error fetching post from {object_uri}: {response.status_code}", {response.content}, ) - return cls.by_ap( + post = cls.by_ap( canonicalise(response.json(), include_security=True), create=True, update=True, ) + # We may need to fetch the author too + if post.author.state == IdentityStates.outdated: + async_to_sync(post.author.fetch_actor)() + return post else: raise cls.DoesNotExist(f"Cannot find Post with URI {object_uri}") diff --git a/activities/views/posts.py b/activities/views/posts.py index 8b0ff33..ef16713 100644 --- a/activities/views/posts.py +++ b/activities/views/posts.py @@ -33,9 +33,10 @@ class Individual(TemplateView): def get_context_data(self): if self.post_obj.in_reply_to: - parent = Post.objects.filter(object_uri=self.post_obj.in_reply_to).first() - else: - parent = None + try: + parent = Post.by_object_uri(self.post_obj.in_reply_to, fetch=True) + except Post.DoesNotExist: + parent = None return { "identity": self.identity, "post": self.post_obj, diff --git a/activities/views/search.py b/activities/views/search.py index ab37e17..ccfc1a4 100644 --- a/activities/views/search.py +++ b/activities/views/search.py @@ -101,11 +101,7 @@ class Search(FormView): # Try and retrieve the post by URI # (we do not trust the JSON we just got - fetch from source!) try: - post = Post.by_object_uri(document["id"], fetch=True) - # We may need to live-fetch the identity too - if post.author.state == IdentityStates.outdated: - async_to_sync(post.author.fetch_actor)() - return post + return Post.by_object_uri(document["id"], fetch=True) except Post.DoesNotExist: return None