Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Pattern Maching ID not working in Dash callback cancel #2955

Open
bionictoucan opened this issue Aug 22, 2024 · 0 comments
Open

Pattern Maching ID not working in Dash callback cancel #2955

bionictoucan opened this issue Aug 22, 2024 · 0 comments
Labels
bug something broken dash-callbacks related to callbacks P2 considered for next cycle

Comments

@bionictoucan
Copy link

bionictoucan commented Aug 22, 2024

Environment:

dash                          2.17.1
dash_ag_grid                  31.2.0
dash-bootstrap-components     1.6.0
dash-core-components          2.0.0
dash-html-components          2.0.0
dash-table                    5.0.0

Describe the bug

When defining the cancel behaviour of a Dash bootstrap component button within the callback signature I am greeted with the error

dash.exceptions.WildcardInLongCallback: long callbacks does not support dependencies with
pattern-matching ids
    Received: <Input `{"index":["MATCH"],"type":"cancel-button"}.n_clicks`>

Using pattern matching IDs in the running kwarg for the callback signature works perfectly fine but the cancel kwarg does not.

Expected behavior

I expected the cancel behaviour to work as with buttons without pattern matching IDs after coming across what I thought were the fixes here.

Example

from dash import Dash, html, callback, Output, Input, DiskcacheManager, MATCH
import dash_bootstrap_components as dbc
import diskcache, time

cache = diskcache.Cache("./cache")
background_callback_manager = DiskcacheManager(cache)

app = Dash(__name__, background_callback_manager=background_callback_manager)

app.layout = html.Div(
    [
        html.Div([html.P(id={"type": "paragraph_id", "index": 1}, children=["Button 1 not clicked"])]),
        dbc.Button(id={"type": "button_id", "index": 1}, children="Run Job 1!"),
        dbc.Button(id={"type": "button_id", "index": 2}, children="Run Job 2!"),
        dbc.Button(id={"type": "cancel_button_id", "index": 1}, children="Cancel Running Job 1!"),
        dbc.Button(id={"type": "cancel_button_id", "index": 2}, children="Cancel Running Job 2!"),
        html.Div([html.P(id={"type": "paragraph_id", "index": 2}, children=["Button 2 not clicked"])]),
    ]
)

@callback(
    output=Output({"type": "paragraph_id", "index": MATCH}, "children"),
    inputs=Input({"type": "button_id", "index": MATCH}, "n_clicks"),
    running=[
        (Output({"type": "button_id", "index": MATCH}, "disabled"), True, False),
        (Output({"type": "cancel_button_id", "index": MATCH}, "disabled"), False, True),
    ],
    cancel=[Input({"type": "cancel_button_id", "index": MATCH}, "n_clicks")],
    background=True,
    prevent_initial_call=True
)
def callback(n_clicks):
    time.sleep(2.0)
    return [f"Clicked {n_clicks} times"]


if __name__ == "__main__":
    app.run(debug=True)

returns the following error:

dash.exceptions.WildcardInLongCallback: long callbacks does not support dependencies with
pattern-matching ids
    Received: <Input `{"index":["MATCH"],"type":"cancel_button_id"}.n_clicks`>

However if I comment out the cancel kwarg, the dashboard runs, the cancel buttons just don't function how I want them to.

@gvwilson gvwilson changed the title [BUG] Pattern Maching ID not working in Dash callback cancel Pattern Maching ID not working in Dash callback cancel Aug 26, 2024
@gvwilson gvwilson added bug something broken dash-callbacks related to callbacks P2 considered for next cycle labels Aug 26, 2024
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
bug something broken dash-callbacks related to callbacks P2 considered for next cycle
Projects
None yet
Development

No branches or pull requests

2 participants