def get_sold_pageviews(srs, start, end, ignore=None): srs, is_single = tup(srs, ret_is_single=True) sr_names = ['' if isinstance(sr, DefaultSR) else sr.name for sr in srs] dates = set(get_date_range(start, end)) ignore = [] if ignore is None else ignore q = (PromotionWeights.query() .filter(PromotionWeights.sr_name.in_(sr_names)) .filter(PromotionWeights.date.in_(dates))) campaign_ids = {pw.promo_idx for pw in q} campaigns = PromoCampaign._byID(campaign_ids, data=True, return_dict=False) ret = {sr.name: dict.fromkeys(dates, 0) for sr in srs} for camp in campaigns: if camp.trans_id == NO_TRANSACTION: continue if ignore and camp._id in ignore: continue if camp.impressions <= 0: # pre-CPM campaign continue sr_name = camp.sr_name or DefaultSR.name daily_impressions = camp.impressions / camp.ndays camp_dates = set(get_date_range(camp.start_date, camp.end_date)) for date in camp_dates.intersection(dates): ret[sr_name][date] += daily_impressions if is_single: return ret[srs[0].name] else: return ret
def get_sold_pageviews(srs, start, end, ignore=None): srs, is_single = tup(srs, ret_is_single=True) sr_names = ['' if isinstance(sr, DefaultSR) else sr.name for sr in srs] dates = set(get_date_range(start, end)) ignore = [] if ignore is None else ignore q = (PromotionWeights.query().filter( PromotionWeights.sr_name.in_(sr_names)).filter( PromotionWeights.date.in_(dates))) campaign_ids = {pw.promo_idx for pw in q} campaigns = PromoCampaign._byID(campaign_ids, data=True, return_dict=False) ret = {sr.name: dict.fromkeys(dates, 0) for sr in srs} for camp in campaigns: if camp.trans_id == NO_TRANSACTION: continue if ignore and camp._id in ignore: continue if camp.impressions <= 0: # pre-CPM campaign continue sr_name = camp.sr_name or DefaultSR.name daily_impressions = camp.impressions / camp.ndays camp_dates = set(get_date_range(camp.start_date, camp.end_date)) for date in camp_dates.intersection(dates): ret[sr_name][date] += daily_impressions if is_single: return ret[srs[0].name] else: return ret
def get_campaigns_by_date(srs, start, end, ignore=None): srs, is_single = tup(srs, ret_is_single=True) sr_names = ['' if isinstance(sr, DefaultSR) else sr.name for sr in srs] dates = set(get_date_range(start, end)) q = (PromotionWeights.query().filter( PromotionWeights.sr_name.in_(sr_names)).filter( PromotionWeights.date.in_(dates))) if ignore: q = q.filter(PromotionWeights.promo_idx != ignore._id) campaign_ids = {pw.promo_idx for pw in q} campaigns = PromoCampaign._byID(campaign_ids, data=True, return_dict=False) transaction_ids = { camp.trans_id for camp in campaigns if camp.trans_id != NO_TRANSACTION } if transaction_ids: transactions = Bid.query().filter(Bid.transaction.in_(transaction_ids)) transaction_by_id = {bid.transaction: bid for bid in transactions} else: transaction_by_id = {} ret = {sr.name: dict.fromkeys(dates) for sr in srs} for srname, date_dict in ret.iteritems(): for date in date_dict: ret[srname][date] = [] for camp in campaigns: if camp.trans_id == NO_TRANSACTION: continue if camp.impressions <= 0: # pre-CPM campaign continue transaction = transaction_by_id[camp.trans_id] if not (transaction.is_auth() or transaction.is_charged()): continue sr_name = camp.sr_name or DefaultSR.name camp_dates = set(get_date_range(camp.start_date, camp.end_date)) for date in camp_dates.intersection(dates): ret[sr_name][date].append(camp) if is_single: return ret[srs[0].name] else: return ret
def get_campaigns_by_date(srs, start, end, ignore=None): srs, is_single = tup(srs, ret_is_single=True) sr_names = ['' if isinstance(sr, DefaultSR) else sr.name for sr in srs] dates = set(get_date_range(start, end)) q = (PromotionWeights.query() .filter(PromotionWeights.sr_name.in_(sr_names)) .filter(PromotionWeights.date.in_(dates))) if ignore: q = q.filter(PromotionWeights.promo_idx != ignore._id) campaign_ids = {pw.promo_idx for pw in q} campaigns = PromoCampaign._byID(campaign_ids, data=True, return_dict=False) transaction_ids = {camp.trans_id for camp in campaigns if camp.trans_id != NO_TRANSACTION} if transaction_ids: transactions = Bid.query().filter(Bid.transaction.in_(transaction_ids)) transaction_by_id = {bid.transaction: bid for bid in transactions} else: transaction_by_id = {} ret = {sr.name: dict.fromkeys(dates) for sr in srs} for srname, date_dict in ret.iteritems(): for date in date_dict: ret[srname][date] = [] for camp in campaigns: if camp.trans_id == NO_TRANSACTION: continue if camp.impressions <= 0: # pre-CPM campaign continue transaction = transaction_by_id[camp.trans_id] if not (transaction.is_auth() or transaction.is_charged()): continue sr_names = camp.target.subreddit_names camp_dates = set(get_date_range(camp.start_date, camp.end_date)) for date in camp_dates.intersection(dates): for sr_name in sr_names: ret[sr_name][date].append(camp) if is_single: return ret[srs[0].name] else: return ret