Name | streamlit-pydantic-form JSON |
Version |
0.0.4
JSON |
| download |
home_page | |
Summary | Streamlit form component defined by a Pydantic model |
upload_time | 2024-01-18 12:28:43 |
maintainer | |
docs_url | None |
author | Shunichiro Nomura |
requires_python | >=3.11 |
license | |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Streamlit Pydnatic Form
Streamlit form component defined by a Pydantic model.
## Installation
```bash
pip install streamlit-pydantic-form
```
## Usage
### Without `streamlit-pydantic-form`
```python
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.
```python
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.
```python
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`.
```python
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.
```python
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)
```
Raw data
{
"_id": null,
"home_page": "",
"name": "streamlit-pydantic-form",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": "",
"keywords": "",
"author": "Shunichiro Nomura",
"author_email": "nomura@space.t.u-tokyo.ac.jp",
"download_url": "https://files.pythonhosted.org/packages/6b/0a/c562fd53f37e3912bba6e29c0f628ac3c45da11917e2fc603bed10fda624/streamlit_pydantic_form-0.0.4.tar.gz",
"platform": null,
"description": "# Streamlit Pydnatic Form\n\nStreamlit form component defined by a Pydantic model.\n\n## Installation\n\n```bash\npip install streamlit-pydantic-form\n```\n\n## Usage\n\n### Without `streamlit-pydantic-form`\n\n```python\nimport streamlit as st\n\nwith st.form(\"form_0\"):\n slider_val = st.slider(\"Form slider\")\n checkbox_val = st.checkbox(\"Form checkbox\")\n\n submitted = st.form_submit_button(\"Submit\")\n if submitted:\n st.write(\"slider\", slider_val, \"checkbox\", checkbox_val)\n```\n\n### With `streamlit-pydantic-form`\n\nWith `streamlit-pydantic-form` you can define a Pydantic model and use it to automatically generate a form.\n\n```python\nfrom typing import Annotated\n\nimport streamlit as st\nfrom pydantic import BaseModel\n\nfrom streamlit_pydantic_form import st_auto_form, widget\n\nclass SimpleFormModel(BaseModel):\n slider_val: Annotated[int, widget.Slider(\"Form slider\")]\n checkbox_val: Annotated[bool, widget.Checkbox(\"Form checkbox\")]\n\n\nwith st_auto_form(\"form_1\", model=SimpleFormModel) as simple_form:\n val = simple_form.input_widgets()\n submitted = st.form_submit_button(\"Submit\")\n if submitted:\n st.write(\"slider\", val.slider_val, \"checkbox\", val.checkbox_val)\n```\n\n### Nested Model\n\nYou can also define a nested model.\n\n```python\nfrom typing import Annotated\n\nimport streamlit as st\nfrom pydantic import BaseModel\n\nfrom streamlit_pydantic_form import st_auto_form, widget\n\nclass ChildFormModel(BaseModel):\n slider_val: Annotated[int, widget.Slider(\"Child slider\")]\n\nclass ParentFormModel(BaseModel):\n slider_val: Annotated[int, widget.Slider(\"Parent slider\")]\n checkbox_val: Annotated[bool, widget.Checkbox(\"Parent checkbox\")]\n child: ChildFormModel\n\nwith st_auto_form(\"form_2\", model=ParentFormModel) as parent_form:\n val2 = parent_form.input_widgets()\n submitted = st.form_submit_button(\"Submit\")\n if submitted:\n st.write(\n \"parent slider\",\n val2.slider_val,\n \"parent checkbox\",\n val2.checkbox_val,\n \"child slider\",\n val2.child.slider_val,\n )\n```\n\n### Custom Widget\n\nYou can define a custom widget by defining a custom `WidgetBuilder` and pass it to `st_auto_form` as `widget_builder`.\n\n```python\nfrom typing import Annotated\n\nimport streamlit as st\nfrom pydantic import BaseModel\n\nfrom streamlit_pydantic_form import st_auto_form, widget\n\n# Custom widget builder\nclass PointWidget(widget.WidgetBuilder):\n def build(self) -> PointModel:\n x = st.slider(\"X\")\n y = st.slider(\"Y\")\n return PointModel(x=x, y=y)\n\nwith st_auto_form(\"form_3\", model=PointModel, widget_builder=PointWidget()) as point_form:\n val3 = point_form.input_widgets()\n submitted = st.form_submit_button(\"Submit\")\n if submitted:\n st.write(\"x\", val3.x, \"y\", val3.y)\n```\n\nYou can also use the `Annotated` type hint to define a custom widget.\n\n```python\nfrom typing import Annotated\n\nimport streamlit as st\nfrom pydantic import BaseModel\n\nfrom streamlit_pydantic_form import st_auto_form, widget\n\n# External model\nclass PointModel(BaseModel):\n x: int\n y: int\n\n# Custom widget\nclass PointWidget(widget.WidgetBuilder):\n def build(self) -> PointModel:\n x = st.slider(\"X\")\n y = st.slider(\"Y\")\n return PointModel(x=x, y=y)\n\n# Form model\nclass PointFormModel(BaseModel):\n p: Annotated[PointModel, PointWidget()]\n\nwith st_auto_form(\"form_4\", model=PointFormModel) as point_form2:\n val4 = point_form2.input_widgets()\n submitted = st.form_submit_button(\"Submit\")\n if submitted:\n st.write(\"x\", val4.p.x, \"y\", val4.p.y)\n```\n",
"bugtrack_url": null,
"license": "",
"summary": "Streamlit form component defined by a Pydantic model",
"version": "0.0.4",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9ec7ec3dbcbdc71a44bdeef3fb815e915ab435c26071790eba939759b6a3f7eb",
"md5": "e1b176beb9b3af7df7e563bbe48b8beb",
"sha256": "4dcaad836266da02c74564208bf19792c87231f08db2746ad2cbadf191bb2f6d"
},
"downloads": -1,
"filename": "streamlit_pydantic_form-0.0.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e1b176beb9b3af7df7e563bbe48b8beb",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 4000,
"upload_time": "2024-01-18T12:28:42",
"upload_time_iso_8601": "2024-01-18T12:28:42.009897Z",
"url": "https://files.pythonhosted.org/packages/9e/c7/ec3dbcbdc71a44bdeef3fb815e915ab435c26071790eba939759b6a3f7eb/streamlit_pydantic_form-0.0.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6b0ac562fd53f37e3912bba6e29c0f628ac3c45da11917e2fc603bed10fda624",
"md5": "99bb781c7e4bfb6dbe7ad313e4dc6993",
"sha256": "bb70f176bd6158663fe44c2bdc8a3db453b4872d8d33ab9304471b51b1669bdd"
},
"downloads": -1,
"filename": "streamlit_pydantic_form-0.0.4.tar.gz",
"has_sig": false,
"md5_digest": "99bb781c7e4bfb6dbe7ad313e4dc6993",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 3611,
"upload_time": "2024-01-18T12:28:43",
"upload_time_iso_8601": "2024-01-18T12:28:43.435460Z",
"url": "https://files.pythonhosted.org/packages/6b/0a/c562fd53f37e3912bba6e29c0f628ac3c45da11917e2fc603bed10fda624/streamlit_pydantic_form-0.0.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-01-18 12:28:43",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "streamlit-pydantic-form"
}