示例#1
0
def do_sync(args):
    LOGGER.info("Starting sync.")
    
    global configs
    
    configs = load_config(args.config)
    config = configs.get("api_credentials")
    
    campaign_sync_start_date = None if args.start_date is None else args.start_date
    campaign_sync_end_date = None if args.start_date is None else args.end_date
    
    access_token = generate_token(
        client_id=config.get('client_id'),
        client_secret=config.get('client_secret'),
        username=config.get('username'),
        password=config.get('password'))
       
  
    allowed_accounts = sync_allowed_accounts(access_token)

    if(allowed_accounts):
        for allowed_account in allowed_accounts:

            partner_types = allowed_account.get("partner_types").split(",")
            account_id = allowed_account.get("account_id","")
#             Check if partner types have values ADVERTISER
            if('ADVERTISER' in partner_types):
                LOGGER.info("Fetching campaign for account : {}".format(account_id))
                sync_campaigns(access_token, account_id)
                sync_campaign_performance(access_token, account_id, campaign_sync_start_date, campaign_sync_end_date)
            else:
                LOGGER.info("Not fetching campaign for account : {}".format(account_id))
示例#2
0
def insert_allowed_account(allowed_account):
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    account_id = allowed_account.get('account_id')
    name = allowed_account.get('name', '')

    #     Get Taboola Platform ID
    platform_id = getPlatformId()

    #     check if already exist then update it else insert
    data = db.query(
        "SELECT * FROM dsp_partner_brands WHERE code = '{}' ".format(
            account_id))

    if (data):
        LOGGER.info("Updating account_id : {} ".format(account_id))

        statement = "UPDATE dsp_partner_brands set name = '{}', updated_at = now() WHERE code = '{}'".format(
            name, account_id)
        db.execute(statement)

    else:
        LOGGER.info("Inserting account_id : {} ".format(account_id))
        statement = "INSERT INTO dsp_partner_brands (name,code,dsp_demand_side_platform_id,id,created_at,updated_at) VALUES ('{}','{}',unhex('{}'),unhex(replace(uuid(),'-','')),now(), now())".format(
            name, account_id, platform_id)
        db.execute(statement)

    return True
示例#3
0
def insert_partner_campaigns():
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    platform_id = getPlatformId()

    outbrain_platform_id = getOutbrainPlatformId()

    LOGGER.info("Inserting Partner Campaigns")

    statement = "TRUNCATE table dim_partner_campaigns"
    db.execute(statement)

    statement = "INSERT INTO dim_partner_campaigns (dsp_partner_campaign_id, dsp_partner_campaign_name, dsp_partner_brand_id, dsp_partner_brand_name, dsp_demand_side_platform_id, dsp_demand_side_platform_name) (SELECT c.id, c.NAME, b.id, b.NAME, d.id, d.NAME FROM dsp_partner_campaigns c LEFT JOIN dsp_partner_brands b ON c.dsp_partner_brand_id = b.id LEFT JOIN dsp_partner_campaign_demand_side_platforms cd ON c.id = cd.dsp_partner_campaign_id LEFT JOIN dsp_demand_side_platforms d ON cd.dsp_demand_side_platform_id = d.id WHERE cd.dsp_demand_side_platform_id = unhex('{}'))".format(
        platform_id)
    db.execute(statement)

    statement = "INSERT INTO dim_partner_campaigns (dsp_partner_campaign_id, dsp_partner_campaign_name, dsp_partner_brand_id, dsp_partner_brand_name, dsp_demand_side_platform_id, dsp_demand_side_platform_name) (SELECT c.id, c.NAME, b.id, b.NAME, d.id, d.NAME FROM dsp_partner_campaigns c LEFT JOIN dsp_partner_brands b ON c.dsp_partner_brand_id = b.id LEFT JOIN dsp_partner_campaign_demand_side_platforms cd ON c.id = cd.dsp_partner_campaign_id LEFT JOIN dsp_demand_side_platforms d ON cd.dsp_demand_side_platform_id = d.id WHERE cd.dsp_demand_side_platform_id = unhex('{}'))".format(
        outbrain_platform_id)
    db.execute(statement)

    return True
示例#4
0
def parse_allowed_account(allowed_account):
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    partner_types = allowed_account.get('partner_types')
    if partner_types:
        partner_types = ",".join(partner_types)

    campaign_types = allowed_account.get('campaign_types')
    if campaign_types:
        campaign_types = ",".join(campaign_types)

    account_id = allowed_account.get('account_id')
    name = allowed_account.get('name', '')

    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    account = {
        'api_id': str(allowed_account.get('api_id')),
        'name': str(name),
        'account_id': str(account_id),
        'partner_types': str(partner_types),
        'type': str(allowed_account.get('type', '')),
        'campaign_types': str(campaign_types),
    }

    return account
def parse_allowed_account(allowed_account):
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    partner_types = allowed_account.get('partner_types')
    if partner_types:
        partner_types = ",".join(partner_types)

    campaign_types = allowed_account.get('campaign_types')
    if campaign_types:
        campaign_types = ",".join(campaign_types)

    api_id = allowed_account.get('id')

    #     check if already exist then update it else insert
    data = db.query(
        "SELECT * FROM taboola_accounts WHERE api_id = {} ".format(api_id))

    if (data):
        account = {
            'api_id': str(api_id),
            'name': str(allowed_account.get('name', '')),
            'account_id': str(allowed_account.get('account_id', '')),
            'partner_types': str(partner_types),
            'type': str(allowed_account.get('type', '')),
            'campaign_types': str(campaign_types),
            'updated_at': str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
        }
        LOGGER.info("Updating account_id : {} ".format(
            str(allowed_account.get('account_id', ''))))
        conditions = {'api_id': str(api_id)}
        statement = db.prepare_update_statement("taboola_accounts", account,
                                                conditions)
        db.execute(statement)

    else:
        account = {
            'api_id': str(api_id),
            'name': str(allowed_account.get('name', '')),
            'account_id': str(allowed_account.get('account_id', '')),
            'partner_types': str(partner_types),
            'type': str(allowed_account.get('type', '')),
            'campaign_types': str(campaign_types),
            'created_at': str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
            'updated_at': str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
        }
        LOGGER.info("Inserting account_id : {} ".format(
            str(allowed_account.get('account_id', ''))))
        statement = db.prepare_insert_statement("taboola_accounts", account)
        db.execute(statement)

    return account
示例#6
0
def getDSPPartnerBrandId(code):
    
    brand_id = ''
    
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'), user=config.get('user'),password=config.get('password'),host=config.get('host'))
    
    data = db.get("SELECT hex(id) as brand_id FROM dsp_partner_brands WHERE code = '{}' " .format(code))

    if (data):
        brand_id = data.get('brand_id')
        
        
    return brand_id
示例#7
0
def getPlatformId():
    
    platform_id = ''
    
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'), user=config.get('user'),password=config.get('password'),host=config.get('host'))
    
    data = db.get("SELECT hex(id) as platform_id FROM dsp_demand_side_platforms WHERE name = '{}' " .format(PLATFORM_NAME))

    if (data):
        platform_id = data.get('platform_id')
        
        
    return platform_id
示例#8
0
def parse_campaign(campaign):

    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    api_id = campaign.get('id')

    start_date = campaign.get('start_date')
    end_date = campaign.get('end_date')

    country_targeting = campaign.get('country_targeting')
    if country_targeting:
        country_targeting = ",".join(country_targeting)

    platform_targeting = campaign.get('platform_targeting')
    if platform_targeting:
        platform_targeting = ",".join(platform_targeting)

    publisher_targeting = campaign.get('publisher_targeting')
    if publisher_targeting:
        publisher_targeting = ",".join(publisher_targeting)

    api_id = campaign.get('id')
    name = campaign.get('name', '')
    advertiser_id = campaign.get('advertiser_id')

    temp_campaign = {
        'api_id': str(api_id),
        'advertiser_id': str(advertiser_id),
        'name': str(name),
        'tracking_code': str(campaign.get('tracking_code', '')),
        'cpc': str(campaign.get('cpc', '')),
        'daily_cap': str(campaign.get('daily_cap', '')),
        'spending_limit': str(campaign.get('spending_limit', '')),
        'spending_limit_model': str(campaign.get('spending_limit_model', '')),
        'country_targeting': str(country_targeting),
        'platform_targeting': str(platform_targeting),
        'publisher_targeting': str(publisher_targeting),
        'start_date': str('9999-12-31' if start_date is None else start_date),
        'end_date': str('9999-12-31' if end_date is None else end_date),
        'approval_state': str(campaign.get('approval_state', '')),
        'is_active': str(campaign.get('is_active', False)),
        'spent': str(campaign.get('spent', '')),
        'status': str(campaign.get('status', '')),
    }

    return temp_campaign
示例#9
0
def parse_allowed_account(allowed_account):
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'), user=config.get('user'),password=config.get('password'),host=config.get('host'))
    
    partner_types = allowed_account.get('partner_types')
    if partner_types:
        partner_types = ",".join(partner_types)
        
    campaign_types = allowed_account.get('campaign_types')
    if campaign_types:
        campaign_types = ",".join(campaign_types)
    
    account_id = allowed_account.get('account_id')
    name = allowed_account.get('name', '')
    
    now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    
#     Get Taboola Platform ID
    platform_id = getPlatformId() 
    
#     check if already exist then update it else insert
    data = db.query("SELECT * FROM dsp_partner_brands WHERE code = '{}' " .format(account_id))
    
    if (data):
        LOGGER.info("Updating account_id : {} ".format(account_id))

        statement = "UPDATE dsp_partner_brands set name = '{}', updated_at = now() WHERE code = '{}'".format(name, account_id)
        db.execute(statement)
        
    else:
        LOGGER.info("Inserting account_id : {} ".format(account_id))
        statement = "INSERT INTO dsp_partner_brands (name,code,dsp_demand_side_platform_id,id,created_at,updated_at) VALUES ('{}','{}',unhex('{}'),unhex(replace(uuid(),'-','')),now(), now())".format(name, account_id, platform_id)
        db.execute(statement)
    
    
    account = {
            'api_id': str(allowed_account.get('api_id')),
            'name': str(name),
            'account_id': str(account_id),
            'partner_types':  str(partner_types),
            'type': str(allowed_account.get('type', '')),
            'campaign_types': str(campaign_types),
        }
    
    
    return account
示例#10
0
def getOutbrainPlatformId():

    LOGGER.info("Reading platform_id from Database")
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    data = db.get(
        "SELECT hex(id) as platform_id FROM dsp_demand_side_platforms WHERE name = '{}' "
        .format(PLATFORM_NAME_OUTBRAIN))

    if (data):
        platform_id = data.get('platform_id')

    return platform_id
示例#11
0
def insert_campaign(campaign):

    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    api_id = campaign.get('api_id')
    name = campaign.get('name', '')
    advertiser_id = campaign.get('advertiser_id')

    #     Get Partner Brand Id
    brand_id = getDSPPartnerBrandId(advertiser_id)

    #     Get Taboola Platform ID
    platform_id = getPlatformId()

    #     check if already exist then update it else insert
    data = db.query(
        "SELECT * FROM dsp_partner_campaigns WHERE code = '{}' ".format(
            api_id))

    if (data):
        LOGGER.info("Updating Campaign for api_id : {} ".format(api_id))

        statement = "UPDATE dsp_partner_campaigns set name = '{}', updated_at = now() WHERE code = '{}'".format(
            name, api_id)
        db.execute(statement)

    else:
        LOGGER.info("Inserting Campaign for api_id : {} ".format(api_id))
        #         Insert campaign in dsp_partner_campaigns
        statement = "INSERT INTO dsp_partner_campaigns (name,code,dsp_partner_brand_id,id,created_at,updated_at) VALUES ('{}','{}',unhex('{}'),unhex(replace(uuid(),'-','')),now(), now())".format(
            name, api_id, brand_id)
        db.execute(statement)

        campaign_id = getDSPPartnerCampaignId(api_id)
        #         Insert campaign in dsp_partner_campaign_demand_side_platforms
        statement = "INSERT INTO dsp_partner_campaign_demand_side_platforms (dsp_partner_campaign_id,dsp_demand_side_platform_id) VALUES (unhex('{}'),unhex('{}'))".format(
            campaign_id, platform_id)
        db.execute(statement)

    return True
示例#12
0
def parse_campaign_performance(campaign_performance):

    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    campaign_id = str(campaign_performance.get('campaign'))

    impressions = campaign_performance.get('impressions', '')
    clicks = campaign_performance.get('clicks', '')
    last_click = campaign_performance.get('cpa_actions_num', '')
    spend = campaign_performance.get('spent', '')

    temp_campaign_performance = {
        'campaign_id':
        str(campaign_id),
        'impressions':
        str(impressions),
        'ctr':
        str(campaign_performance.get('ctr', '')),
        'cpc':
        str(campaign_performance.get('cpc', '')),
        'cpa_actions_num':
        str(last_click),
        'cpa':
        str(campaign_performance.get('cpa', '')),
        'cpm':
        str(campaign_performance.get('cpm', '')),
        'clicks':
        str(clicks),
        'currency':
        str(campaign_performance.get('currency', '')),
        'cpa_conversion_rate':
        str(campaign_performance.get('cpa_conversion_rate', '')),
        'spent':
        str(spend),
        'campaign_date':
        str(campaign_performance.get('date')),
    }

    return temp_campaign_performance
示例#13
0
def parse_campaign(campaign):
    
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'), user=config.get('user'),password=config.get('password'),host=config.get('host'))
    
    api_id = campaign.get('id')
    
    start_date = campaign.get('start_date')
    end_date = campaign.get('end_date')
    
    country_targeting = campaign.get('country_targeting')
    if country_targeting:
        country_targeting = ",".join(country_targeting)
        
    platform_targeting = campaign.get('platform_targeting')
    if platform_targeting:
        platform_targeting = ",".join(platform_targeting)
        
    publisher_targeting = campaign.get('publisher_targeting')
    if publisher_targeting:
        publisher_targeting = ",".join(publisher_targeting)
        
    api_id = campaign.get('id')
    name = campaign.get('name', '')
    advertiser_id = campaign.get('advertiser_id')
    
#     Get Partner Brand Id
    brand_id = getDSPPartnerBrandId(advertiser_id)
    
#     Get Taboola Platform ID
    platform_id = getPlatformId() 
    
#     check if already exist then update it else insert
    data = db.query("SELECT * FROM dsp_partner_campaigns WHERE code = '{}' " .format(api_id))

    if (data):
        LOGGER.info("Updating Campaign for api_id : {} ".format(api_id))

        statement = "UPDATE dsp_partner_campaigns set name = '{}', updated_at = now() WHERE code = '{}'".format(name, api_id)
        db.execute(statement)
        
    else:
        LOGGER.info("Inserting Campaign for api_id : {} ".format(api_id))
#         Insert campaign in dsp_partner_campaigns
        statement = "INSERT INTO dsp_partner_campaigns (name,code,dsp_partner_brand_id,id,created_at,updated_at) VALUES ('{}','{}',unhex('{}'),unhex(replace(uuid(),'-','')),now(), now())".format(name, api_id, brand_id)
        db.execute(statement)
        
        
        campaign_id = getDSPPartnerCampaignId(api_id)
#         Insert campaign in dsp_partner_campaign_demand_side_platforms
        statement = "INSERT INTO dsp_partner_campaign_demand_side_platforms (dsp_partner_campaign_id,dsp_demand_side_platform_id) VALUES (unhex('{}'),unhex('{}'))".format(campaign_id, platform_id)
        db.execute(statement)
    
    
    temp_campaign = {
            'api_id': str(api_id),
            'advertiser_id': str(advertiser_id),
            'name': str(name),
            'tracking_code': str(campaign.get('tracking_code', '')),
            'cpc': str(campaign.get('cpc', '')),
            'daily_cap': str(campaign.get('daily_cap', '')),
            'spending_limit': str(campaign.get('spending_limit', '')),
            'spending_limit_model': str(campaign.get('spending_limit_model', '')),
            'country_targeting': str(country_targeting),
            'platform_targeting': str(platform_targeting),
            'publisher_targeting': str(publisher_targeting),
            'start_date': str('9999-12-31' if start_date is None else start_date),
            'end_date': str('9999-12-31' if end_date is None else end_date),
            'approval_state': str(campaign.get('approval_state', '')),
            'is_active': str(campaign.get('is_active',False)),
            'spent': str(campaign.get('spent', '')),
            'status': str(campaign.get('status', '')),
        }
    
    
    return temp_campaign
示例#14
0
def parse_campaign_performance(campaign_performance):
    
    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'), user=config.get('user'),password=config.get('password'),host=config.get('host'))
    
    campaign_id = str(campaign_performance.get('campaign'))
    campaign_date = str(datetime.strptime( campaign_performance.get('date'),'%Y-%m-%d %H:%M:%S.%f').date())
    campaign_timestamp = str(datetime.strptime( campaign_performance.get('date'),'%Y-%m-%d %H:%M:%S.%f').timestamp())
    campaign_action_hour = str(datetime.strptime( campaign_performance.get('date'),'%Y-%m-%d %H:%M:%S.%f').time())

    
    impressions = campaign_performance.get('impressions', '')
    clicks = campaign_performance.get('clicks', '')
    last_click = campaign_performance.get('cpa_actions_num','')
    spend = campaign_performance.get('spent', '')
    
    dsp_brand_id = ''
    dsp_campaign_id = ''
    
    dsp_campaign_data = db.get("SELECT hex(id) as campaign_id, hex(dsp_partner_brand_id) as brand_id FROM dsp_partner_campaigns WHERE code = '{}' " .format(campaign_id))
    if (dsp_campaign_data):
        dsp_campaign_id = dsp_campaign_data.get('campaign_id')
        dsp_brand_id = dsp_campaign_data.get('brand_id')
    
    
    platform_id = getPlatformId()
    
    #     check if already exist then update it else insert
    data = db.query("SELECT * FROM fact_platform_campaigns WHERE dsp_partner_campaign_id = unhex('{}') AND action_date = '{}'" .format(dsp_campaign_id, campaign_date))

    if (data):

        LOGGER.info("Updating Campaign Performace for campaign_id : {} and campaign_date = {}".format(campaign_id, campaign_date))
        statement = "UPDATE fact_platform_campaigns set impressions = '{}', clicks = '{}', last_click = '{}', spend = '{}'  WHERE dsp_partner_campaign_id = unhex('{}') AND action_date = '{}'".format(impressions, clicks, last_click, spend,dsp_campaign_id,campaign_date)
        db.execute(statement)
        
    else:
        
        LOGGER.info("Inserting Campaign Performace for campaign_id : {} and campaign_date = {}".format(campaign_id, campaign_date))
        statement = "INSERT INTO fact_platform_campaigns (unix_timestamp,action_date,action_hour,impressions,clicks,last_click,spend,dsp_partner_brand_id,dsp_partner_campaign_id,dsp_demand_side_platform_id) VALUES ('{}','{}','0', '{}','{}','{}','{}',unhex('{}'),unhex('{}'),unhex('{}'))".format(campaign_timestamp, campaign_date, impressions, clicks, last_click, spend, dsp_brand_id, dsp_campaign_id, platform_id)
#         LOGGER.info("Insert Statement : {}".format(statement))
        db.execute(statement)
    
    temp_campaign_performance = {
            'campaign_id': str(campaign_id),
            'impressions': str(impressions),
            'ctr': str(campaign_performance.get('ctr', '')),
            'cpc': str(campaign_performance.get('cpc', '')),
            'cpa_actions_num': str(last_click),
            'cpa': str(campaign_performance.get('cpa', '')),
            'cpm': str(campaign_performance.get('cpm', '')),
            'clicks': str(clicks),
            'currency': str(campaign_performance.get('currency', '')),
            'cpa_conversion_rate': str(campaign_performance.get('cpa_conversion_rate', '')),
            'spent': str(spend),
            'campaign_date': str(campaign_date),
            'created_at' : str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
            'updated_at' : str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
        }
    
    
    return temp_campaign_performance
def parse_campaign_performance(campaign_performance):

    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    campaign_id = str(campaign_performance.get('campaign'))
    campaign_date = str(
        datetime.strptime(campaign_performance.get('date'),
                          '%Y-%m-%d %H:%M:%S.%f').date())

    #     check if already exist then update it else insert
    data = db.query(
        "SELECT * FROM taboola_campaign_performances WHERE campaign_id = {} AND campaign_date = '{}'"
        .format(campaign_id, campaign_date))

    if (data):
        temp_campaign_performance = {
            'campaign_id':
            str(campaign_performance.get('campaign')),
            'impressions':
            str(campaign_performance.get('impressions', '')),
            'ctr':
            str(campaign_performance.get('ctr', '')),
            'cpc':
            str(campaign_performance.get('cpc', '')),
            'cpa_actions_num':
            str(campaign_performance.get('cpa_actions_num', '')),
            'cpa':
            str(campaign_performance.get('cpa', '')),
            'cpm':
            str(campaign_performance.get('cpm', '')),
            'clicks':
            str(campaign_performance.get('clicks', '')),
            'currency':
            str(campaign_performance.get('currency', '')),
            'cpa_conversion_rate':
            str(campaign_performance.get('cpa_conversion_rate', '')),
            'spent':
            str(campaign_performance.get('spent', '')),
            'campaign_date':
            str(
                datetime.strptime(campaign_performance.get('date'),
                                  '%Y-%m-%d %H:%M:%S.%f').date()),
            'updated_at':
            str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
        }
        LOGGER.info(
            "Updating Campaign Performace for campaign_id : {} and campaign_date = {}"
            .format(campaign_id, campaign_date))
        conditions = {'id': str(data[0].get('id'))}
        statement = db.prepare_update_statement(
            "taboola_campaign_performances", temp_campaign_performance,
            conditions)
        db.execute(statement)

    else:
        temp_campaign_performance = {
            'campaign_id':
            str(campaign_performance.get('campaign')),
            'impressions':
            str(campaign_performance.get('impressions', '')),
            'ctr':
            str(campaign_performance.get('ctr', '')),
            'cpc':
            str(campaign_performance.get('cpc', '')),
            'cpa_actions_num':
            str(campaign_performance.get('cpa_actions_num', '')),
            'cpa':
            str(campaign_performance.get('cpa', '')),
            'cpm':
            str(campaign_performance.get('cpm', '')),
            'clicks':
            str(campaign_performance.get('clicks', '')),
            'currency':
            str(campaign_performance.get('currency', '')),
            'cpa_conversion_rate':
            str(campaign_performance.get('cpa_conversion_rate', '')),
            'spent':
            str(campaign_performance.get('spent', '')),
            'campaign_date':
            str(
                datetime.strptime(campaign_performance.get('date'),
                                  '%Y-%m-%d %H:%M:%S.%f').date()),
            'created_at':
            str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
            'updated_at':
            str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
        }
        LOGGER.info(
            "Inserting Campaign Performace for campaign_id : {} and campaign_date = {}"
            .format(campaign_id, campaign_date))
        statement = db.prepare_insert_statement(
            "taboola_campaign_performances", temp_campaign_performance)
        db.execute(statement)

    return temp_campaign_performance
def parse_campaign(campaign):

    config = configs.get("db_credentials")
    db = database.Connection(database=config.get('database'),
                             user=config.get('user'),
                             password=config.get('password'),
                             host=config.get('host'))

    api_id = campaign.get('id')

    start_date = campaign.get('start_date')
    end_date = campaign.get('end_date')

    country_targeting = campaign.get('country_targeting')
    if country_targeting:
        country_targeting = ",".join(country_targeting)

    platform_targeting = campaign.get('platform_targeting')
    if platform_targeting:
        platform_targeting = ",".join(platform_targeting)

    publisher_targeting = campaign.get('publisher_targeting')
    if publisher_targeting:
        publisher_targeting = ",".join(publisher_targeting)


#     check if already exist then update it else insert
    data = db.query(
        "SELECT * FROM taboola_campaigns WHERE api_id = {} ".format(api_id))

    if (data):
        temp_campaign = {
            'api_id': str(campaign.get('id')),
            'advertiser_id': str(campaign.get('advertiser_id', '')),
            'name': str(campaign.get('name', '')),
            'tracking_code': str(campaign.get('tracking_code', '')),
            'cpc': str(campaign.get('cpc', '')),
            'daily_cap': str(campaign.get('daily_cap', '')),
            'spending_limit': str(campaign.get('spending_limit', '')),
            'spending_limit_model':
            str(campaign.get('spending_limit_model', '')),
            'country_targeting': str(country_targeting),
            'platform_targeting': str(platform_targeting),
            'publisher_targeting': str(publisher_targeting),
            'start_date':
            str('9999-12-31' if start_date is None else start_date),
            'end_date': str('9999-12-31' if end_date is None else end_date),
            'approval_state': str(campaign.get('approval_state', '')),
            'is_active': str(campaign.get('is_active', False)),
            'spent': str(campaign.get('spent', '')),
            'status': str(campaign.get('status', '')),
            'updated_at': str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
        }
        LOGGER.info("Updating Campaign for advertiser_id : {} ".format(
            str(campaign.get('advertiser_id', ''))))
        conditions = {'api_id': str(api_id)}
        statement = db.prepare_update_statement("taboola_campaigns",
                                                temp_campaign, conditions)
        db.execute(statement)

    else:
        temp_campaign = {
            'api_id': str(campaign.get('id')),
            'advertiser_id': str(campaign.get('advertiser_id', '')),
            'name': str(campaign.get('name', '')),
            'tracking_code': str(campaign.get('tracking_code', '')),
            'cpc': str(campaign.get('cpc', '')),
            'daily_cap': str(campaign.get('daily_cap', '')),
            'spending_limit': str(campaign.get('spending_limit', '')),
            'spending_limit_model':
            str(campaign.get('spending_limit_model', '')),
            'country_targeting': str(country_targeting),
            'platform_targeting': str(platform_targeting),
            'publisher_targeting': str(publisher_targeting),
            'start_date':
            str('9999-12-31' if start_date is None else start_date),
            'end_date': str('9999-12-31' if end_date is None else end_date),
            'approval_state': str(campaign.get('approval_state', '')),
            'is_active': str(campaign.get('is_active', False)),
            'spent': str(campaign.get('spent', '')),
            'status': str(campaign.get('status', '')),
            'created_at': str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
            'updated_at': str(datetime.now().strftime('%Y-%m-%d %H:%M:%S')),
        }
        LOGGER.info("Inserting Campaign for advertiser_id : {} ".format(
            str(campaign.get('advertiser_id', ''))))
        statement = db.prepare_insert_statement("taboola_campaigns",
                                                temp_campaign)
        db.execute(statement)

    return temp_campaign