More robust checking for valid subreddit name; Can browse public multireddits now
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user