diff --git a/ersilia/app/__init__.py b/ersilia/app/__init__.py index 4da67d50..e69de29b 100644 --- a/ersilia/app/__init__.py +++ b/ersilia/app/__init__.py @@ -1 +0,0 @@ -from .blocks.streamlit import StreamlitBlocks diff --git a/ersilia/app/app.py b/ersilia/app/app.py deleted file mode 100644 index 93873313..00000000 --- a/ersilia/app/app.py +++ /dev/null @@ -1,82 +0,0 @@ -import os -from ..utils.terminal import run_command -from .. import ErsiliaBase - - -class AppBase(ErsiliaBase): - def __init__(self, config_json=None): - ErsiliaBase.__init__(self, config_json=config_json) - self.cards = None - self.APP_SCRIPT = self.cfg.HUB.APP_SCRIPT - - def _load_model_cards(self): - if self.cards is None: - from ..hub.card import ModelCard - - self.cards = ModelCard() - - def _is_swagger(self, model_id): - filename = self.app_script(model_id) - if not os.path.exists(filename): - return True - else: - return False - - def _is_streamlit(self, model_id): - filename = self.app_script(model_id) - with open(filename, "r") as f: - text = f.read() - if "import streamlit" in text: - return True - else: - return False - - def _is_dash(self, model_id): - filename = self.app_script(model_id) - with open(filename, "r") as f: - text = f.read() - if "import dash" in text: - return True - else: - return False - - def app_script(self, model_id): - filename = os.path.join(self._dest_dir, model_id, self.APP_SCRIPT) - return filename - - def get_model_card(self, model_id): - self._load_model_cards() - return self.cards.get(model_id) - - -class StreamlitApp(AppBase): - def __init__(self, config_json=None): - AppBase.__init__(self, config_json=config_json) - - def run(self, model_id): - if not self._is_streamlit(model_id): - return 0 - filename = os.path.join(self._dest_dir, model_id, self.APP_SCRIPT) - if os.path.exists(filename): - run_command("streamlit run %s" % filename) - return 1 - else: - return 0 - - -class DashApp(AppBase): - def __init__(self, config_json=None): - AppBase.__init__(self, config_json=config_json) - - def run(self): - if not self._is_dash(model_id): - return 0 - pass # TODO - - -class SwaggerApp(AppBase): - def __init__(self, config_json=None): - AppBase.__init__(self, config_json=config_json) - - def run(self, model_id): - pass # TODO diff --git a/ersilia/app/blocks/__init__.py b/ersilia/app/blocks/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ersilia/app/blocks/streamlit.py b/ersilia/app/blocks/streamlit.py deleted file mode 100644 index 66a67864..00000000 --- a/ersilia/app/blocks/streamlit.py +++ /dev/null @@ -1,45 +0,0 @@ -import streamlit as st -from ..app import AppBase - - -class StreamlitBlocks(AppBase): - def __init__(self, model_id, config_json=None): - AppBase.__init__(self, config_json=config_json) - self.card = self.get_model_card(model_id) - self.model_id = model_id - - def load_model(self): - pass - - def header(self): - st.title(self.card.title) - st.markdown("`MODEL ID: %s`" % self.model_id) - st.markdown( - self.card.description - + " " - + "To know more, please visit [Ersilia Model Hub](%s/%s)." - % (self.cfg.HUB.WEB, self.model_id) - ) - - @staticmethod - def molecule_input(): - st.subheader("Input molecule") - inp = st.text_input( - "Please enter a molecule (name, SMILES...)", - value="", - max_chars=None, - key=None, - type="default", - ) - return inp - - @staticmethod - def protein_input(): - inp = st.text_input( - "Please enter a protein (sequence, UniProtAC...)", - value="", - max_chars=None, - key=None, - type="default", - ) - return inp diff --git a/ersilia/app/contrib/app1.py b/ersilia/app/contrib/app1.py deleted file mode 100644 index 7c58e977..00000000 --- a/ersilia/app/contrib/app1.py +++ /dev/null @@ -1,6 +0,0 @@ -import streamlit as st - - -def app(): - st.title("") - st.write("About") diff --git a/ersilia/app/contrib/app2.py b/ersilia/app/contrib/app2.py deleted file mode 100644 index df9e168b..00000000 --- a/ersilia/app/contrib/app2.py +++ /dev/null @@ -1,61 +0,0 @@ -import streamlit as st -from ersilia import ErsiliaModel -import json - -from rdkit import Chem -from rdkit.Chem.Draw import IPythonConsole -from rdkit.Chem import Draw - -import streamlit as st -from ersilia.hub.content.catalog import ModelCatalog - - -def show_output(obj): - obj = list(obj) - d = dict(obj[0]) - d = d["output"] - pair = next(iter((d.items()))) - st.write(pair[0], " : ", "%.3f" % (float(pair[1]))) - - -mc = ModelCatalog() -local_catalog = str(mc.local()).split("\n")[2:] -models_local = tuple([i.split()[1] for i in local_catalog]) - - -def app(): - st.header("Ersilia Model Hub") - st.subheader("Calculate and Predict properties for your molecules of interest") - - option = st.selectbox("Which model would you like to run?", models_local) - model = ErsiliaModel(option) - model.serve() - - compound_smiles = st.text_input("Enter the chemical structure", "") - m = Chem.MolFromSmiles(compound_smiles) - im = Draw.MolToImage(m, size=(200, 200)) - st.image(im) - - apis = tuple(model.get_apis()) - - # if only one api available, no need to create radio buttons - if len(apis) == 1: - opt = apis[0] - if opt == "predict": - if st.button("Predict"): - output_obj = model.predict(compound_smiles) - show_output(output_obj) - elif opt == "calculate": - if st.button("Calculate"): - output_obj = model.calculate(compound_smiles) - show_output(output_obj) - - # if model supports more than one api, create radio buttons - else: - opt = st.radio("Select API", apis) - if opt == "predict": - output_obj = model.predict(compound_smiles) - show_output(output_obj) - elif opt == "calculate": - output_obj = model.calculate(compound_smiles) - show_output(output_obj) diff --git a/ersilia/app/contrib/app3.py b/ersilia/app/contrib/app3.py deleted file mode 100644 index 0d5a0d42..00000000 --- a/ersilia/app/contrib/app3.py +++ /dev/null @@ -1,8 +0,0 @@ -import streamlit as st - - -def app(): - st.title("Catalog") - st.header("Local") - - st.header("Ersilia Hub") diff --git a/ersilia/app/contrib/ersilia-app.py b/ersilia/app/contrib/ersilia-app.py deleted file mode 100644 index 9aa5c0c2..00000000 --- a/ersilia/app/contrib/ersilia-app.py +++ /dev/null @@ -1,10 +0,0 @@ -import app1 -import app2 -import app3 -import streamlit as st - -PAGES = {"About": app1, "API": app2, "Catalog": app3} -st.sidebar.title("Navigation") -selection = st.sidebar.radio("Go to", list(PAGES.keys())) -page = PAGES[selection] -page.app()