Easy state management in Streamlit with Pydantic.
Project description
Easy state management in Streamlit with Pydantic.
StatelitModel
Attributes and Methods
The following attributes and methods are part of the public API and are considered stable.
StatelitModel().pydantic_obj
Pydantic object being used by the StatelitModel()
.
StatelitModel().widget()
Render a single widget for a single field.
Parameters:
field_name: str
(required) - String name of the field to render a widget for.key_suffix: Optional[str] = None
- Suffix to apply to the state key.run_post_callback: bool = True
- If true, run the "post callback" for this field before returning a value.**kwargs
- Additional keyword arguments that will be passed to the Streamlit callback.
Returns: (Any
) The value output by the Streamlit callback (i.e. the value of the widget), after running the post callback if run_post_callback
is True.
StatelitModel().form()
Renders all widgets for the entire Pydantic BaseModel
. Widgets are rendered in the order they're defined in the model.
Parameters:
key_suffix: Optional[str] = None
- Suffix to apply to the state key.exclude: Optional[List[str]] = None
- Which field names to exclude from rendering.**kwargs
- Additional keyword arguments that will be passed to the Streamlit callback.
Returns: (pydantic.BaseModel
) The Pydantic model object, pydantic_obj
.
StatelitModel().code()
Renders Markdown syntax highlighted version of the JSON state.
Returns: (str
) JSON representation of the state.
StatelitModel().text_area()
Renders the JSON state as a text field. The JSON can be modified, and changing its value will update all other fields to match.
Parameters:
key_suffix: Optional[str] = None
- Suffix to apply to the state key.exclude: Optional[List[str]] = None
- Which field names to exclude from rendering.**kwargs
- Additional keyword arguments that will be passed to the Streamlit callback.
Returns: (str
) The output of the text widget, which should be a JSON representation of the state.
StatelitModel().lazy_text_area()
Renders the JSON state as a "lazy" text field. The JSON can be modified, but changes won't be saved until the "Apply" button is pressed.
Parameters:
key_suffix: Optional[str] = None
- Suffix to apply to the state key.exclude: Optional[List[str]] = None
- Which field names to exclude from rendering.**kwargs
- Additional keyword arguments that will be passed to the Streamlit callback.
Returns: (str
) The output of the text widget, which should be a JSON representation of the state.
Types
The following implementations are considered stable:
Type | Widget | Notes |
---|---|---|
float |
st.number_input |
|
int |
st.number_input |
|
str |
st.text_input or st.text_area |
st.text_area is used if the default value contains a \n ; otherwise, st.text_input is used. |
enum.Enum |
st.selectbox |
st.radio is also a good choice; set the streamlit_widget kwarg in the Field() to use that. |
datetime.date |
st.date_input |
|
datetime.time |
st.time_input |
|
pydantic.ConstrainedInt |
st.slider |
Used when both ge /gt and le /lt are set; otherwise, use st.number_input |
pydantic.ConstrainedFloat |
st.slider |
Used when both ge /gt and le /lt are set; otherwise, use st.number_input |
pydantic.color.Color |
st.color_picker |
Colors are always converted to hex values. |
The following implementations are considered experimental and are potentially subject to some future changes:
Type | Widget | Notes |
---|---|---|
datetime.datetime |
st.date_input |
Time component is always cast to 00:00:00 . For true datetimes, at the moment, it is suggested you use separate datetime.date and datetime.time s and manually combine them. |
Notes on internals
Most users do not need this.
Note that the API is under development, and this may change as the project is developed. None of this is considered part of the public API.
StatefulObject
class
The StatefulObject
class consists of shared internals for both model and field instances.
There are three types of state: base
, replicated
, and lazy
:
base
state is the source of truth for all state.replicated
state is always kept in sync with base state. Ifreplicated
state changes, thenbase
state is updated.lazy
state is updated whenbase
state updates, but changes to lazy state will not update the base state by itself (for example, updating a lazy-state text field does not update base state, but a button may trigger a callable that updates the base state from the lazy state).
State is represented by keys associated with each object. Note that keys are by default assigned automatically. If you want to support more dynamic rendering (that makes when widgets are rendered non-deterministic), please set a key_suffix=
.
StatefulObject
s also have methods that allow for conversion between Statelit and Pydantic called to_statelit
and to_pydantic
.
FieldFactory
Trademark & Copyright
Streamlit is a trademark of Streamlit Inc.
This package is unaffiliated with Streamlit Inc. and Pydantic.
Project details
Release history Release notifications | RSS feed
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
Hashes for statelit-0.0.0b1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 16b98d8b834ccceb03a122b0e548f00f4d4ea5d296ed1f87051ef34001e2f687 |
|
MD5 | d156a66584d9f60cfa3e9499c41b465b |
|
BLAKE2b-256 | 3b11723289bf3900352f2e02466cab1d81f13324fb2ebc8f32e7a0d33a96d4bb |