Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/dash_apps/01_minimal_global.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,4 @@ def plot_graph(n_clicks):

# --------------------------------- Running the app ---------------------------------
if __name__ == "__main__":
app.run_server(debug=True, port=9023)
app.run(debug=True, port=9023)
2 changes: 1 addition & 1 deletion examples/dash_apps/02_minimal_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,4 @@ def update_fig(relayoutdata: dict, fig: FigureResampler):

# --------------------------------- Running the app ---------------------------------
if __name__ == "__main__":
app.run_server(debug=True, port=9023)
app.run(debug=True, port=9023)
2 changes: 1 addition & 1 deletion examples/dash_apps/03_minimal_cache_dynamic.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,4 +115,4 @@ def update_fig(relayoutdata: dict, fig: FigureResampler):

# --------------------------------- Running the app ---------------------------------
if __name__ == "__main__":
app.run_server(debug=True, port=9023)
app.run(debug=True, port=9023)
2 changes: 1 addition & 1 deletion examples/dash_apps/04_minimal_cache_overview.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,4 +122,4 @@ def update_fig(relayoutdata: dict, fig: FigureResampler):

# --------------------------------- Running the app ---------------------------------
if __name__ == "__main__":
app.run_server(debug=True, port=9023, use_reloader=False)
app.run(debug=True, port=9023, use_reloader=False)
2 changes: 1 addition & 1 deletion examples/dash_apps/05_cache_overview_subplots.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,4 +157,4 @@ def update_fig(relayoutdata, fig: FigureResampler):

# --------------------------------- Running the app ---------------------------------
if __name__ == "__main__":
app.run_server(debug=True, port=9023, use_reloader=False)
app.run(debug=True, port=9023, use_reloader=False)
2 changes: 1 addition & 1 deletion examples/dash_apps/11_sine_generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,4 +200,4 @@ def update_fig(relayoutdata: dict, fig: FigureResampler):

# --------------------------------- Running the app ---------------------------------
if __name__ == "__main__":
app.run_server(debug=True, port=9023, use_reloader=False)
app.run(debug=True, port=9023, use_reloader=False)
2 changes: 1 addition & 1 deletion examples/dash_apps/12_file_selector.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,4 +126,4 @@ def update_fig(relayoutdata: dict, fig: FigureResampler):

# --------------------------------- Running the app ---------------------------------
if __name__ == "__main__":
app.run_server(debug=True, port=9023, use_reloader=False)
app.run(debug=True, port=9023, use_reloader=False)
2 changes: 1 addition & 1 deletion examples/dash_apps/13_coarse_fine.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,4 +183,4 @@ def update_dynamic_fig(

# --------------------------------- Running the app ---------------------------------
if __name__ == "__main__":
app.run_server(debug=True, port=9023, use_reloader=False)
app.run(debug=True, port=9023, use_reloader=False)
261 changes: 189 additions & 72 deletions poetry.lock

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,11 @@ numpy = [
{ version = ">=1.24", python = ">=3.11,<3.13" },
{ version = ">=2.0", python = ">=3.13" }
]
orjson = "^3.10.0" # Faster json serialization (from 3.10 onwards f16 is supported)
orjson = ">=3.10.0" # Faster json serialization (from 3.10 onwards f16 is supported)
# Optional dependencies
Flask-Cors = { version = "^4.0.2", optional = true }
# Lock kaleido dependency until https://github.com/plotly/Kaleido/issues/156 is resolved
kaleido = {version = "0.2.1", optional = true}
kaleido = {version = ">=1.0.0", optional = true}
tsdownsample = ">=0.1.3"

[tool.poetry.extras]
Expand Down Expand Up @@ -84,7 +84,7 @@ mike = "^1.1.2"
mkdocs-material = "^9.6.18"
mkdocs-literate-nav = "^0.6.0"
mkdocs-section-index = "^0.3.5"
cffi = ">=1.16"
cffi = ">=1.17"
anywidget = "^0.9.13"

# Linting
Expand Down
86 changes: 75 additions & 11 deletions tests/test_figure_resampler_selenium.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import json
import multiprocessing
import platform
import time
Expand Down Expand Up @@ -75,7 +76,13 @@ def test_multiple_tz(driver, multiple_tz_figure):
time.sleep(1)
autoscale_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(autoscale_requests) == 1
assert autoscale_requests[0].response.status_code == 204
try:
assert autoscale_requests[0].response.status_code == 204
except AssertionError:
# In a more recent dash version, this returns a 200 status with no data
assert autoscale_requests[0].response.status_code == 200
response_data = json.loads(autoscale_requests[0].response.body)
assert response_data.get("response") == {}

if len(driver.get_log("browser")) > 0: # Check no errors in the browser
for entry in driver.get_log("browser"):
Expand Down Expand Up @@ -159,7 +166,13 @@ def test_basic_example_gui(driver, example_figure):
time.sleep(1)
vertical_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(vertical_requests) == 1
assert vertical_requests[0].response.status_code == 204
try:
assert vertical_requests[0].response.status_code == 204
except AssertionError:
# In a more recent dash version, this returns a 200 status with no data
assert vertical_requests[0].response.status_code == 200
response_data = json.loads(vertical_requests[0].response.body)
assert response_data.get("response") == {}

# we autoscale to the current front-end view, no updated dat will be sent from
# the server to the front-end, however, a callback will still be made, but
Expand All @@ -170,7 +183,12 @@ def test_basic_example_gui(driver, example_figure):
time.sleep(1)
autoscale_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(autoscale_requests) == 1
assert autoscale_requests[0].response.status_code == 204
try:
assert autoscale_requests[0].response.status_code == 204
except AssertionError:
assert autoscale_requests[0].response.status_code == 200
response_data = json.loads(autoscale_requests[0].response.body)
assert response_data.get("response") == {}

# The reset axes autoscales AND resets tot he global data view -> all data
# will be updated.
Expand Down Expand Up @@ -273,7 +291,13 @@ def test_basic_example_gui_existing(driver, example_figure_fig):
time.sleep(1)
vertical_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(vertical_requests) == 1
assert vertical_requests[0].response.status_code == 204
try:
assert vertical_requests[0].response.status_code == 204
except AssertionError:
# In a more recent dash version, this returns a 200 status with no data
assert vertical_requests[0].response.status_code == 200
response_data = json.loads(vertical_requests[0].response.body)
assert response_data.get("response") == {}

# we autoscale to the current front-end view, no updated dat will be sent from
# the server to the front-end, however, a callback will still be made, but
Expand All @@ -284,7 +308,12 @@ def test_basic_example_gui_existing(driver, example_figure_fig):
time.sleep(1)
autoscale_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(autoscale_requests) == 1
assert autoscale_requests[0].response.status_code == 204
try:
assert autoscale_requests[0].response.status_code == 204
except AssertionError:
assert autoscale_requests[0].response.status_code == 200
response_data = json.loads(autoscale_requests[0].response.body)
assert response_data.get("response") == {}

# The reset axes autoscales AND resets tot he global data view -> all data
# will be updated.
Expand Down Expand Up @@ -395,7 +424,13 @@ def test_gsr_gui(driver, gsr_figure):
time.sleep(1)
vertical_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(vertical_requests) == 1
assert vertical_requests[0].response.status_code == 204
try:
assert vertical_requests[0].response.status_code == 204
except AssertionError:
# In a more recent dash version, this returns a 200 status with no data
assert vertical_requests[0].response.status_code == 200
response_data = json.loads(vertical_requests[0].response.body)
assert response_data.get("response") == {}

# autoscale
# we autoscale to the current front-end view, no updated dat will be sent from
Expand All @@ -407,7 +442,12 @@ def test_gsr_gui(driver, gsr_figure):
time.sleep(1)
autoscale_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(autoscale_requests) == 1
assert autoscale_requests[0].response.status_code == 204
try:
assert autoscale_requests[0].response.status_code == 204
except AssertionError:
assert autoscale_requests[0].response.status_code == 200
response_data = json.loads(autoscale_requests[0].response.body)
assert response_data.get("response") == {}

fr.reset_axes()
time.sleep(0.2)
Expand Down Expand Up @@ -460,14 +500,26 @@ def test_cat_gui(driver, cat_series_box_hist_figure):
time.sleep(1)
vertical_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(vertical_requests) == 1
assert vertical_requests[0].response.status_code == 204
try:
assert vertical_requests[0].response.status_code == 204
except AssertionError:
# In a more recent dash version, this returns a 200 status with no data
assert vertical_requests[0].response.status_code == 200
response_data = json.loads(vertical_requests[0].response.body)
assert response_data.get("response") == {}

fr.clear_requests(sleep_time_s=1)
fr.autoscale()
time.sleep(1)
autoscale_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(autoscale_requests) == 1
assert autoscale_requests[0].response.status_code == 204
try:
assert autoscale_requests[0].response.status_code == 204
except AssertionError:
# In a more recent dash version, this returns a 200 status with no data
assert autoscale_requests[0].response.status_code == 200
response_data = json.loads(autoscale_requests[0].response.body)
assert response_data.get("response") == {}

# Note: as there is only 1 hf-scatter-trace, the reset axes command will only
# update a single trace
Expand Down Expand Up @@ -573,7 +625,13 @@ def test_shared_hover_gui(driver, shared_hover_figure):
time.sleep(1)
autoscale_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(autoscale_requests) == 1
assert autoscale_requests[0].response.status_code == 204
try:
assert autoscale_requests[0].response.status_code == 204
except AssertionError:
# In a more recent dash version, this returns a 200 status with no data
assert autoscale_requests[0].response.status_code == 200
response_data = json.loads(autoscale_requests[0].response.body)
assert response_data.get("response") == {}

if len(driver.get_log("browser")) > 0: # Check no errors in the browser
for entry in driver.get_log("browser"):
Expand Down Expand Up @@ -652,7 +710,13 @@ def test_multi_trace_go_figure(driver, multi_trace_go_figure):
time.sleep(3)
autoscale_requests = RequestParser.filter_callback_requests(fr.get_requests())
assert len(autoscale_requests) == 1
assert autoscale_requests[0].response.status_code == 204
try:
assert autoscale_requests[0].response.status_code == 204
except AssertionError:
# In a more recent dash version, this returns a 200 status with no data
assert autoscale_requests[0].response.status_code == 200
response_data = json.loads(autoscale_requests[0].response.body)
assert response_data.get("response") == {}

if len(driver.get_log("browser")) > 0: # Check no errors in the browser
for entry in driver.get_log("browser"):
Expand Down
Loading