def upload_tfs(organism):
    with open('%s.txt' % organism) as infile:
        tfs = [line.strip() for line in infile]
    data_ws = kbase.workspace(config.get('KBase', 'ws_service_url'),
                              ws_name=config.get('KBase', 'data_workspace'),
                              user=config.get('KBase', 'user'),
                              password=config.get('KBase', 'password'))    
    print "saving tfs..."
    kbase.save_gene_list(data_ws, '%s.tfs' % organism,
                         'nwportal:nwportal_data/%s.genome' % organism,
                         tfs)
    print "saved"
def get_object(objref):
    ws_name, inst_name = objref.split('/')
    result_ws = kbase.workspace(config.get('KBase', 'ws_service_url'),
                                ws_name=ws_name,
                                user=config.get('KBase', 'user'),
                                password=config.get('KBase', 'password'))
    result = result_ws.get_object(inst_name)

    # DEBUG: list workspace objects
    #objs = result_ws.ws_service.list_workspace_objects({'workspace': ws_name})
    #for obj in objs:
    #    print obj
    # DEBUG END
    return result
def get_result_object(jobid):
    """retrieve result data from the job service"""
    jobstate = kbase.user_job_state(config.get('KBase', 'ujs_service_url'),
                                    config.get('KBase', 'user'),
                                    config.get('KBase', 'password'),
                                    jobid)
    jobstatus = jobstate.get_job_status()
    status = jobstatus[1]
    if status == 'error':
        print "Problem: ", jobstatus[2]
        return None
    elif status == 'complete':
        result_ref = jobstate.get_results()['workspaceids'][0]
        print "result at: ", result_ref
        ws_name, inst_name = result_ref.split('/')

        result_ws = kbase.workspace(config.get('KBase', 'ws_service_url'),
                                    ws_name=ws_name,
                                    user=config.get('KBase', 'user'),
                                    password=config.get('KBase', 'password'))
        return result_ws.get_object(inst_name)
def msg_consumer(channel, method, header, body):
    params = json.loads(body)
    print params
    try:
        print "logging in to KBase"
        ws_service = wsc.Workspace(config.get('KBase', 'ws_service_url'),
                                   user_id=config.get('KBase', 'user'),
                                   password=config.get('KBase', 'password'))

        data_ws = kbase.workspace(config.get('KBase', 'ws_service_url'),
                                  config.get('KBase', 'data_workspace'),
                                  ws_service_obj=ws_service)
        print "logged in to KBASE data workspace"

        # KBase is picky with identifier names, no colons, e.g.
        username = params['username']
        timestamp = str(time.time())

        if params['use_ensemble']:
            input_ws_name = 'cm_ensemble-%s-%s' % (username, timestamp)
        else:
            input_ws_name = 'cm_single-%s-%s' % (username, timestamp)

        input_ws_info = kbase.create_workspace(ws_service, input_ws_name)
        print "created input workspace under: ", input_ws_info
        input_ws = kbase.workspace(config.get('KBase', 'ws_service_url'),
                                   input_ws_name,
                                   ws_service_obj=ws_service)
        print "logged in to KBASE input workspace"

        organism = params['organism']
        genome_name = '%s.genome' % organism
        ratios_name = 'ratios-%s-%s' % (organism, timestamp)
        string_obj_name = None
        operon_obj_name = None

        kbase.import_ratios_matrix(input_ws, data_ws, ratios_name, genome_name,
                                   params['ratio_file_path'], sep='\t')

        if 'string_file_path' in params:
            string_obj_name = 'string-%s-%s' % (organism, timestamp)
            kbase.import_string_network(input_ws, string_obj_name,
                                        params['string_file_path'])
            print "uploaded STRING network"

        if 'operon_file_path' in params:
            print "uploading operome..."
            operon_obj_name = 'operon-%s-%s' % (organism, timestamp)
            kbase.import_mo_operome_file(input_ws, operon_obj_name,
                                         params['operon_file_path'])
            print "uploaded operome"

        start_cm_single(params['nwp_jobid'], data_ws, input_ws, organism, timestamp,
                        ratios_name, string_obj_name, operon_obj_name)


        channel.basic_ack(delivery_tag=method.delivery_tag)
    except:
        print "Error occurred"
        #channel.basic_cancel()
        channel.basic_ack(delivery_tag=method.delivery_tag)
        traceback.print_exc()