Skip to content

Merge branch 'dev' into off-circle

ac3bff2
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
Open

migrate circleci to github workflow #3655

Merge branch 'dev' into off-circle
ac3bff2
Select commit
Loading
Failed to load commit list.
GitHub Actions / Test Results Summary succeeded Apr 10, 2026 in 1s

1882 passed, 1 failed and 45 skipped

Tests failed

Report Passed Failed Skipped Time
test-results/background-test-results-py3.12/junit_async.xml 26✅ 55s
test-results/background-test-results-py3.12/junit_background.xml 36✅ 2⚪ 402s
test-results/background-test-results-py3.9/junit_async.xml 26✅ 57s
test-results/background-test-results-py3.9/junit_background.xml 36✅ 2⚪ 405s
test-results/dcc-test-results-py3.12-group1/junit_intg.xml 163✅ 1⚪ 483s
test-results/dcc-test-results-py3.12-group2/junit_intg.xml 133✅ 483s
test-results/dcc-test-results-py3.12-group3/junit_intg.xml 33✅ 70s
test-results/dcc-test-results-py3.8-group1/junit_intg.xml 163✅ 1⚪ 505s
test-results/dcc-test-results-py3.8-group2/junit_intg.xml 133✅ 482s
test-results/dcc-test-results-py3.8-group3/junit_intg.xml 33✅ 74s
test-results/html-test-results-py3.12/junit_html.xml 7✅ 8s
test-results/html-test-results-py3.8/junit_html.xml 7✅ 5s
test-results/table-server-results-group1/junit_table.xml 84✅ 16⚪ 467s
test-results/table-server-results-group2/junit_table.xml 195✅ 3⚪ 470s
test-results/table-server-results-group3/junit_table.xml 151✅ 10⚪ 444s
test-results/test-main-results-py3.12-group1/junit_intg.xml 125✅ 2⚪ 189s
test-results/test-main-results-py3.12-group2/junit_intg.xml 107✅ 2⚪ 375s
test-results/test-main-results-py3.12-group3/junit_intg.xml 96✅ 1⚪ 187s
test-results/test-main-results-py3.8-group1/junit_intg.xml 125✅ 2⚪ 186s
test-results/test-main-results-py3.8-group2/junit_intg.xml 107✅ 1❌ 2⚪ 335s
test-results/test-main-results-py3.8-group3/junit_intg.xml 96✅ 1⚪ 185s

✅ test-results/background-test-results-py3.12/junit_async.xml

26 tests were completed in 55s with 26 passed, 0 failed and 0 skipped.

✅ test-results/background-test-results-py3.12/junit_background.xml

38 tests were completed in 402s with 36 passed, 0 failed and 2 skipped.

✅ test-results/background-test-results-py3.9/junit_async.xml

26 tests were completed in 57s with 26 passed, 0 failed and 0 skipped.

✅ test-results/background-test-results-py3.9/junit_background.xml

38 tests were completed in 405s with 36 passed, 0 failed and 2 skipped.

✅ test-results/dcc-test-results-py3.12-group1/junit_intg.xml

164 tests were completed in 483s with 163 passed, 0 failed and 1 skipped.

✅ test-results/dcc-test-results-py3.12-group2/junit_intg.xml

133 tests were completed in 483s with 133 passed, 0 failed and 0 skipped.

✅ test-results/dcc-test-results-py3.12-group3/junit_intg.xml

33 tests were completed in 70s with 33 passed, 0 failed and 0 skipped.

✅ test-results/dcc-test-results-py3.8-group1/junit_intg.xml

164 tests were completed in 505s with 163 passed, 0 failed and 1 skipped.

✅ test-results/dcc-test-results-py3.8-group2/junit_intg.xml

133 tests were completed in 482s with 133 passed, 0 failed and 0 skipped.

✅ test-results/dcc-test-results-py3.8-group3/junit_intg.xml

33 tests were completed in 74s with 33 passed, 0 failed and 0 skipped.

✅ test-results/html-test-results-py3.12/junit_html.xml

7 tests were completed in 8s with 7 passed, 0 failed and 0 skipped.

✅ test-results/html-test-results-py3.8/junit_html.xml

7 tests were completed in 5s with 7 passed, 0 failed and 0 skipped.

✅ test-results/table-server-results-group1/junit_table.xml

100 tests were completed in 467s with 84 passed, 0 failed and 16 skipped.

✅ test-results/table-server-results-group2/junit_table.xml

198 tests were completed in 470s with 195 passed, 0 failed and 3 skipped.

✅ test-results/table-server-results-group3/junit_table.xml

161 tests were completed in 444s with 151 passed, 0 failed and 10 skipped.

✅ test-results/test-main-results-py3.12-group1/junit_intg.xml

127 tests were completed in 189s with 125 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.12-group2/junit_intg.xml

109 tests were completed in 375s with 107 passed, 0 failed and 2 skipped.

✅ test-results/test-main-results-py3.12-group3/junit_intg.xml

97 tests were completed in 187s with 96 passed, 0 failed and 1 skipped.

✅ test-results/test-main-results-py3.8-group1/junit_intg.xml

127 tests were completed in 186s with 125 passed, 0 failed and 2 skipped.

❌ test-results/test-main-results-py3.8-group2/junit_intg.xml

110 tests were completed in 335s with 107 passed, 1 failed and 2 skipped.

Test suite Passed Failed Skipped Time
pytest 107✅ 1❌ 2⚪ 335s

❌ pytest

tests.integration.clientside.test_clientside
  ✅ test_clsd011_clientside_callback_context_inputs_list
  ✅ test_clsd012_clientside_callback_context_states
  ✅ test_clsd013_clientside_callback_context_states_list
  ✅ test_clsd014_input_output_callback
  ✅ test_clsd015_clientside_chained_callbacks_returning_promise
  ✅ test_clsd016_serverside_clientside_shared_input_with_promise
  ✅ test_clsd017_clientside_serverside_shared_input_with_promise
  ✅ test_clsd018_clientside_inline_async_function
  ✅ test_clsd019_clientside_inline_promise
  ✅ test_clsd020_clientside_callback_context_triggered_id
  ✅ test_clsd021_simple_clientside_module_serverside_callback
  ✅ test_clsd022_clientside_pattern_matching_dots
tests.integration.clientside.test_clientside_functions
  ✅ test_sp001_clientside_setprops
tests.integration.clientside.test_clientside_multiple_output_return_single_no_update
  ✅ test_cmorsnu001_clientside_multiple_output_return_single_no_update
tests.integration.clientside.test_clientside_outputs_list
  ✅ test_clol001_clientside_outputs_list_by_single_output
  ✅ test_clol002_clientside_outputs_list_by_multiple_output1
  ✅ test_clol003_clientside_outputs_list_by_multiple_output2
  ✅ test_clol004_clientside_outputs_list_by_no_output
tests.integration.clientside.test_clientside_restarts
  ⚪ test_clrs001_clientside_inline_restarts
tests.integration.dash_assets.test_assets_path_ignore
  ✅ test_api001_assets_path_ignore
tests.integration.dash_assets.test_dash_assets
  ✅ test_dada001_assets
  ✅ test_dada002_external_files_init
  ✅ test_dada003_external_resources_with_attributes
  ✅ test_dada004_external_scripts_init_with_attributes
tests.integration.devtools.test_callback_timing
  ✅ test_dvct001_callback_timing
tests.integration.devtools.test_callback_validation
  ✅ test_dvcv001_blank
  ✅ test_dvcv002_blank_id_prop
  ✅ test_dvcv003_duplicate_outputs_same_callback
  ✅ test_dvcv004_duplicate_outputs_across_callbacks
  ✅ test_dvcv005_input_output_overlap
  ✅ test_dvcv006_inconsistent_wildcards
  ✅ test_dvcv007_disallowed_ids
  ✅ test_dvcv008_wrong_callback_id
  ✅ test_dvcv009_suppress_callback_exceptions
  ✅ test_dvcv010_bad_props
  ✅ test_dvcv011_duplicate_outputs_simple
  ✅ test_dvcv012_circular_2_step
  ❌ test_dvcv013_circular_3_step
	dash_duo = <dash.testing.plugin._ReusableDashComposite object at 0x7fa5be360100>
  ✅ test_dvcv014_multipage_errors
  ✅ test_dvcv015_multipage_validation_layout[function]
  ✅ test_dvcv015_multipage_validation_layout[attribute]
  ✅ test_dvcv015_multipage_validation_layout[suppress]
  ✅ test_dvcv016_circular_with_input_output
tests.integration.devtools.test_devtools_error_handling
  ✅ test_dveh001_python_errors
  ✅ test_dveh006_long_python_errors
  ✅ test_dveh002_prevent_update_not_in_error_msg
  ✅ test_dveh003_validation_errors_in_place
  ✅ test_dveh004_validation_errors_creation
  ✅ test_dveh005_multiple_outputs
tests.integration.devtools.test_devtools_ui
  ✅ test_dvui001_disable_props_check_config
  ✅ test_dvui002_disable_ui_config
  ✅ test_dvui003_callback_graph
  ✅ test_dvui004_width_props
  ✅ test_dvui005_undo_redo
  ✅ test_dvui006_no_undo_redo
  ✅ test_dvui007_other_before_request_func
tests.integration.devtools.test_hot_reload
  ✅ test_dvhr001_hot_reload
tests.integration.devtools.test_props_check
  ⚪ test_dvpc001_prop_check_errors_with_path
tests.integration.multi_page.test_pages_layout
  ✅ test_pala001_layout
  ✅ test_pala002_meta_tags_default
  ✅ test_pala003_meta_tags_custom
  ✅ test_pala004_no_layout_exception
  ✅ test_pala005_routing_inputs
  ✅ test_pala006_pages_external_library
  ✅ test_pala007_app_title_discription
tests.integration.multi_page.test_pages_order
  ✅ test_paor001_order
tests.integration.multi_page.test_pages_relative_path
  ✅ test_pare001_relative_path
  ✅ test_pare002_relative_path_with_url_base_pathname
  ✅ test_pare003_absolute_path
tests.integration.renderer.test_add_receive_props
  ✅ test_rdarp001_add_receive_props
tests.integration.renderer.test_array_of_exact_or_shape_with_node_prop_assign_none
  ✅ test_aoeoswnpsn001_array_of_exact_or_shape_with_node_prop_assign_none
tests.integration.renderer.test_benchmarking
  ✅ test_compute_graph_timing[dev_tools0-disabled]
  ✅ test_compute_graph_timing[dev_tools1-enabled]
tests.integration.renderer.test_children_reorder
  ✅ test_roc001_reorder_children
tests.integration.renderer.test_component_as_prop
  ✅ test_rdcap001_component_as_prop
  ✅ test_rdcap002_component_as_props_dynamic_id
  ✅ test_rdcap003_side_effect_regression
  ✅ test_rdcap004_side_effect_same_component
tests.integration.renderer.test_dependencies
  ✅ test_rddp001_dependencies_on_components_that_dont_exist
  ✅ test_rddp001_dependencies_on_components_that_dont_exist
tests.integration.renderer.test_descendant_listening
  ✅ test_dcl001_descendant_tabs
tests.integration.renderer.test_due_diligence
  ✅ test_rddd001_initial_state
  ✅ test_rddd002_falsy_child[0]
  ✅ test_rddd002_falsy_child[child1]
tests.integration.renderer.test_external_component
  ✅ test_rext001_render_external_component
  ✅ test_rext002_render_external_component_temp
tests.integration.renderer.test_iframe
  ✅ test_rdif001_sandbox_allow_scripts
tests.integration.renderer.test_loading_states
  ✅ test_rdls001_multi_loading_components
  ✅ test_rdls002_chained_loading_states
  ✅ test_rdls003_update_title[kwargs0-Updating...-False]
  ✅ test_rdls003_update_title[kwargs1-Dash-False]
  ✅ test_rdls003_update_title[kwargs2-Dash-False]
  ✅ test_rdls003_update_title[kwargs3-Hello World-False]
  ✅ test_rdls003_update_title[kwargs4-Updating...-True]
  ✅ test_rdls003_update_title[kwargs5-Dash-True]
  ✅ test_rdls003_update_title[kwargs6-Dash-True]
  ✅ test_rdls003_update_title[kwargs7-Hello World-True]
  ✅ test_rdls004_update_title_chained_callbacks[None]
  ✅ test_rdls004_update_title_chained_callbacks[Custom Update Title]
tests.integration.renderer.test_multi_output
  ✅ test_rdmo001_single_input_multi_outputs_on_multiple_components
  ✅ test_rdmo002_multi_outputs_on_single_component
  ✅ test_rdmo003_single_output_as_multi
  ✅ test_rdmo004_multi_output_circular_dependencies
  ✅ test_rdmo005_set_props_behavior
tests.integration.renderer.test_persistence
  ✅ test_rdps001_local_reload
  ✅ test_rdps002_session_reload
  ✅ test_rdps003_memory_reload
  ✅ test_rdps004_show_hide
  ✅ test_rdps005_persisted_props
  ✅ test_rdps006_move_on_page

✅ test-results/test-main-results-py3.8-group3/junit_intg.xml

97 tests were completed in 185s with 96 passed, 0 failed and 1 skipped.

Annotations

Check failure on line 0 in test-results/test-main-results-py3.8-group2/junit_intg.xml

See this annotation in the file changed.

@github-actions github-actions / Test Results Summary

pytest ► tests.integration.devtools.test_callback_validation ► test_dvcv013_circular_3_step

Failed test found in:
  test-results/test-main-results-py3.8-group2/junit_intg.xml
Error:
  dash_duo = <dash.testing.plugin._ReusableDashComposite object at 0x7fa5be360100>
Raw output
dash_duo = <dash.testing.plugin._ReusableDashComposite object at 0x7fa5be360100>

    def test_dvcv013_circular_3_step(dash_duo):
        app = Dash(__name__)
    
        app.layout = html.Div(
            [html.Div([], id="a"), html.Div(["Bye"], id="b"), html.Div(["Hello"], id="c")]
        )
    
        @app.callback(Output("b", "children"), [Input("a", "children")])
        def callback(children):
            return children
    
        @app.callback(Output("c", "children"), [Input("b", "children")])
        def c2(children):
            return children
    
        @app.callback([Output("a", "children")], [Input("c", "children")])
        def c3(children):
            return (children,)
    
        dash_duo.start_server(app, **debugging)
    
        specs = [
            [
                "Circular Dependencies",
                [
                    "Dependency Cycle Found:",
                    "a.children -> b.children",
                    "b.children -> c.children",
                    "c.children -> a.children",
                ],
            ]
        ]
>       check_errors(dash_duo, specs)

tests/integration/devtools/test_callback_validation.py:664: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

dash_duo = <dash.testing.plugin._ReusableDashComposite object at 0x7fa5be360100>
specs = [['Circular Dependencies', ['Dependency Cycle Found:', 'a.children -> b.children', 'b.children -> c.children', 'c.children -> a.children']]]

    def check_errors(dash_duo, specs):
        # Order-agnostic check of all the errors shown.
        # This is not fully general - despite the selectors below, it only applies
        # to front-end errors with no back-end errors in the list.
        cnt = len(specs)
        dash_duo.wait_for_text_to_equal(dash_duo.devtools_error_count_locator, str(cnt))
    
        found = []
        for i in range(cnt):
            msg = dash_duo.find_elements(".dash-fe-error__title")[i].text
            dash_duo.find_elements(".test-devtools-error-toggle")[i].click()
            dash_duo.wait_for_element(".dash-backend-error,.dash-fe-error__info")
            has_BE = dash_duo.driver.execute_script(
                "return document.querySelectorAll('.dash-backend-error').length"
            )
            txt_selector = ".dash-backend-error" if has_BE else ".dash-fe-error__info"
            txt = dash_duo.wait_for_element(txt_selector).text
            dash_duo.find_elements(".test-devtools-error-toggle")[i].click()
            dash_duo.wait_for_no_elements(".dash-backend-error")
            found.append((msg, txt))
    
        orig_found = found[:]
    
        for i, (message, snippets) in enumerate(specs):
            for j, (msg, txt) in enumerate(found):
                if msg == message and all(snip in txt for snip in snippets):
                    print(j)
                    found.pop(j)
                    break
            else:
                raise AssertionError(
                    (
                        "error {} ({}) not found with text:\n"
                        "  {}\nThe found messages were:\n---\n{}"
                    ).format(
                        i,
                        message,
                        "\n  ".join(snippets),
                        "\n---\n".join(
                            "{}\n{}".format(msg, txt) for msg, txt in orig_found
                        ),
                    )
                )
    
        # ensure the errors didn't leave items in the pendingCallbacks queue
>       assert dash_duo.driver.execute_script("return document.title") == "Dash"
E       AssertionError: assert 'Updating...' == 'Dash'
E         
E         - Dash
E         + Updating...

tests/integration/devtools/test_callback_validation.py:57: AssertionError