Spaces:
Running
Running
import gradio as gr | |
from utils.foldseek_util import get_struc_seq | |
#################################################### | |
# gradio blocks # | |
#################################################### | |
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): | |
# Which chain to be extracted | |
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 | |
#################################################### | |
# Trigger functions # | |
#################################################### | |
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) | |