Repository Analysis

plotly/dash

Data Apps & Dashboards for Python. No JavaScript Required.

2.6 Likely human-written View on GitHub
2.6
Adjusted Score
2.6
Raw Score
100%
Time Factor
2026-05-29
Last Push
24,220
Stars
Python
Language
281,683
Lines of Code
1035
Files
479
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 2HIGH 50MEDIUM 12LOW 415

Pattern Findings

479 matches across 15 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers236 hits · 251 pts
SeverityFileLineSnippet
LOWtests/unit/test_configs.py78def test_pathname_prefix_from_environ_app_name(empty_environ):
LOWtests/unit/test_configs.py85def test_pathname_prefix_environ_routes(empty_environ):
LOWtests/unit/test_configs.py91def test_pathname_prefix_environ_requests(empty_environ):
LOWtests/unit/test_configs.py472def test_debug_mode_enable_dev_tools(empty_environ, debug_env, debug, expected):
LOWtests/unit/test_configs.py480def test_missing_flask_compress_raises():
LOWtests/unit/test_configs.py485def test_csrf_config_defaults():
LOWtests/unit/test_configs.py516def test_csrf_config_validation(token_name, header_name):
LOWtests/unit/test_configs.py521def test_csrf_config_read_only():
LOWtests/unit/test_configs.py529def test_init_app_with_flask_run_pattern():
LOWtests/unit/test_configs.py43def test_valid_pathname_prefix_init(
LOWtests/unit/test_configs.py55def test_invalid_pathname_prefix(empty_environ):
LOWtests/unit/test_configs.py105def test_pathname_prefix_assets(empty_environ, req, expected):
LOWtests/unit/test_configs.py188def test_get_combined_config_dev_tools_ui(empty_environ):
LOWtests/unit/test_configs.py202def test_get_combined_config_props_check(empty_environ):
LOWtests/unit/test_configs.py216def test_load_dash_env_vars_refects_to_os_environ(empty_environ):
LOWtests/unit/test_configs.py257def test_pathname_prefix_relative_url(prefix, partial_path, expected):
LOWtests/unit/test_configs.py266def test_invalid_get_relative_path(prefix, partial_path):
LOWtests/unit/test_configs.py308def test_invalid_strip_relative_path(prefix, partial_path):
LOWtests/unit/test_configs.py429def test_app_invalid_delayed_config():
LOWtests/unit/test_configs.py505def test_csrf_config_in_index():
LOWtests/unit/test_configs.py551def test_init_app_server_false_pattern():
LOWtests/unit/test_resources.py107def test_collect_and_register_resources(mocker):
LOWtests/unit/test_resources.py127def test_resources_with_attributes():
LOWtests/unit/test_resources.py160def test_css_resources_with_attributes():
LOWtests/unit/test_resources.py187def test_resources_without_attributes():
LOWtests/unit/test_resources.py200def test_local_resources_with_attributes(mocker):
LOWtests/unit/test_resources.py235def test_multiple_external_urls_with_attributes():
LOWtests/unit/test_app_runners.py10def test_threaded_server_smoke(dash_thread_server):
LOWtests/unit/test_app_runners.py28def test_process_server_smoke(dash_process_server):
LOWtests/unit/test_health_endpoint_unit.py39def test_health_respects_routes_pathname_prefix():
LOWtests/unit/test_health_endpoint_unit.py51def test_health_custom_nested_path():
LOWtests/unit/test_browser.py21def test_browser_use_remote_webdriver(tmpdir):
LOWtests/unit/test_callback_unit.py8def test_callback_returns_callable():
LOWtests/unit/test_callback_unit.py14def test_callback_decorates_function():
LOWtests/unit/test_callback_unit.py25def test_callback_signature_includes_typed_options():
LOWtests/unit/test_callback_unit.py47def test_callback_with_multiple_inputs():
LOWtests/unit/test_callback_unit.py75def test_callback_with_multiple_outputs():
LOWtests/unit/test_callback_unit.py89def test_callback_preserves_docstring():
LOWtests/unit/test_callback_unit.py100def test_callback_with_prevent_initial_call():
LOWtests/unit/test_callback_unit.py114def test_callback_with_background_params():
LOWtests/unit/test_callback_unit.py125def test_callback_module_export():
LOWtests/unit/development/test_generate_class.py63def test_arguments_become_attributes(component_class):
LOWtests/unit/development/test_generate_class.py70def test_repr_single_default_argument(component_class):
LOWtests/unit/development/test_generate_class.py77def test_repr_single_non_default_argument(component_class):
LOWtests/unit/development/test_generate_class.py82def test_repr_multiple_arguments(component_class):
LOWtests/unit/development/test_generate_class.py89def test_repr_nested_arguments(component_class):
LOWtests/unit/development/test_generate_class.py125def test_attrs_match_forbidden_props(component_class):
LOW…sts/unit/development/test_flow_metadata_conversions.py151def load_test_flow_metadata_json():
LOW…sts/unit/development/test_flow_metadata_conversions.py170def test_docgen_to_python_args(load_test_flow_metadata_json):
LOWtests/unit/development/test_metadata_conversions.py57def test_docgen_to_python_args(load_test_metadata_json):
LOWtests/unit/library/test_grouping.py48def test_flatten_dict_key_order(dict_grouping_size):
LOWtests/unit/library/test_grouping.py82def test_make_grouping_by_position_scalar(scalar_grouping_size):
LOWtests/unit/library/test_grouping.py90def test_make_grouping_by_position_list(list_grouping_size):
LOWtests/unit/library/test_grouping.py98def test_make_grouping_by_position_dict(dict_grouping_size):
LOWtests/unit/library/test_grouping.py106def test_make_grouping_by_position_mixed(mixed_grouping_size):
LOWtests/unit/library/test_grouping.py175def test_make_grouping_by_key_scalar(scalar_grouping_size):
LOWtests/unit/library/test_grouping.py183def test_make_grouping_by_key_list(list_grouping_size):
LOWtests/unit/library/test_grouping.py191def test_make_grouping_by_key_dict(dict_grouping_size):
LOWtests/unit/library/test_grouping.py199def test_make_grouping_by_key_mixed(mixed_grouping_size):
LOWtests/unit/library/test_grouping.py224def test_make_grouping_by_key_default():
176 more matches not shown…
Cross-Language Confusion44 hits · 230 pts
SeverityFileLineSnippet
HIGHtests/backend_tests/test_preconfig_backends.py32 window._lastResponseHeaders = null;
HIGHtests/integration/callbacks/test_basic_callback.py458 dash_duo.wait_for_text_to_equal("#output", '[null, null, "A"]')
HIGHtests/integration/callbacks/test_basic_callback.py461 dash_duo.wait_for_text_to_equal("#output", '[null, 1, "A"]')
HIGHtests/integration/callbacks/test_callback_context.py91 '[{"prop_id": ".", "value": null}]',
HIGH…_clientside_multiple_output_return_single_no_update.py26 return [null, null];
HIGHtests/integration/clientside/test_clientside.py417 "btn0.n_clicks = null, "
HIGHtests/integration/clientside/test_clientside.py418 '{"btn1":0}.n_clicks = null, '
HIGHtests/integration/clientside/test_clientside.py419 '{"btn1":1}.n_clicks = null, '
HIGHtests/integration/clientside/test_clientside.py430 '{"btn1":0}.n_clicks = null, '
HIGHtests/integration/clientside/test_clientside.py431 '{"btn1":1}.n_clicks = null, '
HIGHtests/integration/clientside/test_clientside.py444 '{"btn1":1}.n_clicks = null, '
HIGHtests/integration/clientside/test_clientside.py456 '{"btn1":1}.n_clicks = null, '
HIGHtests/integration/clientside/test_clientside.py556 "in0.value = null, "
HIGHtests/integration/clientside/test_clientside.py557 '{"in1":0}.value = null, '
HIGHtests/integration/clientside/test_clientside.py558 '{"in1":1}.value = null, '
HIGHtests/integration/clientside/test_clientside.py569 '{"in1":0}.value = null, '
HIGHtests/integration/clientside/test_clientside.py570 '{"in1":1}.value = null, '
HIGHtests/integration/clientside/test_clientside.py582 '{"in1":1}.value = null, '
HIGHtests/integration/clientside/test_clientside.py594 '{"in1":1}.value = null, '
HIGHtests/async_tests/test_async_callbacks.py467 dash_duo.wait_for_text_to_equal("#output", '[null, null, "A"]')
HIGHtests/async_tests/test_async_callbacks.py470 dash_duo.wait_for_text_to_equal("#output", '[null, 1, "A"]')
HIGH…ore-components/tests/integration/dropdown/test_a11y.py343 return dropdownContent && dropdownContent.contains(activeElement);
HIGH…ore-components/tests/integration/dropdown/test_a11y.py409 if (focused && focused.closest('.dash-options-list-option')) {
HIGH…ore-components/tests/integration/dropdown/test_a11y.py412 return null;
HIGH…ts/tests/integration/loading/test_loading_component.py264 "return gd_ === window.gd && gd_.__test__ === 'boo';"
HIGH…-components/tests/integration/input/test_a11y_input.py66 return container === activeElement || container.contains(activeElement);
HIGH…s/tests/integration/location/test_location_callback.py173 window._test_link_event_counter = (window._test_link_event_counter || 0) + 1;
HIGH…s/tests/integration/location/test_location_callback.py177 window._test_history_event_counter = (window._test_history_event_counter || 0) + 1;
HIGH…nents/tests/integration/graph/test_graph_responsive.py109 # responsive=true will make the graph resize only if autosize=true|undefined, interestingly enough, responsive=undef
HIGH…components/tests/integration/graph/test_graph_varia.py765 figure.layout.title = {text: String(n_fig || 0)};
HIGH…components/tests/integration/graph/test_graph_varia.py773 layout: {width: 300, height: 250, title: {text: String(n_fig || 0)}}
HIGH…components/tests/integration/graph/test_graph_varia.py783 let responsive = [true, false, 'auto'][(n_resp || 0) % 3];
HIGH…components/tests/integration/graph/test_graph_varia.py784 return [new_figure, responsive, (n_fig || 0) + ' ' + responsive];
HIGH…e-components/tests/integration/link/test_link_event.py30 window._test_link_event_counter = (window._test_link_event_counter || 0) + 1;
HIGH…e-components/tests/integration/link/test_link_event.py34 window._test_history_event_counter = (window._test_history_event_counter || 0) + 1;
HIGH…/tests/integration/download/test_download_dataframe.py51 assert df.columns.equals(df_download.columns)
HIGH…/tests/integration/download/test_download_dataframe.py52 assert df.index.equals(df_download.index)
HIGH…onents/tests/integration/store/test_component_props.py179 "#output", '[{"n_clicks": null}, {"n_clicks": null}, {"n_clicks": null}]'
HIGH…onents/tests/integration/store/test_component_props.py188 dash_dcc.wait_for_text_to_equal("#output", "[null, null, null]")
HIGH…onents/tests/integration/store/test_component_props.py198 "#output", '[{"n_clicks": null}, {"n_clicks": null}, {"n_clicks": null}]'
HIGHcomponents/dash-table/tests/selenium/test_export.py28 assert df_bis.equals(df)
HIGHdash/development/base_component.py353 # A component's children can be undefined, a string, another component,
HIGHdash/development/_r_components_generation.py22 props <- props[!vapply(props, is.null, logical(1))]
HIGHdash/testing/browser.py192 stash.push(c);
Unused Imports69 hits · 62 pts
SeverityFileLineSnippet
LOWtests/utils.py4
LOWtests/unit/test_resources.py3
LOWtests/integration/test_legacy_components.py7
LOWtests/integration/dash/org.py3
LOW@plotly/dash-test-components/base/__init__.py12
LOW…h-generator-test-component-typescript/base/__init__.py12
LOW…ash-generator-test-component-standard/base/__init__.py12
LOW…/dash-generator-test-component-nested/base/__init__.py12
LOW…-core-components/dash_core_components_base/__init__.py7
LOW…-core-components/dash_core_components_base/__init__.py9
LOW…-core-components/dash_core_components_base/__init__.py9
LOW…-core-components/dash_core_components_base/__init__.py9
LOW…-core-components/dash_core_components_base/__init__.py9
LOWcomponents/dash-html-components/tests/utils.py1
LOW…-html-components/dash_html_components_base/__init__.py3
LOWcomponents/dash-table/dash_table_base/__init__.py18
LOWcomponents/dash-table/dash_table_base/__init__.py20
LOWcomponents/dash-table/dash_table_base/__init__.py21
LOWdash/__init__.py5
LOWdash/__init__.py5
LOWdash/__init__.py5
LOWdash/__init__.py5
LOWdash/__init__.py5
LOWdash/__init__.py5
LOWdash/__init__.py5
LOWdash/__init__.py14
LOWdash/__init__.py15
LOWdash/__init__.py16
LOWdash/__init__.py17
LOWdash/__init__.py18
LOWdash/__init__.py19
LOWdash/__init__.py20
LOWdash/__init__.py21
LOWdash/__init__.py22
LOWdash/__init__.py22
LOWdash/__init__.py23
LOWdash/__init__.py24
LOWdash/__init__.py24
LOWdash/__init__.py24
LOWdash/__init__.py29
LOWdash/__init__.py30
LOWdash/__init__.py30
LOWdash/__init__.py34
LOWdash/__init__.py37
LOWdash/__init__.py37
LOWdash/__init__.py38
LOWdash/__init__.py38
LOWdash/__init__.py38
LOWdash/__init__.py43
LOWdash/__init__.py44
LOWdash/__init__.py46
LOWdash/dash.py957
LOWdash/_validate.py598
LOWdash/_validate.py605
LOWdash/_jupyter.py396
LOWdash/development/__init__.py1
LOWdash/backends/base_server.py6
LOWdash/backends/base_server.py21
LOWdash/backends/_flask.py1
LOWdash/backends/_fastapi.py1
9 more matches not shown…
Deep Nesting54 hits · 54 pts
SeverityFileLineSnippet
LOWtests/unit/library/fixtures.py26
LOWtests/backend_tests/test_custom_backend.py13
LOWtests/compliance/test_typing.py68
LOWtests/background_callback/utils.py77
LOWtests/async_tests/utils.py77
LOWcomponents/dash-table/tests/selenium/test_column.py220
LOWcomponents/dash-table/tests/selenium/test_filter2.py12
LOWcomponents/dash-table/tests/selenium/test_formatting.py9
LOWdash/_callback.py489
LOWdash/_callback.py545
LOWdash/_grouping.py20
LOWdash/dash.py1067
LOWdash/dash.py1503
LOWdash/dash.py1581
LOWdash/dash.py1670
LOWdash/dash.py1959
LOWdash/dash.py2197
LOWdash/dash.py2249
LOWdash/_watch.py7
LOWdash/_watch.py11
LOWdash/_validate.py215
LOWdash/_validate.py613
LOWdash/_validate.py274
LOWdash/resources.py50
LOWdash/_jupyter.py490
LOWdash/dependencies.py88
LOWdash/_utils.py145
LOWdash/_pages.py416
LOWdash/development/_collect_nodes.py9
LOWdash/development/_collect_nodes.py22
LOWdash/development/_collect_nodes.py35
LOWdash/development/_collect_nodes.py49
LOWdash/development/base_component.py138
LOWdash/development/base_component.py278
LOWdash/development/base_component.py375
LOWdash/development/base_component.py410
LOWdash/development/_jl_components_generation.py184
LOWdash/development/_r_components_generation.py788
LOWdash/development/_py_components_generation.py463
LOWdash/development/build_process.py110
LOWdash/backends/_fastapi.py73
LOWdash/backends/_fastapi.py368
LOWdash/backends/_fastapi.py607
LOWdash/backends/_fastapi.py663
LOWdash/backends/_fastapi.py694
LOWdash/backends/_quart.py509
LOWdash/backends/_quart.py524
LOWdash/backends/ws.py187
LOWdash/backends/_utils.py5
LOWdash/testing/application_runners.py158
LOWdash/testing/application_runners.py372
LOWdash/testing/application_runners.py470
LOWdash/testing/plugin.py119
LOWdash/background_callback/managers/diskcache_manager.py63
Excessive Try-Catch Wrapping41 hits · 48 pts
SeverityFileLineSnippet
LOWtests/integration/test_hooks.py260 except Exception:
LOWtests/integration/test_hooks.py269 except Exception:
LOWtests/integration/test_hooks.py282 except Exception as err:
MEDIUMtests/integration/test_hooks.py256def layout_hook(layout):
MEDIUMtests/integration/test_hooks.py265def error_hook(error):
MEDIUMtests/integration/test_hooks.py277def callback_hook(n_clicks):
LOW…ents/tests/integration/misc/test_popover_visibility.py35 except Exception as e:
LOW…e-components/tests/integration/calendar/test_portal.py44 except Exception as e:
LOW…components/tests/integration/graph/test_graph_varia.py601 except Exception as e:
LOWdash/_callback.py739 except Exception as err: # pylint: disable=broad-exception-caught
LOWdash/_callback.py812 except Exception as err: # pylint: disable=broad-exception-caught
LOWdash/dash.py2423 except Exception as e:
LOWdash/_jupyter.py415 except Exception as error:
LOWdash/_jupyter.py469 except Exception as final_error: # pylint: disable=broad-except
MEDIUMdash/_jupyter.py410def run():
LOWdash/_utils.py246 except Exception: # pylint: disable=broad-except
LOWdash/backends/_fastapi.py154 except Exception: # pylint: disable=broad-exception-caught
LOWdash/backends/_fastapi.py215 except Exception: # pylint: disable=broad-exception-caught
LOWdash/backends/_fastapi.py239 except Exception as e: # pylint: disable=W0718
LOWdash/backends/_fastapi.py330 except Exception: # pylint: disable=broad-exception-caught
LOWdash/backends/_fastapi.py659 except Exception: # pylint: disable=broad-exception-caught
MEDIUMdash/backends/_fastapi.py321def _setup_catchall(self):
LOWdash/backends/_quart.py489 except Exception: # pylint: disable=broad-exception-caught
LOWdash/backends/_quart.py652 except Exception: # pylint: disable=broad-exception-caught
LOWdash/backends/ws.py294 except Exception as e: # pylint: disable=broad-exception-caught
LOWdash/backends/ws.py374 except Exception as e: # pylint: disable=broad-exception-caught
MEDIUMdash/backends/ws.py344def execute() -> dict:
LOWdash/testing/application_runners.py188 except Exception as error:
LOWdash/testing/application_runners.py210 except Exception as err: # pylint: disable=broad-except
LOWdash/testing/application_runners.py264 except Exception as error:
LOWdash/testing/browser.py206 except Exception as err: # pylint: disable=broad-exception-caught
LOWdash/testing/browser.py288 except Exception as err:
LOWdash/testing/browser.py533 except Exception as e: # pylint: disable=broad-exception-caught
MEDIUMdash/testing/browser.py91def __exit__(self, exc_type, exc_val, traceback):
LOWdash/testing/plugin.py132 except Exception as e: # pylint: disable=broad-except
LOWdash/background_callback/managers/diskcache_manager.py164 except Exception as e:
LOWdash/background_callback/managers/diskcache_manager.py245 except Exception as err: # pylint: disable=broad-except
LOWdash/background_callback/managers/diskcache_manager.py280 except Exception as err: # pylint: disable=broad-except
LOWdash/background_callback/managers/diskcache_manager.py297 except Exception as err: # pylint: disable=broad-except
LOWdash/background_callback/managers/celery_manager.py187 except Exception as err: # pylint: disable=broad-except
LOWdash/background_callback/managers/celery_manager.py232 except Exception as err: # pylint: disable=broad-except
Synthetic Comment Markers5 hits · 28 pts
SeverityFileLineSnippet
HIGHCHANGELOG.md974- [#2009](https://github.com/plotly/dash/pull/2009) Add support for Promises within Client-side callbacks as requested i
HIGHCHANGELOG.md974- [#2009](https://github.com/plotly/dash/pull/2009) Add support for Promises within Client-side callbacks as requested i
HIGHCHANGELOG.md1102- [#1883](https://github.com/plotly/dash/pull/1883) in DataTable added `page_current` to `persisted_props` as requested
HIGHCHANGELOG.md1102- [#1883](https://github.com/plotly/dash/pull/1883) in DataTable added `page_current` to `persisted_props` as requested
HIGH…ore-components/tests/unit/computeSliderMarkers.test.ts4 * File is largely generated by Claude
Hallucination Indicators2 hits · 20 pts
SeverityFileLineSnippet
CRITICAL…sh-html-components/vignettes/dash-html-components.html20return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,t
CRITICALcomponents/dash-table/tests/selenium/conftest.py388 self.mixin.driver.switch_to.active_element.send_keys(value + Keys.ENTER)
Redundant / Tautological Comments11 hits · 14 pts
SeverityFileLineSnippet
LOWtests/compliance/test_typing.py89 # Check if dash is installed as editable or regular install.
LOW…ore-components/tests/integration/dropdown/test_a11y.py804 # Check if the given elements are within the visible viewport of the dropdown
LOW…h-core-components/dash_core_components_base/express.py19 # Read the file contents and send it.
LOW…h-core-components/dash_core_components_base/express.py84 # Check if the provided writer is known.
LOWdash/_callback.py49 # Check if the function is a coroutine function
LOWdash/fingerprint.py20 # Check if the resource has a fingerprint
LOWdash/dash.py219 # Check if the function is a coroutine function
LOWdash/dash.py1694 # Check if any level of current path matches ignore path
LOWdash/backends/_fastapi.py373 # Check if we're running in a thread (e.g., from testing framework)
LOWdash/backends/_fastapi.py391 # Check if the file is outside the current working directory
LOWdash/backends/_quart.py273 # Check if we're running in a non-main thread (e.g., testing context)
Over-Commented Block8 hits · 8 pts
SeverityFileLineSnippet
LOWtests/unit/pages/sub_dir/custom_pages/__init__.py1# this directory is used for testing custom values of `pages_folder` param that
LOWtests/unit/pages/custom_pages/__init__.py1# this directory is used for testing custom values of `pages_folder` param that
LOWtests/async_tests/test_async_callbacks.py321
LOWcomponents/dash-table/tests/selenium/test_bootstrap.py1# import dash
LOWcomponents/dash-table/tests/selenium/test_bootstrap.py21# columns=[
LOWcomponents/dash-table/tests/selenium/test_bootstrap.py41# )
LOWcomponents/dash-table/tests/selenium/test_bootstrap.py61# test,
LOWdash/development/_py_components_generation.py61 prop_reorder_exceptions
Self-Referential Comments3 hits · 7 pts
SeverityFileLineSnippet
MEDIUMcomponents/dash-core-components/dash_prop_typing.py1# This file is automatically loaded on build time to generate types.
MEDIUMdash/_callback.py890 # Create a hash from the function, it will be the same always
MEDIUMdash/background_callback/managers/diskcache_manager.py154 # Create a new event loop for the process
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippet
HIGHdash/backends/ws.py102Request current prop value from the client. Uses queue.Queue for blocking wait in worker thread. Args:
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMcomponents/dash-table/dash-info.yaml19 # For comprehensive documentation of this package's features,
Dead Code1 hit · 2 pts
SeverityFileLineSnippet
MEDIUMtests/integration/callbacks/test_prevent_update.py37
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippet
LOWcomponents/dash-html-components/dash-info.yaml1594 htmlNobr("Lorem ipsum dolor sit amet,
LOWcomponents/dash-html-components/dash-info.yaml1594 htmlNobr("Lorem ipsum dolor sit amet,
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippet
LOWdash/__init__.py2# __plotly_dash is for the "make sure you don't have a dash.py" check