Пример #1
0
def drop_set(set):
    '''
    Deletes the current set of keywords with related AdGroups.
    
    @param set: str
    '''
    adgroups = session.query(AdGroup).filter(AdGroup.set == set)
    
    if adgroups.count() == 0:
        raise ValueError('Set "%s" not found' % set)
    else:
        campaign = adgroups.first().campaign
        
        processor = RequestProcessor(campaign.account.email, campaign.account.password)
        processor.sign_in()
        
        for adgroup in adgroups.all():
            processor.delete_adgroup(campaign.id, adgroup.id)
            UsedNames.remove_entity(AdGroup.__name__, adgroup.id)
            session.delete(adgroup)
        
        session.commit()
        processor.sign_out()
Пример #2
0
def modify_keywords(set, new_keywords):
    '''
    Resubmits the keywords list of a given set with a new one.
    
    List can contain both strings and Keyword instances
    
    @param set: str
    @param keywords: list
    ''' 
    adgroups = session.query(AdGroup).filter(AdGroup.set == set)
    
    if adgroups.count() == 0:
        raise ValueError('Set "%s" not found' % set)
    if len(new_keywords) == 0:
        raise ValueError('"new_keywords" should not be empty')
    
    campaign = adgroups.first().campaign
    processor = RequestProcessor(campaign.account.email, campaign.account.password)
    processor.sign_in()
    
    an_adgroup = adgroups.first()
    adgroups = adgroups.all()
    
    while True:
        adgroup = adgroups.pop(0)
        keywords_part = new_keywords[:settings.MAX_KEYWORDS_PER_ADGROUP]
        new_keywords = new_keywords[settings.MAX_KEYWORDS_PER_ADGROUP:]
        
        campaign_name = UsedNames.get_entity_name(Campaign.__name__, campaign.id)
        adgroup_name = UsedNames.get_entity_name(AdGroup.__name__, adgroup.id)
        processor.set_keywords(campaign.id, adgroup.id, preprocess_keywords(keywords_part, campaign_name, adgroup_name))
        
        if len(adgroups) == 0 or len(new_keywords) == 0:
            break
        
    if len(adgroups) > 0:
        for adgroup_to_remove in adgroups:
            processor.delete_adgroup(campaign.id, adgroup_to_remove.id)
            session.delete(adgroup_to_remove)
            
    while len(new_keywords) > 0:
        if not (len(campaign.adgroups) < settings.MAX_ADGROUPS_PER_CAMPAIGN):
            raise OverflowError('limits exceeded during modifying keywords')
        
        new_adgroup_name = AdGroup.find_unique_name(set, campaign)
        campaign_name = UsedNames.get_entity_name(Campaign.__name__, campaign.id)
        new_adgroup_id = processor.add_adgroup(
            campaign.id, new_adgroup_name, an_adgroup.display_url, preprocess_url(an_adgroup.default_url, campaign_name, new_adgroup_name), 
            an_adgroup.headline, an_adgroup.adline1, an_adgroup.adline2, 
            preprocess_keywords(new_keywords[:settings.MAX_KEYWORDS_PER_ADGROUP], plain=True), an_adgroup.default_bid
        )
        UsedNames.add_entity(AdGroup.__name__, new_adgroup_id, campaign.id, new_adgroup_name)
        processor.set_keywords(campaign.id, new_adgroup_id, preprocess_keywords(new_keywords[:settings.MAX_KEYWORDS_PER_ADGROUP], campaign_name, new_adgroup_name))
        
        adgroup = AdGroup(long(new_adgroup_id), campaign.id, set,
            an_adgroup.default_bid, an_adgroup.default_url, an_adgroup.display_url, 
            an_adgroup.headline, an_adgroup.adline1, an_adgroup.adline2)
        session.add(adgroup)
        
        new_keywords = new_keywords[settings.MAX_KEYWORDS_PER_ADGROUP:]
        
    session.commit()
    processor.sign_out()