DiffDock-Pocket-Web / run_utils.py
silterra's picture
Have gradio app call inference.py
6daa4cc
raw
history blame
3.21 kB
import datetime
import os
import shutil
import subprocess
import tempfile
import uuid
import logging
def configure_logging(level=None):
if level is None:
level = getattr(logging, os.environ.get("LOG_LEVEL", "INFO"))
# Note that this sets the universal logger,
# which includes other libraries.
logging.basicConfig(
level=level,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(), # Outputs logs to stderr by default
# If you also want to log to a file, uncomment the following line:
# logging.FileHandler('my_app.log', mode='a', encoding='utf-8')
]
)
def run_cli_command(protein_path: str, ligand: str, samples_per_complex: int,
keep_local_structures: bool, save_visualisation: bool, work_dir=None):
if work_dir is None:
work_dir = os.environ.get("DiffDock-Pocket-Dir",
os.path.join(os.environ["HOME"], "DiffDock-Pocket"))
command = ["python3", "inference.py", f"--protein_path={protein_path}", f"--ligand={ligand}",
f"--samples_per_complex={samples_per_complex}"]
# Adding boolean arguments only if they are True
if keep_local_structures:
command.append("--keep_local_structures")
if save_visualisation:
command.append("--save_visualisation")
with tempfile.TemporaryDirectory() as temp_dir:
temp_dir_path = temp_dir
logging.debug(f"temp dir: {temp_dir}")
command.append(f"--out_dir={temp_dir_path}")
# Convert command list to string for printing
command_str = " ".join(command)
logging.info(f"Executing command: {command_str}")
# Running the command
try:
result = subprocess.run(
command, cwd=work_dir, check=False, text=True, capture_output=True, env=os.environ
)
logging.debug(f"Command output:\n{result.stdout}")
if result.stderr:
logging.error(f"Command error:\n{result.stderr}")
except subprocess.CalledProcessError as e:
logging.error(f"An error occurred while executing the command: {e}")
# Zip the output directory
# Generate a unique filename using a timestamp and a UUID
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
uuid_tag = str(uuid.uuid4())[0:8]
unique_filename = f"output_{timestamp}_{uuid_tag}"
zip_base_name = os.path.join("tmp", unique_filename)
full_zip_path = shutil.make_archive(zip_base_name, 'zip', temp_dir)
logging.debug(f"Directory '{temp_dir}' zipped to '{full_zip_path}'")
return full_zip_path
if False and __name__ == "__main__":
# Testing code
work_dir = os.path.expanduser("~/Projects/DiffDock-Pocket")
os.environ["DiffDock-Pocket-Dir"] = work_dir
protein_path = os.path.join(work_dir, "example_data", "3dpf_protein.pdb")
ligand = os.path.join(work_dir, "example_data", "3dpf_ligand.sdf")
run_cli_command(protein_path, ligand, samples_per_complex=1,
keep_local_structures=True, save_visualisation=True)