Example #1
0
def dcm(account_id, disposition):
  name = '%s %s ( StarThinker )' % (project.task['name'], account_id)

  if project.verbose: print('DCM REPORT', name)

  # check if report is to be deleted
  if project.task.get('delete', False):
    report_delete(
      project.task['auth'],
      account_id,
      None,
      name
    )

  # check if report is to be created
  if 'type' in project.task['report']:
    report_create(
      project.task['auth'],
      account_id,
      name,
      project.task['report']
    )

  # moving a report
  if 'out' in project.task:
    filename, report = report_file(
      project.task['auth'],
      account_id,
      None,
      name,
      project.task['report'].get('timeout', 0),
      CHUNKSIZE
    )

    if report:
      if project.verbose: print('DCM FILE', filename)

      # clean up the report
      rows = report_to_rows(report)
      rows = report_clean(rows,  project.task.get('datastudio', False))
      rows = rows_column_add(rows, 'Account_Id', account_id)
      rows = rows_column_add(rows, 'Account_Name', get_account_name(project.task['auth'], account_id))

      # if BigQuery set to append ( storage will automatically file namespace )
      if project.task.get('out', {}).get('bigquery', {}).get('table'):
        project.task['out']['bigquery']['disposition'] = disposition 

      # write rows using standard out block in json ( allows customization across all scripts )
      if rows: put_rows(project.task['auth'], project.task['out'], rows)
Example #2
0
def dcm_replicate_create(account, advertisers, name, template):
    print('DCM REPLICATE CREATE', name)

    # check if report is to be deleted
    if project.task['report'].get('delete', False):
        report_delete(project.task['auth'], account, None, name)

    # add account and advertiser filters ( return new disctionary)
    body = report_filter(
        project.task['auth'], template, {
            'accountId': {
                'values': account
            },
            'dfa:advertiser': {
                'values': advertisers
            }
        })
    body['name'] = name

    #print('BODY', body)

    # create and run the report if it does not exist
    report = report_build(project.task['auth'], account, body)
Example #3
0
def dcm():
  if project.verbose: print('DCM')

  # stores existing report json
  report = None

  # check if report is to be deleted
  if project.task.get('delete', False):
    if project.verbose: print('DCM DELETE', project.task['report'].get('name', None) or project.task['report'].get('body', {}).get('name', None) or project.task['report'].get('report_id', None))
    report_delete(
      project.task['auth'],
      project.task['report']['account'],
      project.task['report'].get('report_id', None),
      project.task['report'].get('name', None) or project.task['report'].get('body', {}).get('name', None),
    )

  # check if report is to be run
  if project.task.get('report_run_only', False):
    if project.verbose: print('DCM REPORT RUN', project.task['report'].get('name', None) or project.task['report'].get('report_id', None))
    report_run(
      project.task['auth'],
      project.task['report']['account'],
      project.task['report'].get('report_id', None),
      project.task['report'].get('name', None),
    )

  # check if report is to be created - DEPRECATED
  if 'type' in project.task['report']:
    if project.verbose: print('DCM CREATE')
    report = report_create(
      project.task['auth'],
      project.task['report']['account'],
      project.task['report']['name'],
      project.task['report']
    )

  # check if report is to be created
  if 'body' in project.task['report']:
    if project.verbose: print('DCM BUILD', project.task['report']['body']['name'])

    # filters can be passed using special get_rows handler, allows reading values from sheets etc...
    if 'filters' in project.task['report']:
      for f, d in project.task['report']['filters'].items():
        for v in get_rows(project.task['auth'], d):
          # accounts are specified in a unique part of the report json
          if f in 'accountId':
            project.task['report']['body']['accountId'] = v
          # activities are specified in a unique part of the report json
          elif f in 'dfa:activity':
            project.task['report']['body']['reachCriteria']['activities'].setdefault('filters', []).append({
              "kind":"dfareporting#dimensionValue",
              "dimensionName": f,
              "id": v
            })
          # all other filters go in the same place
          else:
            project.task['report']['body']['criteria'].setdefault('dimensionFilters', []).append({
              "kind":"dfareporting#dimensionValue",
              "dimensionName": f,
              "id": v,
              "matchType": "EXACT"
            })

    report = report_build(
      project.task['auth'],
      project.task['report']['body'].get('accountId') or project.task['report']['account'],
      project.task['report']['body']
    )

  # moving a report
  if 'out' in project.task:
    filename, report = report_file(
      project.task['auth'],
      project.task['report']['account'],
      project.task['report'].get('report_id', None),
      project.task['report'].get('name', None) or project.task['report'].get('body', {}).get('name', None),
      project.task['report'].get('timeout', 10),
    )

    if report:
      if project.verbose: print('DCM FILE', filename)

      # clean up the report
      rows = report_to_rows(report)
      rows = report_clean(rows)

      # if bigquery, remove header and determine schema
      schema = None
      if 'bigquery' in project.task['out']:
        schema = report_schema(next(rows))
        project.task['out']['bigquery']['schema'] = schema
        project.task['out']['bigquery']['skip_rows'] = 0

      # write rows using standard out block in json ( allows customization across all scripts )
      if rows: put_rows(project.task['auth'], project.task['out'], rows)
Example #4
0
def dcm():
  if project.verbose: print('DCM')

  # stores existing report json
  report = None

  # check if report is to be deleted
  if project.task.get('delete', False):
    if project.verbose: print('DCM DELETE', project.task['report'].get('name', None) or project.task['report'].get('body', {}).get('name', None) or project.task['report'].get('report_id', None))
    report_delete(
      project.task['auth'],
      project.task['report']['account'],
      project.task['report'].get('report_id', None),
      project.task['report'].get('name', None) or project.task['report'].get('body', {}).get('name', None),
    )

  # check if report is to be run
  if project.task.get('report_run_only', False):
    if project.verbose: print('DCM REPORT RUN', project.task['report'].get('name', None) or project.task['report'].get('report_id', None))
    report_run(
      project.task['auth'],
      project.task['report']['account'],
      project.task['report'].get('report_id', None),
      project.task['report'].get('name', None),
    )

  # check if report is to be created
  if 'body' in project.task['report']:
    if project.verbose: print('DCM BUILD', project.task['report']['body']['name'])

    if 'filters' in project.task['report']:
      project.task['report']['body'] = report_filter(
        project.task['auth'],
        project.task['report']['body'],
        project.task['report']['filters']
      )

    report = report_build(
      project.task['auth'],
      project.task['report']['body'].get('accountId') or project.task['report']['account'],
      project.task['report']['body']
    )

  # moving a report
  if 'out' in project.task:
    filename, report = report_file(
      project.task['auth'],
      project.task['report']['account'],
      project.task['report'].get('report_id', None),
      project.task['report'].get('name', None) or project.task['report'].get('body', {}).get('name', None),
      project.task['report'].get('timeout', 10),
    )

    if report:
      if project.verbose: print('DCM FILE', filename)

      # clean up the report
      rows = report_to_rows(report)
      rows = report_clean(rows)

      # if bigquery, remove header and determine schema
      schema = None
      if 'bigquery' in project.task['out']:
        schema = report_schema(next(rows))
        project.task['out']['bigquery']['schema'] = schema
        project.task['out']['bigquery']['skip_rows'] = 0

      # write rows using standard out block in json ( allows customization across all scripts )
      if rows: put_rows(project.task['auth'], project.task['out'], rows)