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 07bf94c65c
commit 3b8b38efe3

View File

@@ -3,6 +3,7 @@ from __future__ import unicode_literals
import re
from datetime import datetime
from itertools import groupby
import six
import praw
@@ -373,15 +374,27 @@ class SubredditContent(Content):
def from_name(cls, reddit, name, loader, order=None, query=None,
listing='r', period=None):
# Strip leading and trailing backslashes
name = name.strip(' /').split('/')
if name[0] in ['r', 'u', 'user', 'domain']:
listing, name = name[0], name[1:]
if len(name) > 1:
name, name_order = name
order = order or name_order
# Strip leading, trailing and redundant backslashes
n = ''
n = ''.join([n + ''.join(list(g)) if k != '/' else '/' \
for k, g in groupby(name)]).strip(' /')
name_list = n.split('/')
name_order = None
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:
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
display_name = '/{0}/{1}'.format(listing, name)
@@ -416,7 +429,12 @@ class SubredditContent(Content):
sort=(order or 'hot'), period=period)
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():
raise exceptions.AccountError('Not logged in')
else:
@@ -428,12 +446,7 @@ class SubredditContent(Content):
time=(period or 'all'))
elif listing == 'r':
if name == '':
# Praw does not correctly handle empty strings
# https://github.com/praw-dev/praw/issues/615
raise InvalidSubreddit()
elif name == 'front':
if name == 'front':
dispatch = {
None: reddit.get_front_page,
'hot': reddit.get_front_page,