sequencetable / app.py
tonigi's picture
download
40249ab
import io
import gradio as gr
import tempfile
from uniprot_data import create_dataframe, get_uniprot_data
def process_uniprot_id(uniprot_id):
"""
Main function to process a UniProt ID.
Args:
uniprot_id: The UniProt ID.
Returns:
Tuple of (DataFrame, downloadable file) or error message
"""
protein_sequence, annotations = get_uniprot_data(uniprot_id)
if protein_sequence and annotations:
df = create_dataframe(protein_sequence, annotations)
# Create Excel file
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.xlsx')
df.to_excel(temp_file.name, index=False)
return df, temp_file.name
return "Could not retrieve or process data for the given Uniprot ID", None
# Gradio Interface
with gr.Blocks() as demo:
with gr.Column():
gr.Markdown("# Protein Sequence Analysis")
gr.Markdown(
"This app fetches protein sequence and annotation data from UniProt using a UniProt ID and prints a copy-pasteable table for note-taking. **DO NOT TRUST, THIS IS A CODING EXPERIMENT**"
)
input_text = gr.Textbox(
label="UniProt ID",
placeholder="Enter UniProt ID (e.g., P53_HUMAN)",
value="", # Empty default value
)
submit_btn = gr.Button("Submit")
# Add examples
gr.Examples(
examples=[
["P06280"], # Alpha-galactosidase A
["P07550"], # beta-2 AR
["P01308"], # Insulin
["Q8WZ42"], # Titin
["P0DTC2"], # SARS-CoV-2 Spike protein
],
example_labels=[
"Alpha-galactosidase A",
"Beta-2 adrenergic receptor",
"Insulin",
"Titin",
"SARS-CoV-2 Spike protein",
],
inputs=input_text,
label="Example UniProt IDs",
)
output_df = gr.Dataframe(interactive=False)
download_btn = gr.DownloadButton(label="Download Excel")
outputs = submit_btn.click(
fn=process_uniprot_id,
inputs=input_text,
outputs=[output_df, download_btn]
)
if __name__ == "__main__":
demo.launch()