Data Apps & Dashboards for Python. No JavaScript Required.
This report summarizes scanner evidence for plotly/dash, a Python project with 24,445 GitHub stars. SynthScan examined 310,442 lines of code across 1213 source files, recording 1137 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 6.3 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 587 finding(s).
Are imports declared and package/API names verified? 244 finding(s).
Are wrappers, guards, and repeated structures necessary? 769 finding(s).
Which changes need focused human review? 1137 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1137 distinct pattern matches across 19 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/unit/mcp/test_mcp_session.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_session.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_server.py | 10 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_server.py | 12 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_server.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_server.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 36 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 38 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 78 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 80 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 107 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 126 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 128 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 143 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 145 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 176 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 178 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 211 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 213 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 228 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 230 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 250 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/test_mcp_configure.py | 252 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_pattern_matching.py | 14 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_pattern_matching.py | 16 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_pattern_matching.py | 90 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_pattern_matching.py | 92 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 29 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 31 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 142 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 144 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 202 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 204 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 217 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 219 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 312 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_tools.py | 314 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_background_callbacks.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_background_callbacks.py | 43 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_background_callbacks.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_background_callbacks.py | 107 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_background_callbacks.py | 196 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_background_callbacks.py | 198 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_background_callbacks.py | 260 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_background_callbacks.py | 262 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ts/unit/mcp/tools/test_mcp_formatted_output_results.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ts/unit/mcp/tools/test_mcp_formatted_output_results.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ts/unit/mcp/tools/test_mcp_formatted_output_results.py | 79 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ts/unit/mcp/tools/test_mcp_formatted_output_results.py | 81 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ts/unit/mcp/tools/test_mcp_formatted_output_results.py | 168 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ts/unit/mcp/tools/test_mcp_formatted_output_results.py | 170 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ts/unit/mcp/tools/test_mcp_formatted_output_results.py | 204 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ts/unit/mcp/tools/test_mcp_formatted_output_results.py | 206 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_input_descriptions.py | 24 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_input_descriptions.py | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_input_descriptions.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_input_descriptions.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_input_descriptions.py | 192 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/mcp/tools/test_mcp_input_descriptions.py | 194 | # --------------------------------------------------------------------------- | COMMENT |
| 100 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/test_configs.py | 79 | def test_pathname_prefix_from_environ_app_name(empty_environ): | CODE |
| LOW⚡ | tests/unit/test_configs.py | 86 | def test_pathname_prefix_environ_routes(empty_environ): | CODE |
| LOW⚡ | tests/unit/test_configs.py | 92 | def test_pathname_prefix_environ_requests(empty_environ): | CODE |
| LOW⚡ | tests/unit/test_configs.py | 488 | def test_debug_mode_enable_dev_tools(empty_environ, debug_env, debug, expected): | CODE |
| LOW⚡ | tests/unit/test_configs.py | 496 | def test_missing_flask_compress_raises(): | CODE |
| LOW⚡ | tests/unit/test_configs.py | 501 | def test_csrf_config_defaults(): | CODE |
| LOW⚡ | tests/unit/test_configs.py | 532 | def test_csrf_config_validation(token_name, header_name): | CODE |
| LOW⚡ | tests/unit/test_configs.py | 537 | def test_csrf_config_read_only(): | CODE |
| LOW⚡ | tests/unit/test_configs.py | 545 | def test_init_app_with_flask_run_pattern(): | CODE |
| LOW | tests/unit/test_configs.py | 44 | def test_valid_pathname_prefix_init( | CODE |
| LOW | tests/unit/test_configs.py | 56 | def test_invalid_pathname_prefix(empty_environ): | CODE |
| LOW | tests/unit/test_configs.py | 106 | def test_pathname_prefix_assets(empty_environ, req, expected): | CODE |
| LOW | tests/unit/test_configs.py | 189 | def test_get_combined_config_dev_tools_ui(empty_environ): | CODE |
| LOW | tests/unit/test_configs.py | 203 | def test_get_combined_config_props_check(empty_environ): | CODE |
| LOW | tests/unit/test_configs.py | 217 | def test_load_dash_env_vars_refects_to_os_environ(empty_environ): | CODE |
| LOW | tests/unit/test_configs.py | 258 | def test_pathname_prefix_relative_url(prefix, partial_path, expected): | CODE |
| LOW | tests/unit/test_configs.py | 267 | def test_invalid_get_relative_path(prefix, partial_path): | CODE |
| LOW | tests/unit/test_configs.py | 309 | def test_invalid_strip_relative_path(prefix, partial_path): | CODE |
| LOW | tests/unit/test_configs.py | 383 | def test_proxy_jupyter_server_url(mocker, empty_environ): | CODE |
| LOW | tests/unit/test_configs.py | 445 | def test_app_invalid_delayed_config(): | CODE |
| LOW | tests/unit/test_configs.py | 521 | def test_csrf_config_in_index(): | CODE |
| LOW | tests/unit/test_configs.py | 567 | def test_init_app_server_false_pattern(): | CODE |
| LOW | tests/unit/test_resources.py | 111 | def test_collect_and_register_resources(mocker): | CODE |
| LOW | tests/unit/test_resources.py | 131 | def test_resources_with_attributes(): | CODE |
| LOW | tests/unit/test_resources.py | 164 | def test_css_resources_with_attributes(): | CODE |
| LOW | tests/unit/test_resources.py | 191 | def test_resources_without_attributes(): | CODE |
| LOW | tests/unit/test_resources.py | 204 | def test_local_resources_with_attributes(mocker): | CODE |
| LOW | tests/unit/test_resources.py | 239 | def test_multiple_external_urls_with_attributes(): | CODE |
| LOW | tests/unit/test_resources.py | 265 | def test_index_with_windows_extended_length_paths(tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/unit/test_remount.py | 6 | def test_remount_adds_top_level_marker_not_a_prop(): | CODE |
| LOW⚡ | tests/unit/test_remount.py | 16 | def test_remount_returns_same_component(): | CODE |
| LOW⚡ | tests/unit/test_remount.py | 21 | def test_plain_component_has_no_marker(): | CODE |
| LOW⚡ | tests/unit/test_remount.py | 25 | def test_remount_rejects_non_components(): | CODE |
| LOW | tests/unit/test_pages_router_race.py | 42 | def test_router_sync_is_atomic_under_concurrent_requests(clear_pages_state): | CODE |
| LOW | tests/unit/test_pages_router_race.py | 112 | def test_router_async_is_atomic_under_concurrent_tasks(clear_pages_state): | CODE |
| LOW | tests/unit/test_main_module_alias.py | 49 | def test_main_module_alias_prevents_double_registration(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_main_module_alias.py | 103 | def test_main_module_alias_prevents_double_registration_nested(tmp_path, monkeypatch): | STRING |
| LOW | tests/unit/test_main_module_alias.py | 148 | def test_no_alias_when_names_collide(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_main_module_alias.py | 174 | def test_no_reexecution_when_script_dir_shares_script_name(tmp_path, monkeypatch): | CODE |
| LOW | tests/unit/test_main_module_alias.py | 222 | def test_no_sibling_import_when_script_dir_has_same_name_module(tmp_path, monkeypatch): | STRING |
| LOW | tests/unit/test_main_module_alias.py | 282 | def test_main_module_alias_with_explicit_name(tmp_path, monkeypatch): | STRING |
| LOW | tests/unit/test_main_module_alias.py | 344 | def test_main_module_alias_with_app_factory(tmp_path, monkeypatch): | STRING |
| LOW⚡ | tests/unit/test_pydantic_types.py | 10 | def test_json_schema_is_number(self): | CODE |
| LOW⚡ | tests/unit/test_pydantic_types.py | 16 | def test_produces_object_schema(self): | CODE |
| LOW⚡ | tests/unit/test_pydantic_types.py | 21 | def test_schema_has_type_and_props(self): | CODE |
| LOW⚡ | tests/unit/test_pydantic_types.py | 29 | def test_dispatch_body_schema(self): | CODE |
| LOW⚡ | tests/unit/test_pydantic_types.py | 34 | def test_dispatch_response_schema(self): | CODE |
| LOW | tests/unit/test_app_runners.py | 15 | def test_threaded_server_smoke(dash_thread_server): | CODE |
| LOW | tests/unit/test_app_runners.py | 30 | def test_threaded_server_wrapped_fastapi(monkeypatch): | CODE |
| LOW | tests/unit/test_app_runners.py | 64 | def test_process_server_smoke(dash_process_server): | CODE |
| LOW | tests/unit/test_app_runners.py | 86 | def test_run_app_uses_backend_type(server_type, expected_options): | CODE |
| LOW | tests/unit/test_health_endpoint_unit.py | 42 | def test_health_respects_routes_pathname_prefix(): | CODE |
| LOW | tests/unit/test_health_endpoint_unit.py | 54 | def test_health_custom_nested_path(): | CODE |
| LOW | tests/unit/test_browser.py | 21 | def test_browser_use_remote_webdriver(tmpdir): | CODE |
| LOW | tests/unit/test_async_background_callback_job_fn.py | 63 | def test_diskcache_async_job_fn_exception_is_reported(): | CODE |
| LOW⚡ | tests/unit/test_async_background_callback_job_fn.py | 74 | def test_diskcache_async_job_fn_prevent_update_is_reported(): | CODE |
| LOW⚡ | tests/unit/test_async_background_callback_job_fn.py | 84 | def test_diskcache_async_job_fn_success_is_reported(): | CODE |
| LOW⚡ | tests/unit/test_async_background_callback_job_fn.py | 94 | def test_celery_async_job_fn_exception_is_reported(): | CODE |
| LOW | tests/unit/test_async_background_callback_job_fn.py | 105 | def test_celery_async_job_fn_prevent_update_is_reported(): | CODE |
| LOW | tests/unit/test_async_background_callback_job_fn.py | 115 | def test_celery_async_job_fn_success_is_reported(): | CODE |
| 391 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/unit/mcp/tools/test_mcp_input_schemas.py | 41 | """``{anyOf: [*schemas, {type: null}]}`` — a common nullable-type shape.""" | STRING |
| HIGH | tests/backend_tests/test_preconfig_backends.py | 32 | window._lastResponseHeaders = null; | STRING |
| HIGH | tests/integration/callbacks/test_wildcards.py | 902 | unchanged, both sides are undefined, so its initial call is dropped | STRING |
| HIGH | tests/integration/callbacks/test_basic_callback.py | 462 | dash_duo.wait_for_text_to_equal("#output", '[null, null, "A"]') | CODE |
| HIGH | tests/integration/callbacks/test_basic_callback.py | 465 | dash_duo.wait_for_text_to_equal("#output", '[null, 1, "A"]') | CODE |
| HIGH | tests/integration/callbacks/test_callback_context.py | 91 | '[{"prop_id": ".", "value": null}]', | CODE |
| HIGH | …_clientside_multiple_output_return_single_no_update.py | 26 | return [null, null]; | STRING |
| HIGH⚡ | tests/integration/clientside/test_clientside.py | 417 | "btn0.n_clicks = null, " | CODE |
| HIGH⚡ | tests/integration/clientside/test_clientside.py | 418 | '{"btn1":0}.n_clicks = null, ' | CODE |
| HIGH⚡ | tests/integration/clientside/test_clientside.py | 419 | '{"btn1":1}.n_clicks = null, ' | CODE |
| HIGH | tests/integration/clientside/test_clientside.py | 430 | '{"btn1":0}.n_clicks = null, ' | CODE |
| HIGH | tests/integration/clientside/test_clientside.py | 431 | '{"btn1":1}.n_clicks = null, ' | CODE |
| HIGH | tests/integration/clientside/test_clientside.py | 444 | '{"btn1":1}.n_clicks = null, ' | CODE |
| HIGH | tests/integration/clientside/test_clientside.py | 456 | '{"btn1":1}.n_clicks = null, ' | CODE |
| HIGH⚡ | tests/integration/clientside/test_clientside.py | 556 | "in0.value = null, " | CODE |
| HIGH⚡ | tests/integration/clientside/test_clientside.py | 557 | '{"in1":0}.value = null, ' | CODE |
| HIGH⚡ | tests/integration/clientside/test_clientside.py | 558 | '{"in1":1}.value = null, ' | CODE |
| HIGH | tests/integration/clientside/test_clientside.py | 569 | '{"in1":0}.value = null, ' | CODE |
| HIGH | tests/integration/clientside/test_clientside.py | 570 | '{"in1":1}.value = null, ' | CODE |
| HIGH | tests/integration/clientside/test_clientside.py | 582 | '{"in1":1}.value = null, ' | CODE |
| HIGH | tests/integration/clientside/test_clientside.py | 594 | '{"in1":1}.value = null, ' | CODE |
| HIGH | tests/streaming/test_stream_shutdown.py | 152 | if (init && init.body && String(init.body).includes('streamDownlink')) { | CODE |
| HIGH | tests/async_tests/test_async_callbacks.py | 471 | dash_duo.wait_for_text_to_equal("#output", '[null, null, "A"]') | CODE |
| HIGH | tests/async_tests/test_async_callbacks.py | 474 | dash_duo.wait_for_text_to_equal("#output", '[null, 1, "A"]') | CODE |
| HIGH | …ore-components/tests/integration/dropdown/test_a11y.py | 347 | return dropdownContent && dropdownContent.contains(activeElement); | STRING |
| HIGH | …ore-components/tests/integration/dropdown/test_a11y.py | 414 | if (focused && focused.closest('.dash-options-list-option')) { | STRING |
| HIGH | …ore-components/tests/integration/dropdown/test_a11y.py | 417 | return null; | STRING |
| HIGH | …ts/tests/integration/loading/test_loading_component.py | 264 | "return gd_ === window.gd && gd_.__test__ === 'boo';" | CODE |
| HIGH | …-components/tests/integration/input/test_a11y_input.py | 66 | return container === activeElement || container.contains(activeElement); | STRING |
| HIGH | …components/tests/integration/markdown/test_markdown.py | 566 | "return window.MathJax && window.MathJax._sentinel" | STRING |
| HIGH | …s/tests/integration/location/test_location_callback.py | 173 | window._test_link_event_counter = (window._test_link_event_counter || 0) + 1; | STRING |
| HIGH | …s/tests/integration/location/test_location_callback.py | 177 | window._test_history_event_counter = (window._test_history_event_counter || 0) + 1; | STRING |
| HIGH | …nents/tests/integration/graph/test_graph_responsive.py | 109 | # responsive=true will make the graph resize only if autosize=true|undefined, interestingly enough, responsive=undef | COMMENT |
| HIGH⚡ | …components/tests/integration/graph/test_graph_varia.py | 765 | figure.layout.title = {text: String(n_fig || 0)}; | CODE |
| HIGH⚡ | …components/tests/integration/graph/test_graph_varia.py | 773 | layout: {width: 300, height: 250, title: {text: String(n_fig || 0)}} | CODE |
| HIGH⚡ | …components/tests/integration/graph/test_graph_varia.py | 783 | let responsive = [true, false, 'auto'][(n_resp || 0) % 3]; | CODE |
| HIGH⚡ | …components/tests/integration/graph/test_graph_varia.py | 784 | return [new_figure, responsive, (n_fig || 0) + ' ' + responsive]; | CODE |
| HIGH | …e-components/tests/integration/link/test_link_event.py | 30 | window._test_link_event_counter = (window._test_link_event_counter || 0) + 1; | STRING |
| HIGH | …e-components/tests/integration/link/test_link_event.py | 34 | window._test_history_event_counter = (window._test_history_event_counter || 0) + 1; | STRING |
| HIGH | …/tests/integration/download/test_download_dataframe.py | 51 | assert df.columns.equals(df_download.columns) | CODE |
| HIGH | …/tests/integration/download/test_download_dataframe.py | 52 | assert df.index.equals(df_download.index) | CODE |
| HIGH⚡ | …onents/tests/integration/store/test_component_props.py | 179 | "#output", '[{"n_clicks": null}, {"n_clicks": null}, {"n_clicks": null}]' | CODE |
| HIGH⚡ | …onents/tests/integration/store/test_component_props.py | 188 | dash_dcc.wait_for_text_to_equal("#output", "[null, null, null]") | CODE |
| HIGH⚡ | …onents/tests/integration/store/test_component_props.py | 198 | "#output", '[{"n_clicks": null}, {"n_clicks": null}, {"n_clicks": null}]' | CODE |
| HIGH | components/dash-table/tests/selenium/test_export.py | 28 | assert df_bis.equals(df) | CODE |
| HIGH⚡ | benchmarks/run.py | 120 | " && window.dash_component_api.callbackGraphTime) || null;" | CODE |
| HIGH | dash/development/base_component.py | 379 | # A component's children can be undefined, a string, another component, | COMMENT |
| HIGH | dash/development/_r_components_generation.py | 22 | props <- props[!vapply(props, is.null, logical(1))] | CODE |
| HIGH | dash/testing/browser.py | 192 | stash.push(c); | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/backend_tests/test_threaded_runner_stop.py | 73 | except Exception: # pylint: disable=broad-except | CODE |
| HIGH | tests/integration/utils.py | 12 | except: | CODE |
| HIGH | tests/integration/test_legacy_components.py | 8 | except ImportError: | CODE |
| HIGH | tests/compliance/test_typing.py | 185 | except OSError: | CODE |
| HIGH | tests/streaming/test_stream_shutdown.py | 101 | except requests.RequestException: | CODE |
| HIGH | …s/tests/integration/calendar/test_date_picker_range.py | 153 | except (ElementClickInterceptedException, TimeoutException): | CODE |
| HIGH | …s/tests/integration/calendar/test_date_picker_range.py | 191 | except (ElementClickInterceptedException, TimeoutException): | CODE |
| HIGH | …s/tests/integration/calendar/test_date_picker_range.py | 199 | except (ElementClickInterceptedException, TimeoutException): | CODE |
| HIGH | …s/tests/integration/calendar/test_date_picker_range.py | 235 | except (ElementClickInterceptedException, TimeoutException): | CODE |
| HIGH | …/tests/integration/calendar/test_date_picker_single.py | 184 | except ElementClickInterceptedException: | CODE |
| HIGH | …/tests/integration/calendar/test_date_picker_single.py | 195 | except ElementClickInterceptedException: | CODE |
| HIGH | …/tests/integration/calendar/test_date_picker_single.py | 233 | except ElementClickInterceptedException: | CODE |
| HIGH | dash/_streaming.py | 315 | except BaseException: # pylint: disable=broad-exception-caught | CODE |
| HIGH | dash/_validate.py | 522 | except exceptions.AppNotFoundError: | CODE |
| HIGH | dash/_validate.py | 601 | except ImportError: | CODE |
| HIGH | dash/_jupyter.py | 397 | except ImportError: | CODE |
| HIGH | dash/_jupyter.py | 413 | except SystemExit: | CODE |
| HIGH | dash/_jupyter.py | 433 | except queue.Empty: | CODE |
| HIGH | dash/_get_app.py | 56 | except LookupError: | CODE |
| HIGH | dash/_utils.py | 477 | except (ImportError, ValueError, OSError): | CODE |
| HIGH | dash/_utils.py | 91 | except KeyError: | CODE |
| HIGH | dash/development/base_component.py | 332 | except KeyError: | CODE |
| HIGH | dash/development/base_component.py | 361 | except KeyError: | CODE |
| HIGH | dash/backends/_fastapi.py | 341 | except RuntimeError: | CODE |
| HIGH | dash/backends/_fastapi.py | 982 | except WebSocketDisconnect: | CODE |
| HIGH | dash/backends/_quart.py | 806 | except asyncio.CancelledError: | CODE |
| HIGH | dash/backends/_quart.py | 808 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| HIGH | dash/backends/_quart.py | 322 | except (NotImplementedError, ValueError): | CODE |
| HIGH | dash/backends/ws.py | 350 | except asyncio.CancelledError: | CODE |
| HIGH | dash/backends/ws.py | 471 | except asyncio.CancelledError: | CODE |
| HIGH | dash/mcp/_configure.py | 87 | except AppNotFoundError: | CODE |
| HIGH | dash/mcp/_configure.py | 132 | except AppNotFoundError: | CODE |
| HIGH | dash/mcp/types/typing_utils.py | 22 | except AttributeError: | CODE |
| HIGH | dash/testing/application_runners.py | 326 | except psutil.NoSuchProcess: | CODE |
| HIGH | dash/testing/application_runners.py | 331 | except (psutil.TimeoutExpired, psutil.NoSuchProcess): | CODE |
| HIGH | dash/testing/application_runners.py | 321 | except psutil.NoSuchProcess: | CODE |
| HIGH | dash/testing/browser.py | 161 | except ImportError: | CODE |
| HIGH | dash/_shared_storage/local.py | 267 | except OSError: | CODE |
| HIGH | dash/_shared_storage/local.py | 523 | except OSError: | CODE |
| HIGH | dash/_shared_storage/local.py | 238 | except OSError: | CODE |
| HIGH | dash/_shared_storage/local.py | 569 | except OSError: | CODE |
| HIGH | dash/_shared_storage/local.py | 324 | except OSError: | CODE |
| HIGH | dash/_shared_storage/_transport.py | 111 | except (OSError, EOFError, ValueError): | CODE |
| HIGH | dash/_shared_storage/_transport.py | 145 | except OSError: | CODE |
| HIGH | dash/_shared_storage/_transport.py | 116 | except OSError: | CODE |
| HIGH | dash/_shared_storage/redis.py | 134 | except Exception: # pylint: disable=broad-except | CODE |
| HIGH | dash/background_callback/managers/diskcache_manager.py | 85 | except psutil.NoSuchProcess: | CODE |
| HIGH | dash/background_callback/managers/diskcache_manager.py | 90 | except (psutil.TimeoutExpired, psutil.NoSuchProcess): | CODE |
| HIGH | dash/background_callback/managers/diskcache_manager.py | 80 | except psutil.NoSuchProcess: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/utils.py | 4 | CODE | |
| LOW | tests/integration/test_legacy_components.py | 7 | CODE | |
| LOW | tests/integration/dash/org.py | 3 | CODE | |
| LOW | @plotly/dash-test-components/base/__init__.py | 12 | CODE | |
| LOW | …h-generator-test-component-typescript/base/__init__.py | 12 | CODE | |
| LOW | …ash-generator-test-component-standard/base/__init__.py | 12 | CODE | |
| LOW | …/dash-generator-test-component-nested/base/__init__.py | 12 | CODE | |
| LOW | …-core-components/dash_core_components_base/__init__.py | 7 | CODE | |
| LOW | …-core-components/dash_core_components_base/__init__.py | 9 | CODE | |
| LOW | …-core-components/dash_core_components_base/__init__.py | 9 | CODE | |
| LOW | …-core-components/dash_core_components_base/__init__.py | 9 | CODE | |
| LOW | …-core-components/dash_core_components_base/__init__.py | 9 | CODE | |
| LOW | components/dash-html-components/tests/utils.py | 1 | CODE | |
| LOW | …-html-components/dash_html_components_base/__init__.py | 3 | CODE | |
| LOW | components/dash-table/dash_table_base/__init__.py | 18 | CODE | |
| LOW | components/dash-table/dash_table_base/__init__.py | 20 | CODE | |
| LOW | components/dash-table/dash_table_base/__init__.py | 21 | CODE | |
| LOW | benchmarks/scenarios.py | 22 | CODE | |
| LOW | benchmarks/run.py | 32 | CODE | |
| LOW | dash/_stream_hub.py | 73 | CODE | |
| LOW | dash/__init__.py | 5 | CODE | |
| LOW | dash/__init__.py | 5 | CODE | |
| LOW | dash/__init__.py | 5 | CODE | |
| LOW | dash/__init__.py | 5 | CODE | |
| LOW | dash/__init__.py | 5 | CODE | |
| LOW | dash/__init__.py | 5 | CODE | |
| LOW | dash/__init__.py | 5 | CODE | |
| LOW | dash/__init__.py | 14 | CODE | |
| LOW | dash/__init__.py | 15 | CODE | |
| LOW | dash/__init__.py | 16 | CODE | |
| LOW | dash/__init__.py | 17 | CODE | |
| LOW | dash/__init__.py | 18 | CODE | |
| LOW | dash/__init__.py | 19 | CODE | |
| LOW | dash/__init__.py | 20 | CODE | |
| LOW | dash/__init__.py | 21 | CODE | |
| LOW | dash/__init__.py | 22 | CODE | |
| LOW | dash/__init__.py | 22 | CODE | |
| LOW | dash/__init__.py | 23 | CODE | |
| LOW | dash/__init__.py | 24 | CODE | |
| LOW | dash/__init__.py | 24 | CODE | |
| LOW | dash/__init__.py | 24 | CODE | |
| LOW | dash/__init__.py | 29 | CODE | |
| LOW | dash/__init__.py | 30 | CODE | |
| LOW | dash/__init__.py | 30 | CODE | |
| LOW | dash/__init__.py | 34 | CODE | |
| LOW | dash/__init__.py | 37 | CODE | |
| LOW | dash/__init__.py | 37 | CODE | |
| LOW | dash/__init__.py | 38 | CODE | |
| LOW | dash/__init__.py | 38 | CODE | |
| LOW | dash/__init__.py | 38 | CODE | |
| LOW | dash/__init__.py | 43 | CODE | |
| LOW | dash/__init__.py | 44 | CODE | |
| LOW | dash/__init__.py | 45 | CODE | |
| LOW | dash/__init__.py | 47 | CODE | |
| LOW | dash/__init__.py | 47 | CODE | |
| LOW | dash/__init__.py | 47 | CODE | |
| LOW | dash/__init__.py | 47 | CODE | |
| LOW | dash/__init__.py | 47 | CODE | |
| LOW | dash/__init__.py | 47 | CODE | |
| LOW | dash/__init__.py | 47 | CODE | |
| 121 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/test_pages_router_race.py | 78 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | tests/backend_tests/test_threaded_runner_stop.py | 73 | except Exception: # pylint: disable=broad-except | CODE |
| LOW | tests/integration/test_hooks.py | 260 | except Exception: | CODE |
| LOW | tests/integration/test_hooks.py | 269 | except Exception: | CODE |
| LOW | tests/integration/test_hooks.py | 282 | except Exception as err: | CODE |
| MEDIUM | tests/integration/test_hooks.py | 256 | def layout_hook(layout): | CODE |
| MEDIUM | tests/integration/test_hooks.py | 265 | def error_hook(error): | CODE |
| MEDIUM | tests/integration/test_hooks.py | 277 | def callback_hook(n_clicks): | CODE |
| LOW | tests/shared_storage/test_topic_ttl.py | 32 | except Exception: # pylint: disable=broad-except | CODE |
| LOW | tests/shared_storage/test_topic_ttl.py | 101 | except Exception as err: # pylint: disable=broad-except | CODE |
| MEDIUM | tests/shared_storage/test_topic_ttl.py | 24 | def _redis_available(): | CODE |
| MEDIUM | tests/shared_storage/test_topic_ttl.py | 97 | def read(): | CODE |
| LOW | tests/shared_storage/test_dash_integration.py | 33 | except Exception: # pylint: disable=broad-except | CODE |
| MEDIUM | tests/shared_storage/test_dash_integration.py | 25 | def _redis_available(): | CODE |
| LOW | tests/shared_storage/test_redis_backend.py | 32 | except Exception: # pylint: disable=broad-except | CODE |
| MEDIUM | tests/shared_storage/test_redis_backend.py | 26 | def _redis_available(): | CODE |
| LOW | …ents/tests/integration/misc/test_popover_visibility.py | 35 | except Exception as e: | CODE |
| LOW | …e-components/tests/integration/calendar/test_portal.py | 44 | except Exception as e: | CODE |
| LOW | …components/tests/integration/graph/test_graph_varia.py | 601 | except Exception as e: | CODE |
| LOW | benchmarks/run.py | 479 | except Exception as exc: # keep the suite going if one app misbehaves | CODE |
| LOW | dash/_stream_hub.py | 336 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/_stream_hub.py | 484 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| MEDIUM | dash/_stream_hub.py | 330 | def stop() -> bool: | CODE |
| LOW | dash/_callback.py | 955 | except Exception as err: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/_callback.py | 1028 | except Exception as err: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/_callback.py | 1135 | except Exception as err: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/_compression.py | 47 | except Exception as e: | CODE |
| LOW | dash/dash.py | 926 | except Exception as e: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/dash.py | 1127 | except Exception: # pylint: disable=broad-except | CODE |
| LOW | dash/dash.py | 2686 | except Exception as e: | CODE |
| LOW | dash/_jupyter.py | 415 | except Exception as error: | CODE |
| LOW | dash/_jupyter.py | 469 | except Exception as final_error: # pylint: disable=broad-except | CODE |
| MEDIUM | dash/_jupyter.py | 410 | def run(): | CODE |
| LOW | dash/_utils.py | 257 | except Exception: # pylint: disable=broad-except | CODE |
| MEDIUM | dash/backends/_fastapi.py | 382 | def _setup_catchall(self): | CODE |
| LOW | dash/backends/_fastapi.py | 189 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/_fastapi.py | 252 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/_fastapi.py | 298 | except Exception as e: # pylint: disable=W0718 | CODE |
| LOW | dash/backends/_fastapi.py | 395 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/_fastapi.py | 795 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/_quart.py | 602 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/_quart.py | 808 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/ws.py | 392 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/ws.py | 420 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/ws.py | 524 | except Exception as e: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/ws.py | 726 | except Exception as e: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/backends/ws.py | 776 | except Exception as e: # pylint: disable=broad-exception-caught | CODE |
| MEDIUM | dash/backends/ws.py | 701 | def execute() -> dict: | CODE |
| LOW | dash/mcp/_server.py | 305 | except Exception as e: # pylint: disable=broad-exception-caught | CODE |
| LOW | …h/mcp/primitives/tools/tool_decorated_mcp_functions.py | 28 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | …h/mcp/primitives/tools/tool_decorated_mcp_functions.py | 67 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | …h/mcp/primitives/tools/tool_decorated_mcp_functions.py | 141 | except Exception as exc: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/mcp/primitives/tools/callback_utils.py | 36 | except Exception as err: | CODE |
| LOW | dash/mcp/primitives/tools/callback_adapter.py | 205 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/mcp/primitives/tools/callback_adapter.py | 360 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | …ools/input_schemas/schema_callback_type_annotations.py | 42 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | …h/mcp/primitives/tools/results/result_plotly_figure.py | 33 | except Exception: # pylint: disable=broad-exception-caught | CODE |
| LOW | dash/testing/application_runners.py | 221 | except Exception as error: | CODE |
| LOW | dash/testing/application_runners.py | 243 | except Exception as err: # pylint: disable=broad-except | CODE |
| LOW | dash/testing/application_runners.py | 305 | except Exception as error: | CODE |
| 14 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/library/fixtures.py | 26 | CODE | |
| LOW | tests/backend_tests/test_custom_backend.py | 13 | CODE | |
| LOW | tests/compliance/test_typing.py | 68 | CODE | |
| LOW | tests/streaming/test_stream_wsgi.py | 49 | CODE | |
| LOW | tests/streaming/test_stream_shutdown.py | 73 | CODE | |
| LOW | tests/background_callback/utils.py | 77 | CODE | |
| LOW | tests/async_tests/utils.py | 77 | CODE | |
| LOW | components/dash-table/tests/selenium/test_column.py | 220 | CODE | |
| LOW | components/dash-table/tests/selenium/test_filter2.py | 12 | CODE | |
| LOW | components/dash-table/tests/selenium/test_formatting.py | 9 | CODE | |
| LOW | benchmarks/run.py | 137 | CODE | |
| LOW | benchmarks/run.py | 226 | CODE | |
| LOW | benchmarks/run.py | 346 | CODE | |
| LOW | dash/_stream_hub.py | 432 | CODE | |
| LOW | dash/_stream_hub.py | 550 | CODE | |
| LOW | dash/_callback.py | 688 | CODE | |
| LOW | dash/_callback.py | 743 | CODE | |
| LOW | dash/_callback.py | 820 | CODE | |
| LOW | dash/_callback.py | 889 | CODE | |
| LOW | dash/_callback.py | 1097 | CODE | |
| LOW | dash/_grouping.py | 20 | CODE | |
| LOW | dash/dash.py | 1009 | CODE | |
| LOW | dash/dash.py | 1306 | CODE | |
| LOW | dash/dash.py | 1745 | CODE | |
| LOW | dash/dash.py | 1823 | CODE | |
| LOW | dash/dash.py | 1933 | CODE | |
| LOW | dash/dash.py | 2222 | CODE | |
| LOW | dash/dash.py | 2460 | CODE | |
| LOW | dash/dash.py | 2512 | CODE | |
| LOW | dash/dash.py | 2767 | CODE | |
| LOW | dash/dash.py | 2871 | CODE | |
| LOW | dash/_streaming.py | 142 | CODE | |
| LOW | dash/_streaming.py | 204 | CODE | |
| LOW | dash/_streaming.py | 282 | CODE | |
| LOW | dash/_layout_utils.py | 193 | CODE | |
| LOW | dash/_layout_utils.py | 216 | CODE | |
| LOW | dash/_watch.py | 7 | CODE | |
| LOW | dash/_watch.py | 11 | CODE | |
| LOW | dash/_validate.py | 215 | CODE | |
| LOW | dash/_validate.py | 613 | CODE | |
| LOW | dash/_validate.py | 274 | CODE | |
| LOW | dash/resources.py | 50 | CODE | |
| LOW | dash/_jupyter.py | 490 | CODE | |
| LOW | dash/_utils.py | 146 | CODE | |
| LOW | dash/_pages.py | 442 | CODE | |
| LOW | dash/development/_collect_nodes.py | 9 | CODE | |
| LOW | dash/development/_collect_nodes.py | 22 | CODE | |
| LOW | dash/development/_collect_nodes.py | 35 | CODE | |
| LOW | dash/development/_collect_nodes.py | 49 | CODE | |
| LOW | dash/development/base_component.py | 158 | CODE | |
| LOW | dash/development/base_component.py | 304 | CODE | |
| LOW | dash/development/base_component.py | 401 | CODE | |
| LOW | dash/development/base_component.py | 436 | CODE | |
| LOW | dash/development/_jl_components_generation.py | 184 | CODE | |
| LOW | dash/development/_r_components_generation.py | 788 | CODE | |
| LOW | dash/development/_py_components_generation.py | 468 | CODE | |
| LOW | dash/development/build_process.py | 110 | CODE | |
| LOW | dash/backends/_fastapi.py | 107 | CODE | |
| LOW | dash/backends/_fastapi.py | 433 | CODE | |
| LOW | dash/backends/_fastapi.py | 743 | CODE | |
| 23 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | CHANGELOG.md | 1112 | - [#2009](https://github.com/plotly/dash/pull/2009) Add support for Promises within Client-side callbacks as requested i | CODE |
| HIGH | CHANGELOG.md | 1112 | - [#2009](https://github.com/plotly/dash/pull/2009) Add support for Promises within Client-side callbacks as requested i | CODE |
| HIGH | CHANGELOG.md | 1240 | - [#1883](https://github.com/plotly/dash/pull/1883) in DataTable added `page_current` to `persisted_props` as requested | CODE |
| HIGH | CHANGELOG.md | 1240 | - [#1883](https://github.com/plotly/dash/pull/1883) in DataTable added `page_current` to `persisted_props` as requested | CODE |
| HIGH | …ore-components/tests/unit/computeSliderMarkers.test.ts | 4 | * File is largely generated by Claude | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ash-core-components/tests/dash_core_components_page.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/_stream_hub.py | 80 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/_callback.py | 67 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/__init__.py | 73 | __all__ = [ | CODE |
| LOW | dash/_streaming.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/development/update_components.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/development/build_process.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/backends/_fastapi.py | 179 | async def _setup_timing(self, request: Request) -> None: | CODE |
| LOW | dash/backends/__init__.py | 72 | __all__ = [ | CODE |
| LOW | dash/backends/ws.py | 141 | def set_prop_sync(self, component_id: str, prop_name: str, value: Any) -> None: | CODE |
| LOW | dash/backends/ws.py | 160 | async def set_prop(self, component_id: str, prop_name: str, value: Any) -> None: | CODE |
| LOW | dash/mcp/__init__.py | 7 | __all__ = [ | CODE |
| LOW | dash/mcp/_server.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/mcp/tasks/__init__.py | 5 | __all__ = ["create_task", "get_task", "get_task_result", "cancel_task"] | CODE |
| LOW | dash/mcp/types/__init__.py | 42 | __all__ = [ | CODE |
| LOW | dash/mcp/primitives/__init__.py | 11 | __all__ = [ | CODE |
| LOW | …h/mcp/primitives/tools/results/result_plotly_figure.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/testing/application_runners.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/testing/wait.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/testing/browser.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/_shared_storage/_persistence.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | dash/_shared_storage/__init__.py | 20 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …sh-html-components/vignettes/dash-html-components.html | 20 | return 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 | CODE |
| CRITICAL | components/dash-table/tests/selenium/conftest.py | 388 | self.mixin.driver.switch_to.active_element.send_keys(value + Keys.ENTER) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/compliance/test_typing.py | 89 | # Check if dash is installed as editable or regular install. | STRING |
| LOW | …ore-components/tests/integration/dropdown/test_a11y.py | 809 | # Check if the given elements are within the visible viewport of the dropdown | COMMENT |
| LOW | …h-core-components/dash_core_components_base/express.py | 19 | # Read the file contents and send it. | COMMENT |
| LOW | …h-core-components/dash_core_components_base/express.py | 84 | # Check if the provided writer is known. | COMMENT |
| LOW | dash/_callback.py | 56 | # Check if the function is a coroutine function | COMMENT |
| LOW | dash/fingerprint.py | 20 | # Check if the resource has a fingerprint | COMMENT |
| LOW | dash/dash.py | 1957 | # Check if any level of current path matches ignore path | COMMENT |
| LOW | dash/dash.py | 237 | # Check if the function is a coroutine function | STRING |
| LOW | dash/backends/_fastapi.py | 438 | # Check if we're running in a thread (e.g., from testing framework) | COMMENT |
| LOW | dash/backends/_fastapi.py | 456 | # Check if the file is outside the current working directory | COMMENT |
| LOW | dash/backends/_quart.py | 295 | # Check if we're running in a non-main thread (e.g., testing context) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/pages/sub_dir/custom_pages/__init__.py | 1 | # this directory is used for testing custom values of `pages_folder` param that | COMMENT |
| LOW | tests/unit/pages/custom_pages/__init__.py | 1 | # this directory is used for testing custom values of `pages_folder` param that | COMMENT |
| LOW | tests/streaming/__init__.py | 1 | # Streaming (async generator) callback tests. Require the `async` extra | COMMENT |
| LOW | tests/async_tests/test_async_callbacks.py | 321 | dash_duo.wait_for_text_to_equal("#out", str(i + 1)) | COMMENT |
| LOW | requirements/redis.txt | 1 | # Dependency used by RedisSharedStorage. | COMMENT |
| LOW | components/dash-table/tests/selenium/test_bootstrap.py | 1 | # import dash | COMMENT |
| LOW | components/dash-table/tests/selenium/test_bootstrap.py | 21 | # columns=[ | COMMENT |
| LOW | components/dash-table/tests/selenium/test_bootstrap.py | 41 | # ) | COMMENT |
| LOW | components/dash-table/tests/selenium/test_bootstrap.py | 61 | # test, | COMMENT |
| LOW | benchmarks/run.py | 301 | COMMENT | |
| LOW | dash/_stream_hub.py | 81 | COMMENT | |
| LOW | dash/_stream_hub.py | 101 | COMMENT | |
| LOW | dash/dash-renderer/src/actions/dependencies.js | 1621 | // The patch itself tells us which components it created, including | COMMENT |
| LOW | dash/dash-renderer/src/observers/requestSlot.ts | 1 | import {isWebSocketAvailable, isWebSocketEnabled} from '../utils/workerClient'; | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | components/dash-table/dash-info.yaml | 19 | # For comprehensive documentation of this package's features, | COMMENT |
| MEDIUM⚡ | benchmarks/scenarios.py | 42 | # The last-rendered sentinel every layout ends with, so the harness can detect | COMMENT |
| MEDIUM | benchmarks/scenarios.py | 180 | # regression shows. `growth_ms` is that late-append time; the harness also | COMMENT |
| MEDIUM | dash/_stream_hub.py | 541 | # Something was raised *into* this thread (a test harness that | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit/development/metadata_test.py | 137 | CODE | |
| LOW | tests/background_callback/app_ctx_cookies.py | 39 | CODE | |
| LOW | dash/_callback.py | 80 | CODE | |
| LOW | dash/_callback.py | 340 | CODE | |
| LOW | dash/dash.py | 484 | CODE | |
| LOW | dash/dash.py | 1555 | CODE | |
| LOW | dash/dash.py | 2222 | CODE | |
| LOW | dash/dash.py | 2512 | CODE | |
| LOW | dash/_pages.py | 159 | CODE | |
| LOW | dash/development/component_generator.py | 40 | CODE | |
| LOW | dash/development/_py_components_generation.py | 344 | CODE | |
| LOW | dash/testing/browser.py | 42 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/integration/mcp/test_mcp_callback_behavior.py | 267 | dash_duo.wait_for_text_to_equal("#out", "Jane Doe") | CODE |
| LOW | tests/integration/mcp/test_mcp_callback_behavior.py | 281 | assert response["out"]["children"] == "Jane Doe" | CODE |
| LOW | …nents/dash-core-components/src/components/Textarea.tsx | 17 | 'placeholder', | CODE |
| LOW | …mponents/dash-core-components/src/components/Input.tsx | 30 | 'placeholder', | CODE |
| LOW | components/dash-html-components/dash-info.yaml | 1594 | htmlNobr("Lorem ipsum dolor sit amet, | CODE |
| LOW | components/dash-html-components/dash-info.yaml | 1594 | htmlNobr("Lorem ipsum dolor sit amet, | CODE |
| LOW | …nts/dash-html-components/scripts/extract-attributes.js | 26 | 'noValidate', 'nonce', 'open', 'optimum', 'pattern', 'placeholder', 'playsInline', 'poster', | CODE |
| LOW | …ents/dash-html-components/scripts/data/attributes.json | 485 | "placeholder": { | CODE |
| LOW | …ents/dash-html-components/scripts/data/attributes.json | 793 | "placeholder", | CODE |
| LOW | …ents/dash-html-components/scripts/data/attributes.json | 824 | "placeholder", | CODE |
| LOW | components/dash-table/tests/selenium/conftest.py | 394 | .get_attribute("placeholder") | CODE |
| LOW | components/dash-table/tests/selenium/conftest.py | 468 | ).get_attribute("placeholder") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | components/dash-core-components/dash_prop_typing.py | 1 | # This file is automatically loaded on build time to generate types. | COMMENT |
| MEDIUM | components/dash-table/dash_prop_typing.py | 1 | # This file is automatically loaded on build time to generate types. | COMMENT |
| MEDIUM | dash/_callback.py | 1255 | # Create a hash from the function, it will be the same always | STRING |
| MEDIUM | dash/background_callback/managers/diskcache_manager.py | 160 | # Create a new event loop for the process | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | dash/_compression.py | 18 | Decompress a gzip-compressed callback request body. The data is expected to be the raw bytes of a gzip-compres | STRING |
| HIGH | dash/backends/ws.py | 180 | Request a current prop value or a nested part of it from the client. On the event-loop path (``self._loop`` set | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/integration/callbacks/test_prevent_update.py | 37 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | dash/__init__.py | 2 | # __plotly_dash is for the "make sure you don't have a dash.py" check | COMMENT |