Streamlit form component defined by a Pydantic model
Project description
Streamlit Pydnatic Form
Streamlit form component defined by a Pydantic model.
Installation
pip install streamlit-pydantic-form
Usage
Without streamlit-pydantic-form
import streamlit as st
with st.form("form_0"):
slider_val = st.slider("Form slider")
checkbox_val = st.checkbox("Form checkbox")
submitted = st.form_submit_button("Submit")
if submitted:
st.write("slider", slider_val, "checkbox", checkbox_val)
With streamlit-pydantic-form
With streamlit-pydantic-form
you can define a Pydantic model and use it to automatically generate a form.
from typing import Annotated
import streamlit as st
from pydantic import BaseModel
from streamlit_pydantic_form import st_auto_form, widget
class SimpleFormModel(BaseModel):
slider_val: Annotated[int, widget.Slider("Form slider")]
checkbox_val: Annotated[bool, widget.Checkbox("Form checkbox")]
with st_auto_form("form_1", model=SimpleFormModel) as simple_form:
val = simple_form.input_widgets()
submitted = st.form_submit_button("Submit")
if submitted:
st.write("slider", val.slider_val, "checkbox", val.checkbox_val)
Nested Model
You can also define a nested model.
from typing import Annotated
import streamlit as st
from pydantic import BaseModel
from streamlit_pydantic_form import st_auto_form, widget
class ChildFormModel(BaseModel):
slider_val: Annotated[int, widget.Slider("Child slider")]
class ParentFormModel(BaseModel):
slider_val: Annotated[int, widget.Slider("Parent slider")]
checkbox_val: Annotated[bool, widget.Checkbox("Parent checkbox")]
child: ChildFormModel
with st_auto_form("form_2", model=ParentFormModel) as parent_form:
val2 = parent_form.input_widgets()
submitted = st.form_submit_button("Submit")
if submitted:
st.write(
"parent slider",
val2.slider_val,
"parent checkbox",
val2.checkbox_val,
"child slider",
val2.child.slider_val,
)
Custom Widget
You can define a custom widget by defining a custom WidgetBuilder
and pass it to st_auto_form
as widget_builder
.
from typing import Annotated
import streamlit as st
from pydantic import BaseModel
from streamlit_pydantic_form import st_auto_form, widget
# Custom widget builder
class PointWidget(widget.WidgetBuilder):
def build(self) -> PointModel:
x = st.slider("X")
y = st.slider("Y")
return PointModel(x=x, y=y)
with st_auto_form("form_3", model=PointModel, widget_builder=PointWidget()) as point_form:
val3 = point_form.input_widgets()
submitted = st.form_submit_button("Submit")
if submitted:
st.write("x", val3.x, "y", val3.y)
You can also use the Annotated
type hint to define a custom widget.
from typing import Annotated
import streamlit as st
from pydantic import BaseModel
from streamlit_pydantic_form import st_auto_form, widget
# External model
class PointModel(BaseModel):
x: int
y: int
# Custom widget
class PointWidget(widget.WidgetBuilder):
def build(self) -> PointModel:
x = st.slider("X")
y = st.slider("Y")
return PointModel(x=x, y=y)
# Form model
class PointFormModel(BaseModel):
p: Annotated[PointModel, PointWidget()]
with st_auto_form("form_4", model=PointFormModel) as point_form2:
val4 = point_form2.input_widgets()
submitted = st.form_submit_button("Submit")
if submitted:
st.write("x", val4.p.x, "y", val4.p.y)
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
Built Distribution
Close
Hashes for streamlit_pydantic_form-0.0.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | bb70f176bd6158663fe44c2bdc8a3db453b4872d8d33ab9304471b51b1669bdd |
|
MD5 | 99bb781c7e4bfb6dbe7ad313e4dc6993 |
|
BLAKE2b-256 | 6b0ac562fd53f37e3912bba6e29c0f628ac3c45da11917e2fc603bed10fda624 |
Close
Hashes for streamlit_pydantic_form-0.0.4-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4dcaad836266da02c74564208bf19792c87231f08db2746ad2cbadf191bb2f6d |
|
MD5 | e1b176beb9b3af7df7e563bbe48b8beb |
|
BLAKE2b-256 | 9ec7ec3dbcbdc71a44bdeef3fb815e915ab435c26071790eba939759b6a3f7eb |