From c2ac411b2bc17bc2fd7a1c71dd7c2fa0eb2b9f70 Mon Sep 17 00:00:00 2001 From: Tobin Date: Fri, 3 Apr 2015 13:35:57 -0500 Subject: [PATCH 1/8] updated docs for posting --- README.rst | 1 + rtv/docs.py | 1 + 2 files changed, 2 insertions(+) diff --git a/README.rst b/README.rst index c6e5a5f..b6e2d9b 100644 --- a/README.rst +++ b/README.rst @@ -71,6 +71,7 @@ In subreddit mode you can browse through the top submissions on either the front :``►`` or ``l``: View comments for the selected submission :``/``: Open a prompt to switch subreddits :``f``: Open a prompt to search the current subreddit +:``p``: Post a Submission to the current subreddit The ``/`` prompt accepts subreddits in the following formats diff --git a/rtv/docs.py b/rtv/docs.py index 430af2a..33002fe 100644 --- a/rtv/docs.py +++ b/rtv/docs.py @@ -38,6 +38,7 @@ Subreddit Mode `RIGHT` or `l` : View comments for the selected submission `/` : Open a prompt to switch subreddits `f` : Open a prompt to search the current subreddit + `p` : Post a Submission to the current subreddit Submission Mode `LEFT` or `h` : Return to subreddit mode From a14049afcf55fa5549b14e810c0846bb48419384 Mon Sep 17 00:00:00 2001 From: Tobin Date: Fri, 3 Apr 2015 17:13:43 -0500 Subject: [PATCH 2/8] added viewing user's submissions with ; key or /r/me --- rtv/__main__.py | 2 +- rtv/content.py | 13 +++++++++++++ rtv/page.py | 4 +++- rtv/submission.py | 2 +- rtv/subreddit.py | 18 +++++++++++++++--- 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/rtv/__main__.py b/rtv/__main__.py index c571874..cb86551 100644 --- a/rtv/__main__.py +++ b/rtv/__main__.py @@ -109,7 +109,7 @@ def main(): if args.link: page = SubmissionPage(stdscr, reddit, url=args.link) page.loop() - page = SubredditPage(stdscr, reddit, args.subreddit) + page = SubredditPage(stdscr, reddit, args.subreddit, args.username) page.loop() except praw.errors.InvalidUserPass: print('Invalid password for username: {}'.format(args.username)) diff --git a/rtv/content.py b/rtv/content.py index 69a0ea4..dc9a6bd 100644 --- a/rtv/content.py +++ b/rtv/content.py @@ -309,6 +309,19 @@ class SubredditContent(BaseContent): return content + @classmethod + def from_reddittor(cls, reddit, username, loader, order='new'): + reddittor = reddit.get_redditor(username) + submissions = reddittor.get_submitted(sort=order) + display_name = '/r/me' + content = cls(display_name, submissions, loader) + try: + content.get(0) + except (praw.errors.APIException, requests.HTTPError, + praw.errors.RedirectException): + raise SubredditError(display_name) + return content + def get(self, index, n_cols=70): """ Grab the `i`th submission, with the title field formatted to fit inside diff --git a/rtv/page.py b/rtv/page.py index 70d13f6..4753734 100644 --- a/rtv/page.py +++ b/rtv/page.py @@ -161,11 +161,12 @@ class BasePage(object): MIN_HEIGHT = 10 MIN_WIDTH = 20 - def __init__(self, stdscr, reddit, content, **kwargs): + def __init__(self, stdscr, reddit, content, username, **kwargs): self.stdscr = stdscr self.reddit = reddit self.content = content + self.username = username self.nav = Navigator(self.content.get, **kwargs) self._header_window = None @@ -246,6 +247,7 @@ class BasePage(object): try: self.reddit.login(username, password) + self.username = username except praw.errors.InvalidUserPass: show_notification(self.stdscr, ['Invalid user/pass']) else: diff --git a/rtv/submission.py b/rtv/submission.py index 185003d..be515ba 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -32,7 +32,7 @@ class SubmissionPage(BasePage): raise ValueError('Must specify url or submission') super(SubmissionPage, self).__init__(stdscr, reddit, content, - page_index=-1) + page_index=-1, username=None) def loop(self): self.active = True diff --git a/rtv/subreddit.py b/rtv/subreddit.py index 3d8c277..beb33bb 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -24,13 +24,13 @@ class SubredditController(BaseController): class SubredditPage(BasePage): - def __init__(self, stdscr, reddit, name): + def __init__(self, stdscr, reddit, name, username): self.controller = SubredditController(self) self.loader = LoadScreen(stdscr) content = SubredditContent.from_name(reddit, name, self.loader) - super(SubredditPage, self).__init__(stdscr, reddit, content) + super(SubredditPage, self).__init__(stdscr, reddit, content, username) def loop(self): while True: @@ -41,7 +41,9 @@ class SubredditPage(BasePage): @SubredditController.register(curses.KEY_F5, 'r') def refresh_content(self, name=None): name = name or self.content.name - + if name == 'me' or name == '/r/me': + self.reddittor_profile() + return try: self.content = SubredditContent.from_name( self.reddit, name, self.loader) @@ -74,6 +76,16 @@ class SubredditPage(BasePage): if name is not None: self.refresh_content(name=name) + @SubredditController.register(';') + def reddittor_profile(self): + if self.reddit.is_logged_in(): + self.content = SubredditContent.from_reddittor(self.reddit, + self.username, + self.loader) + else: + show_notification(self.stdscr, ['Log in to view your profile']) + + @SubredditController.register(curses.KEY_RIGHT, 'l') def open_submission(self): "Select the current submission to view posts" From a2b64a3983329546b09f041e127efa764b296ee6 Mon Sep 17 00:00:00 2001 From: Tobin Date: Fri, 3 Apr 2015 17:14:28 -0500 Subject: [PATCH 3/8] catch request exception --- rtv/subreddit.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/rtv/subreddit.py b/rtv/subreddit.py index beb33bb..e25c8e9 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -79,12 +79,13 @@ class SubredditPage(BasePage): @SubredditController.register(';') def reddittor_profile(self): if self.reddit.is_logged_in(): - self.content = SubredditContent.from_reddittor(self.reddit, - self.username, - self.loader) + try: + self.content = SubredditContent.from_reddittor( + self.reddit, self.username, self.loader) + except requests.HTTPError: + show_notification(self.stdscr, ['Could not reach subreddit']) else: - show_notification(self.stdscr, ['Log in to view your profile']) - + show_notification(self.stdscr, ['Log in to view your submissions']) @SubredditController.register(curses.KEY_RIGHT, 'l') def open_submission(self): From a8c3d61e5063653f465f8197671dc6a57cfbfb14 Mon Sep 17 00:00:00 2001 From: Tobin Date: Fri, 3 Apr 2015 17:20:28 -0500 Subject: [PATCH 4/8] updated documentataion for profile view --- README.rst | 2 ++ rtv/docs.py | 1 + 2 files changed, 3 insertions(+) diff --git a/README.rst b/README.rst index 441116d..7ef52f6 100644 --- a/README.rst +++ b/README.rst @@ -72,6 +72,7 @@ In subreddit mode you can browse through the top submissions on either the front :``/``: Open a prompt to switch subreddits :``f``: Open a prompt to search the current subreddit :``p``: Post a Submission to the current subreddit +:``;``: View your Submissions (requires login) The ``/`` prompt accepts subreddits in the following formats @@ -79,6 +80,7 @@ The ``/`` prompt accepts subreddits in the following formats * ``/r/python/new`` * ``/r/python+linux`` supports multireddits * ``/r/front`` will redirect to the front page +* ``/r/me`` will show you your submissions on all subs **Submission Mode** diff --git a/rtv/docs.py b/rtv/docs.py index 33002fe..de5c285 100644 --- a/rtv/docs.py +++ b/rtv/docs.py @@ -39,6 +39,7 @@ Subreddit Mode `/` : Open a prompt to switch subreddits `f` : Open a prompt to search the current subreddit `p` : Post a Submission to the current subreddit + `;` : View your Submissions (requires login) Submission Mode `LEFT` or `h` : Return to subreddit mode From 2f8dcabbef27e9b8ed59b78cb2d9030c28165e83 Mon Sep 17 00:00:00 2001 From: Tobin Date: Sat, 4 Apr 2015 15:09:57 -0500 Subject: [PATCH 5/8] removed keybinding for profile sub, now just /r/me --- README.rst | 1 - rtv/docs.py | 1 - rtv/subreddit.py | 1 - 3 files changed, 3 deletions(-) diff --git a/README.rst b/README.rst index 7ef52f6..020a3b9 100644 --- a/README.rst +++ b/README.rst @@ -72,7 +72,6 @@ In subreddit mode you can browse through the top submissions on either the front :``/``: Open a prompt to switch subreddits :``f``: Open a prompt to search the current subreddit :``p``: Post a Submission to the current subreddit -:``;``: View your Submissions (requires login) The ``/`` prompt accepts subreddits in the following formats diff --git a/rtv/docs.py b/rtv/docs.py index de5c285..33002fe 100644 --- a/rtv/docs.py +++ b/rtv/docs.py @@ -39,7 +39,6 @@ Subreddit Mode `/` : Open a prompt to switch subreddits `f` : Open a prompt to search the current subreddit `p` : Post a Submission to the current subreddit - `;` : View your Submissions (requires login) Submission Mode `LEFT` or `h` : Return to subreddit mode diff --git a/rtv/subreddit.py b/rtv/subreddit.py index e25c8e9..c33cdbb 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -76,7 +76,6 @@ class SubredditPage(BasePage): if name is not None: self.refresh_content(name=name) - @SubredditController.register(';') def reddittor_profile(self): if self.reddit.is_logged_in(): try: From 325353527393f77518559e271bc3d355c6f42d09 Mon Sep 17 00:00:00 2001 From: Tobin Date: Sat, 4 Apr 2015 15:18:50 -0500 Subject: [PATCH 6/8] reddittor -> redditor :octocat: --- rtv/content.py | 6 +++--- rtv/subreddit.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rtv/content.py b/rtv/content.py index dc9a6bd..10837f8 100644 --- a/rtv/content.py +++ b/rtv/content.py @@ -310,9 +310,9 @@ class SubredditContent(BaseContent): return content @classmethod - def from_reddittor(cls, reddit, username, loader, order='new'): - reddittor = reddit.get_redditor(username) - submissions = reddittor.get_submitted(sort=order) + def from_redditor(cls, reddit, username, loader, order='new'): + redditor = reddit.get_redditor(username) + submissions = redditor.get_submitted(sort=order) display_name = '/r/me' content = cls(display_name, submissions, loader) try: diff --git a/rtv/subreddit.py b/rtv/subreddit.py index c33cdbb..7eda88a 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -42,7 +42,7 @@ class SubredditPage(BasePage): def refresh_content(self, name=None): name = name or self.content.name if name == 'me' or name == '/r/me': - self.reddittor_profile() + self.redditor_profile() return try: self.content = SubredditContent.from_name( @@ -76,10 +76,10 @@ class SubredditPage(BasePage): if name is not None: self.refresh_content(name=name) - def reddittor_profile(self): + def redditor_profile(self): if self.reddit.is_logged_in(): try: - self.content = SubredditContent.from_reddittor( + self.content = SubredditContent.from_redditor( self.reddit, self.username, self.loader) except requests.HTTPError: show_notification(self.stdscr, ['Could not reach subreddit']) From c69728bea0eb2bf47c81f9a128b989e0f3358bfd Mon Sep 17 00:00:00 2001 From: Tobin Date: Sat, 4 Apr 2015 17:16:27 -0500 Subject: [PATCH 7/8] remove username attribute and use reddit.user.name --- rtv/__main__.py | 2 +- rtv/page.py | 4 +--- rtv/submission.py | 4 ++-- rtv/subreddit.py | 7 ++++--- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/rtv/__main__.py b/rtv/__main__.py index cb86551..c571874 100644 --- a/rtv/__main__.py +++ b/rtv/__main__.py @@ -109,7 +109,7 @@ def main(): if args.link: page = SubmissionPage(stdscr, reddit, url=args.link) page.loop() - page = SubredditPage(stdscr, reddit, args.subreddit, args.username) + page = SubredditPage(stdscr, reddit, args.subreddit) page.loop() except praw.errors.InvalidUserPass: print('Invalid password for username: {}'.format(args.username)) diff --git a/rtv/page.py b/rtv/page.py index 4753734..70d13f6 100644 --- a/rtv/page.py +++ b/rtv/page.py @@ -161,12 +161,11 @@ class BasePage(object): MIN_HEIGHT = 10 MIN_WIDTH = 20 - def __init__(self, stdscr, reddit, content, username, **kwargs): + def __init__(self, stdscr, reddit, content, **kwargs): self.stdscr = stdscr self.reddit = reddit self.content = content - self.username = username self.nav = Navigator(self.content.get, **kwargs) self._header_window = None @@ -247,7 +246,6 @@ class BasePage(object): try: self.reddit.login(username, password) - self.username = username except praw.errors.InvalidUserPass: show_notification(self.stdscr, ['Invalid user/pass']) else: diff --git a/rtv/submission.py b/rtv/submission.py index be515ba..ddac09c 100644 --- a/rtv/submission.py +++ b/rtv/submission.py @@ -31,8 +31,8 @@ class SubmissionPage(BasePage): else: raise ValueError('Must specify url or submission') - super(SubmissionPage, self).__init__(stdscr, reddit, content, - page_index=-1, username=None) + super(SubmissionPage, self).__init__(stdscr, reddit, + content, page_index=-1) def loop(self): self.active = True diff --git a/rtv/subreddit.py b/rtv/subreddit.py index 7eda88a..f898824 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -24,13 +24,13 @@ class SubredditController(BaseController): class SubredditPage(BasePage): - def __init__(self, stdscr, reddit, name, username): + def __init__(self, stdscr, reddit, name): self.controller = SubredditController(self) self.loader = LoadScreen(stdscr) content = SubredditContent.from_name(reddit, name, self.loader) - super(SubredditPage, self).__init__(stdscr, reddit, content, username) + super(SubredditPage, self).__init__(stdscr, reddit, content) def loop(self): while True: @@ -79,8 +79,9 @@ class SubredditPage(BasePage): def redditor_profile(self): if self.reddit.is_logged_in(): try: + redditor = self.reddit.user.name self.content = SubredditContent.from_redditor( - self.reddit, self.username, self.loader) + self.reddit, redditor, self.loader) except requests.HTTPError: show_notification(self.stdscr, ['Could not reach subreddit']) else: From 4b326cf218292910a98db62a66edc488d71efba0 Mon Sep 17 00:00:00 2001 From: Tobin Date: Sat, 4 Apr 2015 17:23:25 -0500 Subject: [PATCH 8/8] goodbye username --- rtv/content.py | 5 ++--- rtv/subreddit.py | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/rtv/content.py b/rtv/content.py index 10837f8..7afa275 100644 --- a/rtv/content.py +++ b/rtv/content.py @@ -310,9 +310,8 @@ class SubredditContent(BaseContent): return content @classmethod - def from_redditor(cls, reddit, username, loader, order='new'): - redditor = reddit.get_redditor(username) - submissions = redditor.get_submitted(sort=order) + def from_redditor(cls, reddit, loader, order='new'): + submissions = reddit.user.get_submitted(sort=order) display_name = '/r/me' content = cls(display_name, submissions, loader) try: diff --git a/rtv/subreddit.py b/rtv/subreddit.py index f898824..8f1a7d7 100644 --- a/rtv/subreddit.py +++ b/rtv/subreddit.py @@ -79,9 +79,8 @@ class SubredditPage(BasePage): def redditor_profile(self): if self.reddit.is_logged_in(): try: - redditor = self.reddit.user.name self.content = SubredditContent.from_redditor( - self.reddit, redditor, self.loader) + self.reddit, self.loader) except requests.HTTPError: show_notification(self.stdscr, ['Could not reach subreddit']) else: