/reddits: Filter over18 subreddits app-side.

This avoids doing a join that will filter out all subreddits which have
never changed their preference. That is, since the over18 data attribute
has a default value it will not have a data row unless changed and the
natural join caused by the data-attribute filter will implicitly discard
any subreddits that don't have the data attribute.

Fixes reddit/reddit#527.
This commit is contained in:
Neil Williams
2012-10-01 16:10:08 -07:00
parent 252ee3e551
commit 496924cf56

View File

@@ -901,6 +901,12 @@ class RedditsController(ListingController):
def title(self):
return _('reddits')
def keep_fn(self):
base_keep_fn = ListingController.keep_fn(self)
def keep(item):
return base_keep_fn(item) and (c.over18 or not item.over_18)
return keep
def query(self):
if self.where == 'banned' and c.user_is_admin:
reddits = Subreddit._query(Subreddit.c._spam == True,
@@ -928,9 +934,6 @@ class RedditsController(ListingController):
# don't try to render special subreddits (like promos)
reddits._filter(Subreddit.c.author_id != -1)
if not c.over18:
reddits._filter(Subreddit.c.over_18 == False)
if self.where == 'popular':
self.render_params = {"show_interestbar": True}