mirror of
https://github.com/reddit-archive/reddit.git
synced 2026-01-28 00:07:57 -05:00
Exclude reserved inventory for current campaign from inventory check.
This commit is contained in:
@@ -547,8 +547,9 @@ class PromoteController(ListingController):
|
||||
ndays = (to_date(end) - to_date(start)).days
|
||||
total_request = calc_impressions(bid, cpm)
|
||||
daily_request = int(total_request / ndays)
|
||||
ignore = [campaign._id] if campaign_id36 else []
|
||||
oversold = inventory.get_oversold(sr or Frontpage, start, end,
|
||||
daily_request)
|
||||
daily_request, ignore)
|
||||
if oversold:
|
||||
msg_params = {'daily_request': format_number(daily_request,
|
||||
locale=c.locale)}
|
||||
|
||||
@@ -94,10 +94,11 @@ def get_date_range(start, end):
|
||||
return dates
|
||||
|
||||
|
||||
def get_sold_pageviews(srs, start, end):
|
||||
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)))
|
||||
@@ -109,6 +110,9 @@ def get_sold_pageviews(srs, start, end):
|
||||
if camp.trans_id == NO_TRANSACTION:
|
||||
continue
|
||||
|
||||
if ignore and camp._id in ignore:
|
||||
continue
|
||||
|
||||
if camp.impressions <= 0:
|
||||
# pre-CPM campaign
|
||||
continue
|
||||
@@ -125,11 +129,12 @@ def get_sold_pageviews(srs, start, end):
|
||||
return ret
|
||||
|
||||
|
||||
def get_available_pageviews(srs, start, end, datestr=False):
|
||||
def get_available_pageviews(srs, start, end, datestr=False,
|
||||
ignore=None):
|
||||
srs, is_single = tup(srs, ret_is_single=True)
|
||||
sr_names = [sr.name for sr in srs]
|
||||
daily_inventory = PromoMetrics.get(MIN_DAILY_CASS_KEY, sr_names=sr_names)
|
||||
sold_by_sr_by_date = get_sold_pageviews(srs, start, end)
|
||||
sold_by_sr_by_date = get_sold_pageviews(srs, start, end, ignore)
|
||||
|
||||
datekey = lambda dt: dt.strftime('%m/%d/%Y') if datestr else dt
|
||||
|
||||
@@ -148,8 +153,9 @@ def get_available_pageviews(srs, start, end, datestr=False):
|
||||
return ret
|
||||
|
||||
|
||||
def get_oversold(sr, start, end, daily_request):
|
||||
available_by_date = get_available_pageviews(sr, start, end, datestr=True)
|
||||
def get_oversold(sr, start, end, daily_request, ignore):
|
||||
available_by_date = get_available_pageviews(sr, start, end, datestr=True,
|
||||
ignore=ignore)
|
||||
oversold = {}
|
||||
for datestr, available in available_by_date.iteritems():
|
||||
if available < daily_request:
|
||||
|
||||
@@ -3363,6 +3363,14 @@ class PromoteLinkForm(Templated):
|
||||
|
||||
self.subreddit_selector = SubredditSelector()
|
||||
|
||||
self.link = promote.wrap_promoted(link)
|
||||
self.listing = listing
|
||||
campaigns = PromoCampaign._by_link(link._id)
|
||||
self.campaigns = promote.get_renderable_campaigns(link, campaigns)
|
||||
self.promotion_log = PromotionLog.get(link)
|
||||
|
||||
self.min_bid = 0 if c.user_is_sponsor else g.min_promote_bid
|
||||
|
||||
# preload some inventory
|
||||
srnames = []
|
||||
for title, names in self.subreddit_selector.subreddit_names:
|
||||
@@ -3371,20 +3379,14 @@ class PromoteLinkForm(Templated):
|
||||
srs.append(Frontpage)
|
||||
inv_start = startdate
|
||||
inv_end = startdate + datetime.timedelta(days=14)
|
||||
ignore = [camp._id for camp in campaigns]
|
||||
sr_inventory = inventory.get_available_pageviews(srs, inv_start,
|
||||
inv_end, datestr=True)
|
||||
inv_end, datestr=True,
|
||||
ignore=ignore)
|
||||
sr_inventory[''] = sr_inventory[Frontpage.name]
|
||||
del sr_inventory[Frontpage.name]
|
||||
self.inventory = sr_inventory
|
||||
|
||||
self.link = promote.wrap_promoted(link)
|
||||
self.listing = listing
|
||||
campaigns = PromoCampaign._by_link(link._id)
|
||||
self.campaigns = promote.get_renderable_campaigns(link, campaigns)
|
||||
self.promotion_log = PromotionLog.get(link)
|
||||
|
||||
self.min_bid = 0 if c.user_is_sponsor else g.min_promote_bid
|
||||
|
||||
|
||||
class PromoAdminTool(Reddit):
|
||||
def __init__(self, query_type=None, launchdate=None, start=None, end=None, *a, **kw):
|
||||
|
||||
Reference in New Issue
Block a user