def handle(self, *args, **options): client = adwords.AdWordsClient.LoadFromStorage() client.partial_failure = True # request a service object from the client object service = Budget.serviceobj(client) mutatestring_dellst = [] # get a list of the budgets budgets = Budget.listbudgets(client) # create a list of delete dictionaries for budget in budgets: mutatestring_dellst.append(Budget.deldict(budget['budgetId'])) # if there are no budgets in aw with status != remove, return if (len(mutatestring_dellst) == 0): print('Nothing to delete.') return # call mutate for the list of deletes rslts = service.mutate(mutatestring_dellst) # removes partial failure errors from rslts['value'] rsltsvaluelst = [] for budgetsuccess in rslts['value']: if budgetsuccess != "": rsltsvaluelst.append(budgetsuccess) rslts['value'] = rsltsvaluelst # prints the results of the clear operation print('Budget clear complete. Removed %s budgets.' % len(rslts['value'])) print('Removed: ') # prints each budget that was successfully removed for budgetsuccess in rslts['value']: if budgetsuccess != "": print('%s %s Status: %s' % (budgetsuccess['budgetId'], budgetsuccess['name'], budgetsuccess['status'])) if 'partialFailureErrors' in rslts: # prints each budget that threw an error print('Failed to remove: ') for budgeterror in rslts['partialFailureErrors']: print( '%s %s Reason: %s' % (budgets[int(budgeterror['fieldPath'][11:12])]['budgetId'], budgets[int(budgeterror['fieldPath'][11:12])]['name'], budgeterror['errorString']))
def receiver_pre_save(**kwargs): #print ( kwargs ) client = adwords.AdWordsClient.LoadFromStorage() service = Budget.serviceobj(client) instance = kwargs['instance'] # save updates an existing item or instantiates a new item # save determines which one based on whether the object # has a budgetid != None # this variable is set in the overridden save method, if it is set to # false save is probably being called from Budget.addbudget # or Budget.removebudget, or specified by kwargs if (instance.sync_aw): # we are adding a new item if (instance.id == None): # create the mutate string mutatestring = Budget.adddict(instance.budgetname, instance.budgetamount, instance.budgetdeliverymethod, instance.budgetstatus) rslts = service.mutate([mutatestring]) instance.budgetid = rslts['value'][0]['budgetId'] # we are modifying an item else: # create the mutate string mutatestring = Budget.modifydict(instance.budgetid, instance.budgetname, instance.budgetamount, instance.budgetdeliverymethod, instance.budgetstatus) rslts = service.mutate([mutatestring])
def receiver_pre_delete(**kwargs): client = adwords.AdWordsClient.LoadFromStorage() service = Budget.serviceobj(client) instance = kwargs['instance'] # this variable is set in the overridden delete method, if it is set to # false save is probably being called from Budget.addbudget # or Budget.removebudget, or specified by kwargs if (instance.sync_aw): mutatestring = Budget.deldict(instance.budgetid) rslts = service.mutate([mutatestring]) if (rslts['value'][0]['status'] != 'REMOVED'): raise IOError( 'Django Adwords did not successfully set the item to "REMOVED"' )