From c5259c882e2069faad32bdf7cc0c47e5b2c9f9b3 Mon Sep 17 00:00:00 2001 From: shlurbee Date: Fri, 8 Jun 2012 12:36:10 -0700 Subject: [PATCH] Error handling in promotion summary Logs error instead of failing if campaign from PromotionWeights table doesn't exist on link. --- r2/r2/lib/pages/pages.py | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/r2/r2/lib/pages/pages.py b/r2/r2/lib/pages/pages.py index 7c3327e05..fa55d71af 100755 --- a/r2/r2/lib/pages/pages.py +++ b/r2/r2/lib/pages/pages.py @@ -3516,30 +3516,34 @@ class Promotion_Summary(Templated): def __init__(self, ndays): end_date = promote.promo_datetime_now().date() start_date = promote.promo_datetime_now(offset = -ndays).date() - links = set() authors = {} author_score = {} self.total = 0 for link, indx, s, e in Promote_Graph.get_current_promos(start_date, end_date): - sd, ed, bid, sr, trans_id = link.campaigns[indx] - if trans_id > 0: #ignore freebies - links.add(link) - link.bid = getattr(link, "bid", 0) + bid - link.ncampaigns = getattr(link, "ncampaigns", 0) + 1 + campaigns = getattr(link, 'campaigns', {}) + if indx in campaigns: + sd, ed, bid, sr, trans_id = link.campaigns[indx] + if trans_id > 0: #ignore freebies + links.add(link) + link.bid = getattr(link, "bid", 0) + bid + link.ncampaigns = getattr(link, "ncampaigns", 0) + 1 - bid_per_day = bid / (ed - sd).days - if isinstance(sd, datetime.datetime): - sd = sd.date() - if isinstance(ed, datetime.datetime): - ed = ed.date() - sd = max(sd, start_date) - ed = min(ed, end_date) + bid_per_day = bid / (ed - sd).days + if isinstance(sd, datetime.datetime): + sd = sd.date() + if isinstance(ed, datetime.datetime): + ed = ed.date() + sd = max(sd, start_date) + ed = min(ed, end_date) - self.total += bid_per_day * (ed - sd).days + self.total += bid_per_day * (ed - sd).days - authors.setdefault(link.author.name, []).append(link) - author_score[link.author.name] = author_score.get(link.author.name,0) + link._score + authors.setdefault(link.author.name, []).append(link) + author_score[link.author.name] = author_score.get(link.author.name,0) + link._score + else: # indx not found in campaigns. bad data? + g.log.error("Missing campaign (link: %d, indx: %d) omitted " + "from promotion summary" % (link._id, indx)) links = list(links) links.sort(key = lambda x: x._score, reverse = True)