import streamlit as st import pandas as pd from os import path import sys import streamlit.components.v1 as components sys.path.append('code/') #sys.path.append('ASCARIS/code/') import pdb_featureVector import alphafold_featureVector import argparse from st_aggrid import AgGrid, GridOptionsBuilder, JsCode,GridUpdateMode import base64 showWarningOnDirectExecution = False # Check if 'key' already exists in session_state # If not, then initialize it if 'visibility' not in st.session_state: st.session_state['visibility'] = 'hidden' st.session_state.disabled = False original_title = '

ASCARIS

' st.markdown(original_title, unsafe_allow_html=True) original_title = '

(Annotation and StruCture-bAsed RepresentatIon of Single amino acid variations)

' st.markdown(original_title, unsafe_allow_html=True) st.write('') st.write('') st.write('') st.write('') selected_df = pd.DataFrame() with st.form('mform', clear_on_submit=False): source = st.selectbox('Select the protein structure resource (1: PDB-SwissModel-Modbase, 2: AlphaFold)',[1,2]) impute = st.selectbox('Imputation',[True, False]) input_data = st.text_input('Enter SAV data points (Format Provided Below)', "P13637-T-613-M, Q9Y4W6-N-432-T",label_visibility=st.session_state.visibility, disabled=st.session_state.disabled, placeholder=st.session_state.visibility, ) parser = argparse.ArgumentParser(description='ASCARIS') parser.add_argument('-s', '--source_option', help='Selection of input structure data.\n 1: PDB Structures (default), 2: AlphaFold Structures', default=1) parser.add_argument('-i', '--input_datapoint', help='Input file or query datapoint\n Option 1: Comma-separated list of idenfiers (UniProt ID-wt residue-position-mutated residue (e.g. Q9Y4W6-N-432-T or Q9Y4W6-N-432-T, Q9Y4W6-N-432-T)) \n Option 2: Enter comma-separated file path') parser.add_argument('-impute', '--imputation_state', default='True', help='Whether resulting feature vector should be imputed or not. Default True.') args = parser.parse_args() input_set = input_data mode = source impute = impute submitted = st.form_submit_button(label="Submit", help=None, on_click=None, args=None, kwargs=None, type="secondary", disabled=False, use_container_width=False) print('*****************************************') print('Feature vector generation is in progress. \nPlease check log file for updates..') print('*****************************************') mode = int(mode) if submitted: with st.spinner('In progress...This may take a while...'): try: if mode == 1: selected_df = pdb_featureVector.pdb(input_set, mode, impute) elif mode == 2: selected_df = alphafold_featureVector.alphafold(input_set, mode, impute) else: selected_df = pd.DataFrame() st.write(selected_df) except: selected_df = pd.DataFrame() pass st.success('Feature vector successfully created.') def download_button(object_to_download, download_filename): if isinstance(object_to_download, pd.DataFrame): object_to_download = object_to_download.to_csv(index=False) # Try JSON encode for everything else else: object_to_download = json.dumps(object_to_download) try: # some strings <-> bytes conversions necessary here b64 = base64.b64encode(object_to_download.encode()).decode() except AttributeError as e: b64 = base64.b64encode(object_to_download).decode() dl_link = f"""Start Auto Download file""" return dl_link def download_df(): components.html( download_button(selected_df, st.session_state.filename), height=0, ) """ selected_df = selected_df.astype(str) st.write(selected_df) with st.form("download_form", clear_on_submit=False): st.text_input("Enter filename", key="filename") submit = st.form_submit_button("Download", on_click=selected_df) """ def convert_df(df): return df.to_csv(index=False).encode('utf-8') csv = convert_df(selected_df) st.download_button("Press to Download", csv,"file.csv","text/csv",key='download-csv')