def set_live_promotions(links, weights, which=("cass", "permacache")): if "permacache" in which: timer = g.stats.get_timer("promote.set_live.permacache") timer.start() g.permacache.set(promotion_key(), (links, weights)) timer.stop() if "cass" in which: timer = g.stats.get_timer("promote.set_live.cass") timer.start() # First, figure out which subreddits have had ads recently today = promo_datetime_now() yesterday = today - timedelta(days=1) tomorrow = today + timedelta(days=1) promo_weights = PromotionWeights.get_campaigns(yesterday, tomorrow) subreddit_names = set(p.sr_name for p in promo_weights) subreddits = Subreddit._by_name(subreddit_names).values() # Set the default for those subreddits to no ads all_weights = {sr._id: [] for sr in subreddits} # Mix in the currently live ads all_weights.update(weights) if '' in all_weights: all_weights[LiveAdWeights.FRONT_PAGE] = all_weights.pop('') LiveAdWeights.set_all_from_weights(all_weights) timer.stop()
def get_live_promotions(srids, from_permacache=True): if not from_permacache: timer = g.stats.get_timer("promote.get_live.cass") timer.start() links = set() weights = LiveAdWeights.get(srids) for promos in weights.itervalues(): links.update(link_fn for link_fn, weight, campaign_fn in promos) timer.stop() else: timer = g.stats.get_timer("promote.get_live.permacache") timer.start() links, weights = g.permacache.get(promotion_key()) or (set(), {}) timer.stop() return links, weights