|
import gradio as gr
|
|
|
|
from utils.foldseek_util import get_struc_seq
|
|
|
|
|
|
|
|
|
|
|
|
def upload_pdb_button(visible: bool = True, chain_visible: bool = True):
|
|
"""
|
|
Provide an upload button to upload a pdb file
|
|
Args:
|
|
visible: Whether the block is visible or not
|
|
"""
|
|
|
|
with gr.Column(scale=0):
|
|
|
|
|
|
chain_box = gr.Textbox(label="Chain (to be extracted from the pdb file)", value="A",
|
|
visible=chain_visible, interactive=True)
|
|
|
|
upload_btn = gr.UploadButton(label="Upload .pdb/.cif file", visible=visible)
|
|
|
|
return upload_btn, chain_box
|
|
|
|
|
|
|
|
|
|
|
|
def parse_pdb_file(input_type: str, file: str, chain: str) -> str:
|
|
"""
|
|
Parse the uploaded structure file
|
|
|
|
Args:
|
|
input_type: Type of input. Must be one of ["protein sequence", "protein structure"]
|
|
|
|
file: Path to the uploaded file
|
|
|
|
chain: Chain to be extracted from the pdb file
|
|
|
|
Returns:
|
|
Protein sequence or Foldseek sequence
|
|
"""
|
|
try:
|
|
parsed_seqs = get_struc_seq("/tmp/foldseek", file, [chain])[chain]
|
|
if input_type == "sequence":
|
|
return parsed_seqs[0]
|
|
else:
|
|
return parsed_seqs[1].lower()
|
|
|
|
except Exception:
|
|
raise gr.Error(f"Chain '{chain}' not found in the pdb file. Please check the chain id and try again.")
|
|
|
|
|
|
def set_upload_visible(visible: bool) -> gr.Interface:
|
|
"""
|
|
Set the visibility of the upload button
|
|
|
|
Args:
|
|
visible: Whether the block is visible or not
|
|
|
|
Returns:
|
|
gr.Interface: Updated interface
|
|
"""
|
|
|
|
return gr.update(visible=visible)
|
|
|