diff --git a/r2/r2/controllers/listingcontroller.py b/r2/r2/controllers/listingcontroller.py index f731b447a..41929f0b8 100644 --- a/r2/r2/controllers/listingcontroller.py +++ b/r2/r2/controllers/listingcontroller.py @@ -32,6 +32,7 @@ from r2.lib.recommendation import get_recommended from r2.lib.db.thing import Query from r2.lib.strings import Score from r2.lib import organic +from r2.lib.utils import iters from pylons.i18n import _ @@ -108,7 +109,7 @@ class ListingController(RedditController): builder_cls = self.builder_cls elif isinstance(self.query_obj, Query): builder_cls = QueryBuilder - elif isinstance(self.query_obj, list): + elif isinstance(self.query_obj, iters): builder_cls = IDBuilder b = builder_cls(self.query_obj, diff --git a/r2/r2/models/subreddit.py b/r2/r2/models/subreddit.py index 9c59418cc..64c1e32c1 100644 --- a/r2/r2/models/subreddit.py +++ b/r2/r2/models/subreddit.py @@ -398,24 +398,31 @@ class DefaultSR(FakeSubreddit): subreddits = Subreddit.user_subreddits(user) return (self.c.sr_id == subreddits,) - def get_links_srs(self, srs, sort, time): + def get_links_sr_ids(self, sr_ids, sort, time): from r2.lib.db import queries from r2.models import Link + + if not sr_ids: + return [] + else: + srs = Subreddit._byID(sr_ids, return_dict = False) + if g.use_query_cache: results = [] for sr in srs: results.append(queries.get_links(sr, sort, time)) return queries.merge_results(*results) else: - q = Link._query(sort = queries.db_sort(sort)) + q = Link._query(Link.c.sr_id == sr_ids, + sort = queries.db_sort(sort)) if time != 'all': q._filter(queries.db_times[time]) return q def get_links(self, sort, time): user = c.user if c.user_is_loggedin else None - srs = Subreddit._byID(Subreddit.user_subreddits(user), return_dict = False) - return self.get_links_srs(srs, sort, time) + sr_ids = Subreddit.user_subreddits(user) + return self.get_links_sr_ids(sr_ids, sort, time) @property def title(self): @@ -450,8 +457,7 @@ class MaskedSR(DefaultSR): sr_ids = Subreddit.user_subreddits(user) sr_ids = [s for s in sr_ids if s not in self.hide_sr] sr_ids.extend(self.show_sr) - srs = Subreddit._byID(sr_ids, return_dict = False) - return self.get_links_srs(srs, sort, time) + return self.get_links_sr_ids(sr_ids, sort, time) class SubSR(FakeSubreddit):