From 496924cf560002b84199071471367a8bcd5c702f Mon Sep 17 00:00:00 2001 From: Neil Williams Date: Mon, 1 Oct 2012 16:10:08 -0700 Subject: [PATCH] /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. --- r2/r2/controllers/listingcontroller.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/r2/r2/controllers/listingcontroller.py b/r2/r2/controllers/listingcontroller.py index adf3f6ff7..d15d0f962 100755 --- a/r2/r2/controllers/listingcontroller.py +++ b/r2/r2/controllers/listingcontroller.py @@ -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}