view cravat_submit/cravat_submit.py @ 23:3404770b5b7a draft

Uploaded
author in_silico
date Wed, 18 Jul 2018 09:41:57 -0400
parents 94fdd28c0dbb
children
line wrap: on
line source

import requests
import json
import time
import urllib
import sys
import csv

input_filename = sys.argv[1]
input_select_bar = sys.argv[2]
output_filename = sys.argv[3]

# HACK: Input args corrections. 
if input_select_bar == "None":
    # The server represents an analyses of None as ""; however, submitting a blank string on command line throws off arg position
    input_select_bar = ""
    # The server represents the "Vest and Chasm" analyses as "VEST;CHASM; however, galaxy converts the semi-colon to an 'X'. Switch it back.
elif input_select_bar == "VESTXCHASM":
    input_select_bar = "VEST;CHASM" 

write_header = True

#plugs in params to given URL
submit = requests.post('http://cravat.us/CRAVAT/rest/service/submit', files={'inputfile':open(input_filename)}, data={'email':'znylund@insilico.us.com', 'analyses': input_select_bar})   
#,'analysis':input_select_bar,'functionalannotation': "on"})                   
#Makes the data a json dictionary, takes out only the job ID
jobid = json.loads(submit.text)['jobid']
#out_file.write(jobid)    
submitted = json.loads(submit.text)['status']
#out_file.write('\t' + submitted)

#loops until we find a status equal to Success, then breaks
while True:
    check = requests.get('http://staging.cravat.us/CRAVAT/rest/service/status', params={'jobid': jobid})
    status = json.loads(check.text)['status']
    resultfileurl = json.loads(check.text)['resultfileurl']
    #out_file.write(str(status) + ', ')
    if status == 'Success':
        #out_file.write('\t' + resultfileurl)
        break
    else:
        time.sleep(2)
        
#out_file.write('\n')

#creates three files
file_1 = time.strftime("%H:%M") + '_Z_Variant_Result.tsv'
file_2 = time.strftime("%H:%M") + '_Z_Additional_Details.tsv'
file_3 = time.strftime("%H:%M") + 'Combined_Variant_Results.tsv'


#Download the two results
urllib.urlretrieve("http://cravat.us/CRAVAT/results/" + jobid + "/" + "Variant.Result.tsv", file_1)
urllib.urlretrieve("http://cravat.us/CRAVAT/results/" + jobid + "/" + "Variant_Additional_Details.Result.tsv", file_2)

headers = []
duplicates = []

#opens the Variant Result file and the Variant Additional Details file as csv readers, then opens the output file (galaxy) as a writer
with open(file_1) as tsvin_1, open(file_2) as tsvin_2, open(output_filename, 'wb') as tsvout:
    tsvreader_1 = csv.reader(tsvin_1, delimiter='\t')
    tsvreader_2 = csv.reader(tsvin_2, delimiter='\t')
    tsvout = csv.writer(tsvout, delimiter='\t')
         
#loops through each row in the Variant Additional Details file         
    for row in tsvreader_2:
        #sets row_2 equal to the same row in Variant Result file
        row_2 = tsvreader_1.next()
        #checks if row is empty or if the first term contains '#'
        if row == [] or row[0][0] == '#':
            continue
        #checks if the row begins with input line
        if row[0] == 'Input line':
            #Goes through each value in the headers list in VAD
            for value in row:   
                #Adds each value into headers 
                headers.append(value)
            #Loops through the Keys in VR
            for value in row_2:
                #Checks if the value is already in headers
                if value in headers:
                    continue
                #else adds the header to headers
                else:
                    headers.append(value)
                    
            print headers
            tsvout.writerow(headers)
            
            
        else:
            
            cells = []
            #Goes through each value in the next list
            for value in row:
                #adds it to cells
                cells.append(value)
            #Goes through each value from the VR file after position 11 (After it is done repeating from VAD file)
            for value in row_2[11:]:
                #adds in the rest of the values to cells
                cells.append(value)
                
            print  cells
            tsvout.writerow(cells)