Example #1
0
    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()
Example #2
0
def sdf_download(auth, version, partner_id, file_types, filter_type,
                 filter_ids_obj):
    #Read Filter Ids
    filter_ids = list(get_rows(auth, filter_ids_obj))

    body = {
        'version': version,
        'partnerId': partner_id,
        'parentEntityFilter': {
            'fileType': file_types,
            'filterType': filter_type,
            'filterIds': filter_ids
        },
        'idFilter': None
    }

    operation = API_DV360(auth).sdfdownloadtasks().create(body=body).execute()

    if operation and 'name' in operation:
        request = API_DV360(auth).sdfdownloadtasks().operations().get(
            name=operation['name'])

        # This is the eng recommended way of getting the operation
        while True:
            response = request.execute()
            if 'done' in response and response['done']:
                break
            time.sleep(30)
    else:
        print('error')

    if 'error' in response:
        raise Exception(response['error']['message'])

    return download_media('user', response['response']['resourceName'])
Example #3
0
def line_item_commit(patches):
    for patch in patches:
        if not patch.get("line_item"):
            continue
        print("API LINE ITEM:", patch["action"], patch["line_item"])
        try:
            if patch["action"] == "DELETE":
                response = API_DV360(
                    project.task["auth_dv"]).advertisers().lineItems().delete(
                        **patch["parameters"]).execute()
                patch["success"] = response
            elif patch["action"] == "PATCH":
                response = API_DV360(
                    project.task["auth_dv"]).advertisers().lineItems().patch(
                        **patch["parameters"]).execute()
                patch["success"] = response["lineItemId"]
            elif patch["action"] == "INSERT":
                response = API_DV360(
                    project.task["auth_dv"]).advertisers().lineItems().create(
                        **patch["parameters"]).execute()
                patch["success"] = response["lineItemId"]
            elif patch["action"] == "TARGETING":
                response = API_DV360(project.task["auth_dv"]).advertisers(
                ).lineItems().bulkEditAdvertiserAssignedTargetingOptions(
                    **patch["parameters"]).execute()
                patch["success"] = len(
                    response["createdAssignedTargetingOptions"])
        except Exception as e:
            patch["error"] = str(e)
        finally:
            patch_log(patch)
    patch_log()
Example #4
0
 def get_assigned_list(self, targeting_type):
   if targeting_type not in self.assigneds_cache:
     if self.lineitem:
       self.assigneds_cache[targeting_type] = list(API_DV360(
         self.auth,
         iterate=True
       ).advertisers().lineItems().targetingTypes().assignedTargetingOptions().list(
         lineItemId=str(self.lineitem),
         advertiserId=str(self.advertiser),
         targetingType=targeting_type
       ).execute())
     elif self.partner:
       self.assigneds_cache[targeting_type] = list(API_DV360(
         self.auth,
         iterate=True
       ).partners().targetingTypes().assignedTargetingOptions().list(
         partnerId=str(self.partner),
         targetingType=targeting_type
       ).execute())
     elif self.advertiser:
       self.assigneds_cache[targeting_type] = list(API_DV360(
         self.auth,
         iterate=True
       ).advertisers().targetingTypes().assignedTargetingOptions().list(
         advertiserId=str(self.advertiser),
         targetingType=targeting_type
       ).execute())
   return self.assigneds_cache[targeting_type]
Example #5
0
def insertion_order_commit(config, task, patches):
  for patch in patches:
    if not patch.get("insertion_order"):
      continue
    print("API INSERTION ORDER:", patch["action"], patch["insertion_order"])
    try:
      if patch["action"] == "DELETE":
        response = API_DV360(
          config,
          task["auth_dv"]
        ).advertisers().insertionOrders().delete(
          **patch["parameters"]
        ).execute()
        patch["success"] = response
      elif patch["action"] == "PATCH":
        response = API_DV360(
          config,
          task["auth_dv"]
        ).advertisers().insertionOrders().patch(
          **patch["parameters"]
        ).execute()
        patch["success"] = response["insertionOrderId"]
      elif patch["action"] == "INSERT":
        response = API_DV360(
          config,
          task["auth_dv"]
        ).advertisers().insertionOrders().create(
          **patch["parameters"]
        ).execute()
        patch["success"] = response["insertionOrderId"]
    except Exception as e:
      patch["error"] = str(e)
    finally:
      patch_log(config, task, patch)
  patch_log(config, task)
Example #6
0
def advertiser_commit(patches):
    for patch in patches:
        if not patch.get('advertiser'):
            continue
        print('API ADVERTISER:', patch['action'], patch['advertiser'])
        try:
            if patch['action'] == 'DELETE':
                response = API_DV360(
                    project.task['auth_dv']).advertisers().delete(
                        **patch['parameters']).execute()
                patch['success'] = response
            elif patch['action'] == 'PATCH':
                response = API_DV360(
                    project.task['auth_dv']).advertisers().patch(
                        **patch['parameters']).execute()
                patch['success'] = response['advertiserId']
            elif patch["action"] == "TARGETING":
                response = API_DV360(project.task["auth_dv"]).advertisers(
                ).bulkEditAdvertiserAssignedTargetingOptions(
                    **patch["parameters"]).execute()
                patch["success"] = len(
                    response["createdAssignedTargetingOptions"])
        except Exception as e:
            patch['error'] = str(e)
        finally:
            patch_log(patch)
    patch_log()
Example #7
0
    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()
Example #8
0
def targeting_commit(edits):
    for edit in edits:
        try:
            if edit.get("line_item"):
                print("API LINE ITEM:", edit["line_item"])
                response = API_DV360(project.task["auth_dv"]).advertisers(
                ).lineItems().bulkEditLineItemAssignedTargetingOptions(
                    **edit["parameters"]).execute()
                edit["success"] = len(
                    response["createdAssignedTargetingOptions"])
            elif edit.get("advertiser"):
                print("API ADVERTISER:", edit["advertiser"])
                response = API_DV360(project.task["auth_dv"]).advertisers(
                ).bulkEditAdvertiserAssignedTargetingOptions(
                    **edit["parameters"]).execute()
                edit["success"] = len(
                    response["createdAssignedTargetingOptions"])
            elif edit.get("partners"):
                print("API PARTNER:", edit["partner"])
                response = API_DV360(project.task["auth_dv"]).partners(
                ).bulkEditPartnerAssignedTargetingOptions(
                    **edit["parameters"]).execute()
                edit["success"] = len(
                    response["createdAssignedTargetingOptions"])
        except Exception as e:
            edit["error"] = str(e)
        finally:
            edit_log(edit)
    edit_log()
Example #9
0
    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()
Example #10
0
    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
Example #11
0
    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()
Example #12
0
    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
Example #13
0
 def get_option_list(self, targeting_type):
     if targeting_type not in self.options_cache:
         self.options_cache[targeting_type] = list(
             API_DV360(
                 self.auth,
                 iterate=True).targetingTypes().targetingOptions().list(
                     advertiserId=str(self.advertiser),
                     targetingType=targeting_type).execute())
     return self.options_cache[targeting_type]
Example #14
0
 def execute(self):
     body = self.get_body()
     if body:
         if self.lineitem:
             return API_DV360(self.auth, ).advertisers().lineItems(
             ).bulkEditLineItemAssignedTargetingOptions(
                 lineItemId=str(self.lineitem),
                 advertiserId=str(self.advertiser),
             ).execute()
         elif self.advertiser:
             return API_DV360(
                 self.auth,
             ).advertisers().bulkEditAdvertiserAssignedTargetingOptions(
                 advertiserId=str(self.advertiser), ).execute()
         elif self.partner:
             return API_DV360(self.auth).partners(
             ).bulkEditPartnerAssignedTargetingOptions(partnerId=str(
                 self.partner), ).execute()
Example #15
0
def campaign_commit(patches):
  for patch in patches:
    if not patch.get('campaign'):
      continue
    print('API CALL', patch['action'], patch['advertiser'], patch['campaign'])
    try:
      if patch['action'] == 'DELETE':
        response = API_DV360(
            project.task['auth_dv']).advertisers().campaigns().delete(
                **patch['parameters']).execute()
        patch['success'] = response
      elif patch['action'] == 'PATCH':
        response = API_DV360(project.task['auth_dv']).advertisers().campaigns().patch(
            **patch['parameters']).execute()
        patch['success'] = response['campaignId']
    except Exception as e:
      patch['error'] = str(e)
    finally:
      patch_log(patch)
  patch_log()
Example #16
0
def lineitem_get_v1(auth, advertiser_id, lineitem_id):
    """Gets a DV360 Line Item

  Args:
    auth: StarThinker authentication scheme
    advertiser_id: ID of the advertiser of the line item
    lineitem_id: ID of the line item
  Returns: Line Item from the DV360 API
  """
    return API_DV360(auth).advertisers().lineItems().get(
        advertiserId=advertiser_id, lineItemId=lineitem_id).execute()
Example #17
0
def lineitem_patch_v1(auth, patch, li):
    """Patches a DV360 Line Item

  Args:
    auth: StarThinker authentication scheme
    patch: List of field names to patch
    li: Line item with updates to push
  Returns: Updated Line Item
  """
    return API_DV360(auth).advertisers().lineItems().patch(
        advertiserId=li['advertiserId'],
        lineItemId=li['lineItemId'],
        updateMask=patch,
        body=li).execute()
Example #18
0
 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()
Example #19
0
    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()
Example #20
0
    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 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()
Example #22
0
 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()
Example #23
0
 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()
Example #24
0
    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()
Example #25
0
 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(
                     )
Example #26
0
    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()
Example #27
0
  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()
Example #28
0
    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()
Example #29
0
    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()
Example #30
0
 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()