def trigger_job()

in 5-app-infra/3-artifact-publish/docker/cdmc/tag_engine_api/main.py [0:0]


def trigger_job(): 
    
    print('enter trigger_job')
    
    json_request = request.get_json(force=True) 
    print('json request: ', json_request)
    
    status, response, tag_creator_sa = do_authentication(request.headers, json_request, ENABLE_AUTH)
    print('status:', status, ', response:', response, ', tag_creator_sa:', tag_creator_sa)
    
    if status == False:
        return jsonify(response), 400
    
    tag_invoker_sa = get_tag_invoker_account(request.headers.get('Authorization'))
    print('tag_invoker_sa:', tag_invoker_sa)
    
    if 'config_type' in json_request:
        config_type = json_request['config_type']
        is_valid = check_config_type(json_request['config_type'])
    else:
        print("trigger_job request is missing the required parameter config_type. Please add this parameter to the json object.")
        resp = jsonify(success=False)
        return resp
        
    if is_valid == False:
        print("Invalid config_type parameter. Please choose a config_type from this list: " + get_available_config_types())
        resp = jsonify(success=False)
        return resp
    
    if 'config_uuid' in json_request:
        
        config_uuid = json_request['config_uuid']
        config_type = json_request['config_type']
        
        if isinstance(config_uuid, str):
            is_active = store.check_active_config(config_uuid, config_type)
            
            if is_active != True:
                print('Error: The config_uuid', config_uuid, 'is not active and cannot be used to run a job.')
                resp = jsonify(success=False)
                return resp
    
    elif 'template_id' in json_request and 'template_project' in json_request and 'template_region' in json_request:
         template_id = json_request['template_id']
         template_project = json_request['template_project']
         template_region = json_request['template_region']
         
         if 'included_tables_uris' in json_request:
             included_uris = json_request['included_tables_uris']
         elif 'included_assets_uris' in json_request:
             included_uris = json_request['included_assets_uris'] 
         else:
             print("trigger_job request is missing the required parameter included_tables_uris or included_assets_uris. Please add this parameter to the json object.")
             resp = jsonify(success=False)
             return resp 
             
         success, config_uuid = store.lookup_config_by_uris(template_id, template_project, template_region, config_type, included_uris)
         
         if success != True or config_uuid == '':
             print('Error: could not locate the config based on the parameters provided in json request.')
             resp = jsonify(success=False)
             return resp

    else:
        print("trigger_job request is missing the required parameters. Please add the config_uuid or the template_id, template_project, template_region, and included_uris to the json object.")
        resp = jsonify(success=False)
        return resp
        
    if 'job_metadata' in json_request:
        
        job_metadata = json_request['job_metadata']
        
        if isinstance(job_metadata, dict) == False:
            print('Warning: job metadata cannot be recorded because', job_metadata, 'is not a json object') 
        
        else: 
            if ENABLE_JOB_METADATA == False:
                print('Warning: Ignoring job metadata in request because ENABLE_JOB_METADATA = False in tagengine.ini')
                job_uuid = jm.create_job(tag_creator_sa, tag_invoker_sa, config_uuid, json_request['config_type'])
            else:
                job_uuid = jm.create_job(tag_creator_sa, tag_invoker_sa, config_uuid, config_type, job_metadata)
                template_id = store.lookup_tag_template(config_type, config_uuid)
                
                credentials, success = get_target_credentials(tag_creator_sa)
                bqu = bq.BigQueryUtils(credentials, BIGQUERY_REGION)
                success = bqu.write_job_metadata(job_uuid, template_id, job_metadata, tag_creator_sa, tag_invoker_sa)
                print('Wrote job metadata to BigQuery for job', job_uuid, '. Success =', success)
                       
    else:    
        job_uuid = jm.create_job(tag_creator_sa, tag_invoker_sa, config_uuid, config_type)
    
    
    return jsonify(job_uuid=job_uuid)