-
-
Notifications
You must be signed in to change notification settings - Fork 2k
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
Configure document-title during updates #1315
Changes from 15 commits
6525ca2
3061cba
eb427b0
28630d9
2f7cdc4
899b20e
f5f97cc
1db09c9
8046178
745ba77
57f9b37
740b913
71ee5ec
bb2a6f7
571d6ce
58b1472
087774d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,9 @@ | ||
from multiprocessing import Lock | ||
|
||
import pytest | ||
import dash | ||
from dash.dependencies import Input, Output | ||
from dash.testing.wait import until | ||
|
||
import dash_core_components as dcc | ||
import dash_html_components as html | ||
|
@@ -167,3 +169,46 @@ def find_text(spec): | |
|
||
find_spinners() | ||
find_text({1: 1, 2: 1, 3: 1, 4: 1}) | ||
|
||
|
||
@pytest.mark.parametrize( | ||
"kwargs, expected_update_title", | ||
[ | ||
({}, "Updating..."), | ||
({"update_title": None}, "Dash"), | ||
({"update_title": ""}, "Dash"), | ||
({"update_title": "Hello World"}, "Hello World"), | ||
] | ||
) | ||
def test_rdls003_update_title(dash_duo, kwargs, expected_update_title): | ||
app = dash.Dash("Dash", **kwargs) | ||
lock = Lock() | ||
|
||
app.layout = html.Div( | ||
children=[ | ||
html.H3("Press button see document title updating"), | ||
html.Div(id="output"), | ||
html.Button("Update", id="button", n_clicks=0), | ||
] | ||
) | ||
|
||
@app.callback( | ||
Output("output", "children"), | ||
[Input("button", "n_clicks")] | ||
) | ||
def update(n): | ||
with lock: | ||
# check for update-title while processing callback | ||
until(lambda: dash_duo.driver.title == expected_update_title, timeout=1) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Interesting... this appears to work but I'm kind of surprised it does - it might actually be waiting for the timeout period and then throwing an error silently. That's because the server and the browser side are running in different processes (hence the need for I'd remove the title check inside the callback, and just put it at the very end of the test, after There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This was my first shot but that didn't work at that time because I missed the lock inside the callback. Now this works like a charm. I also added the check on startup again. |
||
return n | ||
|
||
with lock: | ||
dash_duo.start_server(app) | ||
# check for update-title on load | ||
until(lambda: dash_duo.driver.title == expected_update_title, timeout=1) | ||
|
||
# check for original title after loading | ||
until(lambda: dash_duo.driver.title == "Dash", timeout=1) | ||
|
||
with lock: | ||
dash_duo.find_element("#button").click() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Marc-Andre-Rivet as we were discussing the other day - the renderer no longer holds this default value at all. That means when the R and Julia implementations update to include this functionality in their renderer, they will need to add this option to the back end at the same time or the default behavior will change to no title changes ever.