RHDZMOTA Extension App: streamlit_webapps
Project description
RHDZMOTA EXT: streamlit_webapps
Package extensions have 2 main purposes:
- Split the dependency sets into several smaller python projects
- Serve as domain-specific packages (i.e., split functionality).
About the streamlit_webapps
extension
The streamlit extension contains some common useful abstractions to be used when working on creating streamlit applications.
The starting abstraction is the PageView
class, which provides an "easy to reason about" pattern to follow when working on creating webapps. To get a sneak-peak of the functionality, consider creating a webapp.py
script with the following content:
from rhdzmota.ext.streamlit_webapps.page_view import PageView
if __name__ == "__main__":
with PageView() as page:
page.view()
- Run with: `streamlit run webapp.py
With a single import you can have a fully functional streamlit page with content (in this case, a "non implemented" message.
The PageView
abstractions allow you to specify the page configuration via class initialization such as:
PageView(page_title="Demo", page_layout="wide", favicon_path="path/to/favicon.png")
You can provide a custom streamlit implementation to a page-view via:
Inline
(discouraged) via thePageView.infline
class constructor.Inheritance
(recommended) by providing an implementation for theview
instance method.
Code Example: Using inheritance to provide a custom streamlit implementation.
import random
import datetime as dt
import streamlit as st
from rhdzmota.ext.streamlit_webapps.page_view import PageView
class WelcomeView(PageView):
def view(self, **kwargs):
st.markdown("# My Custom Webapp")
with st.form(f"form-{self.refname}"):
num_input = int(st.number_input("Num. of Options (input)", min_value=2, step=1))
num_output = int(st.number_input("Num. of Winners", min_value=1, step=1))
exclusive_select = st.checkbox("Exclusive Select")
submitted = st.form_submit_button("Submit")
if not submitted:
return
values = [f"Option-{i}" for i in range(num_input)]
timestamp = dt.datetime.now().isoformat()
sep = "\n* "
result_prefix = f"Result (TS: {dt.datetime.now().isoformat()}) "
if not exclusive_select:
output = result_prefix + sep + sep.join(random.choices(values, k=num_output))
return st.markdown(output)
random.shuffle(values)
output = result_prefix + sep + sep.join(values[:num_output] if num_output < num_input else values)
return st.markdown(output)
if __name__ == "__main__":
with WelcomeView(page_title="Demo", page_layout="wide") as page:
page.view()
CLI CMD: run_from_file
You can use the cli interface
to execute streamlit applications:
$ rhdzmota.ext execute streamlit_webapps --command run_from_file \
--path {{path/to/file.py}}
- Use this command when you have a streamlit entrypoint python file.
$ rhdzmota.ext execute streamlit_Webapps --command run_from_refname \
--function_name {{function-name}} \
--module_name {{module_name}}
- Use this command when you want to execute a function accessible in your current python runtime.
Example:
$ rhdzmota.ext execute streamlit_webapps --command run_from_file \
--path extensions/streamlit_webapps/src/examples/ex1_plain_page_view.py
Linked Installation
Most extensions can be installed indirectly via the main package by providing an extra-dependency tag. Example:
$ pip install 'rhdzmota[ext.streamlit_webapps]'
- General pattern:
'rhdzmota[ext.<extension-slug>]'
Standalone Installations
Package extensions can also be installed independently. For example:
$ pip install rhdzmota_extension_streamlit_webapps
- General pattern:
rhdzmota_extension_<extension-slug>
You can also install them locally:
$ EXT_BUILD_LOCAL=1 pip install -e extensions/streamlit_webapps
- General pattern:
EXT_BUILD_LOCAL=1 pip install -e path/to/extension
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for rhdzmota_extension_streamlit_webapps-0.2.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2344ddf756d318f989bb16c40caa0f27a609e799f21d7113ed28007e12d2bd67 |
|
MD5 | a76e2cd572db585f17b23925cc2f7daa |
|
BLAKE2b-256 | 45e1d32b49f6831712e41e888d01b7f5635a62c38d544776ebcdc727b201a096 |