Skip to main content

Component for Dash based on react-awesome-query-builder

Project description

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

Project details


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.

Supported by

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