From 54d5becaaf0dcabf0fd7c9255a27c66400fbb04e Mon Sep 17 00:00:00 2001 From: David Hu Date: Tue, 16 Apr 2013 15:25:14 -0700 Subject: [PATCH] Submit page subreddit suggestion obeys user's over_18 preference. --- r2/r2/controllers/api.py | 7 ++++--- r2/r2/lib/pages/pages.py | 2 +- r2/r2/lib/subreddit_search.py | 15 +++++++++------ r2/r2/lib/template_helpers.py | 1 + r2/r2/public/static/js/reddit.js | 2 +- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/r2/r2/controllers/api.py b/r2/r2/controllers/api.py index 00b5cd1a5..8f6e925e5 100755 --- a/r2/r2/controllers/api.py +++ b/r2/r2/controllers/api.py @@ -3075,11 +3075,12 @@ class ApiController(RedditController, OAuth2ResourceController): c.user.pref_frame_commentspanel = False c.user._commit() - @json_validate(query = VPrintable('query', max_length = 50)) - def POST_search_reddit_names(self, responder, query): + @json_validate(query=VPrintable('query', max_length=50), + include_over_18=VBoolean('include_over_18', default=True)) + def POST_search_reddit_names(self, responder, query, include_over_18): names = [] if query: - names = search_reddits(query) + names = search_reddits(query, include_over_18) return {'names': names} diff --git a/r2/r2/lib/pages/pages.py b/r2/r2/lib/pages/pages.py index 85085be9b..f17e5fcd5 100755 --- a/r2/r2/lib/pages/pages.py +++ b/r2/r2/lib/pages/pages.py @@ -2233,7 +2233,7 @@ class NewLink(Templated): self.formtabs_menu = JsNavMenu(buttons, type = 'formtab') - self.sr_searches = simplejson.dumps(popular_searches()) + self.sr_searches = simplejson.dumps(popular_searches(include_over_18=c.over18)) self.resubmit = resubmit if c.default_sr: diff --git a/r2/r2/lib/subreddit_search.py b/r2/r2/lib/subreddit_search.py index 9ae905295..7139543ab 100644 --- a/r2/r2/lib/subreddit_search.py +++ b/r2/r2/lib/subreddit_search.py @@ -46,32 +46,35 @@ def load_all_reddits(): prefix = name[:i + 1] names = query_cache.setdefault(prefix, []) if len(names) < 10: - names.append(sr.name) + names.append((sr.name, sr.over_18)) for name_prefix, subreddits in query_cache.iteritems(): - SubredditsByPartialName._set_values(name_prefix, {'srs': subreddits}) + SubredditsByPartialName._set_values(name_prefix, {'tups': subreddits}) -def search_reddits(query): +def search_reddits(query, include_over_18=True): query = str(query.lower()) try: result = SubredditsByPartialName._byID(query) - return result.srs + return [name for (name, over_18) in getattr(result, 'tups', []) + if not over_18 or include_over_18] except tdb_cassandra.NotFound: return [] @memoize('popular_searches', time = 3600) -def popular_searches(): +def popular_searches(include_over_18=True): top_reddits = Subreddit._query(Subreddit.c.type == 'public', sort = desc('_downs'), limit = 100, data = True) top_searches = {} for sr in top_reddits: + if sr.over_18 and not include_over_18: + continue name = sr.name.lower() for i in xrange(min(len(name), 3)): query = name[:i + 1] - r = search_reddits(query) + r = search_reddits(query, include_over_18) top_searches[query] = r return top_searches diff --git a/r2/r2/lib/template_helpers.py b/r2/r2/lib/template_helpers.py index 7e383880e..65c0acafe 100755 --- a/r2/r2/lib/template_helpers.py +++ b/r2/r2/lib/template_helpers.py @@ -148,6 +148,7 @@ def js_config(extra_config=None): "clicktracker_url": g.clicktracker_url, "uitracker_url": g.uitracker_url, "static_root": static(''), + "over_18": bool(c.over18), } if extra_config: diff --git a/r2/r2/public/static/js/reddit.js b/r2/r2/public/static/js/reddit.js index d6be60038..a6f7a07ea 100644 --- a/r2/r2/public/static/js/reddit.js +++ b/r2/r2/public/static/js/reddit.js @@ -638,7 +638,7 @@ function sr_search(query) { query = query.toLowerCase(); var cache = sr_cache(); if (!cache[query]) { - $.request('search_reddit_names.json', {query: query}, + $.request('search_reddit_names.json', {query: query, include_over_18: r.config.over_18}, function (r) { cache[query] = r['names']; update_dropdown(r['names']);