LSHTM_analysis/dynamut/submit_dynamut.py

89 lines
2.9 KiB
Python
Executable file

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Aug 19 14:33:51 2020
@author: tanu
"""
#%% load packages
import os,sys
import subprocess
import argparse
import requests
import re
import time
from bs4 import BeautifulSoup
import pandas as pd
from pandas.api.types import is_string_dtype
from pandas.api.types import is_numeric_dtype
#%%#####################################################################
def submit_dynamut(host_url
, pdb_file
, mutation_list
, chain
, email_address
, prediction_url
, output_dir
, outfile_suffix
):
"""
Makes a POST request for dynamut predictions.
@param host_url: valid host url for submitting the job
@type string
@param pdb_file: valid path to pdb structure
@type string
@param mutation_list: list of mutations (1 per line) of the format: {WT}<POS>{Mut}
@type string
@param chain: single-letter(caps)
@type chr
@param email_address: email address to inform of results
@type chr
@param prediction_url: dynamut url for prediction
@type string
@param output_dir: output dir
@type string
@param outfile_suffix: to append to outfile
@type string
@return writes a .txt file containing url for the snps processed with user provided suffix in filename
@type string
"""
with open(pdb_file, "rb") as pdb_file, open (mutation_list, "rb") as mutation_list:
files = {"wild": pdb_file
, "mutation_list": mutation_list}
body = {"chain": chain
, "email": email_address}
response = requests.post(prediction_url, files = files, data = body)
print(response.status_code)
if response.history:
print('\nPASS: valid submission. Fetching result url')
url_match = re.search('/dynamut/results_prediction/.+(?=")', response.text)
url = host_url + url_match.group()
print('\nURL for snp batch no ', str(outfile_suffix), ':', url)
#===============
# writing file: result urls
#===============
dynamut_temp_dir = output_dir + 'dynamut_temp/' # creates a temp dir within output_dir
if not os.path.exists(dynamut_temp_dir):
print('\nCreating dynamut_temp in output_dir', output_dir )
os.makedirs(dynamut_temp_dir)
out_url_file = dynamut_temp_dir + 'dynamut_result_url_' + str(outfile_suffix) + '.txt'
print('\nWriting output url file:', out_url_file
, '\nNow we wait patiently...')
myfile = open(out_url_file, 'a')
myfile.write(url)
myfile.close()
#%%#####################################################################