Skip to content

Commit f823e41

Browse files
committed
handlers: use optimization in snarfed/granary@4d32457 to avoid double fetches
1 parent 7f7b078 commit f823e41

File tree

3 files changed

+21
-19
lines changed

3 files changed

+21
-19
lines changed

handlers.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,10 @@ def get_item(self, id):
242242

243243
class CommentHandler(ItemHandler):
244244
def get_item(self, post_id, id):
245-
cmt = self.source.get_comment(
246-
id, activity_id=post_id, activity_author_id=self.source.key.id())
247245
post = self.get_post(post_id)
246+
cmt = self.source.get_comment(
247+
id, activity_id=post_id, activity_author_id=self.source.key.id(),
248+
activity=post)
248249
if post:
249250
originals, mentions = original_post_discovery.discover(
250251
self.source, post, fetch_hfeed=False)
@@ -255,8 +256,9 @@ def get_item(self, post_id, id):
255256

256257
class LikeHandler(ItemHandler):
257258
def get_item(self, post_id, user_id):
258-
like = self.source.get_like(self.source.key.string_id(), post_id, user_id)
259259
post = self.get_post(post_id)
260+
like = self.source.get_like(self.source.key.string_id(), post_id, user_id,
261+
activity=post)
260262
if post:
261263
originals, mentions = original_post_discovery.discover(
262264
self.source, post, fetch_hfeed=False)
@@ -280,9 +282,9 @@ def get_title(self, obj):
280282

281283
class ReactionHandler(ItemHandler):
282284
def get_item(self, post_id, user_id, reaction_id):
283-
reaction = self.source.gr_source.get_reaction(
284-
self.source.key.string_id(), post_id, user_id, reaction_id)
285285
post = self.get_post(post_id)
286+
reaction = self.source.gr_source.get_reaction(
287+
self.source.key.string_id(), post_id, user_id, reaction_id, activity=post)
286288
if post:
287289
originals, mentions = original_post_discovery.discover(
288290
self.source, post, fetch_hfeed=False)
@@ -292,13 +294,13 @@ def get_item(self, post_id, user_id, reaction_id):
292294

293295
class RepostHandler(ItemHandler):
294296
def get_item(self, post_id, share_id):
297+
post = self.get_post(post_id)
295298
repost = self.source.gr_source.get_share(
296-
self.source.key.string_id(), post_id, share_id)
299+
self.source.key.string_id(), post_id, share_id, activity=post)
297300
# webmention receivers don't want to see their own post in their
298301
# comments, so remove attachments before rendering.
299302
if repost and 'attachments' in repost:
300303
del repost['attachments']
301-
post = self.get_post(post_id)
302304
if post:
303305
originals, mentions = original_post_discovery.discover(
304306
self.source, post, fetch_hfeed=False)
@@ -310,7 +312,7 @@ class RsvpHandler(ItemHandler):
310312
def get_item(self, event_id, user_id):
311313
event = self.source.gr_source.get_event(event_id)
312314
rsvp = self.source.gr_source.get_rsvp(
313-
self.source.key.string_id(), event_id, user_id)
315+
self.source.key.string_id(), event_id, user_id, event=event)
314316
if event:
315317
originals, mentions = original_post_discovery.discover(
316318
self.source, event, fetch_hfeed=False)

models.py

+8-9
Original file line numberDiff line numberDiff line change
@@ -315,26 +315,23 @@ def get_activities_response(self, **kwargs):
315315
def get_activities(self, **kwargs):
316316
return self.get_activities_response(**kwargs)['items']
317317

318-
def get_comment(self, comment_id, activity_id=None, activity_author_id=None):
318+
def get_comment(self, comment_id, **kwargs):
319319
"""Returns a comment from this source.
320320
321-
Passes through to granary by default. May be overridden
322-
by subclasses.
321+
Passes through to granary by default. May be overridden by subclasses.
323322
324323
Args:
325324
comment_id: string, site-specific comment id
326-
activity_id: string, site-specific activity id
327-
activity_author_id: string, site-specific activity author id, optional
325+
kwargs: passed to granary.Source.get_comment
328326
329327
Returns: dict, decoded ActivityStreams comment object, or None
330328
"""
331-
comment = self.gr_source.get_comment(comment_id, activity_id=activity_id,
332-
activity_author_id=activity_author_id)
329+
comment = self.gr_source.get_comment(comment_id, **kwargs)
333330
if comment:
334331
self._inject_user_urls(comment)
335332
return comment
336333

337-
def get_like(self, activity_user_id, activity_id, like_user_id):
334+
def get_like(self, activity_user_id, activity_id, like_user_id, **kwargs):
338335
"""Returns an ActivityStreams 'like' activity object.
339336
340337
Passes through to granary by default. May be overridden
@@ -344,8 +341,10 @@ def get_like(self, activity_user_id, activity_id, like_user_id):
344341
activity_user_id: string id of the user who posted the original activity
345342
activity_id: string activity id
346343
like_user_id: string id of the user who liked the activity
344+
kwargs: passed to granary.Source.get_comment
347345
"""
348-
return self.gr_source.get_like(activity_user_id, activity_id, like_user_id)
346+
return self.gr_source.get_like(activity_user_id, activity_id, like_user_id,
347+
**kwargs)
349348

350349
def _inject_user_urls(self, activity):
351350
"""Adds this user's web site URLs to their user mentions (in tags), in place."""

twitter.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def search_for_links(self):
110110

111111
return results
112112

113-
def get_like(self, activity_user_id, activity_id, like_user_id):
113+
def get_like(self, activity_user_id, activity_id, like_user_id, **kwargs):
114114
"""Returns an ActivityStreams 'like' activity object for a favorite.
115115
116116
We get Twitter favorites by scraping HTML, and we only get the first page,
@@ -121,14 +121,15 @@ def get_like(self, activity_user_id, activity_id, like_user_id):
121121
activity_user_id: string id of the user who posted the original activity
122122
activity_id: string activity id
123123
like_user_id: string id of the user who liked the activity
124+
kwargs: passed to granary.Source.get_comment
124125
"""
125126
id = self.gr_source.tag_uri('%s_favorited_by_%s' % (activity_id, like_user_id))
126127
resp = models.Response.get_by_id(id)
127128
if resp:
128129
return json.loads(resp.response_json)
129130
else:
130131
return super(Twitter, self).get_like(activity_user_id, activity_id,
131-
like_user_id)
132+
like_user_id, **kwargs)
132133

133134
def is_private(self):
134135
"""Returns True if this Twitter account is protected.

0 commit comments

Comments
 (0)