updated module to use PRAW 4.3.0

This commit is contained in:
Jason Paris 2017-01-31 14:30:15 -05:00 committed by enkore
parent 6e0fe2ec90
commit 06cac68ae3

View File

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