Skip to main content

Dash Query Builder

Component for Dash based on react-awesome-query-builder. The component is a way to graphically generate WHERE clauses for SQL queries.

Install

pip install dash_query_builder

Usage

To use Dash Query Builder (DQB), you need to have a Dash app and a dictionary of fields. The fields property is a dictionary of fields and their properties, following the config.fields docs. The only caveat is that JavaScript cannot be used as in the example.

For instance the following dictionary is valid:

fields = {
    "qty": {
        "label": "Qty",
        "type": "number",
        "fieldSettings": {"min": 0},
        "valueSources": ["value"],
        "preferWidgets": ["number"],
    },
    "price": {
        "label": "Price",
        "type": "number",
        "valueSources": ["value"],
        "fieldSettings": {"min": 10, "max": 100},
        "preferWidgets": ["slider", "rangeslider"],
        "operators": ["equal", "between"],
    },
    "color": {
        "label": "Color",
        "type": "select",
        "valueSources": ["value"],
        "fieldSettings": {
            "listValues": [
                {"value": "yellow", "title": "Yellow"},
                {"value": "green", "title": "Green"},
                {"value": "orange", "title": "Orange"},
            ]
        },
    },
    "is_promotion": {
        "label": "Promo?",
        "type": "boolean",
        "operators": ["equal", "is_empty"],
        "valueSources": ["value"],
    },
}

The basic component can be created via:

from dash import Dash, html
import dash_query_builder as dqb
fields =...
app=Dash(__name__)
app.layout=html.Div([dqb.DashQueryBuilder(fields=fields)])
app.run_server()

This will run the app similar to this:

https://github.com/TillerBurr/dash-query-builder/assets/49296311/1fdc9663-fde7-4c26-a706-00b5edc9f902

There are other properties available as well, with defaults in parentheses.

  • config({}): see CONFIG.adoc for full options
  • theme("basic"): one of "antd", "mui", "fluent", "bootstrap", "basic"
  • loadFormat("tree"): one of "tree", "spelFormat", "jsonLogicFormat"
  • alwaysShowActionButtons(True): A boolean whether to always show action buttons, e.g. "Add Rule", "Add Group", etc.

With the above parameters, a query builder will be created with an empty tree. To pre-populate the query builder, there are several ways to do so:

  1. loadFormat=="tree": Set tree to a valid tree object.
  2. loadFormat=="spelFormat": Set spelFormat to a valid SpEL string.
  3. loadFormat=="jsonLogicFormat": Set jsonLogicFormat to a valid jsonLogic object.

Once loadFormat is set, the tree/query builder will update when the query is changed or when the corresponding property is changed. The loadFormat can be changed via a callback, while keeping the same tree.

Here's an example using usage.py:

https://github.com/TillerBurr/dash-query-builder/assets/49296311/1191a643-27c0-4a4f-8032-2eb5d4b1d88e

Where Parser

DQB has a built-in parser for SQL queries. The parser is relatively simple as far as parsers go, but it does what I need it to. It will parse the query and return a template string and a parameter dictionary. The template string will be in pyformat style, as specified in PEP 249.

Example

from dash_query_builder.where_parser import WhereParser
where_parser = WhereParser()
template, params = where_parser.get_template("qty > 15 and price between 10 and 20")
print(template) # (qty > %(YSaAddDFs27s)s AND price BETWEEN %(W5PRwTGpFqqF)s AND %(N2nGExcGaUSt)s)
print(params) # {'YSaAddDFs27s': 15, 'W5PRwTGpFqqF': 10, 'N2nGExcGaUSt': 20}

Currently, only pyformat is supported. PRs are welcome!

Tools Used

  • uv for Python virtual environment and dependencies.
  • just for common commands
  • mise-en-place to manage the toolchain.

Development

Getting Started

  1. Create a Python environment from previous step 1 and install:
    just sync
    
  2. Update the requirements and dev requirements
    just compile
    
  3. Build
    just build
    
  4. Publish
    just publish
    
  5. See all commands with just -l

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dash_query_builder-1.0.1.tar.gz (852.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dash_query_builder-1.0.1-py3-none-any.whl (878.3 kB view details)

Uploaded Python 3

File details

Details for the file dash_query_builder-1.0.1.tar.gz.

File metadata

  • Download URL: dash_query_builder-1.0.1.tar.gz
  • Upload date:
  • Size: 852.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for dash_query_builder-1.0.1.tar.gz
Algorithm Hash digest
SHA256 6a0596c0c5a0557f28c314a56afd18b17d6985f12a377ce98cf210bf990afdaa
MD5 b9bf605a49fb40abd4e72b20907005dd
BLAKE2b-256 964fb2f17667d64a2bf36d4d9ad00edfd41edd42e0436798be8f26334fecdf94

See more details on using hashes here.

Provenance

The following attestation bundles were made for dash_query_builder-1.0.1.tar.gz:

Publisher: release.yaml on TillerBurr/dash-query-builder

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dash_query_builder-1.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for dash_query_builder-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3b7a4a38acd10c7acb9231cf52e44fdfdf241ee7daa74d5cb5d81328dd930c35
MD5 a169eda85289728e1f609862e8ccbb9b
BLAKE2b-256 b712110a661d3e7e0087491bddf84dd6743b8609ca8fd10c4da3eb920321f901

See more details on using hashes here.

Provenance

The following attestation bundles were made for dash_query_builder-1.0.1-py3-none-any.whl:

Publisher: release.yaml on TillerBurr/dash-query-builder

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 files

1.0.0

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.1

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page