Пример #1
0
def get_keywords(set):
    '''
    Returns list of Keyword instances from given set.
    
    @param set: str
    
    @return: list
    '''
    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()
        
        keywords = []
        for adgroup in adgroups.all():
            keywords += processor.get_keywords(campaign.id, adgroup.id)
        
        processor.sign_out()
    
    return keywords
Пример #2
0
def clone_account(email_source, email_dest):
    '''
    Clones an account identified by its email to another one.
    
    Destination account should be empty (or at least to be capable enough
    to store all source account data). Removes source account after cloning.
    
    @param email_source: str
    @param email_dest: str
    '''
    account_from = session.query(Account).filter(Account.email == email_source).one()
    account_to = session.query(Account).filter(Account.email == email_dest).one()
    
    processor_from = RequestProcessor(account_from.email, account_from.password)
    processor_from.sign_in()
    
    processor_to = RequestProcessor(account_to.email, account_to.password)
    processor_to.sign_in()
    
    campaigns = session.query(Campaign).join(AdGroup).group_by(Campaign) \
        .filter(Campaign.account_id == account_from.id).all()
        
    for campaign in campaigns:
        adgroups = session.query(AdGroup).filter(AdGroup.campaign_id == campaign.id).all()
        first_adgroup = adgroups.pop(0)
        first_adgroup_keywords = processor_from.get_keywords(campaign.id, first_adgroup.id)
        
        new_campaign_name = Campaign.find_unique_name(account_to)
        new_adgroup_name = AdGroup.find_unique_name(first_adgroup.set)
        new_campaign_id, new_adgroup_id = processor_to.add_campaign(
            new_campaign_name, new_adgroup_name,
            first_adgroup.display_url, preprocess_url(first_adgroup.default_url, new_campaign_name, new_adgroup_name), 
            first_adgroup.headline, first_adgroup.adline1, first_adgroup.adline2, 
            preprocess_keywords(first_adgroup_keywords, plain=True), first_adgroup.default_bid
        )
        UsedNames.add_entity(Campaign.__name__, new_campaign_id, account_to.id, new_campaign_name)
        UsedNames.add_entity(AdGroup.__name__, new_adgroup_id, new_campaign_id, new_adgroup_name)
        
        processor_to.set_keywords(new_campaign_id, new_adgroup_id, preprocess_keywords(first_adgroup_keywords, new_campaign_name, new_adgroup_name))
        
        session.add(Campaign(long(new_campaign_id), account_to.id))
        session.add(AdGroup(long(new_adgroup_id), long(new_campaign_id), first_adgroup.set, 
                first_adgroup.default_bid, first_adgroup.default_url, first_adgroup.display_url, 
                first_adgroup.headline, first_adgroup.adline1, first_adgroup.adline2))
        
        for adgroup in adgroups:
            adgroup_keywords = processor_from.get_keywords(campaign.id, adgroup.id)
            
            campaign_name = UsedNames.get_entity_name(Campaign.__name__, campaign.id)
            new_adgroup_name = AdGroup.find_unique_name(adgroup.set, campaign)
            new_adgroup_id = processor_to.add_adgroup(
                campaign.id, new_adgroup_name, adgroup.display_url, preprocess_url(adgroup.default_url, campaign_name, new_adgroup_name), 
                adgroup.headline, adgroup.adline1, adgroup.adline2, 
                preprocess_keywords(adgroup_keywords, plain=True), adgroup.default_bid
            )
            UsedNames.add_entity(AdGroup.__name__, new_adgroup_id, campaign.id, new_adgroup_name)
            processor_to.set_keywords(campaign.id, adgroup.id, preprocess_keywords(first_adgroup_keywords, campaign_name, new_adgroup_name))
            
            session.add(AdGroup(long(new_adgroup_id), campaign.id, adgroup.set,
                adgroup.default_bid, adgroup.default_url, adgroup.display_url, 
                adgroup.headline, adgroup.adline1, adgroup.adline2))
            
    session.commit()
    processor_from.sign_out()
    processor_to.sign_out()
    remove_account(email_source)