Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cedricvlt/streamlit-condition-tree
A Streamlit component to build a condition tree
https://github.com/cedricvlt/streamlit-condition-tree
conditions elasticsearch filters jsonlogic mongodb spel sql streamlit-component
Last synced: 3 months ago
JSON representation
A Streamlit component to build a condition tree
- Host: GitHub
- URL: https://github.com/cedricvlt/streamlit-condition-tree
- Owner: cedricvlt
- License: mit
- Created: 2023-09-21T21:22:22.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-04-10T13:54:00.000Z (9 months ago)
- Last Synced: 2024-07-08T10:47:29.655Z (6 months ago)
- Topics: conditions, elasticsearch, filters, jsonlogic, mongodb, spel, sql, streamlit-component
- Language: TypeScript
- Homepage:
- Size: 405 KB
- Stars: 47
- Watchers: 2
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Based on [react-awesome-query-builder](https://github.com/ukrbublik/react-awesome-query-builder)
Check out [live demo](https://condition-tree-demo.streamlit.app/) !
This component allows users to build complex condition trees that can be used to filter a dataframe or build a query.
## Install
`pip install streamlit-condition-tree`
## Features
- Highly configurable
- Fields can be of type:
- simple (string, number, bool, date/time/datetime, list)
- structs (will be displayed in selectbox as tree)
- Comparison operators can be:
- binary (== != < > ..)
- unary (is empty, is null)
- 'between' (for numbers, dates, times)
- complex operators like 'proximity'
- RHS can be:
- values
- another fields (of same type)
- functions (arguments also can be values/fields/funcs)
- LHS can be field or function
- Reordering (drag-n-drop) support for rules and groups of rules
- Export to MongoDb, SQL, JsonLogic, SpEL or ElasticSearch## Basic usage
### Filter a dataframe
```python
import pandas as pd
from streamlit_condition_tree import condition_tree, config_from_dataframe# Initial dataframe
df = pd.DataFrame({
'First Name': ['Georges', 'Alfred'],
'Age': [45, 98],
'Favorite Color': ['Green', 'Red'],
'Like Tomatoes': [True, False]
})# Basic field configuration from dataframe
config = config_from_dataframe(df)# Condition tree
query_string = condition_tree(
config,
always_show_buttons=True,
placeholder="Empty condition tree"
)# Filtered dataframe
df = df.query(query_string)
```### Build a query
```python
import streamlit as st
from streamlit_condition_tree import condition_tree# Build a custom configuration
config = {
'fields': {
'name': {
'label': 'Name',
'type': 'text',
},
'age': {
'label': 'Age',
'type': 'number',
'fieldSettings': {
'min': 0
},
},
'like_tomatoes': {
'label': 'Likes tomatoes',
'type': 'boolean',
}
}
}# Condition tree
return_val = condition_tree(
config,
return_type='sql'
)# Generated SQL
st.write(return_val)
```## API
### Parameters
```python
def condition_tree(
config: dict,
return_type: str [Optional],
tree: dict [Optional],
min_height: int [Optional],
placeholder: str [Optional],
always_show_buttons: bool [Optional],
key: str [Optional]
)
```- **config**: Python dictionary (mostly used to define the fields) that resembles the JSON counterpart of
the React component.
A basic configuration can be built from a DataFrame with `config_from_dataframe`.
For a more advanced configuration, see the component [doc](https://github.com/ukrbublik/react-awesome-query-builder/blob/master/CONFIG.adoc)
and [demo](https://ukrbublik.github.io/react-awesome-query-builder/).
Custom javascript functions must be wrapped into the JsCode class (see [Advanced config](https://condition-tree-demo.streamlit.app/Advanced_config))- **return_type**: Format of the returned value :
- queryString
- mongodb
- sql
- spel
- elasticSearch
- jsonLogicDefault : queryString (can be used to filter a pandas DataFrame using DataFrame.query)
- **tree**: Input condition tree (see section below)
Default : None- **min_height**: Minimum height of the component frame
Default : 400- **placeholder**: Text displayed when the condition tree is empty
Default : None- **always_show_buttons**: Show buttons (create rule, etc.) even when they are not hovered
Default: False
- **key**: Fixed identity if you want to change its arguments over time and not have it be re-created.
Can also be used to access the generated condition tree (see section below).Default : None
### Export & import a condition tree
When a key is defined for the component, the condition tree generated is accessible through `st.session_state[key]` as a dictionary.
It can be loaded as an input tree through the `tree` parameter.