diff --git a/i3pystatus/reddit.py b/i3pystatus/reddit.py index 7a987af..44763fd 100644 --- a/i3pystatus/reddit.py +++ b/i3pystatus/reddit.py @@ -16,6 +16,9 @@ class Reddit(IntervalModule): submission directly. Depends on the Python Reddit API Wrapper (PRAW) . + PRAW must be configured for this module to work. + https://praw.readthedocs.io/en/latest/ + .. rubric:: Available formatters * {submission_title} @@ -39,9 +42,11 @@ class Reddit(IntervalModule): ("format", "Format string used for output."), ("username", "Reddit username."), ("password", "Reddit password."), - ('keyring_backend', 'alternative keyring backend for retrieving credentials'), + ('keyring_backend', 'alternative keyring backend for retrieving \ + credentials'), ("subreddit", "Subreddit to monitor. Uses frontpage if unspecified."), ("sort_by", "'hot', 'new', 'rising', 'controversial', or 'top'."), + ("time_filter", "'all', 'day','hour', 'month', 'week', 'year'"), ("color", "Standard color."), ("colorize", "Enable color change on new message."), ("color_orangered", "Color for new messages."), @@ -56,6 +61,7 @@ class Reddit(IntervalModule): keyring_backend = None subreddit = "" sort_by = "hot" + time_filter = "all" color = "#FFFFFF" colorize = True color_orangered = "#FF4500" @@ -106,7 +112,8 @@ class Reddit(IntervalModule): def connect(self): if not self.reddit_session: - self.reddit_session = praw.Reddit(user_agent='i3pystatus', disable_update_check=True) + self.reddit_session = praw.Reddit(user_agent='i3pystatus', + disable_update_check=True) return self.reddit_session def get_redditor(self, reddit): @@ -129,45 +136,42 @@ class Reddit(IntervalModule): "message_subject": "", "message_body": "" } - if self.password: - self.log_in(reddit) - unread_messages = sum(1 for i in reddit.get_unread()) - if unread_messages: - d = vars(next(reddit.get_unread())) - message_info = { - "message_unread": unread_messages, - "message_author": d["author"], - "message_subject": d["subject"], - "message_body": d["body"].replace("\n", " "), - "status": self.status["new_mail"] - } - + unread_messages = sum(1 for i in reddit.inbox.unread()) + if unread_messages: + d = vars(next(reddit.inbox.unread())) + message_info = { + "message_unread": unread_messages, + "message_author": d["author"], + "message_subject": d["subject"], + "message_body": d["body"].replace("\n", " "), + "status": self.status["new_mail"] + } return message_info - def log_in(self, reddit): - if not reddit.is_logged_in(): - reddit.login(self.username, self.password, disable_warning=True) - def get_subreddit(self, reddit): fdict = {} subreddit_dict = {} if self.subreddit: s = reddit.subreddit(self.subreddit) else: - s = reddit + s = reddit.front + if self.sort_by == 'hot': - if not self.subreddit: - subreddit_dict = vars(next(s.get_front(limit=1))) - else: - subreddit_dict = vars(next(s.get_hot(limit=1))) + subreddit_dict = vars(next(s.hot(limit=1))) elif self.sort_by == 'new': - subreddit_dict = vars(next(s.get_new(limit=1))) + subreddit_dict = vars(next(s.new(limit=1))) elif self.sort_by == 'rising': - subreddit_dict = vars(next(s.get_rising(limit=1))) + try: + subreddit_dict = vars(next(s.rising(limit=1))) + except StopIteration: + return elif self.sort_by == 'controversial': - subreddit_dict = vars(next(s.get_controversial(limit=1))) + subreddit_dict = vars(next(s.controversial( + time_filter=self.time_filter, + limit=1)) + ) elif self.sort_by == 'top': - subreddit_dict = vars(next(s.get_top(limit=1))) + subreddit_dict = vars(next(s.top(limit=1))) fdict["submission_title"] = subreddit_dict["title"] fdict["submission_author"] = subreddit_dict["author"] fdict["submission_points"] = subreddit_dict["ups"] @@ -194,8 +198,3 @@ class Reddit(IntervalModule): def open_link(self): user_open(self._url) - -if __name__ == "__main__": - reddit = Reddit() - reddit.username = "stay_at_home_daddy" - pprint.pprint(reddit.get_redditor(reddit.connect()))