Exemple #1
0
    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())
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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
Exemple #5
0
    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