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)
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)
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)
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)