import gradio as gr import os def load_html(html_file: str): with open(os.path.join("html", html_file), "r") as f: return f.read() def load_protein_from_file(protein_file) -> str: """ Parameters ---------- protein_file: _TemporaryFileWrapper GradIO file object Returns ------- str Protein PDB file content """ with open(protein_file.name, "r") as f: return f.read() def load_ligand_from_file(ligand_file): with open(ligand_file.name, "r") as f: return f.read() def protein_html_from_file(protein_file): protein = load_protein_from_file(protein_file) protein_html = load_html("protein.html") html = protein_html.replace("%%%PDB%%%", protein) return f"""""" def ligand_html_from_file(ligand_file): ligand = load_ligand_from_file(ligand_file) ligand_html = load_html("ligand.html") html = ligand_html.replace("%%%SDF%%%", ligand) return f"""""" def protein_ligand_html_from_file(protein_file, ligand_file): protein = load_protein_from_file(protein_file) ligand = load_ligand_from_file(ligand_file) protein_ligand_html = load_html("pl.html") html = protein_ligand_html.replace("%%%PDB%%%", protein) html = html.replace("%%%SDF%%%", ligand) return f"""""" demo = gr.Blocks() with demo: gr.Markdown("# Protein and Ligand") with gr.Row(): with gr.Box(): pfile = gr.File(file_count="single") pbtn = gr.Button("View") protein = gr.HTML() pbtn.click(fn=protein_html_from_file, inputs=[pfile], outputs=protein) with gr.Box(): lfile = gr.File(file_count="single") lbtn = gr.Button("View") ligand = gr.HTML() lbtn.click(fn=ligand_html_from_file, inputs=[lfile], outputs=ligand) with gr.Row(): gr.Markdown("# Protein-Ligand Complex") plcomplex = gr.HTML() # TODO: Automatically display complex when both files are uploaded plbtn = gr.Button("View") plbtn.click(fn=protein_ligand_html_from_file, inputs=[pfile, lfile], outputs=plcomplex) demo.launch()