Pattern Maching ID not working in Dash callback `cancel`
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 24.4k
- Forks
- 2.3k
- Ø Merge
- 2 T. 7 Std.
- Gemergte PRs (30 T.)
- 13
Beschreibung
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.
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Führen Sie die bereitgestellte minimale Dash-App mit den aufgeführten Paketversionen aus und bestätigen Sie, dass der Pattern-Matching-Cancel-Input WildcardInLongCallback auslöst, während die verwendeten Abhängigkeiten funktionieren. Als abgeschlossen gilt dies, wenn das Beispiel mit der MATCH-Cancel-Abhängigkeit erfolgreich startet und die Abbrechen-Schaltflächen ohne die gemeldete Ausnahme funktionieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 45/100