Skip to content

Commit

Permalink
reddit: implement get_activities() with user_id= or the current user
Browse files Browse the repository at this point in the history
  • Loading branch information
snarfed committed Feb 4, 2022
1 parent 4a01fdc commit e71ab01
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 8 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -304,6 +304,8 @@ Changelog
* Add `Instagram.merge_scraped_comments()`.
* ActivityStreams 2:
* Handle error when `type` isn't a string.
* Reddit:
* Implement `get_activities()` to fetch posts by the current user or a user specified with `user_id`.

### 3.2 - 2021-09-15
* `Source.original_post_discovery`: add new `include_reserved_hosts` kwarg, defaults to `True`.
Expand Down
19 changes: 12 additions & 7 deletions granary/reddit.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ def _fetch_replies(self, r, activities):
}

def get_activities_response(self, user_id=None, group_id=None, app_id=None,
activity_id=None, start_index=0, count=0,
activity_id=None, start_index=0, count=None,
etag=None, min_id=None, cache=None,
fetch_replies=False, fetch_likes=False,
fetch_shares=False, fetch_events=False,
Expand All @@ -260,16 +260,21 @@ def get_activities_response(self, user_id=None, group_id=None, app_id=None,
Currently only implements activity_id, search_query and fetch_replies.
"""
activities = []
r = self.get_reddit_api()

if activity_id:
subm = r.submission(id=activity_id)
activities.append(self.praw_to_activity(subm, 'submission'))
submissions = [r.submission(id=activity_id)]
elif search_query:
sr = r.subreddit('all')
subms = sr.search(search_query, sort='new')
activities.extend([self.praw_to_activity(subm, 'submission') for subm in subms])
submissions = r.subreddit('all').search(search_query, sort='new', limit=count)
else:
# Oddly user.me() returns None when in read only mode
# https://praw.readthedocs.io/en/stable/code_overview/reddit/user.html#praw.models.User.me
r.read_only = False
redditor = r.redditor(user_id) if user_id else r.user.me()
r.read_only = True
submissions = redditor.submissions.new(limit=count)

activities = [self.praw_to_activity(s, 'submission') for s in submissions]

if fetch_replies:
self._fetch_replies(r, activities)
Expand Down
11 changes: 10 additions & 1 deletion granary/tests/test_reddit.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,15 @@ def test_post_id(self):
'lhzukq',
self.reddit.post_id('https://www.reddit.com/r/xyz/comments/lhzukq/abc/'))

# TODO
# def test_get_activities_default_user(self):
# self.api.user.me().submissions.new(limit=None).AndReturn(
# [self.submission_selftext, self.submission_link])
# self.mox.ReplayAll()

# self.assert_equals([ACTIVITY_WITH_SELFTEXT, ACTIVITY_WITH_LINK],
# self.reddit.get_activities())

def test_get_activities_activity_id(self):
self.api.submission(id='abc').AndReturn(self.submission_selftext)
self.mox.ReplayAll()
Expand All @@ -241,7 +250,7 @@ def test_get_activities_search_query(self):
subreddit = self.mox.CreateMock(praw.models.Subreddit)
self.mox.StubOutWithMock(self.api, 'subreddit')
self.api.subreddit('all').AndReturn(subreddit)
subreddit.search('foo bar', sort='new').AndReturn(
subreddit.search('foo bar', sort='new', limit=None).AndReturn(
[self.submission_selftext, self.submission_link])
self.mox.ReplayAll()

Expand Down

0 comments on commit e71ab01

Please sign in to comment.