Skip to content

Commit 07a309a

Browse files
committed
update to version 11.12.5
1 parent 06c2125 commit 07a309a

19 files changed

+347
-177
lines changed

HISTORY.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
33
Release History
44
-----------
5+
6+
11.12.5(2018-08-10)
7+
*Updated service proxies to support customer address, campaign level profile criteria, similar audiences for remarketing lists, and new change history report columns. For details see the service release notes: https://docs.microsoft.com/en-us/bingads/guides/release-notes?view=bingads-12#august2018.
8+
*Added BulkEntity mappings for campaign level profile criteria i.e., added BulkCampaignCompanyNameCriterion, BulkCampaignJobFunctionCriterion, and BulkCampaignIndustryCriterion.
9+
510
11.12.4(2018-07-10)
611
* Added a mapping for the Domain column in the Bulk file to the BulkExpandedTextAd object.
712
* Limited the scope to bingads.manage for access token requests. Previously the default scope was used, which can vary if a user granted your app permissions to multiple scopes. The Bing Ads SDKs only support the bingads.manage scope.

bingads/manifest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import sys
2-
VERSION = '11.12.4'
2+
VERSION = '11.12.5'
33
BULK_FORMAT_VERSION_5 = '5.0'
44
BULK_FORMAT_VERSION_6 = '6.0'
55
WORKING_NAME = 'BingAdsSDKPython'

bingads/v11/bulk/entities/bulk_ad_group.py

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,34 @@
77
from bingads.v11.internal.extensions import *
88

99

10+
def coop_setting_to_csv(bulk_ad_group, row_values):
11+
if not bulk_ad_group.ad_group.Settings or not bulk_ad_group.ad_group.Settings.Setting:
12+
return
13+
settings = [setting for setting in bulk_ad_group.ad_group.Settings.Setting if isinstance(setting, CoOpSetting_Type)]
14+
if len(settings) == 0:
15+
return
16+
if len(settings) != 1:
17+
raise ValueError('Can only have 1 CoOpSetting in AdGroup Settings.')
18+
19+
row_values[_StringTable.MaximumBid] = settings[0].BidMaxValue
20+
row_values[_StringTable.BidBoostValue] = settings[0].BidBoostValue
21+
row_values[_StringTable.BidOption] = settings[0].BidOption
22+
pass
23+
24+
def csv_to_coop_setting(row_values, bulk_ad_group):
25+
maximum_bid_success, maximum_bid = row_values.try_get_value(_StringTable.MaximumBid)
26+
bid_boost_value_success, bid_boost_value = row_values.try_get_value(_StringTable.BidBoostValue)
27+
bid_option_success, bid_option = row_values.try_get_value(_StringTable.BidOption)
28+
29+
if maximum_bid_success or bid_boost_value_success or bid_option_success:
30+
coop_setting = _CAMPAIGN_OBJECT_FACTORY_V11.create('CoOpSetting')
31+
coop_setting.Type = 'CoOpSetting'
32+
coop_setting.BidOption = bid_option if bid_option else None
33+
coop_setting.BidBoostValue = float(bid_boost_value) if bid_boost_value else None
34+
coop_setting.BidMaxValue = float(maximum_bid) if maximum_bid else None
35+
bulk_ad_group.ad_group.Settings.Setting.append(coop_setting)
36+
pass
37+
1038
def bidding_scheme_to_csv(bulk_ad_group, row_values):
1139
bid_strategy_type = field_to_csv_BidStrategyType(bulk_ad_group.ad_group)
1240
if not bid_strategy_type:
@@ -251,21 +279,7 @@ def performance_data(self):
251279
csv_to_field=lambda c, v: setattr(c.ad_group, 'RemarketingTargetingSetting', v if v else None)
252280
),
253281

254-
_SimpleBulkMapping(
255-
header=_StringTable.BidOption,
256-
field_to_csv=lambda c: bid_option_to_csv(c.ad_group),
257-
csv_to_field=lambda c, v: csv_to_bid_option(c.ad_group, v)
258-
),
259-
_SimpleBulkMapping(
260-
header=_StringTable.BidBoostValue,
261-
field_to_csv=lambda c: bid_boost_value_to_csv(c.ad_group),
262-
csv_to_field=lambda c, v: csv_to_bid_boost_value(c.ad_group, v)
263-
),
264-
_SimpleBulkMapping(
265-
header=_StringTable.MaximumBid,
266-
field_to_csv=lambda c: maximum_bid_to_csv(c.ad_group),
267-
csv_to_field=lambda c, v: csv_to_maximum_bid(c.ad_group, v)
268-
),
282+
_ComplexBulkMapping(coop_setting_to_csv, csv_to_coop_setting),
269283
]
270284

271285
def process_mappings_from_row_values(self, row_values):

bingads/v11/bulk/entities/target_criterions/bulk_ad_group_negative_profile_criterion.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77
from abc import ABCMeta, abstractmethod
88

99
class BulkAdGroupNegativeProfileCriterion(_SingleRecordBulkEntity):
10-
""" Represents an Ad Group Negative Profile Criterion that can be read or written in a bulk file.
10+
""" The base class for Ad group level negative profile criterion that can be read or written in a bulk file.
1111
12-
This class exposes the :attr:`negative_ad_group_criterion` property that can be read and written as fields of the
13-
Ad Group Negative Profile Criterion record in a bulk file.
12+
This class exposes the :attr:`negative_ad_group_criterion` property that can be read and written in a bulk file.
1413
15-
For more information, see Ad Group Negative Profile Criterion at https://go.microsoft.com/fwlink/?linkid=846127.
14+
For more information, see Bulk File Schema at https://go.microsoft.com/fwlink/?linkid=846127.
1615
1716
*See also:*
1817

bingads/v11/bulk/entities/target_criterions/bulk_ad_group_profile_criterion.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77
from abc import ABCMeta, abstractmethod
88

99
class BulkAdGroupProfileCriterion(_SingleRecordBulkEntity):
10-
""" Represents an Ad Group Profile Criterion that can be read or written in a bulk file.
10+
""" The base class for Ad group level profile criterion that can be read or written in a bulk file.
1111
12-
This class exposes the :attr:`biddable_ad_group_criterion` property that can be read and written as fields of the
13-
Ad Group Profile Criterion record in a bulk file.
12+
This class exposes the :attr:`biddable_ad_group_criterion` property that can be read and written in a bulk file.
1413
15-
For more information, see Ad Group Profile Criterion at https://go.microsoft.com/fwlink/?linkid=846127.
14+
For more information, see Bulk File Schema at https://go.microsoft.com/fwlink/?linkid=846127.
1615
1716
*See also:*
1817

bingads/v11/internal/bulk/csv_headers.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ class _CsvHeaders:
2222
_StringTable.BudgetType,
2323
_StringTable.BudgetName,
2424
_StringTable.BudgetId,
25-
_StringTable.KeywordVariantMatchEnabled,
2625

2726
# AdGroup
2827
_StringTable.StartDate,

bingads/v11/internal/bulk/string_table.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class _StringTable:
1212
BudgetType = "Budget Type"
1313
BudgetName = "Budget Name"
1414
BudgetId = "Budget Id"
15-
KeywordVariantMatchEnabled = "KeywordVariantMatchEnabled"
1615
AdGroup = "Ad Group"
1716
Keyword = "Keyword"
1817
TextAd = "Text Ad"

bingads/v11/internal/extensions.py

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,66 +1184,6 @@ def parse_rule_PageVisitors(rule_str):
11841184
rule.RuleItemGroups = parse_rule_groups(rule_str)
11851185
return rule
11861186

1187-
def maximum_bid_to_csv(ad_group):
1188-
if not ad_group.Settings or not ad_group.Settings.Setting:
1189-
return None
1190-
settings = [setting for setting in ad_group.Settings.Setting if isinstance(setting, CoOpSetting_Type)]
1191-
if len(settings) == 0:
1192-
return None
1193-
if len(settings) != 1:
1194-
raise ValueError('Can only have 1 CoOpSetting in AdGroup Settings.')
1195-
coop_setting = settings[0]
1196-
return coop_setting.BidMaxValue
1197-
1198-
def csv_to_maximum_bid(ad_group, value):
1199-
coop_setting = validate_coop_setting(ad_group)
1200-
coop_setting.BidMaxValue = float(value) if value else None
1201-
1202-
def bid_boost_value_to_csv(ad_group):
1203-
if not ad_group.Settings or not ad_group.Settings.Setting:
1204-
return None
1205-
settings = [setting for setting in ad_group.Settings.Setting if isinstance(setting, CoOpSetting_Type)]
1206-
if len(settings) == 0:
1207-
return None
1208-
if len(settings) != 1:
1209-
raise ValueError('Can only have 1 CoOpSetting in AdGroup Settings.')
1210-
coop_setting = settings[0]
1211-
return coop_setting.BidBoostValue
1212-
1213-
def csv_to_bid_boost_value(ad_group, value):
1214-
coop_setting = validate_coop_setting(ad_group)
1215-
coop_setting.BidBoostValue = float(value) if value else None
1216-
1217-
def bid_option_to_csv(ad_group):
1218-
if not ad_group.Settings or not ad_group.Settings.Setting:
1219-
return None
1220-
settings = [setting for setting in ad_group.Settings.Setting if isinstance(setting, CoOpSetting_Type)]
1221-
if len(settings) == 0:
1222-
return None
1223-
if len(settings) != 1:
1224-
raise ValueError('Can only have 1 CoOpSetting in AdGroup Settings.')
1225-
coop_setting = settings[0]
1226-
return coop_setting.BidOption
1227-
1228-
def csv_to_bid_option(ad_group, value):
1229-
coop_setting = validate_coop_setting(ad_group)
1230-
coop_setting.BidOption = value if value else None
1231-
1232-
def validate_coop_setting(ad_group):
1233-
settings = [setting for setting in ad_group.Settings.Setting if isinstance(setting, CoOpSetting_Type)]
1234-
if len(settings) == 0:
1235-
return create_coop_setting(ad_group)
1236-
1237-
if len(settings) > 1:
1238-
raise ValueError('Can only have 1 CoOpSetting in AdGroup Settings.')
1239-
return settings[0]
1240-
1241-
def create_coop_setting(ad_group):
1242-
coop_setting = _CAMPAIGN_OBJECT_FACTORY_V11.create('CoOpSetting')
1243-
coop_setting.Type = 'CoOpSetting'
1244-
ad_group.Settings.Setting.append(coop_setting)
1245-
return coop_setting
1246-
12471187
def target_setting_to_csv(ad_group):
12481188
if not ad_group.Settings or not ad_group.Settings.Setting:
12491189
return None

bingads/v11/proxies/campaign_management_service.xml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1483,6 +1483,13 @@
14831483
<xs:enumeration value="None" />
14841484
<xs:enumeration value="TrackingUrlTemplate" />
14851485
<xs:enumeration value="MSCLKIDAutoTaggingEnabled" />
1486+
<xs:enumeration value="AdClickParallelTracking">
1487+
<xs:annotation>
1488+
<xs:appinfo>
1489+
<EnumerationValue xmlns="http://schemas.microsoft.com/2003/10/Serialization/">4</EnumerationValue>
1490+
</xs:appinfo>
1491+
</xs:annotation>
1492+
</xs:enumeration>
14861493
</xs:restriction>
14871494
</xs:simpleType>
14881495
<xs:element name="AccountPropertyName" nillable="true" type="tns:AccountPropertyName" />
@@ -9982,7 +9989,7 @@
99829989
</wsdl:binding>
99839990
<wsdl:service name="CampaignManagementService">
99849991
<wsdl:port name="BasicHttpBinding_ICampaignManagementService" binding="tns:BasicHttpBinding_ICampaignManagementService">
9985-
<soap:address location="https://campaign.api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/V11/CampaignManagementService.svc" />
9992+
<soap:address location="https://campaign.api.sandbox.bingads.microsoft.com/Api/Advertiser/CampaignManagement/v11/CampaignManagementService.svc" />
99869993
</wsdl:port>
99879994
</wsdl:service>
99889995
</wsdl:definitions>

bingads/v12/bulk/entities/bulk_ad_group.py

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,34 @@
66
from bingads.v12.internal.bulk.mappings import _SimpleBulkMapping, _ComplexBulkMapping
77
from bingads.v12.internal.extensions import *
88

9+
def coop_setting_to_csv(bulk_ad_group, row_values):
10+
if not bulk_ad_group.ad_group.Settings or not bulk_ad_group.ad_group.Settings.Setting:
11+
return
12+
settings = [setting for setting in bulk_ad_group.ad_group.Settings.Setting if isinstance(setting, CoOpSetting_Type)]
13+
if len(settings) == 0:
14+
return
15+
if len(settings) != 1:
16+
raise ValueError('Can only have 1 CoOpSetting in AdGroup Settings.')
17+
18+
row_values[_StringTable.MaximumBid] = settings[0].BidMaxValue
19+
row_values[_StringTable.BidBoostValue] = settings[0].BidBoostValue
20+
row_values[_StringTable.BidOption] = settings[0].BidOption
21+
pass
22+
23+
def csv_to_coop_setting(row_values, bulk_ad_group):
24+
maximum_bid_success, maximum_bid = row_values.try_get_value(_StringTable.MaximumBid)
25+
bid_boost_value_success, bid_boost_value = row_values.try_get_value(_StringTable.BidBoostValue)
26+
bid_option_success, bid_option = row_values.try_get_value(_StringTable.BidOption)
27+
28+
if maximum_bid_success or bid_boost_value_success or bid_option_success:
29+
coop_setting = _CAMPAIGN_OBJECT_FACTORY_V12.create('CoOpSetting')
30+
coop_setting.Type = 'CoOpSetting'
31+
coop_setting.BidOption = bid_option if bid_option else None
32+
coop_setting.BidBoostValue = float(bid_boost_value) if bid_boost_value else None
33+
coop_setting.BidMaxValue = float(maximum_bid) if maximum_bid else None
34+
bulk_ad_group.ad_group.Settings.Setting.append(coop_setting)
35+
pass
36+
937
def bidding_scheme_to_csv(bulk_ad_group, row_values):
1038
bid_strategy_type = field_to_csv_BidStrategyType(bulk_ad_group.ad_group)
1139
if not bid_strategy_type:
@@ -216,21 +244,8 @@ def performance_data(self):
216244
field_to_csv=lambda c: bulk_str(c.ad_group.PrivacyStatus),
217245
csv_to_field=lambda c, v: setattr(c.ad_group, 'PrivacyStatus', v if v else None)
218246
),
219-
_SimpleBulkMapping(
220-
header=_StringTable.BidOption,
221-
field_to_csv=lambda c: bid_option_to_csv(c.ad_group),
222-
csv_to_field=lambda c, v: csv_to_bid_option(c.ad_group, v)
223-
),
224-
_SimpleBulkMapping(
225-
header=_StringTable.BidBoostValue,
226-
field_to_csv=lambda c: bid_boost_value_to_csv(c.ad_group),
227-
csv_to_field=lambda c, v: csv_to_bid_boost_value(c.ad_group, v)
228-
),
229-
_SimpleBulkMapping(
230-
header=_StringTable.MaximumBid,
231-
field_to_csv=lambda c: maximum_bid_to_csv(c.ad_group),
232-
csv_to_field=lambda c, v: csv_to_maximum_bid(c.ad_group, v)
233-
),
247+
248+
_ComplexBulkMapping(coop_setting_to_csv, csv_to_coop_setting),
234249
]
235250

236251
def process_mappings_from_row_values(self, row_values):

0 commit comments

Comments
 (0)