def test_t001_wad_Budget_sync_add_remove_usingaddremove(self): print('wad_Budget test t001') client = adwords.AdWordsClient.LoadFromStorage() # sync with django db Budget.sync(client) # beginning django budgets queryset beginningbudgets = Budget.objects.all() # beginning awbudgetslst beginningawbudgetslst = Budget.listbudgets(client) # assert that the django budget set and aw budgetset correspond self.assertEqual(len(beginningbudgets), len(beginningawbudgetslst)) # create three new budgets in aw budget0id = Budget.addbudget(client, 'test_t001_budget0', 7000000000).budgetid budget1id = Budget.addbudget(client, 'test_t001_budget1', 7000000000).budgetid budget2id = Budget.addbudget(client, 'test_t001_budget2', 7000000000).budgetid # sync with django db ###Budget.sync ( client ) # test if the new budgets added to aw are in the Django system self.assertEqual(len(beginningbudgets) + 3, len(Budget.objects.all())) self.assertEqual( len(beginningawbudgetslst) + 3, len(Budget.objects.all())) self.assertTrue( Budget.objects.filter(budgetname='test_t001_budget0').exists()) self.assertTrue( Budget.objects.filter(budgetname='test_t001_budget1').exists()) self.assertTrue( Budget.objects.filter(budgetname='test_t001_budget2').exists()) # removes the budgets from aw Budget.removebudget(client, budget0id) Budget.removebudget(client, budget1id) Budget.removebudget(client, budget2id) # sync with django db ###Budget.sync ( client ) # test if the django budget set is equal to the aw budget set after deletions self.assertEqual(len(beginningbudgets), len(Budget.objects.all())) self.assertEqual(len(beginningawbudgetslst), len(Budget.objects.all())) self.assertFalse( Budget.objects.filter(budgetname='test_t001_budget0').exists()) self.assertFalse( Budget.objects.filter(budgetname='test_t001_budget1').exists()) self.assertFalse( Budget.objects.filter(budgetname='test_t001_budget2').exists())
def test_t000_wad_Budget_add_remove_usingaddremove(self): print('wad_Budget test t000') client = adwords.AdWordsClient.LoadFromStorage() # creates three new budgets budget0id = Budget.addbudget(client, 'test_t000_budget0', 6000000000).budgetid budget1id = Budget.addbudget(client, 'test_t000_budget1', 6000000000).budgetid budget2id = Budget.addbudget(client, 'test_t000_budget2', 6000000000).budgetid # gets the lists of all budgets budgetlist = Budget.listbudgets(client) budgetidlist = [] # builds a list of budgets with status != REMOVED for budget in budgetlist: if budget['status'] != Budget.STATE_REMOVED: budgetidlist.append(budget['budgetId']) # asserts the budgets added are in the list self.assertTrue(budget0id in budgetidlist) self.assertTrue(budget1id in budgetidlist) self.assertTrue(budget2id in budgetidlist) # removes the budgets Budget.removebudget(client, budget0id) Budget.removebudget(client, budget1id) Budget.removebudget(client, budget2id) # gets the list of all budgets budgetlist = Budget.listbudgets(client) budgetidlist = [] # builds a list of budgets with status != REMOVED for budget in budgetlist: if budget['status'] != Budget.STATE_REMOVED: budgetidlist.append(budget['budgetId']) # asserts the budgets added are not in the list self.assertFalse(budget0id in budgetidlist) self.assertFalse(budget1id in budgetidlist) self.assertFalse(budget2id in budgetidlist)
def test_t009_wad_Budget_addbudget_removebudget(self): print('wad_Budget test t009') # save a new instance client = adwords.AdWordsClient.LoadFromStorage() rslt = Budget._aw_addbudget(client, 'test_t009_budget0') Budget.removebudget(client, rslt['budgetId']) rslt = Budget.addbudget(client, 'test_t010_budget1') rslt = Budget.removebudget(client, rslt.budgetid)
def addcampaign(client, incampaignname, incampaignbudget=None, incampaignstatus=None, incampaignadchanneltype=None, incampaigntargetgooglesearch=None, incampaigntargetsearchnetwork=None, incampaigntargetcontentnetwork=None): """ Add an AdWords campaign entry. Attempts to add a campaign to AdWords. Does not check if the campaign exists. If it is successful adding the campaign to Ad Words, it also adds a campaign to Django DB. **Parameters** client \: googleads.adwords.AdWordsClient object The client to request API service from. incampaignname \: str The campaign name. incampaignbudget \: wad_Budget.Budget An instance of type wad_Budget.Budget representing the shared budget that the campaign will use. incampaignstatus \: str Enumerated str type, either REMOVED, PAUSED, ENABLED, TESTING Note \: AdWords prohibits Ad Channel Type being modified after creation. **Returns** wad_Campaign.Campaign \: newly created Campaign instance """ if incampaignstatus == None: incampaignstatus = Campaign.STATE_ENABLED if incampaignadchanneltype == None: incampaignadchanneltype = Campaign.TYPE_AD_CHAN_SEARCH if incampaigntargetgooglesearch == None: incampaigntargetgooglesearch = True if incampaigntargetsearchnetwork == None: incampaigntargetsearchnetwork = False if incampaigntargetcontentnetwork == None: incampaigntargetcontentnetwork = False # create a new budget if one is not specified if incampaignbudget == None or not isinstance(incampaignbudget, Budget): incampaignbudget = Budget.addbudget( client, 'budget_for_%s' % incampaignname) # Add new Django database entry for the newly added AdWords campaign # add it here because init checks adwords to see if it's possible to # enter this item, adwords does not let you ad an item that has same # name as their db newcampaign = Campaign( campaignid=None, campaignname=incampaignname, campaignadchanneltype=incampaignadchanneltype, campaignstatus=incampaignstatus, campaignbudget=incampaignbudget, campaigntargetgooglesearch=incampaigntargetgooglesearch, campaigntargetsearchnetwork=incampaigntargetsearchnetwork, campaigntargetcontentnetwork=incampaigntargetcontentnetwork, ) addcampaignobj = Campaign._aw_addcampaign(client, incampaignname, incampaignbudget, incampaignstatus) if addcampaignobj != None: # the unsaved db object needs updated after _aw_addcampaign if method paramaters were none newcampaign.campaignid = addcampaignobj['id'] # finally we are ready to save the database instance newcampaign.save(sync_aw=False) print('Campaign %s %s added to Django.' % (addcampaignobj['id'], addcampaignobj['name'])) else: print('Failed to add Campaign ( campaignname="%s" ... )' % incampaignname) return newcampaign
def _aw_addcampaign(client, incampaignname, incampaignbudget=None, incampaignstatus=None, incampaignadchanneltype=None, incampaigntargetgooglesearch=None, incampaigntargetsearchnetwork=None, incampaigntargetcontentnetwork=None): """ Add an AdWords campaign entry. Attempts to add a campaign to AdWords. Does not check if the campaign exists. Note \: Does not affect the Django database. **Parameters** client \: googleads.adwords.AdWordsClient object The client to request API service from. incampaignname \: str The campaign name. incampaignbudget \: wad_Budget.Budget An instance of type wad_Budget.Budget representing the shared budget that the campaign will use. incampaignstatus \: str Enumerated str type, either REMOVED, PAUSED, ENABLED, TESTING incampaignadchanneltype \: str Enumerated ad channel type, either SEARCH, DISPLAY, SHOPPING, MULTI_CHANNEL Note \: AdWords prohibits Ad Channel Type being modified after creation. **Returns** suds.sudsobject.Campaign \: newly created suds Campaign instance or suds.WebFault \: error message """ rval = None newbudget = None # set default campaign status if one is not specified if incampaignstatus == None: incampaignstatus = Campaign.STATE_ENABLED # set default campaign channel type if one is not specified if incampaignadchanneltype == None: incampaignadchanneltype = Campaign.TYPE_AD_CHAN_SEARCH if incampaigntargetgooglesearch == None: incampaigntargetgooglesearch = True if incampaigntargetsearchnetwork == None: incampaigntargetsearchnetwork = False if incampaigntargetcontentnetwork == None: incampaigntargetcontentnetwork = False # create a new budget if one is not specified if incampaignbudget == None or not isinstance(incampaignbudget, Budget): incampaignbudget = Budget.addbudget( client, 'budget_for_%s' % incampaignname) # request a service object from the client object service = Campaign.serviceobj(client) # create the mutate string mutatestring = Campaign.adddict( incampaignname, incampaignstatus, incampaignadchanneltype, incampaignbudget, incampaigntargetgooglesearch, incampaigntargetsearchnetwork, incampaigntargetcontentnetwork, ) client.validate_only = True # set this to true to test for errors success = False # assume failure, change the value for success try: # call mutate rslts = service.mutate([mutatestring]) # if there is a partial failure or success, # the var success will be set to true success = True except suds.WebFault as e: # if there is an error print the error print('Add campaign failed: %s' % e) # if the mutate was successful set validate_only to False if success: client.validate_only = False # make the mutate call rslts = service.mutate([mutatestring]) rval = rslts['value'][0] # print the results print('Campaign %s %s added to AdWords.' % (rval['id'], rval['name'])) return rval