Skip to content
New issue

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

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

Already on GitHub? Sign in 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in 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