本文整理汇总了Python中r2.models.PromoCampaign类的典型用法代码示例。如果您正苦于以下问题:Python PromoCampaign类的具体用法?Python PromoCampaign怎么用?Python PromoCampaign使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PromoCampaign类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: 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)
开发者ID:Kingofhearts102,项目名称:reddit,代码行数:35,代码来源:promote.py
示例2: _handle_adzerk
def _handle_adzerk(msg):
data = json.loads(msg.body)
g.log.debug('data: %s' % data)
action = data.get('action')
if action == 'deactivate_link':
link = Link._by_fullname(data['link'], data=True)
_deactivate_link(link)
elif action == 'deactivate_campaign':
link = Link._by_fullname(data['link'], data=True)
campaign = PromoCampaign._by_fullname(data['campaign'], data=True)
_deactivate_campaign(link, campaign)
elif action == 'update_adzerk':
link = Link._by_fullname(data['link'], data=True)
campaign = PromoCampaign._by_fullname(data['campaign'], data=True)
_update_adzerk(link, campaign)
开发者ID:alienth,项目名称:reddit-plugin-adzerk,代码行数:15,代码来源:adzerkpromote.py
示例3: get_sold_pageviews
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
开发者ID:Alex-Quinn,项目名称:reddit,代码行数:33,代码来源:inventory.py
示例4: make_campaign_table
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)
开发者ID:AjaxGb,项目名称:reddit,代码行数:60,代码来源:trafficpages.py
示例5: 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)
开发者ID:AHAMED750,项目名称:reddit,代码行数:32,代码来源:promote.py
示例6: accept_promotion
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)
开发者ID:AHAMED750,项目名称:reddit,代码行数:26,代码来源:promote.py
示例7: __init__
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)
开发者ID:89sos98,项目名称:reddit,代码行数:34,代码来源:trafficpages.py
示例8: _handle_generate_lifetime_campaign_report
def _handle_generate_lifetime_campaign_report(campaign_id):
now = datetime.utcnow()
campaign = PromoCampaign._byID(campaign_id, data=True)
start = campaign.start_date.replace(tzinfo=pytz.utc)
end = campaign.end_date.replace(tzinfo=pytz.utc)
now = now.replace(tzinfo=pytz.utc)
end = min([now, end])
g.log.info("generating report for campaign %s" % campaign._fullname)
report_id = report.queue_report(
start=start,
end=end,
parameters=[{
"flightId": campaign.external_flight_id,
}],
)
try:
_process_lifetime_campaign_report(
campaign=campaign,
report_id=report_id,
queued_date=now,
)
g.log.info("successfully processed report for campaign (%s/%s)" %
(campaign._fullname, report_id))
except report.ReportFailedException as e:
g.log.error(e)
# retry if report failed
_generate_promo_report(campaign)
开发者ID:KeyserSosa,项目名称:reddit-plugin-adzerk,代码行数:32,代码来源:adzerkreporting.py
示例9: _use_adserver_reporting
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")
开发者ID:zeantsoi,项目名称:reddit,代码行数:32,代码来源:trafficpages.py
示例10: query
def query(self):
if c.user_is_sponsor:
if self.sort == "future_promos":
return queries.get_all_unapproved_links()
elif self.sort == "pending_promos":
return queries.get_all_accepted_links()
elif self.sort == "unpaid_promos":
return queries.get_all_unpaid_links()
elif self.sort == "rejected_promos":
return queries.get_all_rejected_links()
elif self.sort == "live_promos" and self.sr:
return self.live_by_subreddit(self.sr)
elif self.sort == 'live_promos':
return queries.get_all_live_links()
elif self.sort == 'underdelivered':
q = queries.get_underdelivered_campaigns()
campaigns = PromoCampaign._by_fullname(list(q), data=True,
return_dict=False)
link_ids = [camp.link_id for camp in campaigns]
return [Link._fullname_from_id36(to36(id)) for id in link_ids]
elif self.sort == 'reported':
return queries.get_reported_links(get_promote_srid())
return queries.get_all_promoted_links()
else:
if self.sort == "future_promos":
return queries.get_unapproved_links(c.user._id)
elif self.sort == "pending_promos":
return queries.get_accepted_links(c.user._id)
elif self.sort == "unpaid_promos":
return queries.get_unpaid_links(c.user._id)
elif self.sort == "rejected_promos":
return queries.get_rejected_links(c.user._id)
elif self.sort == "live_promos":
return queries.get_live_links(c.user._id)
return queries.get_promoted_links(c.user._id)
开发者ID:Damgaard,项目名称:reddit,代码行数:35,代码来源:promotecontroller.py
示例11: scheduled_campaigns_by_link
def scheduled_campaigns_by_link(l, date=None):
# A promotion/campaign is scheduled/live if it's in
# PromotionWeights.get_campaigns(now) and
# charged_or_not_needed
date = date or promo_datetime_now()
if not is_accepted(l):
return []
scheduled = PromotionWeights.get_campaigns(date)
campaigns = [c.promo_idx for c in scheduled if c.thing_name == l._fullname]
# Check authorize
accepted = []
for campaign_id in campaigns:
try:
campaign = PromoCampaign._byID(campaign_id, data=True)
if charged_or_not_needed(campaign):
accepted.append(campaign_id)
except NotFound:
g.log.error("PromoCampaign %d scheduled to run on %s not found." %
(campaign_id, date.strftime("%Y-%m-%d")))
return accepted
开发者ID:AD42,项目名称:reddit,代码行数:25,代码来源:promote.py
示例12: _handle_adzerk
def _handle_adzerk(msg):
data = json.loads(msg.body)
g.log.debug('data: %s' % data)
action = data.get('action')
if action == 'deactivate_orphaned_flight':
_deactivate_orphaned_flight(data['flight'])
return
link = Link._by_fullname(data['link'], data=True)
if data['campaign']:
campaign = PromoCampaign._by_fullname(data['campaign'], data=True)
else:
campaign = None
if action == 'update_adzerk':
if 'triggered_by' in data and data['triggered_by'] is not None:
triggered_by = Account._by_fullname(data['triggered_by'], data=True)
else:
triggered_by = None
_update_adzerk(link, campaign, triggered_by)
elif action == 'deactivate_overdelivered':
_deactivate_overdelivered(link, campaign)
开发者ID:bsdo64,项目名称:reddit-plugin-adzerk,代码行数:26,代码来源:adzerkpromote.py
示例13: get_total_run
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
开发者ID:AD42,项目名称:reddit,代码行数:35,代码来源:promote.py
示例14: edit_promotion
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)
开发者ID:bsdo64,项目名称:reddit-plugin-adzerk,代码行数:7,代码来源:adzerkpromote.py
示例15: get_promos
def get_promos(date, sr_names=None, link=None):
campaign_ids = PromotionWeights.get_campaign_ids(date, sr_names=sr_names, link=link)
campaigns = PromoCampaign._byID(campaign_ids, data=True, return_dict=False)
link_ids = {camp.link_id for camp in campaigns}
links = Link._byID(link_ids, data=True)
for camp in campaigns:
yield camp, links[camp.link_id]
开发者ID:karthikv,项目名称:reddit,代码行数:7,代码来源:promote.py
示例16: GET_report
def GET_report(self, start, end, link_text=None, owner=None):
now = datetime.now(g.tz).replace(hour=0, minute=0, second=0,
microsecond=0)
end = end or now - timedelta(days=1)
start = start or end - timedelta(days=7)
links = []
bad_links = []
owner_name = owner.name if owner else ''
if owner:
promo_weights = PromotionWeights.get_campaigns(start, end,
author_id=owner._id)
campaign_ids = [pw.promo_idx for pw in promo_weights]
campaigns = PromoCampaign._byID(campaign_ids, data=True)
link_ids = {camp.link_id for camp in campaigns.itervalues()}
links.extend(Link._byID(link_ids, data=True, return_dict=False))
if link_text is not None:
id36s = link_text.replace(',', ' ').split()
try:
links_from_text = Link._byID36(id36s, data=True)
except NotFound:
links_from_text = {}
bad_links = [id36 for id36 in id36s if id36 not in links_from_text]
links.extend(links_from_text.values())
content = PromoteReport(links, link_text, owner_name, bad_links, start,
end)
if c.render_style == 'csv':
return content.as_csv()
else:
return PromotePage(title=_("sponsored link report"),
content=content).render()
开发者ID:6r3nt,项目名称:reddit,代码行数:35,代码来源:promotecontroller.py
示例17: get_total_run
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
开发者ID:cooiky,项目名称:reddit,代码行数:32,代码来源:promote.py
示例18: 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)
开发者ID:Hmaal,项目名称:reddit,代码行数:34,代码来源:promote.py
示例19: _handle_generate_daily_link_reports
def _handle_generate_daily_link_reports(link_ids, campaign_ids):
now = datetime.utcnow()
links = Link._byID(link_ids, data=True, return_dict=False)
campaigns = PromoCampaign._byID(campaign_ids, data=True, return_dict=False)
if not campaigns:
return
links_start, links_end = _get_campaigns_date_range(campaigns)
now = now.replace(tzinfo=pytz.utc)
links_start = links_start.replace(tzinfo=pytz.utc)
links_end = links_end.replace(tzinfo=pytz.utc)
# if data has already been processed then there's no need
# to redo it. use the last time the report was run as a
# starting point, but subtract 24hrs since initial numbers
# are preliminary.
last_run = min(getattr(l, "last_daily_report_run", links_start) for l in links)
start = max(
last_run - timedelta(hours=24),
links_start,
)
# in cases where we may be running a report well after a link
# has completed ensure we always use the actual start.
if start > links_end:
start = links_start
end = min([now, links_end])
link_fullnames = ",".join([l._fullname for l in links])
g.log.info("generating report for link %s (%s-%s)" % (
link_fullnames, start.strftime('%Y-%m-%d'), end.strftime('%Y-%m-%d')))
report_id = report.queue_report(
start=start,
end=end,
groups=["optionId", "day"],
parameters=[{
"campaignId": l.external_campaign_id,
} for l in links],
)
g.log.info("processing report for link (%s/%s)" %
(link_fullnames, report_id))
try:
_process_daily_link_reports(
links=links,
report_id=report_id,
queued_date=now,
)
g.log.info("successfully processed report for link (%s/%s)" %
(link_fullnames, report_id))
except report.ReportFailedException as e:
g.log.error(e)
# retry if report failed
_generate_link_reports(links)
开发者ID:madbook,项目名称:reddit-plugin-adzerk,代码行数:59,代码来源:adzerkreporting.py
示例20: get_house_link_names
def get_house_link_names(cls):
now = promote.promo_datetime_now()
pws = PromotionWeights.get_campaigns(now)
campaign_ids = {pw.promo_idx for pw in pws}
q = PromoCampaign._query(PromoCampaign.c._id.in_(campaign_ids),
PromoCampaign.c.priority_name == 'house',
data=True)
return [Link._fullname_from_id36(to36(camp.link_id)) for camp in q]
开发者ID:chanizzle,项目名称:reddit,代码行数:8,代码来源:promotecontroller.py
注:本文中的r2.models.PromoCampaign类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论