More robust checking for valid subreddit name; Can browse public multireddits now

This commit is contained in:
woorst
2016-06-28 16:11:44 -05:00
parent 1d1a5a7b36
commit a6daa6537c

View File

@@ -3,6 +3,7 @@ from __future__ import unicode_literals
import re import re
from datetime import datetime from datetime import datetime
from itertools import groupby
import six import six
import praw import praw
@@ -379,15 +380,27 @@ class SubredditContent(Content):
def from_name(cls, reddit, name, loader, order=None, query=None, def from_name(cls, reddit, name, loader, order=None, query=None,
listing='r', period=None): listing='r', period=None):
# Strip leading and trailing backslashes # Strip leading, trailing and redundant backslashes
name = name.strip(' /').split('/') n = ''
if name[0] in ['r', 'u', 'user', 'domain']: n = ''.join([n + ''.join(list(g)) if k != '/' else '/' \
listing, name = name[0], name[1:] for k, g in groupby(name)]).strip(' /')
if len(name) > 1: name_list = n.split('/')
name, name_order = name name_order = None
order = order or name_order if name_list[0] in ['r', 'u', 'user', 'domain'] and len(name_list) > 1:
listing, name_list = name_list[0], name_list[1:]
if len(name_list) == 2:
name, name_order = name_list
elif len(name_list) in [3, 4] and name_list[1] == 'm':
name_order = name_list[3] if name_list[3:4] else name_order
name = '{0}/m/{2}'.format(*name_list)
elif len(name_list) == 1 and name_list[0] != '':
name = name_list[0]
else: else:
name = name[0] # Praw does not correctly handle empty strings
# https://github.com/praw-dev/praw/issues/615
raise InvalidSubreddit()
order = order or name_order
listing = 'u' if name == 'me' else listing listing = 'u' if name == 'me' else listing
display_name = '/{0}/{1}'.format(listing, name) display_name = '/{0}/{1}'.format(listing, name)
@@ -422,7 +435,12 @@ class SubredditContent(Content):
sort=(order or 'hot'), period=period) sort=(order or 'hot'), period=period)
elif listing in ['u', 'user']: elif listing in ['u', 'user']:
if name == 'me': if '/m/' in name:
multireddit = reddit.get_multireddit(*name.split('/')[::2])
submissions = eval('multireddit.get_{0}{1}(limit=None)' \
.format((order or 'top'), time[period]))
elif name == 'me':
if not reddit.is_oauth_session(): if not reddit.is_oauth_session():
raise exceptions.AccountError('Not logged in') raise exceptions.AccountError('Not logged in')
else: else:
@@ -434,12 +452,7 @@ class SubredditContent(Content):
time=(period or 'all')) time=(period or 'all'))
elif listing == 'r': elif listing == 'r':
if name == '': if name == 'front':
# Praw does not correctly handle empty strings
# https://github.com/praw-dev/praw/issues/615
raise InvalidSubreddit()
elif name == 'front':
dispatch = { dispatch = {
None: reddit.get_front_page, None: reddit.get_front_page,
'hot': reddit.get_front_page, 'hot': reddit.get_front_page,