def dv_insertion_order_load_multiple(): campaigns = set([ lookup_id(row[0]) for row in get_rows( config, task["auth_sheets"], { "sheets": { "sheet": task["sheet"], "tab": "DV Campaigns", "header": False, "range": "A2:A" } }) ]) rows = get_rows( config, task["auth_sheets"], { "sheets": { "sheet": task["sheet"], "tab": "DV Advertisers", "header": False, "range": "A2:A" } }) # String for filtering which entityStatus enums we want to see in the sheet for row in rows: for record in API_DV360( config, task["auth_dv"], iterate=True ).advertisers().insertionOrders( ).list(advertiserId=lookup_id(row[0]), filter= 'entityStatus="ENTITY_STATUS_PAUSED" OR entityStatus="ENTITY_STATUS_ACTIVE" OR entityStatus="ENTITY_STATUS_DRAFT"' ).execute(): if not campaigns or record['campaignId'] in campaigns: yield record
def frequency_cap_patch(commit=False): patches = [] rows = get_rows( project.task["auth_bigquery"], { "bigquery": { "dataset": project.task["dataset"], "table":"PATCH_FrequencyCaps", }}, as_object=True ) for row in rows: frequency_cap = {} if row['Unlimited'] != row['Unlimited_Edit']: frequency_cap.setdefault("frequencyCap", {}) frequency_cap["frequencyCap"]["unlimited"] = row['Unlimited_Edit'] if row['Time_Unit'] != row['Time_Unit_Edit']: frequency_cap.setdefault("frequencyCap", {}) frequency_cap["frequencyCap"]["timeUnit"] = row['Time_Unit_Edit'] if row['Time_Count'] != row['Time_Count_Edit']: frequency_cap.setdefault("frequencyCap", {}) frequency_cap["frequencyCap"]["timeUnitCount"] = row['Time_Count_Edit'] if row['Max_impressions'] != row['Max_impressions_Edit']: frequency_cap.setdefault("frequencyCap", {}) frequency_cap["frequencyCap"]["maxImpressions"] = row['Max_impressions_Edit'] if frequency_cap: patch = { "operation": "Frequency Caps", "action": "PATCH", "partner": row['Partner'], "advertiser": row['Advertiser'], "parameters": { "advertiserId": lookup_id(row['Advertiser']), "body": frequency_cap } } if row['Line_Item']: patch["line_item"] = row['Line_Item'] patch["parameters"]["lineItemId"] = lookup_id(row['Line_Item']) elif row['Insertion_Order']: patch["insertion_order"] = row['Insertion_Order'] patch["parameters"]["insertionOrderId"] = lookup_id(row['Insertion_Order']) else: patch["campaign"] = row['Campaign'] patch["parameters"]["campaignId"] = lookup_id(row['Campaign']) patches.append(patch) patch_masks(patches) patch_preview(patches) if commit: insertion_order_commit(patches) line_item_commit(patches) campaign_commit(patches)
def load_multiple(): partners = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Partners', 'range': 'A2:A' } }) for partner in partners: yield from API_DV360( project.task['auth_dv'], iterate=True).partners().channels().list( partnerId=lookup_id(partner[0])).execute() advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( project.task['auth_dv'], iterate=True).advertisers().channels().list( advertiserId=lookup_id(advertiser[0])).execute()
def line_item_load_multiple(): campaigns = set([ lookup_id(row[0]) for row in get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Campaigns", "range": "A2:A" } }) ]) rows = get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Advertisers", "range": "A2:A" } }) # String for filtering which entityStatus enums we want to see in the sheet for row in rows: for record in API_DV360( project.task["auth_dv"], iterate=True ).advertisers().lineItems( ).list(advertiserId=lookup_id(row[0]), filter= 'entityStatus = "ENTITY_STATUS_ARCHIVED" OR entityStatus="ENTITY_STATUS_PAUSED" OR entityStatus="ENTITY_STATUS_ACTIVE" OR entityStatus="ENTITY_STATUS_DRAFT"' ).execute(): if not campaigns or record['campaignId'] in campaigns: yield record
def load_multiple(): partners = get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'Partners', 'header': False, 'range': 'A2:A' } }) for partner in partners: yield from API_DV360( config, task['auth_dv'], iterate=True).inventorySources().list( partnerId=lookup_id(partner[0])).execute() advertisers = get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'Advertisers', 'header': False, 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( config, task['auth_dv'], iterate=True).inventorySources().list( advertiserId=lookup_id(advertiser[0])).execute()
def integration_detail_patch(commit=False): patches = [] rows = get_rows(project.task["auth_bigquery"], { "bigquery": { "dataset": project.task["dataset"], "table": "PATCH_IntegrationDetails", } }, as_object=True) for row in rows: integration_details = {} if row['Integration_Code'] != row['Integration_Code_Edit']: integration_details.setdefault("integrationDetails", {}) integration_details["integrationDetails"]["integrationCode"] = row[ 'Integration_Code_Edit'] if row['Details'] != row['Details_Edit']: integration_details.setdefault("integrationDetails", {}) integration_details["integrationDetails"]["details"] = row[ 'Details_Edit'] if integration_details: patch = { "operation": "Pacing", "action": "PATCH", "partner": row['Partner'], "parameters": { "advertiserId": lookup_id(row['Advertiser']), "body": integration_details } } if row['Line_Item']: patch["line_item"] = row['Line_Item'] patch["parameters"]["lineItemId"] = lookup_id(row['Line_Item']) elif row['Insertion_Order']: patch["insertion_order"] = row['Insertion_Order'] patch["parameters"]["insertionOrderId"] = lookup_id( row['Insertion_Order']) else: patch["advertiser"] = row['Advertiser'] patch["parameters"]["advertiserId"] = lookup_id( row['Advertiser']) patches.append(patch) patch_masks(patches) if commit: insertion_order_commit(patches) line_item_commit(patches) advertiser_commit(patches) else: patch_preview(patches)
def load_bulk(): # TODO: incorporate filters into line item fetch line_items = [ lookup_id(p[0]) for p in get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Line Items', 'range': 'A2:A' } }) ] parameters = get_rows(project.task["auth_bigquery"], { "bigquery": { "dataset": project.task["dataset"], "query": "SELECT advertiserId, lineItemId FROM `{dataset}.DV_LineItems`" .format(**project.task) } }, as_object=True) for parameter in parameters: yield from API_DV360( project.task["auth_dv"], iterate=True).advertisers().lineItems( ).bulkListLineItemAssignedTargetingOptions( advertiserId=str(parameter['advertiserId']), lineItemId=str(parameter['lineItemId']), ).execute()
def load_multiple(): #partners = get_rows( # project.task['auth_sheets'], # { 'sheets': { # 'sheet': project.task['sheet'], # 'tab': 'Partners', # 'range': 'A2:A' # }} #) #for partner in partners: # yield from API_DV360( # project.task['auth_dv'], # iterate=True # ).firstAndThirdPartyAudiences().list( # partnerId=lookup_id(partner[0]) # ).execute() advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( project.task['auth_dv'], iterate=True).firstAndThirdPartyAudiences().list( advertiserId=lookup_id(advertiser[0])).execute()
def load_multiple(): campaigns = [ str(lookup_id(r)) for r in set( get_rows(config, task['auth_cm'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'CM Campaigns', 'header': False, 'range': 'A2:A' } }, unnest=True)) ] for row in get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'CM Accounts', 'header': False, 'range': 'A2:A' } }): if row: account_id = lookup_id(row[0]) is_superuser, profile_id = get_profile_for_api( config, task['auth_cm'], account_id) kwargs = { 'profileId': profile_id, 'campaignIds': campaigns, 'archived': False } if is_superuser: kwargs['accountId'] = account_id yield from API_DCM( config, task['auth_cm'], iterate=True, internal=is_superuser).placementGroups().list( **kwargs).execute()
def load_multiple(): for row in get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Partners', 'header': False, 'range': 'A2:A' } }): if row: yield from API_DV360( project.task['auth_dv'], iterate=True).advertisers().list( partnerId=lookup_id(row[0])).execute()
def creative_load_multiple(): rows = get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Advertisers", "range": "A2:A" } }) for row in rows: yield from API_DV360(project.task["auth_dv"], iterate=True).advertisers().creatives().list( advertiserId=lookup_id(row[0])).execute()
def campaign_load_multiple(): rows = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) for row in rows: yield from API_DV360(project.task['auth_dv'], iterate=True).advertisers().campaigns().list( advertiserId=lookup_id(row[0])).execute()
def insertion_order_load_multiple(): for row in get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Advertisers", "header": False, "range": "A2:A" } }): if row: yield from API_DV360( project.task["auth_dv"], iterate=True).advertisers().insertionOrders().list( advertiserId=lookup_id(row[0])).execute()
def load_multiple(): advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( project.task['auth_dv'], iterate=True).advertisers().negativeKeywordLists().list( advertiserId=lookup_id(advertiser[0])).execute()
def load_multiple(): for row in get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'DV Partners', 'header': False, 'range': 'A2:A' } }): if row: yield from API_DV360( config, task['auth_dv'], iterate=True).customBiddingAlgorithms().list( partnerId=lookup_id(row[0])).execute()
def load_multiple(): advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'header': False, 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( project.task['auth_dv'], iterate=True).combinedAudiences().list( advertiserId=lookup_id(advertiser[0])).execute()
def load_multiple(): advertisers = get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'Advertisers', 'header': False, 'range': 'A2:A' } }) for advertiser in advertisers: yield from API_DV360( config, task['auth_dv'], iterate=True).firstAndThirdPartyAudiences().list( advertiserId=lookup_id(advertiser[0])).execute()
def load_multiple(): for row in get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'DV Partners', 'header': False, 'range': 'A2:A' } }): if row: yield from API_DV360( config, task['auth_dv'], iterate=True).advertisers().list( partnerId=lookup_id(row[0]), filter='entityStatus="ENTITY_STATUS_ACTIVE"').execute( )
def load_multiple(): advertisers = get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A1:A' } }) for advertiser in advertisers: for targeting_type in TARGETING_TYPES: yield from API_DV360( project.task['auth_dv'], iterate=True).targetingTypes().targetingOptions().list( advertiserId=lookup_id(advertiser[0]), targetingType=targeting_type).execute()
def load_bulk(): advertisers = [ lookup_id(p[0]) for p in get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Advertisers', 'range': 'A2:A' } }) ] for advertiser in advertisers: yield from API_DV360(project.task["auth_dv"], iterate=True).advertisers( ).bulkListAdvertiserAssignedTargetingOptions( advertiserId=str(advertiser)).execute()
def line_item_load_multiple(): rows = get_rows( project.task["auth_sheets"], { "sheets": { "sheet": project.task["sheet"], "tab": "Advertisers", "range": "A2:A" } }) # String for filtering which entityStatus enums we want to see in the sheet filter_string = 'entityStatus = "ENTITY_STATUS_ARCHIVED" OR entityStatus="ENTITY_STATUS_PAUSED" OR entityStatus="ENTITY_STATUS_ACTIVE" OR entityStatus="ENTITY_STATUS_DRAFT"' for row in rows: yield from API_DV360( project.task["auth_dv"], iterate=True).advertisers().lineItems().list( advertiserId=lookup_id(row[0]), filter=filter_string).execute()
def load_bulk(): partners = [ lookup_id(p[0]) for p in get_rows( project.task['auth_sheets'], { 'sheets': { 'sheet': project.task['sheet'], 'tab': 'Partners', 'range': 'A2:A' } }) ] for partner in partners: yield from API_DV360( project.task["auth_dv"], iterate=True).partners( ).targetingTypes().assignedTargetingOptions().list( partnerId=str(partner), targetingType='TARGETING_TYPE_CHANNEL').execute()
def insertion_order_load_multiple(): for row in get_rows( config, task["auth_sheets"], { "sheets": { "sheet": task["sheet"], "tab": "Advertisers", "header": False, "range": "A2:A" } }): if row: yield from API_DV360( config, task["auth_dv"], iterate=True ).advertisers().insertionOrders().list( advertiserId=lookup_id(row[0]), filter= 'entityStatus="ENTITY_STATUS_PAUSED" OR entityStatus="ENTITY_STATUS_ACTIVE" OR entityStatus="ENTITY_STATUS_DRAFT"' ).execute()
def creative_load_multiple(): rows = get_rows( config, task["auth_sheets"], { "sheets": { "sheet": task["sheet"], "tab": "Advertisers", "header": False, "range": "A2:A" } }) for row in rows: yield from API_DV360( config, task["auth_dv"], iterate=True ).advertisers().creatives().list( advertiserId=lookup_id(row[0]), filter='entityStatus="ENTITY_STATUS_ACTIVE"', fields= 'creatives.displayName,creatives.creativeId,creatives.entityStatus,creatives.creativeType,creatives.dimensions,creatives.reviewStatus,nextPageToken' ).execute(limit=CREATIVE_COUNT_LIMIT)
def campaign_load_multiple(): for row in get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'Advertisers', 'header':False, 'range': 'A2:A' }} ): if row: yield from API_DV360( config, task['auth_dv'], iterate=True ).advertisers().campaigns().list( advertiserId=lookup_id(row[0]), filter='entityStatus="ENTITY_STATUS_PAUSED" OR entityStatus="ENTITY_STATUS_ACTIVE" OR entityStatus="ENTITY_STATUS_DRAFT"', fields='campaigns.displayName,campaigns.campaignId,campaigns.advertiserId,nextPageToken' ).execute()
def load_multiple(): for row in get_rows( config, task['auth_sheets'], { 'sheets': { 'sheet': task['sheet'], 'tab': 'CM Profiles', 'header':False, 'range': 'A2:A' }} ): if row: account_id = lookup_id(row[0]) is_superuser, profile_id = get_profile_for_api(config, task['auth_cm'], account_id) kwargs = { 'profileId': profile_id, 'accountId': account_id } if is_superuser else { 'profileId': profile_id } yield from API_DCM( config, task['auth_cm'], iterate=True, internal=is_superuser ).accounts().list(**kwargs).execute()
def partner_cost_patch(commit=False): patches = {} changed = set() rows = get_rows(project.task["auth_bigquery"], { "bigquery": { "dataset": project.task["dataset"], "table": "PATCH_PartnerCosts", } }, as_object=True) for row in rows: lookup = row['Line_Item'] or row['Insertion_Order'] patches.setdefault( lookup, { "operation": "Partner Costs", "action": "PATCH", "partner": row['Partner'], "advertiser": row['Advertiser'], "campaign": row['Campaign'], "parameters": { "advertiserId": lookup_id(row['Advertiser']), "body": { "partnerCosts": [] } } }) if row['Line_Item']: patches[lookup]["line_item"] = row['Line_Item'] patches[lookup]["parameters"]["lineItemId"] = lookup_id( row['Line_Item']) else: patches[lookup]["insertion_order"] = row['Insertion_Order'] patches[lookup]["parameters"]["insertionOrderId"] = lookup_id( row['Insertion_Order']) patches[lookup]["parameters"]["body"]["partnerCosts"].append({ "costType": row['Cost_Type_Edit'], "feeType": row['Fee_Type_Edit'], "invoiceType": row['Invoice_Type_Edit'], "feeAmount": int(float(row['Fee_Amount_Edit']) * 100000) if row['Fee_Amount_Edit'] else None, "feePercentageMillis": int(float(row['Fee_Percent_Edit']) * 1000) if row['Fee_Percent_Edit'] else None }) if row['Cost_Type'] != row['Cost_Type_Edit'] \ or row['Fee_Type'] != row['Fee_Type_Edit'] \ or row['Invoice_Type'] != row['Invoice_Type_Edit'] \ or row['Fee_Amount'] != row['Fee_Amount_Edit'] \ or row['Fee_Percent'] != row['Fee_Percent_Edit']: changed.add(lookup) # Remove any patches where partner costs have not changed for pc in list(patches.keys()): if pc not in changed: del patches[pc] patches = list(patches.values()) patch_masks(patches) if commit: insertion_order_commit(patches) line_item_commit(patches) else: patch_preview(patches)
def pacing_patch(commit=False): patches = [] rows = get_rows( project.task["auth_bigquery"], { "bigquery": { "dataset": project.task["dataset"], "table":"PATCH_Pacing", }}, as_object=True ) for row in rows: pacing = {} if row['Period'] != row['Period_Edit']: pacing.setdefault("pacing", {}) pacing["pacing"]["pacingPeriod"] = row['Period_Edit'] if row['Type'] != row['Type_Edit']: pacing.setdefault("pacing", {}) pacing["pacing"]["pacingType"] = row['Type_Edit'] if row['Daily_Budget'] != row['Daily_Budget_Edit']: pacing.setdefault("pacing", {}) pacing["pacing"]["dailyMaxMicros"] = int(float(row['Daily_Budget_Edit']) * 100000) if row['Daily_Impressions'] != row['Daily_Impressions_Edit']: pacing.setdefault("pacing", {}) pacing["pacing"]["dailyMaxImpressions"] = row['Daily_Impressions_Edit'] if pacing: patch = { "operation": "Pacing", "action": "PATCH", "partner": row['Partner'], "advertiser": row['Advertiser'], "campaign": row['Campaign'], "parameters": { "advertiserId": lookup_id(row['Advertiser']), "body": pacing } } if row['Line_Item']: patch["line_item"] = row['Line_Item'] patch["parameters"]["lineItemId"] = lookup_id(row['Line_Item']) else: patch["insertion_order"] = row['Insertion_Order'] patch["parameters"]["insertionOrderId"] = lookup_id(row['Insertion_Order']) patches.append(patch) patch_masks(patches) if commit: insertion_order_commit(patches) line_item_commit(patches) else: patch_preview(patches)
def line_item_patch(commit=False): def date_edited(value): y, m, d = value.split("-") return {"year": y, "month": m, "day": d} patches = [] rows = get_rows( project.task["auth_bigquery"], { "bigquery": { "dataset": project.task["dataset"], "table":"PATCH_LineItems", }}, as_object=True ) for row in rows: if row['Action'] == "DELETE": patches.append({ "operation": "Line Items", "action": "DELETE", "partner": row['Partner'], "advertiser": row['Advertiser'], "campaign": row['Campaign'], "line_item": row['Line_Item'], "parameters": { "advertiserId": lookup_id(row['Advertiser']), "lineItemId": lookup_id(row['Line_Item']) } }) elif row['Action'] == "PATCH": line_item = {} if row['Line_Item_Type'] != row['Line_Item_Type_Edit']: line_item["lineItemType"] = row['Line_Item_Type_Edit'] if row['Status'] != row['Status_Edit']: line_item['entityStatus'] = row['Status_Edit'] if row['Flight_Data_Type'] != row['Flight_Data_Type_Edit']: line_item.setdefault("flight", {}) line_item["flight"]["flightDateType"] = row['Flight_Data_Type_Edit'] if row['Flight_Start_Date'] != row['Flight_Start_Date_Edit']: line_item.setdefault("flight", {}).setdefault("dateRange", {}) line_item["flight"]["dateRange"]["startDate"] = date_edited(row['Flight_Start_Date_Edit']) if row['Flight_End_Date'] != row['Flight_End_Date_Edit']: line_item.setdefault("flight", {}).setdefault("endDate", {}) line_item["flight"]["dateRange"]["endDate"] = date_edited(row['Flight_End_Date_Edit']) if row['Flight_Trigger'] != row['Flight_Trigger_Edit']: line_item.setdefault("flight", {}) line_item["flight"]["triggerId"] = row['Flight_Trigger_Edit'] if row['Budget_Allocation_Type'] != row['Budget_Allocation_Type_Edit']: line_item.setdefault("budget", {}) line_item["budget"]["budgetAllocationType"] = row['Budget_Allocation_Type_Edit'] if row['Budget_Unit'] != row['Budget_Unit_Edit']: line_item.setdefault("budget", {}) line_item["budget"]["budgetUnit"] = row['Budget_Unit_Edit'] if row['Budget_Max'] != row['Budget_Max_Edit']: line_item.setdefault("budget", {}) line_item["budget"]["maxAmount"] = int( float(row['Budget_Max_Edit']) * 100000 ) if row['Partner_Revenue_Model'] != row['Partner_Revenue_Model_Edit']: line_item.setdefault("partnerRevenueModel", {}) line_item["partnerRevenueModel"]["markupType"] = row['Partner_Revenue_Model_Edit'] if row['Partner_Markup'] != row['Partner_Markup_Edit']: line_item.setdefault("partnerRevenueModel", {}) line_item["partnerRevenueModel"]["markupAmount"] = int( float(row['Partner_Markup_Edit']) * 100000 ) if row['Conversion_Percent'] != row['Conversion_Percent_Edit']: line_item.setdefault("conversionCounting", {}) line_item["conversionCounting"]["postViewCountPercentageMillis"] = int( float(row['Conversion_Percent_Edit']) * 1000 ) if row['Targeting_Expansion_Level'] != row['Targeting_Expansion_Level_Edit']: line_item.setdefault("targetingExpansion", {}) line_item["targetingExpansion"]["targetingExpansionLevel"] = row['Targeting_Expansion_Level_Edit'] if row['Exclude_1P'] != row['Exclude_1P_Edit']: line_item.setdefault("targetingExpansion", {}) line_item["targetingExpansion"]["excludeFirstPartyAudience"] = row['Exclude_1P_Edit'] if line_item: patches.append({ "operation": "Line Items", "action": "PATCH", "partner": row['Partner'], "advertiser": row['Advertiser'], "campaign": row['Campaign'], "line_item": row['Line_Item'], "parameters": { "advertiserId": lookup_id(row['Advertiser']), "lineItemId": lookup_id(row['Line_Item']), "body": line_item } }) patch_masks(patches) patch_preview(patches) if commit: line_item_commit(patches)
def targeting_edit(commit=False): edits = [] targetings = {} targeting_combine() rows = get_rows(project.task["auth_bigquery"], { "bigquery": { "dataset": project.task["dataset"], "table": "SHEET_Combined_Targeting", } }, as_object=True) for row in rows: for layer in ['Partner', 'Advertiser', 'LineItem']: targeting = None partner = None advertiser = None lineitem = None if row[layer]: if layer == 'Partner': partner = lookup_id(row['Partner']) if layer == 'Advertiser': advertiser = lookup_id(row['Advertiser']) if layer == 'LineItem': advertiser = row['Advertiser_Lookup'] lineitem = lookup_id(row['LineItem']) targeting = targetings.setdefault( (layer, row[layer]), Assigned_Targeting(project.task["auth_dv"], partner, advertiser, lineitem)) if targeting: if row['Authorized_Seller']: if row['Action'].upper() == 'ADD': targeting.add_authorized_seller( row['Authorized_Seller']) elif row['Action'].upper() == 'DELETE': targeting.delete_authorized_seller( row['Authorized_Seller']) if row['User_Rewarded_Content']: if row['Action'].upper() == 'ADD': targeting.add_user_rewarded_content( row['User_Rewarded_Content']) elif row['Action'].upper() == 'DELETE': targeting.delete_user_rewarded_content( row['User_Rewarded_Content']) if row['Exchange']: if row['Action'].upper() == 'ADD': targeting.add_exchange(row['Exchange']) elif row['Action'].upper() == 'DELETE': targeting.delete_exchange(row['Exchange']) if row['Sub_Exchange']: if row['Action'].upper() == 'ADD': targeting.add_sub_exchange(row['Sub_Exchange']) elif row['Action'].upper() == 'DELETE': targeting.delete_sub_exchange(row['Sub_Exchange']) if row['Channel']: identifier = lookup_id(row['Channel']) if row['Action'].upper() == 'ADD': targeting.add_channel(identifier, row['Channel_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_channel(identifier) if row['Inventory_Source']: identifier = lookup_id(row['Inventory_Source']) if row['Action'].upper() == 'ADD': targeting.add_inventory_source(identifier) elif row['Action'].upper() == 'DELETE': targeting.delete_inventory_source(identifier) if row['Inventory_Group']: identifier = lookup_id(row['Inventory_Group']) if row['Action'].upper() == 'ADD': targeting.add_inventory_source_group(identifier) elif row['Action'].upper() == 'DELETE': targeting.delete_inventory_source_group(identifier) if row['URL']: if row['Action'].upper() == 'ADD': targeting.add_url(row['URL'], row['Url_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_url(row['URL']) if row['App']: identifier = lookup_id(row['App']) if row['Action'].upper() == 'ADD': targeting.add_app(identifier, row['App_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_app(identifier) if row['App_Category']: if row['Action'].upper() == 'ADD': targeting.add_app_category( row['App_Category'], row['App_Category_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_app_category(row['App_Category']) if row['Content_Label']: if row['Action'].upper() == 'ADD': targeting.add_content_label(row['Content_Label']) elif row['Action'].upper() == 'DELETE': targeting.delete_content_label(row['Content_Label']) if row['Sensitive_Category']: if row['Action'].upper() == 'ADD': targeting.add_sensitive_category( row['Sensitive_Category']) elif row['Action'].upper() == 'DELETE': targeting.delete_sensitive_category( row['Sensitive_Category']) if row['Negative_Keyword_List']: identifier = lookup_id(row['Negative_Keyword_List']) if row['Action'].upper() == 'ADD': targeting.add_negative_keyword_list(identifier) elif row['Action'].upper() == 'DELETE': targeting.delete_negative_keyword_list(identifier) if row['Keyword']: if row['Action'].upper() == 'ADD': targeting.add_keyword(row['Keyword'], row['Keyword_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_keyword(row['Keyword']) if row['Category']: if row['Action'].upper() == 'ADD': targeting.add_category( row['Category'], row['Category_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_category(row['Category']) if row['Age_Range']: if row['Action'].upper() == 'ADD': targeting.add_age_range(row['Age_Range']) elif row['Action'].upper() == 'DELETE': targeting.delete_age_range(row['Age_Range']) if row['Gender']: if row['Action'].upper() == 'ADD': targeting.add_gender(row['Gender']) elif row['Action'].upper() == 'DELETE': targeting.delete_gender(row['Gender']) if row['Parental_Status']: if row['Action'].upper() == 'ADD': targeting.add_parental_status(row['Parental_Status']) elif row['Action'].upper() == 'DELETE': targeting.delete_parental_status( row['Parental_Status']) if row['Household_Income']: if row['Action'].upper() == 'ADD': targeting.add_household_income(row['Household_Income']) elif row['Action'].upper() == 'DELETE': targeting.delete_household_income( row['Household_Income']) if row['Language']: if row['Action'].upper() == 'ADD': targeting.add_language( row['Language'], row['Language_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_language(row['Language']) if row['Included_1P_And_3P']: identifier = lookup_id(row['Included_1P_And_3P']) if row['Action'].upper() == 'ADD': targeting.add_included_1p_and_3p_audience( identifier, row['Included_1P_And_3P_Recency']) elif row['Action'].upper() == 'DELETE': targeting.delete_included_1p_and_3p_audience( identifier) if row['Excluded_1P_And_3P']: identifier = lookup_id(row['Excluded_1P_And_3P']) if row['Action'].upper() == 'ADD': targeting.add_excluded_1p_and_3p_audience( identifier, row['Excluded_1P_And_3P_Recency']) elif row['Action'].upper() == 'DELETE': targeting.delete_excluded_1p_and_3p_audience( identifier) if row['Included_Google']: identifier = lookup_id(row['Included_Google']) if row['Action'].upper() == 'ADD': targeting.add_included_google_audience(identifier) elif row['Action'].upper() == 'DELETE': targeting.delete_included_google_audience(identifier) if row['Excluded_Google']: identifier = lookup_id(row['Excluded_Google']) if row['Action'].upper() == 'ADD': targeting.add_excluded_google_audience(identifier) elif row['Action'].upper() == 'DELETE': targeting.delete_excluded_google_audience(identifier) if row['Included_Custom']: identifier = lookup_id(row['Included_Custom']) if row['Action'].upper() == 'ADD': targeting.add_included_custom_audience(identifier) elif row['Action'].upper() == 'DELETE': targeting.delete_included_custom_audience(identifier) if row['Included_Combined']: identifier = lookup_id(row['Included_Combined']) if row['Action'].upper() == 'ADD': targeting.add_included_combined_audience(identifier) elif row['Action'].upper() == 'DELETE': targeting.delete_included_combined_audience(identifier) if row['Device_Type']: if row['Action'].upper() == 'ADD': targeting.add_device_type(row['Device_Type']) elif row['Action'].upper() == 'DELETE': targeting.delete_device_type() if row['Make_Model']: if row['Action'].upper() == 'ADD': targeting.add_make_model( row['Make_Model'], row['Make_Model_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_make_model() if row['Operating_System']: if row['Action'].upper() == 'ADD': targeting.add_operating_system( row['Operating_System'], row['Operating_System_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_operating_system( row['Operating_System']) if row['Browser']: if row['Action'].upper() == 'ADD': targeting.add_browser(row['Browser'], row['Browser_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_browser(row['Browser']) if row['Environment']: if row['Action'].upper() == 'ADD': targeting.add_environment(row['Environment']) elif row['Action'].upper() == 'DELETE': targeting.delete_environment(row['Environment']) if row['Carrier_And_ISP']: if row['Action'].upper() == 'ADD': targeting.add_carrier_and_isp(row['Carrier_And_ISP']) elif row['Action'].upper() == 'DELETE': targeting.delete_carrier_and_isp( row['Carrier_And_ISP']) if row['Day_Of_Week']: if row['Action'].upper() == 'ADD': targeting.add_day_and_time(row['Day_Of_Week'], row['Hour_Start'], row['Hour_End'], row['Timezone']) elif row['Action'].upper() == 'DELETE': targeting.delete_day_and_time(row['Day_Of_Week']) if row['Geo_Region']: if row['Action'].upper() == 'ADD': targeting.add_geo_region( row['Geo_Region'], row['Geo_Region_Type'], row['Geo_Region_Negative'] or False) elif row['Action'].upper() == 'DELETE': targeting.delete_geo_region(row['Geo_Region']) if row['Proximity_Location_List']: if row['Action'].upper() == 'ADD': targeting.add_proximity_location_list( row['Proximity_Location_List'], row['Proximity_Location_List_Radius_Range']) elif row['Action'].upper() == 'DELETE': targeting.delete_proximity_location_list( row['Proximity_Location_List']) if row['Regional_Location_List']: if row['Action'].upper() == 'ADD': targeting.add_regional_location_list( row['Regional_Location_List']) elif row['Action'].upper() == 'DELETE': targeting.delete_regional_location_list( row['Regional_Location_List']) if row['Video_Player_Size']: if row['Action'].upper() == 'ADD': targeting.add_video_player_size( row['Video_Player_Size']) elif row['Action'].upper() == 'DELETE': targeting.delete_video_player_size() if row['In_Stream_Position']: if row['Action'].upper() == 'ADD': targeting.add_instream_position( row['In_Stream_Position']) elif row['Action'].upper() == 'DELETE': targeting.delete_instream_position() if row['Out_Stream_Position']: if row['Action'].upper() == 'ADD': targeting.add_outstream_position( row['Out_Stream_Position']) elif row['Action'].upper() == 'DELETE': targeting.delete_outstream_position() if row['On_Screen_Position']: if row['Action'].upper() == 'ADD': targeting.add_on_screen_position( row['On_Screen_Position']) elif row['Action'].upper() == 'DELETE': targeting.delete_on_screen_position() if row['Viewability']: if row['Action'].upper() == 'ADD': targeting.add_viewability(row['Viewability']) elif row['Action'].upper() == 'DELETE': targeting.delete_viewability() for layer_and_name, targeting in targetings.items(): layer, name = layer_and_name body = targeting.get_body() if body: parameters = {'body': body} if layer == 'Partner': parameters['partnerId'] = str(targeting.partner) elif layer == 'Advertiser': parameters['advertiserId'] = str(targeting.advertiser) elif layer == 'LineItem': parameters['advertiserId'] = str(targeting.advertiser) parameters['lineItemId'] = str(targeting.lineitem) edits.append({ "layer": layer, "partner": name if layer == 'Partner' else '', "advertiser": name if layer == 'Advertiser' else '', "line_item": name if layer == 'LineItem' else '', "parameters": parameters }) edit_preview(edits) if commit: targeting_commit(edits)