forked from lukasmasuch/streamlit-pydantic
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdataclass_form.py
35 lines (26 loc) · 997 Bytes
/
dataclass_form.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import dataclasses
import json
import streamlit as st
from pydantic.json import pydantic_encoder
import streamlit_pydantic as sp
@dataclasses.dataclass
class ExampleModel:
some_number: int
some_boolean: bool
some_text: str = "default input"
from_model_tab, from_instance_tab = st.tabs(
["Form inputs from model", "Form inputs from instance"]
)
with from_model_tab:
data = sp.pydantic_form(key="my_form", model=ExampleModel)
if data:
st.json(json.dumps(data, default=pydantic_encoder))
with from_instance_tab:
instance = ExampleModel(
some_number=999, some_boolean=True, some_text="instance text"
)
# FIXME: this should be a pydantic_form to match the "from model.." above
# but initialising a pydantic_form with an instance is not yet supported
instance_input_data = sp.pydantic_input(key="my_form_instance", model=instance)
if instance_input_data:
st.json(json.dumps(instance_input_data, default=pydantic_encoder))