本文整理汇总了Python中r2.models.PromoCampaign._by_link方法的典型用法代码示例。如果您正苦于以下问题:Python PromoCampaign._by_link方法的具体用法?Python PromoCampaign._by_link怎么用?Python PromoCampaign._by_link使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类r2.models.PromoCampaign
的用法示例。
在下文中一共展示了PromoCampaign._by_link方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: make_campaign_table
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def make_campaign_table(self):
campaigns = PromoCampaign._by_link(self.thing._id)
total_budget = 0
total_spent = 0
total_paid_impressions = 0
total_impressions = 0
total_clicks = 0
self.campaign_table = []
for camp in campaigns:
if not is_launched_campaign(camp):
continue
is_live = camp.is_live_now()
self.has_early_campaign |= is_early_campaign(camp)
self.has_live_campaign |= is_live
history = get_billable_traffic(camp)
impressions, clicks = 0, 0
for date, (imp, click) in history:
impressions += imp
clicks += click
start = to_date(camp.start_date).strftime('%Y-%m-%d')
end = to_date(camp.end_date).strftime('%Y-%m-%d')
target = camp.target.pretty_name
location = camp.location_str
spent = promote.get_spent_amount(camp)
is_active = self.campaign and self.campaign._id36 == camp._id36
url = '/traffic/%s/%s' % (self.thing._id36, camp._id36)
is_total = False
row = self.make_campaign_table_row(camp._id36, start, end, target,
location, camp.bid, spent,
camp.impressions,
impressions, clicks, is_live,
is_active, url, is_total)
self.campaign_table.append(row)
total_budget += camp.bid
total_spent += spent
total_paid_impressions += camp.impressions
total_impressions += impressions
total_clicks += clicks
# total row
start = '---'
end = '---'
target = '---'
location = '---'
is_live = False
is_active = not self.campaign
url = '/traffic/%s' % self.thing._id36
is_total = True
row = self.make_campaign_table_row(_('total'), start, end, target,
location, total_budget, total_spent,
total_paid_impressions, total_impressions,
total_clicks, is_live, is_active, url,
is_total)
self.campaign_table.append(row)
示例2: accept_promotion
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def accept_promotion(link):
was_edited_live = is_edited_live(link)
update_promote_status(link, PROMOTE_STATUS.accepted)
if link._spam:
link._spam = False
link._commit()
if not was_edited_live:
emailer.accept_promo(link)
# if the link has campaigns running now charge them and promote the link
now = promo_datetime_now()
campaigns = list(PromoCampaign._by_link(link._id))
is_live = False
for camp in campaigns:
if is_accepted_promo(now, link, camp):
# if link was edited live, do not check against Authorize.net
if not was_edited_live:
charge_campaign(link, camp)
if charged_or_not_needed(camp):
promote_link(link, camp)
is_live = True
if is_live:
all_live_promo_srnames(_update=True)
示例3: get_total_run
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def get_total_run(thing):
"""Return the total time span this link or campaign will run.
Starts at the start date of the earliest campaign and goes to the end date
of the latest campaign.
"""
if isinstance(thing, Link):
campaigns = PromoCampaign._by_link(thing._id)
elif isinstance(thing, PromoCampaign):
campaigns = [thing]
earliest = None
latest = None
for campaign in campaigns:
if not charged_or_not_needed(campaign):
continue
if not earliest or campaign.start_date < earliest:
earliest = campaign.start_date
if not latest or campaign.end_date > latest:
latest = campaign.end_date
# a manually launched promo (e.g., sr discovery) might not have campaigns.
if not earliest or not latest:
latest = datetime.utcnow()
earliest = latest - timedelta(days=30) # last month
# ugh this stuff is a mess. they're stored as "UTC" but actually mean UTC-5.
earliest = earliest.replace(tzinfo=g.tz) - timezone_offset
latest = latest.replace(tzinfo=g.tz) - timezone_offset
return earliest, latest
示例4: _use_adserver_reporting
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def _use_adserver_reporting(thing):
if not feature.is_enabled("adserver_reporting"):
return False
if not g.adserver_reporting_cutoff:
return False
try:
cutoff = parse_date(g.adserver_reporting_cutoff)
except ValueError:
return False
if isinstance(thing, PromoCampaign):
link = Link._byID(thing.link_id)
else:
link = thing
campaigns = list(PromoCampaign._by_link(link._id))
# No campaigns, so nothing to report. Show the new
# view anyway.
if not campaigns:
return True
end_date = max(campaign.end_date for campaign in campaigns)
end_date = end_date.replace(tzinfo=g.tz)
cutoff = cutoff.replace(tzinfo=g.tz)
if end_date < cutoff:
return False
return not feature.is_enabled("legacy_ad_reporting")
示例5: get_total_run
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def get_total_run(link):
"""Return the total time span this promotion has run for.
Starts at the start date of the earliest campaign and goes to the end date
of the latest campaign.
"""
campaigns = PromoCampaign._by_link(link._id)
earliest = None
latest = None
for campaign in campaigns:
if not campaign.trans_id:
continue
if not earliest or campaign.start_date < earliest:
earliest = campaign.start_date
if not latest or campaign.end_date > latest:
latest = campaign.end_date
# a manually launched promo (e.g., sr discovery) might not have campaigns.
if not earliest or not latest:
latest = datetime.utcnow()
earliest = latest - timedelta(days=30) # last month
# ugh this stuff is a mess. they're stored as "UTC" but actually mean UTC-5.
earliest = earliest.replace(tzinfo=None) - timezone_offset
latest = latest.replace(tzinfo=None) - timezone_offset
return earliest, latest
示例6: terminate_campaign
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def terminate_campaign(link, campaign):
if not is_live_promo(link, campaign):
return
now = promo_datetime_now()
original_end = campaign.end_date
dates = [campaign.start_date, now]
# NOTE: this will delete PromotionWeights after and including now.date()
edit_campaign(
link=link,
campaign=campaign,
dates=dates,
target=campaign.target,
frequency_cap=campaign.frequency_cap,
priority=campaign.priority,
location=campaign.location,
total_budget_pennies=campaign.total_budget_pennies,
cost_basis=campaign.cost_basis,
bid_pennies=campaign.bid_pennies,
)
campaigns = list(PromoCampaign._by_link(link._id))
is_live = any(is_live_promo(link, camp) for camp in campaigns
if camp._id != campaign._id)
if not is_live:
update_promote_status(link, PROMOTE_STATUS.finished)
all_live_promo_srnames(_update=True)
msg = 'terminated campaign %s (original end %s)' % (campaign._id,
original_end.date())
PromotionLog.add(link, msg)
示例7: __init__
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def __init__(self, link):
self.thing = link
self.edit_url = promote.promo_edit_url(link)
self.is_preliminary = False
campaigns = PromoCampaign._by_link(link._id)
camps = {}
fullnames = []
for campaign in campaigns:
campaign.imps = 0
campaign.clicks = 0
self.is_preliminary |= _is_promo_preliminary(campaign.end_date)
camps[campaign._fullname] = campaign
fullnames.append(campaign._fullname)
click_data = traffic.TargetedClickthroughsByCodename.total_by_codename(
fullnames)
for fullname, clicks in click_data:
camps[fullname].clicks = clicks
imp_data = traffic.TargetedImpressionsByCodename.total_by_codename(
fullnames)
for fullname, imps in imp_data:
camps[fullname].imps = imps
self.campaigns = camps.values()
self.total_clicks = self.total_imps = self.total_spend = 0
for camp in self.campaigns:
self.total_clicks += camp.clicks
self.total_imps += camp.imps
self.total_spend += camp.bid
camp.ctr = _clickthrough_rate(camp.imps, camp.clicks)
camp.cpc = cost_per_click(camp.bid, camp.clicks)
camp.cpm = cost_per_mille(camp.bid, camp.imps)
self.total_ctr = _clickthrough_rate(self.total_imps, self.total_clicks)
self.total_cpc = cost_per_click(self.total_spend, self.total_clicks)
self.total_cpm = cost_per_mille(self.total_spend, self.total_imps)
Templated.__init__(self)
示例8: edit_promotion
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def edit_promotion(link):
if (not promote.is_external(link) and
not list(PromoCampaign._by_link(link._id))):
g.log.debug("no campaigns for link, skipping %s" % link._id)
return
update_adzerk(link)
示例9: accept_promotion
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def accept_promotion(link):
"""
Accepting is campaign agnostic. Accepting the ad just means that
it is allowed to run if payment has been processed.
If a campagn is able to run, this also requeues it.
"""
# update the query queue
set_promote_status(link, PROMOTE_STATUS.accepted)
# campaigns that should be live now must be updated
now = promo_datetime_now(0)
promotion_weights = PromotionWeights.get_campaigns(now)
live_campaigns = {pw.promo_idx for pw in promotion_weights if pw.thing_name == link._fullname}
if live_campaigns:
campaigns = PromoCampaign._byID(live_campaigns, data=True, return_dict=False)
PromotionLog.add(link, "has live campaigns, forcing live")
charge_pending(0) # campaign must be charged before it will go live
for campaign in campaigns:
hooks.get_hook("campaign.edit").call(link=link, campaign=campaign)
queue_changed_promo(link, "accepted")
# campaigns that were charged and will go live in the future must be updated
future_campaigns = [camp for camp in PromoCampaign._by_link(link._id) if camp.start_date > now]
transactions = get_transactions(link, future_campaigns)
charged_campaigns = [
camp for camp in future_campaigns if (transactions.get(camp._id) and transactions.get(camp._id).is_charged())
]
for campaign in charged_campaigns:
hooks.get_hook("campaign.edit").call(link=link, campaign=campaign)
if link._spam:
link._spam = False
link._commit()
emailer.accept_promo(link)
示例10: accept_promotion
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def accept_promotion(link):
"""
Accepting is campaign agnostic. Accepting the ad just means that
it is allowed to run if payment has been processed.
If a campagn is able to run, this also requeues it.
"""
PromotionLog.add(link, 'status update: accepted')
# update the query queue
set_promote_status(link, PROMOTE_STATUS.accepted)
# campaigns that should be live now must be updated
now = promo_datetime_now(0)
if link._fullname in set(l.thing_name for l in
PromotionWeights.get_campaigns(now)):
PromotionLog.add(link, 'Marked promotion for acceptance')
charge_pending(0) # campaign must be charged before it will go live
queue_changed_promo(link, "accepted")
# campaigns that were charged and will go live in the future must be updated
future_campaigns = [camp for camp in PromoCampaign._by_link(link._id)
if camp.start_date > now]
transactions = get_transactions(link, future_campaigns)
charged_campaigns = [camp for camp in future_campaigns
if (transactions.get(camp._id) and
transactions.get(camp._id).is_charged())]
for campaign in charged_campaigns:
hooks.get_hook('campaign.edit').call(link=link, campaign=campaign)
if link._spam:
link._spam = False
link._commit()
emailer.accept_promo(link)
示例11: get_total_budget
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def get_total_budget(cls, thing):
if isinstance(thing, Link):
campaigns = PromoCampaign._by_link(thing._id)
else:
campaigns = [thing]
total_budget_pennies = sum(map(lambda camp: camp.total_budget_pennies, campaigns))
return total_budget_pennies / 100.
示例12: keep
# 需要导入模块: from r2.models import PromoCampaign [as 别名]
# 或者: from r2.models.PromoCampaign import _by_link [as 别名]
def keep(item):
if self.sort == "future_promos":
# this sort is used to review links that need to be approved
# skip links that don't have any paid campaigns
campaigns = list(PromoCampaign._by_link(item._id))
if not any(promote.authed_or_not_needed(camp) for camp in campaigns):
return False
if item.promoted and not item._deleted:
return True
else:
return False