109 lines
4.0 KiB
Python
109 lines
4.0 KiB
Python
import mysql.connector as con
|
|
from misc.common import get3DModel, CopyContentOfFolder, RemoveAllFilesMatching
|
|
from misc.email import email
|
|
import os
|
|
import sys
|
|
|
|
from misc.config import iniConfig
|
|
|
|
mycon = con.connect(host=iniConfig['DATABASE']['HOST'],user=iniConfig['DATABASE']['USER'],password=iniConfig['DATABASE']['PASSWORD'],port=iniConfig['DATABASE']['PORT'],database=iniConfig['DATABASE']['NAME'])
|
|
mycursor = mycon.cursor()
|
|
|
|
sql_select_Query = "select * from curieweb where done=0 LIMIT 1"
|
|
mycursor.execute(sql_select_Query)
|
|
|
|
records = mycursor.fetchall()
|
|
if records == []:
|
|
print("Empty Set 😳")
|
|
print("No active task, exitting gracefully")
|
|
exit(0)
|
|
|
|
receptor_name = "protein.pdbqt"
|
|
ligand_name = "ligand.pdbqt"
|
|
description = "Curie Web Task"
|
|
|
|
#print(records[0])
|
|
r = records[0]
|
|
jobID = r[0]
|
|
toEmail = r[1]
|
|
toaddr = toEmail
|
|
targetB = r[2]
|
|
if r[3] is not None:
|
|
receptor_name = str(r[3])
|
|
if r[6] is not None:
|
|
ligand_name = str(r[6])
|
|
ligandB = r[4]
|
|
configB = r[7]
|
|
date = r[8]
|
|
if r[9] is not None:
|
|
description = r[9]
|
|
else:
|
|
description = "not specified"
|
|
|
|
cd = os.getcwd()
|
|
f = os.path.join(cd,"static/uploads")
|
|
reportDirectory = os.path.join(f,"reports")
|
|
scripts = os.path.join(cd,"scripts")
|
|
modelDirectory = os.path.join(f,"3DModels")
|
|
|
|
import tempfile
|
|
from shutil import make_archive, copyfile,copy
|
|
|
|
with tempfile.TemporaryDirectory() as directory:
|
|
print('The created temporary directory is %s' % directory)
|
|
os.chdir(directory)
|
|
with open(receptor_name,"wb") as file:
|
|
file.write(targetB)
|
|
with open(ligand_name,"wb") as file:
|
|
file.write(ligandB)
|
|
with open("config.txt","wb") as file:
|
|
file.write(configB)
|
|
# Legacy Docker Curie-Cli Run
|
|
#os.system("docker run --rm -v ${PWD}:/results -w /results -u $(id -u ${USER}):$(id -g ${USER}) navanchauhan/curie-cli -r %s -l %s -c config.txt -dpi" % (receptor_name,ligand_name))
|
|
CopyContentOfFolder(scripts,directory)
|
|
os.system("./main.sh -r %s -l %s -c config.txt -dpi" % (receptor_name,ligand_name))
|
|
RemoveAllFilesMatching(directory,".py")
|
|
RemoveAllFilesMatching(directory,".sh")
|
|
z = "Curie_Web_Result_"+str(jobID)
|
|
zi = os.path.join(f,z)
|
|
make_archive(zi, 'zip', directory)
|
|
try:
|
|
copyfile("report.pdf",os.path.join(reportDirectory,(str(jobID)+".pdf")))
|
|
except FileNotFoundError:
|
|
reason = "Could not generate the report, this could be because of a failed docking job. Please check the ZIP archive for the configuration and converted PDBQTs and try submitting manually. "
|
|
email(toaddr,jobID,date,description,zipArchive=zi,reason=reason)
|
|
mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
|
|
mycon.commit()
|
|
sys.exit(0)
|
|
|
|
res = get3DModel(receptor_name,ligand_name.replace(".pdbqt","_out.pdbqt"))
|
|
if res == None:
|
|
reason = "Could not generate the 3D models."
|
|
email(toaddr,jobID,date,description,zipArchive=zi)
|
|
mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
|
|
mycon.commit()
|
|
sys.exit(0)
|
|
os.system("collada2gltf -i model.dae -o model.gltf")
|
|
try:
|
|
copyfile("model.gltf",os.path.join(modelDirectory,(str(jobID)+".gltf")))
|
|
except FileNotFoundError:
|
|
print("Does not have Collada2GLTF Installed")
|
|
email(toaddr,jobID,date,description,zipArchive=zi)
|
|
mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
|
|
mycon.commit()
|
|
exit(0)
|
|
arch = os.popen("uname -m").read()
|
|
print("Generating 3D Model")
|
|
if "x86" in arch:
|
|
os.system("docker run --rm -v $(pwd):/usr/app leon/usd-from-gltf:latest model.gltf model.usdz")
|
|
elif "aarch64" in arch:
|
|
os.system("docker run --rm -v $(pwd):/usr/app navanchauhan/usd-from-gltf:latest model.gltf model.usdz")
|
|
try:
|
|
copyfile("model.usdz",os.path.join(modelDirectory,(str(jobID)+".usdz")))
|
|
except FileNotFoundError:
|
|
print("Could not generate USDZ file")
|
|
|
|
email(toaddr,jobID,date,description,zipArchive=zi)
|
|
mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
|
|
mycon.commit()
|