66from bingads .v12 .internal .extensions import *
77
88_ShoppingSetting = type (_CAMPAIGN_OBJECT_FACTORY_V12 .create ('ShoppingSetting' ))
9+ _DsaSetting = type (_CAMPAIGN_OBJECT_FACTORY_V12 .create ('DynamicSearchAdsSetting' ))
910
1011class BulkCampaign (_SingleRecordBulkEntity ):
1112 """ Represents a campaign that can be read or written in a bulk file.
@@ -93,13 +94,19 @@ def performance_data(self):
9394 return self ._performance_data
9495
9596 def _get_shopping_setting (self ):
97+ return self ._get_setting (_ShoppingSetting , 'ShoppingSetting' )
98+
99+ def _get_dsa_setting (self ):
100+ return self ._get_setting (_DsaSetting , 'DynamicSearchAdsSetting' )
101+
102+ def _get_setting (self , setting_type , setting_name ):
96103 if not self .campaign .Settings .Setting :
97104 return None
98- shopping_settings = [setting for setting in self .campaign .Settings .Setting if
99- isinstance (setting , _ShoppingSetting )]
100- if len (shopping_settings ) != 1 :
101- raise ValueError ('Can only have 1 ShoppingSetting in Campaign Settings.' )
102- return shopping_settings [0 ]
105+ settings = [setting for setting in self .campaign .Settings .Setting if
106+ isinstance (setting , setting_type )]
107+ if len (settings ) != 1 :
108+ raise ValueError ('Can only have 1 ' + setting_name + ' in Campaign Settings.' )
109+ return settings [0 ]
103110
104111 @staticmethod
105112 def _write_campaign_type (c ):
@@ -116,10 +123,16 @@ def _read_campaign_type(c, v):
116123 campaign_type = v
117124 c .campaign .CampaignType = [campaign_type ]
118125 if campaign_type .lower () == 'shopping' or campaign_type .lower () == 'audience' :
119- c .campaign .Settings = _CAMPAIGN_OBJECT_FACTORY_V12 .create ('ArrayOfSetting' )
120- shopping_setting = _CAMPAIGN_OBJECT_FACTORY_V12 .create ('ShoppingSetting' )
121- shopping_setting .Type = 'ShoppingSetting'
122- c .campaign .Settings .Setting = [shopping_setting ]
126+ BulkCampaign ._create_campaign_setting (c .campaign , 'ShoppingSetting' )
127+ elif campaign_type .lower () == 'dynamicsearchads' :
128+ BulkCampaign ._create_campaign_setting (c .campaign , 'DynamicSearchAdsSetting' )
129+
130+ @staticmethod
131+ def _create_campaign_setting (campaign , setting_type ):
132+ campaign .Settings = _CAMPAIGN_OBJECT_FACTORY_V12 .create ('ArrayOfSetting' )
133+ setting = _CAMPAIGN_OBJECT_FACTORY_V12 .create (setting_type )
134+ setting .Type = setting_type
135+ campaign .Settings .Setting = [setting ]
123136
124137 @staticmethod
125138 def _write_store_id (c ):
@@ -208,7 +221,73 @@ def _read_local_inventory_ads_enabled(c, v):
208221 if not shopping_setting :
209222 return None
210223 shopping_setting .LocalInventoryAdsEnabled = v .lower () == 'true' if v else None
224+
225+ @staticmethod
226+ def _read_source (c , v ):
227+ if not c .campaign .CampaignType :
228+ return None
229+ campgaign_types = [campaign_type .lower () for campaign_type in c .campaign .CampaignType ]
230+ if 'dynamicsearchads' in campgaign_types :
231+ dsa_setting = c ._get_dsa_setting ()
232+ if not dsa_setting :
233+ return None
234+ dsa_setting .Source = v
235+
236+ @staticmethod
237+ def _write_source (c ):
238+ if not c .campaign .CampaignType :
239+ return None
240+ campgaign_types = [campaign_type .lower () for campaign_type in c .campaign .CampaignType ]
241+ if 'dynamicsearchads' in campgaign_types :
242+ dsa_setting = c ._get_dsa_setting ()
243+ if not dsa_setting :
244+ return None
245+ return bulk_str (dsa_setting .Source )
246+
247+ @staticmethod
248+ def _read_domain_language (c , v ):
249+ if not c .campaign .CampaignType :
250+ return None
251+ campgaign_types = [campaign_type .lower () for campaign_type in c .campaign .CampaignType ]
252+ if 'dynamicsearchads' in campgaign_types :
253+ dsa_setting = c ._get_dsa_setting ()
254+ if not dsa_setting :
255+ return None
256+ dsa_setting .Language = v
211257
258+ @staticmethod
259+ def _write_domain_language (c ):
260+ if not c .campaign .CampaignType :
261+ return None
262+ campgaign_types = [campaign_type .lower () for campaign_type in c .campaign .CampaignType ]
263+ if 'dynamicsearchads' in campgaign_types :
264+ dsa_setting = c ._get_dsa_setting ()
265+ if not dsa_setting :
266+ return None
267+ return bulk_str (dsa_setting .Language )
268+
269+ @staticmethod
270+ def _read_website (c , v ):
271+ if not c .campaign .CampaignType :
272+ return None
273+ campgaign_types = [campaign_type .lower () for campaign_type in c .campaign .CampaignType ]
274+ if 'dynamicsearchads' in campgaign_types :
275+ dsa_setting = c ._get_dsa_setting ()
276+ if not dsa_setting :
277+ return None
278+ dsa_setting .DomainName = v
279+
280+ @staticmethod
281+ def _write_website (c ):
282+ if not c .campaign .CampaignType :
283+ return None
284+ campgaign_types = [campaign_type .lower () for campaign_type in c .campaign .CampaignType ]
285+ if 'dynamicsearchads' in campgaign_types :
286+ dsa_setting = c ._get_dsa_setting ()
287+ if not dsa_setting :
288+ return None
289+ return bulk_str (dsa_setting .DomainName )
290+
212291 _MAPPINGS = [
213292 _SimpleBulkMapping (
214293 header = _StringTable .CampaignType ,
@@ -311,13 +390,19 @@ def _read_local_inventory_ads_enabled(c, v):
311390 ),
312391 _SimpleBulkMapping (
313392 header = _StringTable .Website ,
314- field_to_csv = lambda c : field_to_csv_DSAWebsite (c .campaign ),
315- csv_to_field = lambda c , v : csv_to_field_DSAWebsite (c .campaign , v )
393+ field_to_csv = lambda c : BulkCampaign ._write_website (c ),
394+ csv_to_field = lambda c , v : BulkCampaign ._read_website (c , v )
395+
316396 ),
317397 _SimpleBulkMapping (
318398 header = _StringTable .DomainLanguage ,
319- field_to_csv = lambda c : field_to_csv_DSADomainLanguage (c .campaign ),
320- csv_to_field = lambda c , v : csv_to_field_DSADomainLanguage (c .campaign , v )
399+ field_to_csv = lambda c : BulkCampaign ._write_domain_language (c ),
400+ csv_to_field = lambda c , v : BulkCampaign ._read_domain_language (c , v )
401+ ),
402+ _SimpleBulkMapping (
403+ header = _StringTable .Source ,
404+ field_to_csv = lambda c : BulkCampaign ._write_source (c ),
405+ csv_to_field = lambda c , v : BulkCampaign ._read_source (c , v )
321406 ),
322407 _SimpleBulkMapping (
323408 header = _StringTable .SubType ,
0 commit comments