diff --git a/r2/r2/controllers/reddit_base.py b/r2/r2/controllers/reddit_base.py index 387eed3ce..ef53d1726 100644 --- a/r2/r2/controllers/reddit_base.py +++ b/r2/r2/controllers/reddit_base.py @@ -325,20 +325,19 @@ def set_subreddit(): c.site = Sub elif '+' in sr_name: sr_names = sr_name.split('+') - srs = set(Subreddit._by_name(sr_names, stale=can_stale).values()) + srs = Subreddit._by_name(sr_names, stale=can_stale).values() if All in srs: c.site = All elif Friends in srs: c.site = Friends else: srs = [sr for sr in srs if not isinstance(sr, FakeSubreddit)] - if len(srs) == 0: + if not srs: c.site = MultiReddit([], sr_name) elif len(srs) == 1: - c.site = srs.pop() + c.site = srs[0] else: - sr_ids = [sr._id for sr in srs] - c.site = MultiReddit(sr_ids, sr_name) + c.site = MultiReddit(srs, sr_name) elif '-' in sr_name: sr_names = sr_name.split('-') if not sr_names[0].lower() == All.name.lower(): diff --git a/r2/r2/models/subreddit.py b/r2/r2/models/subreddit.py index c662c8b80..84547af63 100644 --- a/r2/r2/models/subreddit.py +++ b/r2/r2/models/subreddit.py @@ -1105,19 +1105,13 @@ class MultiReddit(_DefaultSR): name = 'multi' header = "" - def __init__(self, sr_ids, path): + def __init__(self, srs, path): _DefaultSR.__init__(self) self.real_path = path - self.sr_ids = sr_ids - - self.srs = Subreddit._byID(self.sr_ids, return_dict=False) - self.banned_sr_ids = [] - self.kept_sr_ids = [] - for sr in self.srs: - if sr._spam: - self.banned_sr_ids.append(sr._id) - else: - self.kept_sr_ids.append(sr._id) + self.srs = srs + self.sr_ids = [sr._id for sr in srs] + self.banned_sr_ids = [sr._id for sr in srs if sr._spam] + self.kept_sr_ids = [sr._id for sr in srs if not sr._spam] def is_moderator(self, user): if not user: @@ -1164,7 +1158,8 @@ class ModContribSR(MultiReddit): real_path = None def __init__(self): - MultiReddit.__init__(self, self.sr_ids, self.real_path) + # Can't lookup srs right now, c.user not set + MultiReddit.__init__(self, [], self.real_path) @property def sr_ids(self): @@ -1173,9 +1168,17 @@ class ModContribSR(MultiReddit): else: return [] + @property + def srs(self): + return Subreddit._byID(self.sr_ids, data=True, return_dict=False) + @property def kept_sr_ids(self): - return self.sr_ids + return [sr._id for sr in self.srs if not sr._spam] + + @property + def banned_sr_ids(self): + return [sr._id for sr in self.srs if sr._spam] class ModSR(ModContribSR): name = "subreddits you moderate"