Merge pull request #19 from tobywhughes/slashfix

A fix for the backslash bugs (plus front/... alias)
This commit is contained in:
michael-lazar
2015-03-04 18:55:41 -08:00

View File

@@ -68,6 +68,22 @@ def humanize_timestamp(utc_timestamp, verbose=False):
years = months // 12
return ('%d years ago' % years) if verbose else ('%dyr' % years)
def validate_backslashes(name):
"""
Makes sure backslashes in subreddit name work with for_name()
"""
if name[0] == '/':
raise SubredditNameError(name)
if name[-1] == '/':
name = name[:-1]
if name.count('/') > 1:
raise SubredditNameError(name)
return name
@contextmanager
def default_loader(self):
yield
@@ -309,12 +325,7 @@ class SubredditContent(BaseContent):
self._submission_data = []
@classmethod
def from_name(cls, reddit, name, loader=default_loader):
display_type = 'normal'
if name == 'front':
return cls('Front Page', reddit.get_front_page(limit=None), loader)
def from_name(cls, reddit, name, loader=default_loader, display_type = 'hot'):
if name == 'new':
return cls('New', reddit.get_new(limit=None), loader)
@@ -324,24 +335,53 @@ class SubredditContent(BaseContent):
else:
name = validate_backslashes(name)
if '/' in name:
name, display_type = name.split('/')
if display_type not in ['new', 'top', 'hot', 'rising', 'controversial']:
raise SubredditNameError(name)
if name == 'front':
if display_type == 'new':
return cls('New', reddit.get_new(limit=None), loader)
elif display_type == 'top':
return cls('Top', reddit.get_top(limit=None), loader)
elif display_type == 'hot':
return cls('Front Page', reddit.get_front_page(limit=None), loader)
elif display_type == 'rising':
return cls('Rising', reddit.get_rising(limit=None), loader)
elif display_type == 'controversial':
return cls('Controversial', reddit.get_controversial(limit=None), loader)
try:
with loader():
sub = reddit.get_subreddit(name, fetch=True)
except praw.errors.ClientException:
raise SubredditNameError(name)
if display_type == 'top':
return cls('/r/'+sub.display_name+'/top', sub.get_top_from_all(limit=None), loader)
elif display_type == 'new':
if display_type == 'new':
return cls('/r/'+sub.display_name+'/new', sub.get_new(limit=None), loader)
else:
elif display_type == 'top':
return cls('/r/'+sub.display_name+'/top', sub.get_top_from_all(limit=None), loader)
elif display_type == 'hot':
return cls('/r/'+sub.display_name, sub.get_hot(limit=None), loader)
elif display_type == 'rising':
return cls('/r/'+sub.display_name+'/rising', sub.get_rising(limit=None), loader)
elif display_type == 'controversial':
return cls('/r/'+sub.display_name+'/controversial', sub.get_controversial(limit=None), loader)
def get(self, index, n_cols=70):
"""
Grab the `i`th submission, with the title field formatted to fit inside