本文整理汇总了Python中r2.models.PromotionLog类的典型用法代码示例。如果您正苦于以下问题:Python PromotionLog类的具体用法?Python PromotionLog怎么用?Python PromotionLog使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PromotionLog类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: create_cfmap
def create_cfmap(link, campaign, az_campaign, az_creative, az_flight):
"""Create a CreativeFlightMap.
Map the the reddit link (adzerk Creative) and reddit campaign (adzerk
Flight).
"""
if getattr(campaign, 'adzerk_cfmap_id', None) is not None:
raise AttributeError('%s has existing adzerk_cfmap_id' % campaign)
d = {
'SizeOverride': False,
'CampaignId': az_campaign.Id,
'PublisherAccountId': g.az_selfserve_advertiser_id,
'Percentage': 100, # Each flight only has one creative (what about autobalanced)
'DistributionType': 2, # 2: Percentage, 1: Auto-Balanced, 0: ???
'Iframe': False,
'Creative': {'Id': az_creative.Id},
'FlightId': az_flight.Id,
'Impressions': 100, # Percentage
'IsDeleted': False,
'IsActive': True,
}
az_cfmap = adzerk_api.CreativeFlightMap.create(az_flight.Id, **d)
campaign.adzerk_cfmap_id = az_cfmap.Id
campaign._commit()
log_text = 'created %s' % az_cfmap
PromotionLog.add(link, log_text)
g.log.info(log_text)
return az_cfmap
示例2: accept_promotion
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)
示例3: terminate_campaign
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)
示例4: refund_campaign
def refund_campaign(link, camp, refund_amount, billable_amount,
billable_impressions):
owner = Account._byID(camp.owner_id, data=True)
success, reason = authorize.refund_transaction(
owner, camp.trans_id, camp._id, refund_amount)
if not success:
text = ('%s $%s refund failed' % (camp, refund_amount))
PromotionLog.add(link, text)
g.log.debug(text + ' (reason: %s)' % reason)
return False
if billable_impressions:
text = ('%s completed with $%s billable (%s impressions @ $%s).'
' %s refunded.' % (camp, billable_amount,
billable_impressions,
camp.bid_pennies / 100.,
refund_amount))
else:
text = ('%s completed with $%s billable. %s refunded' % (camp,
billable_amount, refund_amount))
PromotionLog.add(link, text)
camp.refund_amount = refund_amount
camp._commit()
queries.unset_underdelivered_campaigns(camp)
emailer.refunded_promo(link)
return True
示例5: new_promotion
def new_promotion(title, url, selftext, user, ip):
"""
Creates a new promotion with the provided title, etc, and sets it
status to be 'unpaid'.
"""
sr = Subreddit._byID(get_promote_srid())
l = Link._submit(title, url, user, sr, ip)
l.promoted = True
l.disable_comments = False
PromotionLog.add(l, "promotion created")
if url == "self":
l.url = l.make_permalink_slow()
l.is_self = True
l.selftext = selftext
l._commit()
update_promote_status(l, PROMOTE_STATUS.unpaid)
# the user has posted a promotion, so enable the promote menu unless
# they have already opted out
if user.pref_show_promote is not False:
user.pref_show_promote = True
user._commit()
# notify of new promo
emailer.new_promo(l)
return l
示例6: _deactivate_overdelivered
def _deactivate_overdelivered(link, campaign):
with g.make_lock('adzerk_update', 'adzerk-' + link._fullname):
msg = '%s deactivating adzerk flight for %s - %s'
g.log.info(msg % (datetime.datetime.now(g.tz), link, campaign))
az_flight = update_flight(link, campaign)
PromotionLog.add(link, 'deactivated %s' % az_flight)
示例7: edit_campaign
def edit_campaign(link, campaign, dates, bid, cpm, sr, priority):
sr_name = sr.name if sr else '' # empty string means target to all
# if the bid amount changed, cancel any pending transactions
if campaign.bid != bid:
void_campaign(link, campaign)
# update the schedule
PromotionWeights.reschedule(link, campaign._id, sr_name,
dates[0], dates[1], bid)
# update values in the db
campaign.update(dates[0], dates[1], bid, cpm, sr_name,
campaign.trans_id, priority, commit=True)
if campaign.priority.cpm:
# record the transaction
text = 'updated campaign %s. (bid: %0.2f)' % (campaign._id, bid)
PromotionLog.add(link, text)
# make it a freebie, if applicable
author = Account._byID(link.author_id, True)
if getattr(author, "complimentary_promos", False):
free_campaign(link, campaign, c.user)
hooks.get_hook('promote.edit_campaign').call(link=link, campaign=campaign)
示例8: charge_campaign
def charge_campaign(link, campaign):
if charged_or_not_needed(campaign):
return
user = Account._byID(link.author_id)
success, reason = authorize.charge_transaction(user, campaign.trans_id,
campaign._id)
if not success:
if reason == authorize.TRANSACTION_NOT_FOUND:
# authorization hold has expired
original_trans_id = campaign.trans_id
campaign.trans_id = NO_TRANSACTION
campaign._commit()
text = ('voided expired transaction for %s: (trans_id: %d)'
% (campaign, original_trans_id))
PromotionLog.add(link, text)
return
hooks.get_hook('promote.edit_campaign').call(link=link, campaign=campaign)
if not is_promoted(link):
update_promote_status(link, PROMOTE_STATUS.pending)
emailer.queue_promo(link, campaign.bid, campaign.trans_id)
text = ('auth charge for campaign %s, trans_id: %d' %
(campaign._id, campaign.trans_id))
PromotionLog.add(link, text)
示例9: new_promotion
def new_promotion(is_self, title, content, author, ip):
"""
Creates a new promotion with the provided title, etc, and sets it
status to be 'unpaid'.
"""
sr = Subreddit._byID(Subreddit.get_promote_srid())
l = Link._submit(
is_self=is_self,
title=title,
content=content,
author=author,
sr=sr,
ip=ip,
)
l.promoted = True
l.disable_comments = False
l.sendreplies = True
PromotionLog.add(l, 'promotion created')
update_promote_status(l, PROMOTE_STATUS.unpaid)
# the user has posted a promotion, so enable the promote menu unless
# they have already opted out
if author.pref_show_promote is not False:
author.pref_show_promote = True
author._commit()
# notify of new promo
emailer.new_promo(l)
return l
示例10: _deactivate_campaign
def _deactivate_campaign(link, campaign):
with g.make_lock('adzerk_update', 'adzerk-' + link._fullname):
g.log.debug('running deactivate_campaign %s' % link)
az_flight = update_flight(link, campaign)
az_flight.IsActive = False
az_flight._send()
PromotionLog.add(link, 'deactivated %s' % az_flight)
示例11: update_campaign
def update_campaign(link):
"""Add/update a reddit link as an Adzerk Campaign"""
if hasattr(link, 'adzerk_campaign_id'):
az_campaign = adzerk_api.Campaign.get(link.adzerk_campaign_id)
else:
az_campaign = None
d = {
'AdvertiserId': g.az_selfserve_advertiser_id,
'IsDeleted': False,
'IsActive': not link._deleted,
'Price': 0,
}
log_text = None
if az_campaign:
changed = update_changed(az_campaign, **d)
else:
d.update({
'Name': link._fullname,
'Flights': [],
'StartDate': date_to_adzerk(datetime.datetime.now(g.tz)),
})
az_campaign = adzerk_api.Campaign.create(**d)
link.adzerk_campaign_id = az_campaign.Id
link._commit()
log_text = 'created %s' % az_campaign
if log_text:
PromotionLog.add(link, log_text)
g.log.info(log_text)
return az_campaign
示例12: new_promotion
def new_promotion(title, url, selftext, user, ip):
"""
Creates a new promotion with the provided title, etc, and sets it
status to be 'unpaid'.
"""
sr = Subreddit._byID(get_promote_srid())
l = Link._submit(title, url, user, sr, ip)
l.promoted = True
l.disable_comments = False
PromotionLog.add(l, 'promotion created')
if url == 'self':
l.url = l.make_permalink_slow()
l.is_self = True
l.selftext = selftext
l._commit()
# set the status of the link, populating the query queue
if c.user_is_sponsor or user.trusted_sponsor:
set_promote_status(l, PROMOTE_STATUS.accepted)
else:
set_promote_status(l, PROMOTE_STATUS.unpaid)
# the user has posted a promotion, so enable the promote menu unless
# they have already opted out
if user.pref_show_promote is not False:
user.pref_show_promote = True
user._commit()
# notify of new promo
emailer.new_promo(l)
return l
示例13: accept_promotion
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)
示例14: charge_pending
def charge_pending(offset=1):
for l, camp, weight in accepted_campaigns(offset=offset):
user = Account._byID(l.author_id)
try:
if charged_or_not_needed(camp):
continue
charge_succeeded = authorize.charge_transaction(user, camp.trans_id,
camp._id)
if not charge_succeeded:
continue
hooks.get_hook('promote.new_charge').call(link=l, campaign=camp)
if is_promoted(l):
emailer.queue_promo(l, camp.bid, camp.trans_id)
else:
set_promote_status(l, PROMOTE_STATUS.pending)
emailer.queue_promo(l, camp.bid, camp.trans_id)
text = ('auth charge for campaign %s, trans_id: %d' %
(camp._id, camp.trans_id))
PromotionLog.add(l, text)
except:
print "Error on %s, campaign %s" % (l, camp._id)
示例15: edit_campaign
def edit_campaign(link, campaign, dates, bid, sr):
sr_name = sr.name if sr else '' # empty string means target to all
try:
# if the bid amount changed, cancel any pending transactions
if campaign.bid != bid:
void_campaign(link, campaign)
# update the schedule
PromotionWeights.reschedule(link, campaign._id, sr_name,
dates[0], dates[1], bid)
# update values in the db
campaign.update(dates[0], dates[1], bid, sr_name, campaign.trans_id, commit=True)
# record the transaction
text = 'updated campaign %s. (bid: %0.2f)' % (campaign._id, bid)
PromotionLog.add(link, text)
# make it a freebie, if applicable
author = Account._byID(link.author_id, True)
if getattr(author, "complimentary_promos", False):
free_campaign(link, campaign, c.user)
except Exception, e: # record error and rethrow
g.log.error("Failed to update PromoCampaign %s on link %d. Error was: %r" %
(campaign._id, link._id, e))
try: # wrapped in try/except so orig error won't be lost if commit fails
text = 'update FAILED. (campaign: %s, bid: %.2f)' % (campaign._id,
bid)
PromotionLog.add(link, text)
except:
pass
raise e