Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support one order for all bidders #18 #91

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,5 @@ googleads.yaml
secret-files.tar
*.pyc
local_settings.py
.vscode

6 changes: 5 additions & 1 deletion dfp/create_creatives.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,11 @@ def build_creative_name(bidder_code, order_name, creative_num):
Returns:
a string
"""
return '{bidder_code}: HB {order_name}, #{num}'.format(
if bidder_code is not None:
bidder_code_format = '{bidder_code}: HB {order_name}, #{num}'
else:
bidder_code_format = 'HB {order_name}, #{num}'
return bidder_code_format.format(
bidder_code=bidder_code, order_name=order_name, num=creative_num)

def create_duplicate_creative_configs(bidder_code, order_name, advertiser_id,
Expand Down
20 changes: 11 additions & 9 deletions dfp/create_line_items.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,6 @@ def create_line_item_config(name, order_id, placement_ids, ad_unit_ids, cpm_micr
# https://github.com/googleads/googleads-python-lib/blob/master/examples/dfp/v201802/line_item_service/target_custom_criteria.py
# create custom criterias

hb_bidder_criteria = {
'xsi_type': 'CustomCriteria',
'keyId': hb_bidder_key_id,
'valueIds': [hb_bidder_value_id],
'operator': 'IS'
}

hb_pb_criteria = {
'xsi_type': 'CustomCriteria',
'keyId': hb_pb_key_id,
Expand All @@ -72,13 +65,22 @@ def create_line_item_config(name, order_id, placement_ids, ad_unit_ids, cpm_micr

# The custom criteria will resemble:
# (hb_bidder_criteria.key == hb_bidder_criteria.value AND
# hb_pb_criteria.key == hb_pb_criteria.value)
# hb_pb_criteria.key == hb_pb_criteria.value)
top_set = {
'xsi_type': 'CustomCriteriaSet',
'logicalOperator': 'AND',
'children': [hb_bidder_criteria, hb_pb_criteria]
'children': [hb_pb_criteria]
}

if hb_bidder_key_id is not None:
hb_bidder_criteria = {
'xsi_type': 'CustomCriteria',
'keyId': hb_bidder_key_id,
'valueIds': [hb_bidder_value_id],
'operator': 'IS'
}
top_set['children'].append(hb_bidder_criteria)

# https://developers.google.com/doubleclick-publishers/docs/reference/v201802/LineItemService.LineItem
line_item_config = {
'name': name,
Expand Down
30 changes: 22 additions & 8 deletions tasks/add_new_prebid_partner.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,19 @@ def setup_partner(user_email, advertiser_name, order_name, placements, ad_units,
creative_ids = dfp.create_creatives.create_creatives(creative_configs)

# Get DFP key IDs for line item targeting.
hb_bidder_key_id = get_or_create_dfp_targeting_key('hb_bidder')
if bidder_code is not None:
hb_bidder_key_id = get_or_create_dfp_targeting_key('hb_bidder')
else:
hb_bidder_key_id = None

hb_pb_key_id = get_or_create_dfp_targeting_key('hb_pb')

# Instantiate DFP targeting value ID getters for the targeting keys.
HBBidderValueGetter = DFPValueIdGetter('hb_bidder')
if bidder_code is not None:
HBBidderValueGetter = DFPValueIdGetter('hb_bidder')
else:
HBBidderValueGetter = None

HBPBValueGetter = DFPValueIdGetter('hb_pb')

# Create line items.
Expand Down Expand Up @@ -183,7 +191,10 @@ def create_line_item_configs(prices, order_id, placement_ids, ad_unit_ids, bidde
"""

# The DFP targeting value ID for this `hb_bidder` code.
hb_bidder_value_id = HBBidderValueGetter.get_value_id(bidder_code)
if HBBidderValueGetter is not None:
hb_bidder_value_id = HBBidderValueGetter.get_value_id(bidder_code)
else:
hb_bidder_value_id = None

line_items_config = []
for price in prices:
Expand Down Expand Up @@ -294,7 +305,14 @@ def main():

currency_code = getattr(settings, 'DFP_CURRENCY_CODE', 'USD')

line_item_format = getattr(settings, 'DFP_LINE_ITEM_FORMAT', u'{bidder_code}: HB ${price}')
bidder_code = getattr(settings, 'PREBID_BIDDER_CODE', None)

if bidder_code is not None:
default_line_item_format = u'{bidder_code}: HB ${price}'
else:
default_line_item_format = u'HB ${price}'

line_item_format = getattr(settings, 'DFP_LINE_ITEM_FORMAT', default_line_item_format)

# How many creatives to attach to each line item. We need at least one
# creative per ad unit on a page. See:
Expand All @@ -304,10 +322,6 @@ def main():
len(placements) + len(ad_units)
)

bidder_code = getattr(settings, 'PREBID_BIDDER_CODE', None)
if bidder_code is None:
raise MissingSettingException('PREBID_BIDDER_CODE')

price_buckets = getattr(settings, 'PREBID_PRICE_BUCKETS', None)
if price_buckets is None:
raise MissingSettingException('PREBID_PRICE_BUCKETS')
Expand Down