Apache Superset is a Data Visualization and Data Exploration Platform
This report summarizes scanner evidence for apache/superset, a Python project with 75,100 GitHub stars. SynthScan examined 1,880,806 lines of code across 8442 source files, recording 26187 pattern matches distributed across 26 syntactic categories. The legacy adjusted pattern signal is 15.4 (Elevated 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? 21824 finding(s).
Are imports declared and package/API names verified? 1747 finding(s).
Are wrappers, guards, and repeated structures necessary? 20135 finding(s).
Which changes need focused human review? 26187 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 26187 distinct pattern matches across 26 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 |
|---|---|---|---|---|
| LOW | superset-core/tests/semantic_layers/test_errors.py | 31 | def test_incomplete_error_carries_closed_reason( | CODE |
| LOW | superset-core/tests/semantic_layers/test_errors.py | 39 | def test_incomplete_error_rejects_unknown_reason() -> None: | CODE |
| LOW | superset-core/tests/semantic_layers/test_errors.py | 56 | def test_incomplete_error_survives_serialization( | CODE |
| LOW | superset-core/tests/semantic_layers/test_types.py | 22 | def test_dimension_metadata_is_not_part_of_identity() -> None: | CODE |
| LOW | superset-core/tests/semantic_layers/test_types.py | 42 | def test_metric_metadata_is_not_part_of_identity() -> None: | CODE |
| LOW | superset-core/tests/semantic_layers/test_types.py | 66 | def test_metric_accepts_superset_presentation_fields() -> None: | CODE |
| LOW | superset-core/tests/semantic_layers/test_types.py | 80 | def test_dimension_accepts_superset_presentation_fields() -> None: | CODE |
| LOW | superset-core/tests/semantic_layers/test_types.py | 91 | def test_metadata_defaults_are_not_shared() -> None: | CODE |
| LOW | …erset-core/src/superset_core/semantic_layers/config.py | 25 | def build_configuration_schema( | CODE |
| LOW | superset-core/src/superset_core/semantic_layers/daos.py | 67 | def validate_update_uniqueness(cls, layer_uuid: str, name: str) -> bool: | CODE |
| LOW | superset-core/src/superset_core/semantic_layers/daos.py | 137 | def validate_update_uniqueness( | CODE |
| LOW | superset-core/src/superset_core/semantic_layers/view.py | 58 | def validate_selection_version(self, version: object) -> None: | CODE |
| LOW | superset-core/src/superset_core/semantic_layers/view.py | 151 | def get_compatible_dimensions( | CODE |
| LOW | …perset-core/src/superset_core/semantic_layers/layer.py | 43 | def supports_metadata_refresh(cls, configuration: dict[str, Any]) -> bool: | CODE |
| LOW | tests/conftest.py | 79 | def pandas_loader_configuration( | CODE |
| LOW | tests/unit_tests/conftest.py | 86 | def _preload_clock_reading_drivers() -> None: | CODE |
| LOW | tests/unit_tests/conftest.py | 235 | def test_your_feature_enabled(self): | STRING |
| LOW | tests/unit_tests/conftest.py | 239 | def test_your_feature_disabled(self): | STRING |
| LOW | tests/unit_tests/test_realtime_publish.py | 31 | def test_channel_resolves_callable_once() -> None: | CODE |
| LOW | tests/unit_tests/test_realtime_publish.py | 67 | def test_no_backend_needs_no_app_context() -> None: | CODE |
| LOW | tests/unit_tests/test_realtime_publish.py | 80 | def test_task_manager_shares_resolved_channel() -> None: | CODE |
| LOW | tests/unit_tests/test_realtime_publish.py | 100 | def test_channel_resolves_callable_once_under_concurrency() -> None: | CODE |
| LOW | tests/unit_tests/core_tests.py | 65 | def test_get_metric_name_saved_metric(): | CODE |
| LOW | tests/unit_tests/core_tests.py | 70 | def test_get_metric_name_adhoc(): | CODE |
| LOW | tests/unit_tests/core_tests.py | 93 | def test_get_metric_name_invalid_metric(): | CODE |
| LOW | tests/unit_tests/core_tests.py | 135 | def test_get_column_name_physical_column(): | CODE |
| LOW | tests/unit_tests/core_tests.py | 140 | def test_get_column_name_adhoc(): | CODE |
| LOW | tests/unit_tests/core_tests.py | 164 | def test_get_column_name_invalid_metric(): | CODE |
| LOW⚡ | tests/unit_tests/core_tests.py | 178 | def test_get_time_filter_status_time_col(): | CODE |
| LOW⚡ | tests/unit_tests/core_tests.py | 186 | def test_get_time_filter_status_time_range(): | CODE |
| LOW⚡ | tests/unit_tests/core_tests.py | 194 | def test_get_time_filter_status_time_grain(): | CODE |
| LOW⚡ | tests/unit_tests/core_tests.py | 202 | def test_get_time_filter_status_no_temporal_col(): | CODE |
| LOW | tests/unit_tests/core_tests.py | 243 | def test_split_adhoc_filters_joins_sql_expressions(): | CODE |
| LOW | tests/unit_tests/core_tests.py | 264 | def test_split_adhoc_filters_preserves_jinja_templates(): | CODE |
| LOW | tests/unit_tests/core_tests.py | 280 | def test_split_adhoc_filters_terminates_inline_comments(): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 29 | def restore_schema_init_fields(): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 41 | def test_patch_marshmallow_for_flask_appbuilder_applies_patch(self): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 52 | def test_patch_functionality_with_real_schema_creation(self): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 66 | def test_patch_handles_schema_with_no_fields(self): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 76 | def test_patch_pre_stubs_missing_fab_fields_before_initialization(self): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 101 | def test_raw_field_creation_and_configuration(self): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 110 | def test_schema_declared_fields_manipulation(self): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 133 | def test_flask_appbuilder_field_names_list(self): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 151 | def test_patch_function_is_callable(self): | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 161 | def test_marshmallow_schema_basic_functionality(self): | CODE |
| LOW | tests/unit_tests/test_mcp_simple_proxy.py | 26 | def test_simple_proxy_builds_and_runs() -> None: | CODE |
| LOW⚡ | tests/unit_tests/jinja_context_test.py | 123 | def test_filter_values_default() -> None: | CODE |
| LOW⚡ | tests/unit_tests/jinja_context_test.py | 132 | def test_filter_values_remove_not_present() -> None: | CODE |
| LOW⚡ | tests/unit_tests/jinja_context_test.py | 141 | def test_filter_values_no_default() -> None: | CODE |
| LOW⚡ | tests/unit_tests/jinja_context_test.py | 149 | def test_get_filters_adhoc_filters() -> None: | CODE |
| LOW⚡ | tests/unit_tests/jinja_context_test.py | 646 | def test_url_param_escaped_request_args() -> None: | CODE |
| LOW⚡ | tests/unit_tests/jinja_context_test.py | 656 | def test_url_param_unescaped_request_args() -> None: | CODE |
| LOW⚡ | tests/unit_tests/jinja_context_test.py | 665 | def test_url_param_postgres_backslash_preserved() -> None: | CODE |
| LOW | tests/unit_tests/jinja_context_test.py | 60 | def test_filter_values_adhoc_filters() -> None: | CODE |
| LOW | tests/unit_tests/jinja_context_test.py | 107 | def test_filter_values_extra_filters() -> None: | CODE |
| LOW | tests/unit_tests/jinja_context_test.py | 226 | def test_get_filters_is_null_operator() -> None: | CODE |
| LOW | tests/unit_tests/jinja_context_test.py | 256 | def test_get_filters_remove_not_present() -> None: | CODE |
| LOW | tests/unit_tests/jinja_context_test.py | 265 | def test_get_filters_query_context_filters() -> None: | CODE |
| LOW | tests/unit_tests/jinja_context_test.py | 281 | def test_get_filters_query_context_filters_remove_filter() -> None: | CODE |
| LOW | tests/unit_tests/jinja_context_test.py | 296 | def test_get_filters_query_context_filters_is_null() -> None: | CODE |
| 17414 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | docker-compose-image-tag.yml | 18 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker-compose-image-tag.yml | 26 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 89 | # -------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 93 | # -------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 593 | # -------------------------------------------------------------- | COMMENT |
| MEDIUM | pyproject.toml | 599 | # -------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker-compose-non-dev.yml | 18 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker-compose-non-dev.yml | 26 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker-compose-light.yml | 18 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker-compose-light.yml | 61 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 18 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker-compose.yml | 26 | # ----------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/docker-entrypoint-initdb.d/examples-init.sh | 20 | # ------------------------------------------------------------------------ | COMMENT |
| MEDIUM | docker/docker-entrypoint-initdb.d/examples-init.sh | 23 | # ------------------------------------------------------------------------ | COMMENT |
| MEDIUM | superset-core/src/superset_core/extensions/types.py | 87 | # ============================================================================= | COMMENT |
| MEDIUM | superset-core/src/superset_core/extensions/types.py | 89 | # ============================================================================= | COMMENT |
| MEDIUM | superset-core/src/superset_core/extensions/types.py | 114 | # ============================================================================= | COMMENT |
| MEDIUM | superset-core/src/superset_core/extensions/types.py | 116 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 64 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 104 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 106 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 140 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 142 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 182 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 184 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 219 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 221 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 253 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_sqllab_error_stacktrace.py | 255 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_sqllab_error_stacktrace.py | 47 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_sqllab_error_stacktrace.py | 49 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 477 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 484 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 619 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 621 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 653 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 655 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 729 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 731 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 813 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 815 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 51 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 115 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 117 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 238 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 249 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 758 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 760 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/tasks/test_thumbnails.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/tasks/test_thumbnails.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/tasks/test_thumbnails.py | 68 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/tasks/test_thumbnails.py | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/tasks/test_timeout.py | 114 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/unit_tests/tasks/test_timeout.py | 116 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/unit_tests/tasks/test_timeout.py | 197 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/unit_tests/tasks/test_timeout.py | 199 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/unit_tests/tasks/test_timeout.py | 460 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | tests/unit_tests/tasks/test_timeout.py | 462 | # ============================================================================= | COMMENT |
| 859 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .asf.yaml | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | docker-compose-image-tag.yml | 1 | # | COMMENT |
| LOW | pytest.ini | 1 | # | COMMENT |
| LOW | .pre-commit-config.yaml | 1 | # | COMMENT |
| LOW | .fossa.yml | 1 | # | COMMENT |
| LOW | pyproject.toml | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | pyproject.toml | 141 | # was archived 2026-05-16. Both 1.17.0 and 1.17.1 support SQLAlchemy 1.4/2.0. | COMMENT |
| LOW | pyproject.toml | 181 | # SQLAlchemy ~1.4.7 upstream, no SQLAlchemy 2.0 work. See | COMMENT |
| LOW | .grype.yaml | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | .grype.yaml | 21 | # The image bundles this project's own dev build as the "apache-superset" | COMMENT |
| LOW | lintconf.yaml | 1 | # | COMMENT |
| LOW | setup.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | docker-compose-non-dev.yml | 1 | # | COMMENT |
| LOW | docker-compose-light.yml | 1 | # | COMMENT |
| LOW | docker-compose-light.yml | 21 | # | COMMENT |
| LOW | docker-compose-light.yml | 41 | # | COMMENT |
| LOW | docker-compose.yml | 1 | # | COMMENT |
| LOW | docker-compose.yml | 141 | depends_on: | COMMENT |
| LOW | superset_text.yml | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset_text.yml | 21 | # DB_IMAGES: | COMMENT |
| LOW | docker/frontend-mem-nag.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/tag_latest_release.sh | 1 | #! /bin/bash | COMMENT |
| LOW | docker/docker-bootstrap.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/docker-healthcheck.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/apt-install.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/docker-pytest-entrypoint.sh | 1 | #!/bin/bash | COMMENT |
| LOW | docker/pip-install.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/docker-init.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/docker-frontend.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/pythonpath_dev/superset_config_docker_light.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | docker/pythonpath_dev/superset_config_docker_light.py | 61 | # just turn it off. | COMMENT |
| LOW | docker/pythonpath_dev/superset_config.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | docker/pythonpath_dev/superset_test_config_light.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | docker/docker-entrypoint-initdb.d/examples-init.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/entrypoints/run-server.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/entrypoints/run-websocket.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docker/entrypoints/run-websocket.sh | 21 | # official image. Run it with: | COMMENT |
| LOW | docker/entrypoints/docker-ci.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | superset-core/pyproject.toml | 1 | COMMENT | |
| LOW | superset-core/tests/semantic_layers/test_errors.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/tests/semantic_layers/test_types.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/__init__.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/tasks/models.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/tasks/subscription.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/tasks/daos.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/tasks/__init__.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/tasks/types.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/tasks/decorators.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | …erset-core/src/superset_core/semantic_layers/config.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | …set-core/src/superset_core/semantic_layers/metadata.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | …erset-core/src/superset_core/semantic_layers/models.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/semantic_layers/daos.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | …set-core/src/superset_core/semantic_layers/__init__.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | …perset-core/src/superset_core/semantic_layers/types.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/semantic_layers/view.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | …perset-core/src/superset_core/semantic_layers/layer.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | …erset-core/src/superset_core/semantic_layers/errors.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | …t-core/src/superset_core/semantic_layers/decorators.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/queries/models.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| LOW | superset-core/src/superset_core/queries/query.py | 1 | # Licensed to the Apache Software Foundation (ASF) under one | COMMENT |
| 3203 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | superset-core/src/superset_core/tasks/daos.py | 0 | abstract keyvalue model interface. host implementations will replace this class during initialization with concrete impl | STRING |
| HIGH | superset-core/src/superset_core/queries/models.py | 0 | abstract keyvalue model interface. host implementations will replace this class during initialization with concrete impl | STRING |
| HIGH | superset-core/src/superset_core/queries/daos.py | 0 | abstract keyvalue model interface. host implementations will replace this class during initialization with concrete impl | STRING |
| HIGH | superset-core/src/superset_core/common/models.py | 0 | abstract keyvalue model interface. host implementations will replace this class during initialization with concrete impl | STRING |
| HIGH | superset-core/src/superset_core/common/daos.py | 0 | abstract keyvalue model interface. host implementations will replace this class during initialization with concrete impl | STRING |
| HIGH | tests/unit_tests/pandas_postprocessing/test_cum.py | 0 | count_metric sum_metric country uk us uk us dttm 2019-01-01 1 2 5 6 2019-01-02 3 4 7 8 | STRING |
| HIGH | tests/unit_tests/pandas_postprocessing/test_rolling.py | 0 | count_metric sum_metric country uk us uk us dttm 2019-01-01 1 2 5 6 2019-01-02 3 4 7 8 | STRING |
| HIGH | tests/unit_tests/pandas_postprocessing/test_compare.py | 0 | count_metric sum_metric country uk us uk us dttm 2019-01-01 1 2 5 6 2019-01-02 3 4 7 8 | STRING |
| HIGH | …it_tests/datasets/commands/importers/v1/import_test.py | 0 | non-overwrite re-import of a soft-deleted uuid is implicitly a restore-and-update: the user is bringing the dashboard ba | STRING |
| HIGH | …unit_tests/charts/commands/importers/v1/import_test.py | 0 | non-overwrite re-import of a soft-deleted uuid is implicitly a restore-and-update: the user is bringing the dashboard ba | STRING |
| HIGH | …_tests/dashboards/commands/importers/v1/import_test.py | 0 | non-overwrite re-import of a soft-deleted uuid is implicitly a restore-and-update: the user is bringing the dashboard ba | STRING |
| HIGH | …it_tests/datasets/commands/importers/v1/import_test.py | 0 | non-overwrite re-import that would resurrect a soft-deleted dashboard must respect editorship: a non-editor without admi | STRING |
| HIGH | …unit_tests/charts/commands/importers/v1/import_test.py | 0 | non-overwrite re-import that would resurrect a soft-deleted dashboard must respect editorship: a non-editor without admi | STRING |
| HIGH | …_tests/dashboards/commands/importers/v1/import_test.py | 0 | non-overwrite re-import that would resurrect a soft-deleted dashboard must respect editorship: a non-editor without admi | STRING |
| HIGH | …it_tests/datasets/commands/importers/v1/import_test.py | 0 | an *active* (not soft-deleted) dashboard re-imported with overwrite=true by a caller without can_write must fall through | STRING |
| HIGH | …unit_tests/charts/commands/importers/v1/import_test.py | 0 | an *active* (not soft-deleted) dashboard re-imported with overwrite=true by a caller without can_write must fall through | STRING |
| HIGH | …_tests/dashboards/commands/importers/v1/import_test.py | 0 | an *active* (not soft-deleted) dashboard re-imported with overwrite=true by a caller without can_write must fall through | STRING |
| HIGH | …sts/unit_tests/mcp_service/test_dashboard_scope_sql.py | 0 | let the tool worker thread use the ``session`` built by this test. | STRING |
| HIGH | …mcp_service/dataset/tool/test_update_dataset_metric.py | 0 | let the tool worker thread use the ``session`` built by this test. | STRING |
| HIGH | …_service/dataset/tool/test_dataset_metric_mutations.py | 0 | let the tool worker thread use the ``session`` built by this test. | STRING |
| HIGH | …nit_tests/mcp_service/catalog/tool/test_get_catalog.py | 0 | let the tool worker thread use the ``session`` built by this test. | STRING |
| HIGH | …_tests/mcp_service/chart/test_live_chart_datasource.py | 0 | let the tool worker thread use the ``session`` built by this test. | STRING |
| HIGH | …_service/dashboard/tool/test_get_dashboard_datasets.py | 0 | let the tool worker thread use the ``session`` built by this test. | STRING |
| HIGH | tests/unit_tests/mcp_service/rls/tool/test_rls_tools.py | 0 | schema-level pagination boundary tests — ``page`` is positiveint and ``page_size`` is constrained to (0, max_page_size]. | STRING |
| HIGH | …tests/mcp_service/database/tool/test_database_tools.py | 0 | schema-level pagination boundary tests — ``page`` is positiveint and ``page_size`` is constrained to (0, max_page_size]. | STRING |
| HIGH | …ts/unit_tests/mcp_service/user/tool/test_user_tools.py | 0 | schema-level pagination boundary tests — ``page`` is positiveint and ``page_size`` is constrained to (0, max_page_size]. | STRING |
| HIGH | tests/unit_tests/mcp_service/tag/tool/test_tag_tools.py | 0 | schema-level pagination boundary tests — ``page`` is positiveint and ``page_size`` is constrained to (0, max_page_size]. | STRING |
| HIGH | tests/unit_tests/mcp_service/rls/tool/test_rls_tools.py | 0 | page_size=0 is rejected before the tool body runs, surfacing as a structured toolerror rather than a raw 500. | STRING |
| HIGH | …tests/mcp_service/database/tool/test_database_tools.py | 0 | page_size=0 is rejected before the tool body runs, surfacing as a structured toolerror rather than a raw 500. | STRING |
| HIGH | …ts/unit_tests/mcp_service/user/tool/test_user_tools.py | 0 | page_size=0 is rejected before the tool body runs, surfacing as a structured toolerror rather than a raw 500. | STRING |
| HIGH | tests/unit_tests/mcp_service/tag/tool/test_tag_tools.py | 0 | page_size=0 is rejected before the tool body runs, surfacing as a structured toolerror rather than a raw 500. | STRING |
| HIGH | tests/unit_tests/mcp_service/rls/tool/test_rls_tools.py | 0 | a page far past the last page returns an empty list, not an error. | STRING |
| HIGH | …tests/mcp_service/database/tool/test_database_tools.py | 0 | a page far past the last page returns an empty list, not an error. | STRING |
| HIGH | …ts/unit_tests/mcp_service/user/tool/test_user_tools.py | 0 | a page far past the last page returns an empty list, not an error. | STRING |
| HIGH | tests/unit_tests/mcp_service/tag/tool/test_tag_tools.py | 0 | a page far past the last page returns an empty list, not an error. | STRING |
| HIGH | …ests/mcp_service/semantic_layer/tool/test_get_table.py | 0 | the public union preserves an exact error and bounds the next byte. | STRING |
| HIGH | …t_tests/mcp_service/dataset/tool/test_query_dataset.py | 0 | the public union preserves an exact error and bounds the next byte. | STRING |
| HIGH | …it_tests/mcp_service/chart/tool/test_get_chart_data.py | 0 | the public union preserves an exact error and bounds the next byte. | STRING |
| HIGH | …ests/mcp_service/semantic_layer/tool/test_get_table.py | 0 | a dynamically amplified command error cannot bypass the finalizer. | STRING |
| HIGH | …t_tests/mcp_service/dataset/tool/test_query_dataset.py | 0 | a dynamically amplified command error cannot bypass the finalizer. | STRING |
| HIGH | …it_tests/mcp_service/chart/tool/test_get_chart_data.py | 0 | a dynamically amplified command error cannot bypass the finalizer. | STRING |
| HIGH | …ests/mcp_service/semantic_layer/tool/test_get_table.py | 0 | uncaught producer failures become one finalized, fixed-schema error. | STRING |
| HIGH | …t_tests/mcp_service/dataset/tool/test_query_dataset.py | 0 | uncaught producer failures become one finalized, fixed-schema error. | STRING |
| HIGH | …it_tests/mcp_service/chart/tool/test_get_chart_data.py | 0 | uncaught producer failures become one finalized, fixed-schema error. | STRING |
| HIGH | …ests/mcp_service/semantic_layer/tool/test_get_table.py | 0 | unexpected inner-stage failures reach the fixed public containment layer. | STRING |
| HIGH | …t_tests/mcp_service/dataset/tool/test_query_dataset.py | 0 | unexpected inner-stage failures reach the fixed public containment layer. | STRING |
| HIGH | …it_tests/mcp_service/chart/tool/test_get_chart_data.py | 0 | unexpected inner-stage failures reach the fixed public containment layer. | STRING |
| HIGH | …ests/mcp_service/semantic_layer/tool/test_get_table.py | 0 | containment remains structured when its finalizer or logger fails. | STRING |
| HIGH | …t_tests/mcp_service/dataset/tool/test_query_dataset.py | 0 | containment remains structured when its finalizer or logger fails. | STRING |
| HIGH | …it_tests/mcp_service/chart/tool/test_get_chart_data.py | 0 | containment remains structured when its finalizer or logger fails. | STRING |
| HIGH | …ests/mcp_service/semantic_layer/tool/test_get_table.py | 0 | the public containment boundary catches exception, not baseexception. | STRING |
| HIGH | …t_tests/mcp_service/dataset/tool/test_query_dataset.py | 0 | the public containment boundary catches exception, not baseexception. | STRING |
| HIGH | …it_tests/mcp_service/chart/tool/test_get_chart_data.py | 0 | the public containment boundary catches exception, not baseexception. | STRING |
| HIGH | …ests/mcp_service/semantic_layer/tool/test_get_table.py | 0 | errors when neither dataset_id nor view_id is provided. | STRING |
| HIGH | …/semantic_layer/tool/test_get_compatible_dimensions.py | 0 | errors when neither dataset_id nor view_id is provided. | STRING |
| HIGH | …ice/semantic_layer/tool/test_get_compatible_metrics.py | 0 | errors when neither dataset_id nor view_id is provided. | STRING |
| HIGH | …ests/mcp_service/semantic_layer/tool/test_get_table.py | 0 | errors when both dataset_id and view_id are provided. | STRING |
| HIGH | …/semantic_layer/tool/test_get_compatible_dimensions.py | 0 | errors when both dataset_id and view_id are provided. | STRING |
| HIGH | …ice/semantic_layer/tool/test_get_compatible_metrics.py | 0 | errors when both dataset_id and view_id are provided. | STRING |
| HIGH | …ests/mcp_service/semantic_layer/tool/test_get_table.py | 0 | errors when the user lacks data-model metadata access. | STRING |
| 292 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/pythonpath_dev/superset_config_docker_light.py | 25 | CODE | |
| LOW | docker/pythonpath_dev/superset_config.py | 147 | CODE | |
| LOW | docker/pythonpath_dev/superset_test_config_light.py | 26 | CODE | |
| LOW | superset-core/src/superset_core/tasks/models.py | 28 | CODE | |
| LOW | superset-core/src/superset_core/tasks/models.py | 37 | CODE | |
| LOW | superset-core/src/superset_core/tasks/subscription.py | 59 | CODE | |
| LOW | superset-core/src/superset_core/tasks/subscription.py | 65 | CODE | |
| LOW | superset-core/src/superset_core/tasks/types.py | 18 | CODE | |
| LOW | superset-core/src/superset_core/tasks/types.py | 27 | CODE | |
| LOW | superset-core/src/superset_core/tasks/decorators.py | 18 | CODE | |
| LOW | superset-core/src/superset_core/tasks/decorators.py | 25 | CODE | |
| LOW | superset-core/src/superset_core/tasks/decorators.py | 26 | CODE | |
| LOW | …erset-core/src/superset_core/semantic_layers/config.py | 18 | CODE | |
| LOW | …set-core/src/superset_core/semantic_layers/metadata.py | 20 | CODE | |
| LOW | …erset-core/src/superset_core/semantic_layers/models.py | 32 | CODE | |
| LOW | superset-core/src/superset_core/semantic_layers/daos.py | 32 | CODE | |
| LOW | …perset-core/src/superset_core/semantic_layers/types.py | 18 | CODE | |
| LOW | superset-core/src/superset_core/semantic_layers/view.py | 18 | CODE | |
| LOW | …perset-core/src/superset_core/semantic_layers/layer.py | 18 | CODE | |
| LOW | …perset-core/src/superset_core/semantic_layers/layer.py | 26 | CODE | |
| LOW | …erset-core/src/superset_core/semantic_layers/errors.py | 19 | CODE | |
| LOW | …t-core/src/superset_core/semantic_layers/decorators.py | 42 | CODE | |
| LOW | superset-core/src/superset_core/queries/models.py | 28 | CODE | |
| LOW | superset-core/src/superset_core/queries/query.py | 35 | CODE | |
| LOW | superset-core/src/superset_core/queries/types.py | 25 | CODE | |
| LOW | superset-core/src/superset_core/extensions/types.py | 26 | CODE | |
| LOW | superset-core/src/superset_core/extensions/context.py | 42 | CODE | |
| LOW | superset-core/src/superset_core/extensions/context.py | 47 | CODE | |
| LOW | superset-core/src/superset_core/extensions/context.py | 48 | CODE | |
| LOW | superset-core/src/superset_core/extensions/context.py | 49 | CODE | |
| LOW | …et-core/src/superset_core/extensions/storage/models.py | 31 | CODE | |
| LOW | …et-core/src/superset_core/extensions/storage/models.py | 39 | CODE | |
| LOW | …-core/src/superset_core/extensions/storage/__init__.py | 74 | CODE | |
| LOW | …-core/src/superset_core/extensions/storage/__init__.py | 74 | CODE | |
| LOW | …-core/src/superset_core/extensions/storage/__init__.py | 74 | CODE | |
| LOW | …-core/src/superset_core/extensions/storage/__init__.py | 74 | CODE | |
| LOW | superset-core/src/superset_core/common/models.py | 33 | CODE | |
| LOW | superset-core/src/superset_core/common/models.py | 43 | CODE | |
| LOW | superset-core/src/superset_core/common/models.py | 43 | CODE | |
| LOW | superset-core/src/superset_core/common/models.py | 43 | CODE | |
| LOW | superset-core/src/superset_core/rest_api/decorators.py | 36 | CODE | |
| LOW | tests/conftest.py | 26 | CODE | |
| LOW | tests/unit_tests/conftest.py | 112 | CODE | |
| LOW | tests/unit_tests/jinja_context_test.py | 18 | CODE | |
| LOW | tests/unit_tests/legacy_tests.py | 23 | CODE | |
| LOW | tests/unit_tests/test_marshmallow4_compat.py | 157 | CODE | |
| LOW | tests/unit_tests/test_sqllab_error_stacktrace.py | 43 | CODE | |
| LOW | …s/unit_tests/middleware/test_legacy_prefix_redirect.py | 35 | CODE | |
| LOW | …sts/unit_tests/soft_delete/test_restore_purge_hoist.py | 19 | CODE | |
| LOW | tests/unit_tests/databases/error_provenance_test.py | 18 | CODE | |
| LOW | tests/unit_tests/databases/api_test.py | 20 | CODE | |
| LOW | tests/unit_tests/tasks/test_async_queries.py | 31 | CODE | |
| LOW | tests/unit_tests/tasks/test_export_dashboard_excel.py | 17 | CODE | |
| LOW | …sts/unit_tests/tasks/test_version_history_retention.py | 29 | CODE | |
| LOW | tests/unit_tests/tasks/test_native_filter_cache.py | 17 | CODE | |
| LOW | tests/unit_tests/coordination/test_service.py | 17 | CODE | |
| LOW | …_tests/security/test_superset_user_api_subject_sync.py | 33 | CODE | |
| LOW | …_tests/security/test_superset_user_api_subject_sync.py | 46 | CODE | |
| LOW | …nit_tests/security/test_embedded_guest_chart_access.py | 26 | CODE | |
| LOW | …s/unit_tests/security/test_guest_token_empty_filter.py | 30 | CODE | |
| 1298 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ore/src/superset_core/extensions/storage/persistent.py | 30 | - Shared (global): (extension_id, null, key) | STRING |
| HIGH | tests/unit_tests/sql_lab_test.py | 561 | app_context.push() | CODE |
| HIGH | tests/unit_tests/sql_lab_test.py | 691 | app_context.push() | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_cum.py | 39 | assert _timeseries_df.equals(timeseries_df) | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_cum.py | 196 | assert cum_and_flat_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_cum.py | 242 | assert flat_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_rolling.py | 40 | assert _timeseries_df.equals(timeseries_df) | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_rolling.py | 178 | assert flat_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_rolling.py | 229 | assert flat_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_pivot.py | 588 | client's ``if (acc === null) return null`` division-by-zero guard.""" | STRING |
| HIGH⚡ | tests/unit_tests/pandas_postprocessing/test_resample.py | 328 | assert post_df.index.equals( | CODE |
| HIGH⚡ | tests/unit_tests/pandas_postprocessing/test_resample.py | 506 | assert post_df.index.equals(pd.date_range("2019-01-01", "2019-01-04", freq="1D")) | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_resample.py | 37 | assert _timeseries_df.equals(timeseries_df) | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_resample.py | 52 | assert post_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_resample.py | 75 | assert post_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_resample.py | 98 | assert post_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_resample.py | 123 | assert post_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_resample.py | 197 | assert flat_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_resample.py | 443 | assert post_df.index.equals(pd.date_range("2018-12-31", "2019-01-03", freq="1D")) | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_resample.py | 562 | assert post_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_sort.py | 49 | assert df.equals(timeseries_df) | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_rename.py | 34 | assert _categories_df.equals(categories_df) | CODE |
| HIGH⚡ | tests/unit_tests/pandas_postprocessing/test_rename.py | 54 | assert not new_categories_df.equals(categories_df) | CODE |
| HIGH⚡ | tests/unit_tests/pandas_postprocessing/test_rename.py | 67 | assert _categories_df_inplaced.equals(_categories_df) | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_compare.py | 36 | assert _timeseries_df2.equals(timeseries_df2) | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_compare.py | 54 | assert post_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_compare.py | 74 | assert post_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_compare.py | 100 | assert post_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_compare.py | 128 | assert post_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_compare.py | 170 | assert flat_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_compare.py | 234 | assert flat_df.equals( | CODE |
| HIGH | tests/unit_tests/pandas_postprocessing/test_compare.py | 286 | assert flat_df.equals( | CODE |
| HIGH | tests/unit_tests/databases/schema_tests.py | 491 | (e.g. {"metadata_cache_timeout": {"schema_cache_timeout": null}}). Import | STRING |
| HIGH | tests/unit_tests/databases/schema_tests.py | 602 | JSON but not a mapping (int, null, list, bool, string), instead of | STRING |
| HIGH | tests/unit_tests/databases/schema_tests.py | 623 | JSON but not a mapping (int, null, list, bool, string), instead of letting | STRING |
| HIGH | …it_tests/datasets/commands/importers/v1/import_test.py | 198 | assert sqla_table.metrics[0].extra == '{"warning_markdown": null}' | CODE |
| HIGH | …it_tests/datasets/commands/importers/v1/import_test.py | 1369 | assert sqla_table.metrics[0].extra == '{"warning_markdown": null}' | CODE |
| HIGH | …it_tests/datasets/commands/importers/v1/import_test.py | 1431 | "extra": '{"warning_markdown": null}', | CODE |
| HIGH | …it_tests/datasets/commands/importers/v1/import_test.py | 1459 | assert sqla_table.metrics[0].extra == '{"warning_markdown": null}' | CODE |
| HIGH | tests/unit_tests/semantic_layers/api_test.py | 2774 | # An unset description must come back as null, not be omitted: the modal | COMMENT |
| HIGH⚡ | tests/unit_tests/queries/query_object_test.py | 221 | assert query_object.exec_post_processing(df).index.equals( | CODE |
| HIGH | tests/unit_tests/queries/query_object_test.py | 164 | assert query_object.exec_post_processing(df).index.equals( | CODE |
| HIGH | tests/unit_tests/queries/query_object_test.py | 196 | assert query_object.exec_post_processing(df).index.equals( | CODE |
| HIGH | tests/unit_tests/charts/test_client_processing.py | 4269 | ) # Second data row should have empty last_name (NA converted to null) | STRING |
| HIGH | tests/unit_tests/charts/test_chart_data_api.py | 107 | # A real (non-null) DATA cache backend so async is viable. | COMMENT |
| HIGH | tests/unit_tests/utils/test_screenshot_utils.py | 114 | if (error && selector.includes('alert')) return {}; | CODE |
| HIGH | tests/unit_tests/utils/test_screenshot_utils.py | 115 | return null; | CODE |
| HIGH | tests/unit_tests/utils/test_screenshot_utils.py | 157 | results.push(predicate({token, stabilityMs: 500})); | CODE |
| HIGH | tests/unit_tests/extensions/storage/test_api.py | 955 | back with value=null, but the row and its codec are still listed.""" | STRING |
| HIGH⚡ | tests/unit_tests/mcp_service/test_middleware_logging.py | 708 | '"tables": 161}], "row_count": 1, "error": null, ' | CODE |
| HIGH⚡ | tests/unit_tests/mcp_service/test_middleware_logging.py | 709 | '"error_type": null}' | CODE |
| HIGH | tests/unit_tests/mcp_service/test_middleware_logging.py | 312 | '{"success": false, "chart": null, ' | CODE |
| HIGH⚡ | tests/unit_tests/mcp_service/test_middleware_logging.py | 702 | substring (as "error_type":null). The substring check must not treat | STRING |
| HIGH⚡ | …_service/dataset/tool/test_dataset_metric_mutations.py | 123 | """Names and SQL expressions cannot be null, empty, or whitespace.""" | STRING |
| HIGH | tests/unit_tests/mcp_service/chart/test_gauge_render.py | 66 | warn: message => warnings.push(message), info() {}, debug() {}, | CODE |
| HIGH | tests/unit_tests/mcp_service/chart/test_gauge_render.py | 75 | if (item.mark?.marktype === type) target.push(item); | CODE |
| HIGH | tests/unit_tests/mcp_service/chart/test_gauge_render.py | 89 | assert(radius > arcs[0].innerRadius && radius < arcs[0].outerRadius); | CODE |
| HIGH | tests/unit_tests/mcp_service/chart/test_gauge_render.py | 90 | assert(rule.x > 0 && rule.y > 0); | CODE |
| HIGH⚡ | …t_tests/mcp_service/chart/test_treemap_completeness.py | 566 | warn: message => warnings.push(message), info() {}, debug() {}, | CODE |
| HIGH⚡ | …t_tests/mcp_service/chart/test_treemap_completeness.py | 575 | if (item.mark?.marktype === 'rect') rectangles.push(item); | CODE |
| 98 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 35 | except Exception: # pylint: disable=broad-except | CODE |
| MEDIUM | setup.py | 31 | def get_git_sha() -> str: | CODE |
| LOW | …s/unit_tests/datasets/test_datetime_format_detector.py | 63 | except Exception as ex: | CODE |
| LOW | …s/unit_tests/datasets/test_datetime_format_detector.py | 68 | except Exception as retry_ex: | CODE |
| LOW | tests/unit_tests/server/test_gunicorn_gevent_smoke.py | 117 | except Exception as ex: # noqa: BLE001 | CODE |
| LOW⚡ | tests/unit_tests/utils/test_core.py | 1923 | except Exception: | CODE |
| LOW⚡ | tests/unit_tests/utils/test_core.py | 1930 | except Exception: | CODE |
| MEDIUM | tests/unit_tests/models/core_test.py | 1199 | def worker() -> None: | CODE |
| MEDIUM | tests/unit_tests/models/core_test.py | 2536 | def thread_a() -> None: | CODE |
| MEDIUM | tests/unit_tests/models/core_test.py | 2547 | def thread_b() -> None: | CODE |
| LOW | tests/unit_tests/models/core_test.py | 1205 | except Exception as ex: # pylint: disable=broad-except | CODE |
| LOW | tests/unit_tests/models/core_test.py | 1544 | except Exception: | CODE |
| LOW | tests/unit_tests/models/core_test.py | 2541 | except Exception as ex: # pylint: disable=broad-except | CODE |
| LOW | tests/unit_tests/models/core_test.py | 2555 | except Exception as ex: # pylint: disable=broad-except | CODE |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 152 | except Exception as e: | CODE |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 193 | except Exception as e: | CODE |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 228 | except Exception as e: | CODE |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 748 | except Exception as e: | CODE |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 782 | except Exception as e: | CODE |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 866 | except Exception as e: | CODE |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 415 | except Exception as e: | STRING |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 465 | except Exception as e: | STRING |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 519 | except Exception as e: | STRING |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 572 | except Exception as e: | STRING |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 625 | except Exception as e: | STRING |
| LOW | tests/unit_tests/extensions/test_sqlalchemy.py | 676 | except Exception as e: | STRING |
| LOW | …ts/unit_tests/mcp_service/test_error_classification.py | 206 | except Exception as exc: # noqa: BLE001 | CODE |
| LOW | …ts/unit_tests/mcp_service/test_worker_metadata_pool.py | 617 | except Exception as ex: # noqa: BLE001 | CODE |
| LOW | …ts/unit_tests/mcp_service/test_worker_metadata_pool.py | 643 | except Exception: | CODE |
| LOW | …tests/commands/deletion_retention/test_purge_policy.py | 2093 | except Exception as ex: # pylint: disable=broad-except | CODE |
| LOW | tests/unit_tests/commands/dataset/update_test.py | 1046 | except Exception as e: | CODE |
| LOW | tests/unit_tests/commands/dataset/update_test.py | 1090 | except Exception as e: | CODE |
| LOW | tests/unit_tests/commands/dataset/update_test.py | 1149 | except Exception as e: | CODE |
| LOW | tests/unit_tests/commands/dataset/update_test.py | 1212 | except Exception as e: | CODE |
| LOW | tests/unit_tests/commands/dataset/update_test.py | 1253 | except Exception as e: | CODE |
| LOW | tests/unit_tests/commands/dataset/update_test.py | 1301 | except Exception as e: | CODE |
| LOW | tests/unit_tests/commands/dataset/update_test.py | 1326 | except Exception as e: | CODE |
| LOW | …ts/unit_tests/commands/explore/test_get_explore_rls.py | 120 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/unit_tests/sql/dialects/databend_tests.py | 399 | except Exception: # noqa: BLE001, S112 - wrong arity, try the next one | CODE |
| LOW | tests/unit_tests/sql/dialects/databend_tests.py | 421 | except Exception: # noqa: BLE001, S110 - the raise is the measurement | CODE |
| LOW | tests/unit_tests/sql/dialects/databend_tests.py | 428 | except Exception: # noqa: BLE001 - both refuse it, so it is not a regression | CODE |
| LOW | tests/integration_tests/conftest.py | 128 | except Exception: # noqa: S110 | CODE |
| LOW | …s/integration_tests/deletion_retention/window_tests.py | 54 | except Exception: # pylint: disable=broad-except | CODE |
| LOW | …s/integration_tests/deletion_retention/window_tests.py | 124 | except Exception: # pylint: disable=broad-except | CODE |
| LOW | tests/integration_tests/tasks/api_tests.py | 117 | except Exception: # noqa: S110 | CODE |
| LOW | tests/integration_tests/tasks/api_tests.py | 122 | except Exception: | CODE |
| LOW | …sts/integration_tests/tags/mysql_compatibility_test.py | 263 | except Exception as e: | CODE |
| LOW⚡ | …integration_tests/dashboards/test_theme_integration.py | 82 | except Exception: | CODE |
| LOW⚡ | …integration_tests/dashboards/test_theme_integration.py | 335 | except Exception: | CODE |
| MEDIUM | …/integration_tests/dashboards/superset_factory_util.py | 200 | def delete_all_inserted_dashboards(): | CODE |
| MEDIUM | …/integration_tests/dashboards/superset_factory_util.py | 264 | def delete_all_inserted_slices(): | CODE |
| MEDIUM | …/integration_tests/dashboards/superset_factory_util.py | 303 | def delete_all_inserted_tables(): | CODE |
| MEDIUM | …/integration_tests/dashboards/superset_factory_util.py | 342 | def delete_all_inserted_dbs(): | CODE |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 213 | except Exception: | CODE |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 219 | except Exception: | CODE |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 278 | except Exception: | CODE |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 284 | except Exception: | CODE |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 317 | except Exception: | CODE |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 323 | except Exception: | CODE |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 352 | except Exception: | CODE |
| 625 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docker/docker-init.sh | 44 | # Create an admin user | COMMENT |
| MEDIUM | docker/pythonpath_dev/superset_config.py | 18 | # This file is included in the final Docker image and SHOULD be overridden when | COMMENT |
| MEDIUM | tests/unit_tests/jinja_context_test.py | 2915 | # Create a guest token with attributes | COMMENT |
| MEDIUM | tests/unit_tests/jinja_context_test.py | 2969 | # Create a guest token without attributes | COMMENT |
| MEDIUM | tests/unit_tests/jinja_context_test.py | 3011 | # Create a guest token with empty attributes | COMMENT |
| MEDIUM | tests/unit_tests/jinja_context_test.py | 3054 | # Create a guest token with null attributes | COMMENT |
| MEDIUM | tests/unit_tests/jinja_context_test.py | 3100 | # Create a real GuestUser object with attributes | COMMENT |
| MEDIUM | tests/unit_tests/connectors/sqla/models_test.py | 1309 | # Create a Postgres-like engine to test proper quoting | COMMENT |
| MEDIUM | tests/unit_tests/connectors/sqla/models_test.py | 1346 | # Create a PostgreSQL engine (doesn't support cross-catalog queries) | COMMENT |
| MEDIUM | tests/unit_tests/pandas_postprocessing/test_compare.py | 194 | # Define a non-lexicographical column order | COMMENT |
| MEDIUM | tests/unit_tests/databases/api_test.py | 808 | # Create a mock object | COMMENT |
| MEDIUM | tests/unit_tests/databases/api_test.py | 2709 | # Create a database with a non-default configuration_method | COMMENT |
| MEDIUM | tests/unit_tests/security/manager_test.py | 4314 | # Create a mock table where .data raises an exception if accessed | COMMENT |
| MEDIUM | tests/unit_tests/dao/tag_test.py | 150 | # Define a list of objects to tag | COMMENT |
| MEDIUM | tests/unit_tests/semantic_layers/mapper_test.py | 2354 | # Create main dataframe | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_date_parsing.py | 197 | # Create a DataFrame with string values representing dates that are | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_date_parsing.py | 202 | # Create a mock type that raises ValueError when pd.Timestamp is called on it | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_core.py | 667 | # Create a mock SQLAlchemy database object | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_core.py | 670 | # Define the table name and constraint details | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_core.py | 676 | # Create a mock table object with the same structure | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_core.py | 681 | # Create a mock for the referred_table with a name attribute | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_core.py | 685 | # Create a mock for the foreign key constraint with a name attribute | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_core.py | 710 | # Create a mock SQLAlchemy database object | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_core.py | 713 | # Define the table name and constraint details | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/test_core.py | 718 | # Create a mock table object with the same structure but no matching constraint | COMMENT |
| MEDIUM | tests/unit_tests/utils/test_core.py | 575 | # Create a DataFrame with timestamp strings | COMMENT |
| MEDIUM | tests/unit_tests/utils/test_core.py | 742 | # Create a mock for the foreign key constraint as a dictionary | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 472 | # Create a mock table for testing | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 503 | # Create a condition factory that always returns True | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 564 | # Create a mock table for testing | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 581 | # Create a condition factory that always returns False | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 627 | # Create a real table instance | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 725 | # Create a table instance | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 984 | # Create a mock template processor | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 1331 | # Create a mock template processor | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 1458 | # Create a simple query | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 1514 | # Create a simple query | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 1564 | # Create a query with GROUP BY | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 1625 | # Create a simple query | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 1670 | # Create a simple query | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 1832 | # Create a table with a temporal column | COMMENT |
| MEDIUM | tests/unit_tests/models/helpers_test.py | 1915 | # Create a mock SqlaTable with columns | COMMENT |
| MEDIUM | …it_tests/models/test_time_filter_double_application.py | 54 | # Create a virtual dataset that uses get_time_filter with | COMMENT |
| MEDIUM | …it_tests/models/test_time_filter_double_application.py | 93 | # Create a query object with a time filter | STRING |
| MEDIUM | tests/unit_tests/tags/models_test.py | 154 | # Create an existing tag | COMMENT |
| MEDIUM | tests/unit_tests/tags/commands/create_test.py | 77 | # Define a list of objects to tag | COMMENT |
| MEDIUM | tests/unit_tests/tags/commands/create_test.py | 195 | # Define a list of objects to tag | COMMENT |
| MEDIUM | tests/unit_tests/tags/commands/update_test.py | 243 | # Create a tag with multiple objects | COMMENT |
| MEDIUM | tests/unit_tests/mcp_service/chart/test_chart_utils.py | 1628 | # Create a time series chart configuration | COMMENT |
| MEDIUM | …it_tests/mcp_service/chart/tool/test_generate_chart.py | 364 | # Create a validation error with the correct structure | COMMENT |
| MEDIUM⚡ | tests/unit_tests/common/test_query_context_processor.py | 735 | # Create a dataframe for testing | COMMENT |
| MEDIUM⚡ | tests/unit_tests/common/test_query_context_processor.py | 744 | # Create a properly mocked datasource | COMMENT |
| MEDIUM⚡ | tests/unit_tests/common/test_query_context_processor.py | 1596 | # Create a mock query context | COMMENT |
| MEDIUM⚡ | tests/unit_tests/common/test_query_context_processor.py | 1603 | # Create a mock datasource | COMMENT |
| MEDIUM | tests/unit_tests/common/test_query_context_processor.py | 81 | # Create a processor instance | COMMENT |
| MEDIUM | tests/unit_tests/common/test_query_context_processor.py | 670 | # Create a dataframe for testing | COMMENT |
| MEDIUM | tests/unit_tests/common/test_query_context_processor.py | 1434 | # Create a mock datasource | COMMENT |
| MEDIUM | tests/unit_tests/common/test_query_context_processor.py | 1617 | # Create a query object with unsanitized where clause | COMMENT |
| MEDIUM | tests/unit_tests/common/test_query_context_processor.py | 1684 | # Create a mock datasource | COMMENT |
| MEDIUM | tests/unit_tests/db_engine_specs/test_snowflake.py | 440 | # Create a mock SQLAlchemy column | COMMENT |
| 140 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | superset-core/src/superset_core/tasks/models.py | 91 | def set_payload(self, data: dict[str, Any]) -> None: | CODE |
| LOW | superset-core/src/superset_core/tasks/models.py | 138 | def update_properties(self, updates: "TaskProperties") -> None: | CODE |
| LOW | superset-core/src/superset_core/tasks/models.py | 156 | def update_task_private(self, updates: dict[str, Any]) -> None: | CODE |
| LOW | tests/unit_tests/security/test_password_change.py | 274 | def _set_user() -> None: # pylint: disable=unused-variable | CODE |
| LOW | tests/unit_tests/security/semantic_guest_rls_test.py | 52 | def set_guest(rules: list[GuestTokenRlsRule]) -> None: | CODE |
| LOW⚡ | tests/unit_tests/dao/dataset_rls_test.py | 23 | def _setup_tables(session: Session) -> None: | CODE |
| LOW | tests/unit_tests/models/test_virtual_dataset_format.py | 73 | def _set_virtual_sql(datasource: MagicMock, sql: str) -> None: | CODE |
| LOW | tests/unit_tests/extensions/storage/conftest.py | 62 | def set_user(user_id: int) -> None: | CODE |
| LOW | tests/unit_tests/mcp_service/rls/tool/test_rls_tools.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | …tests/mcp_service/database/tool/test_database_tools.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | …t_tests/mcp_service/dataset/tool/test_dataset_tools.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …mcp_service/saved_query/tool/test_saved_query_tools.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …e/annotation_layer/tool/test_annotation_layer_tools.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | …mcp_service/explore/tool/test_generate_explore_link.py | 152 | logger = logging.getLogger(__name__) | CODE |
| LOW | …p_service/dashboard/tool/test_manage_native_filters.py | 54 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …dashboard/tool/test_add_chart_to_existing_dashboard.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | …sts/mcp_service/dashboard/tool/test_dashboard_tools.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | …cp_service/dashboard/tool/test_dashboard_generation.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …ice/dashboard/tool/test_remove_chart_from_dashboard.py | 53 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …mcp_service/dashboard/tool/test_duplicate_dashboard.py | 52 | logger = logging.getLogger(__name__) | CODE |
| LOW | …nit_tests/mcp_service/sql_lab/tool/test_execute_sql.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | …nit_tests/mcp_service/report/tool/test_report_tools.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | …/unit_tests/mcp_service/query/tool/test_query_tools.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/unit_tests/mcp_service/tag/tool/test_tag_tools.py | 32 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/unit_tests/commands/report/update_test.py | 70 | def _setup_mocks(mocker: MockerFixture, model: Mock) -> None: | CODE |
| LOW | tests/unit_tests/sql/execution/test_executor.py | 894 | def set_query_id(query: Any) -> None: | CODE |
| LOW | tests/integration_tests/core_tests.py | 74 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/integration_tests/cli_tests.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | tests/integration_tests/email_tests.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | …egration_tests/deletion_retention/prune_audit_tests.py | 628 | def _set_session_isolation(self, level: str) -> None: | CODE |
| LOW | tests/integration_tests/security/migrate_roles_tests.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | …tegration_tests/security/session_invalidation_tests.py | 42 | def _set_active(self, active: bool) -> None: | CODE |
| LOW | …s/integration_tests/dashboards/dashboard_test_utils.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | …sts/integration_tests/reports/execution_claim_tests.py | 30 | __all__ = ["test_claim_race", "test_delivery_fencing", "test_terminal_fallback"] | CODE |
| LOW | …generator/birth_names/birth_names_generator_factory.py | 40 | def set_instance(cls, factory: BirthNamesGeneratorFactory) -> None: | CODE |
| LOW | scripts/benchmark_migration.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/config.py | 75 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/stats_logger.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/legacy.py | 22 | def update_time_range(form_data: dict[str, Any]) -> None: | CODE |
| LOW | superset/dataframe.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/marshmallow_compatibility.py | 35 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/sql_lab.py | 83 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/app.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/result_set.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/jinja_context.py | 67 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/jinja_context.py | 993 | def set_context(self, **kwargs: Any) -> None: | CODE |
| LOW | superset/jinja_context.py | 1103 | def set_context(self, **kwargs: Any) -> None: | CODE |
| LOW | superset/jinja_context.py | 1167 | def set_context(self, **kwargs: Any) -> None: | CODE |
| LOW | superset/connectors/sqla/models.py | 138 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/connectors/sqla/models.py | 800 | def update_from_object(self, obj: dict[str, Any]) -> None: | CODE |
| LOW | superset/connectors/sqla/utils.py | 247 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/datasource/api.py | 62 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/websocket/channel.py | 51 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/databases/api.py | 149 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/databases/decorators.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/tasks/subscription.py | 31 | __all__ = ["TaskSubscriptionPolicy", "principal_channel", "get_request_tab_id"] | CODE |
| LOW | superset/tasks/registry.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/tasks/cron_util.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | superset/tasks/async_queries.py | 61 | logger = logging.getLogger(__name__) | CODE |
| 534 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/jinja_context_test.py | 3473 | CODE | |
| LOW | tests/unit_tests/initialization_test.py | 289 | CODE | |
| LOW | …sts/unit_tests/soft_delete/test_restore_purge_hoist.py | 167 | CODE | |
| LOW | …/unit_tests/distributed_lock/distributed_lock_tests.py | 115 | CODE | |
| LOW | …/unit_tests/distributed_lock/distributed_lock_tests.py | 164 | CODE | |
| LOW | tests/unit_tests/semantic_layers/models_test.py | 437 | CODE | |
| LOW | tests/unit_tests/server/test_gunicorn_gevent_smoke.py | 63 | CODE | |
| LOW | tests/unit_tests/utils/date_parser_tests.py | 46 | CODE | |
| LOW | tests/unit_tests/utils/test_screenshot_utils.py | 2104 | CODE | |
| LOW | tests/unit_tests/utils/test_screenshot_utils.py | 2147 | CODE | |
| LOW | tests/unit_tests/utils/test_screenshot_utils.py | 2177 | CODE | |
| LOW | tests/unit_tests/models/core_test.py | 1160 | CODE | |
| LOW | tests/unit_tests/models/core_test.py | 1199 | CODE | |
| LOW | tests/unit_tests/mcp_service/test_dashboard_scope.py | 1464 | CODE | |
| LOW | …/mcp_service/test_mcp_multi_issuer_identity_binding.py | 66 | CODE | |
| LOW | tests/unit_tests/mcp_service/test_auth_api_key.py | 146 | CODE | |
| LOW | tests/unit_tests/mcp_service/test_auth_api_key.py | 188 | CODE | |
| LOW | …ts/unit_tests/mcp_service/test_auth_user_resolution.py | 237 | CODE | |
| LOW | …ts/unit_tests/mcp_service/test_auth_user_resolution.py | 295 | CODE | |
| LOW | …ts/unit_tests/mcp_service/test_auth_user_resolution.py | 717 | CODE | |
| LOW | tests/unit_tests/mcp_service/test_mcp_caching.py | 193 | CODE | |
| LOW | …s/unit_tests/mcp_service/test_mcp_tool_registration.py | 210 | CODE | |
| LOW | …s/unit_tests/mcp_service/test_mcp_tool_registration.py | 282 | CODE | |
| LOW | …s/unit_tests/mcp_service/test_mcp_tool_registration.py | 386 | CODE | |
| LOW | tests/unit_tests/mcp_service/test_mcp_e2e_smoke.py | 93 | CODE | |
| LOW | tests/unit_tests/mcp_service/test_mcp_e2e_smoke.py | 114 | CODE | |
| LOW | …ts/unit_tests/mcp_service/test_worker_metadata_pool.py | 328 | CODE | |
| LOW | …ts/unit_tests/mcp_service/test_worker_metadata_pool.py | 409 | CODE | |
| LOW | …ts/unit_tests/mcp_service/test_worker_metadata_pool.py | 793 | CODE | |
| LOW | tests/unit_tests/mcp_service/test_mcp_storage.py | 61 | CODE | |
| LOW | …ests/mcp_service/chart/test_time_grain_generic_axes.py | 243 | CODE | |
| LOW | …t_tests/mcp_service/chart/test_treemap_completeness.py | 1271 | CODE | |
| LOW | tests/unit_tests/mcp_service/chart/test_query_result.py | 1400 | CODE | |
| LOW | …_tests/mcp_service/chart/test_chart_plugin_contract.py | 475 | CODE | |
| LOW | …it_tests/mcp_service/chart/tool/test_get_chart_data.py | 270 | CODE | |
| LOW | tests/unit_tests/mcp_service/utils/test_retry_utils.py | 248 | CODE | |
| LOW | …service/dashboard/tool/test_apply_dashboard_filters.py | 1913 | CODE | |
| LOW | …t_tests/mcp_service/sql_lab/test_execute_sql_helper.py | 26 | CODE | |
| LOW | tests/unit_tests/common/test_query_context_processor.py | 664 | CODE | |
| LOW | tests/unit_tests/common/test_query_context_processor.py | 730 | CODE | |
| LOW | tests/unit_tests/common/test_query_context_processor.py | 2054 | CODE | |
| LOW | tests/unit_tests/common/test_query_context_processor.py | 2125 | CODE | |
| LOW | tests/unit_tests/common/test_query_context_processor.py | 2185 | CODE | |
| LOW | …sts/unit_tests/dashboards/semantic_view_access_test.py | 291 | CODE | |
| LOW | tests/unit_tests/commands/databases/csv_reader_test.py | 1260 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_duplicate.py | 77 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_duplicate.py | 170 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_duplicate.py | 259 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_duplicate.py | 298 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_duplicate.py | 340 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_duplicate.py | 446 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_create.py | 214 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_create.py | 264 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_create.py | 327 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_create.py | 363 | CODE | |
| LOW | tests/unit_tests/commands/dataset/test_create.py | 404 | CODE | |
| LOW | tests/unit_tests/commands/chart/test_access_checks.py | 43 | CODE | |
| LOW | tests/unit_tests/commands/chart/test_access_checks.py | 72 | CODE | |
| LOW | tests/unit_tests/commands/chart/test_access_checks.py | 103 | CODE | |
| LOW | tests/unit_tests/commands/chart/test_access_checks.py | 144 | CODE | |
| 393 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/unit_tests/conftest.py | 113 | except ImportError: | CODE |
| HIGH | …t_tests/mcp_service/sql_lab/test_execute_sql_helper.py | 61 | except AttributeError: | CODE |
| HIGH | tests/unit_tests/db_engine_specs/test_snowflake.py | 850 | except SnowflakeEngineSpec.oauth2_exception: | CODE |
| HIGH | tests/unit_tests/sql/dialects/databend_tests.py | 421 | except Exception: # noqa: BLE001, S110 - the raise is the measurement | CODE |
| HIGH | tests/integration_tests/conftest.py | 128 | except Exception: # noqa: S110 | CODE |
| HIGH | tests/integration_tests/tasks/api_tests.py | 117 | except Exception: # noqa: S110 | CODE |
| HIGH | tests/integration_tests/dao/base_dao_test.py | 1043 | except (ValueError, KeyError): | CODE |
| HIGH | …gration_tests/versioning/restore_fails_closed_tests.py | 351 | except sa.exc.OperationalError: | CODE |
| HIGH | superset/config.py | 1063 | except ValueError: | CODE |
| HIGH | superset/semantic_layers/api.py | 181 | except (PydanticValidationError, ValueError): | CODE |
| HIGH | superset/charts/data/api.py | 428 | except ChartDataCacheLoadError: | CODE |
| HIGH | superset/utils/encrypt.py | 528 | except ( # noqa: S110 # pylint: disable=broad-except | CODE |
| HIGH | superset/utils/log.py | 73 | except (TypeError, ValueError): | CODE |
| HIGH | superset/utils/core.py | 1068 | except smtplib.SMTPException: | CODE |
| HIGH | superset/utils/number_format.py | 541 | except RuntimeError: | CODE |
| HIGH | superset/utils/webdriver.py | 145 | except Exception: # noqa: S110 | CODE |
| HIGH | superset/utils/webdriver.py | 151 | except Exception: # noqa: S110 | CODE |
| HIGH | superset/models/helpers.py | 566 | except SupersetParseError: | CODE |
| HIGH | superset/models/sql_types/base.py | 34 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | superset/extensions/__init__.py | 129 | except Exception: # pylint: disable=broad-except # noqa: S110 | CODE |
| HIGH | superset/mcp_service/mcp_core.py | 629 | except ValueError: | CODE |
| HIGH | superset/mcp_service/app.py | 1022 | except KeyError: | CODE |
| HIGH | superset/mcp_service/database/schemas.py | 194 | except (ValueError, TypeError): | CODE |
| HIGH | superset/mcp_service/semantic_layer/tool/get_table.py | 698 | except Exception: # noqa: S110 - containment logging is best effort | CODE |
| HIGH | superset/mcp_service/dataset/dataset_utils.py | 48 | except (ValueError, TypeError): | CODE |
| HIGH | superset/mcp_service/dataset/schemas.py | 1281 | except (ValueError, TypeError): | CODE |
| HIGH | superset/mcp_service/dataset/tool/list_datasets.py | 238 | except (ValueError, AttributeError): | CODE |
| HIGH | superset/mcp_service/dataset/tool/query_dataset.py | 466 | except Exception: # noqa: S110 - containment logging is best effort | CODE |
| HIGH | …rset/mcp_service/dataset/tool/delete_dataset_metric.py | 101 | except json.JSONDecodeError: | CODE |
| HIGH | …rset/mcp_service/dataset/tool/update_dataset_metric.py | 44 | except ValueError: | CODE |
| HIGH | superset/mcp_service/chart/schemas.py | 627 | except (TypeError, ValueError): | CODE |
| HIGH | superset/mcp_service/chart/schemas.py | 640 | except ImportError: | CODE |
| HIGH | superset/mcp_service/chart/chart_utils.py | 2504 | except ValueError: | CODE |
| HIGH | superset/mcp_service/chart/validation/pipeline.py | 412 | except (ValueError, IndexError): | CODE |
| HIGH | superset/mcp_service/chart/validation/pipeline.py | 377 | except (ValueError, TypeError): | CODE |
| HIGH | superset/mcp_service/chart/tool/get_chart_sql.py | 210 | except (TypeError, ValueError): | CODE |
| HIGH | superset/mcp_service/chart/tool/get_chart_data.py | 1743 | except Exception: # noqa: S110 - containment logging is best effort | CODE |
| HIGH | …_service/dashboard/tool/remove_chart_from_dashboard.py | 140 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | superset/mcp_service/dashboard/tool/update_dashboard.py | 133 | except (ValueError, TypeError): | CODE |
| HIGH | superset/common/query_object.py | 693 | except AttributeError: | CODE |
| HIGH | superset/db_engine_specs/clickhouse.py | 396 | except ImportError: # ClickHouse Connect not installed, do nothing | CODE |
| HIGH | superset/db_engine_specs/bigquery.py | 170 | except ImportError: | CODE |
| HIGH | superset/db_engine_specs/databricks.py | 135 | except ImportError: | CODE |
| HIGH | superset/db_engine_specs/base.py | 2267 | except NotImplementedError: | CODE |
| HIGH | superset/commands/datasource/list.py | 345 | except (TypeError, ValueError): | CODE |
| HIGH | superset/commands/database/update.py | 129 | except (OAuth2RedirectError, MissingOAuth2TokenError): | CODE |
| HIGH | superset/commands/report/update.py | 132 | except json.JSONDecodeError: | CODE |
| HIGH | superset/versioning/baseline/listener.py | 63 | except Exception: # pylint: disable=broad-except # noqa: S110 | CODE |
| HIGH | superset/views/error_handling.py | 215 | except FileNotFoundError: | CODE |
| HIGH | superset/views/error_handling.py | 272 | except FileNotFoundError: | CODE |
| HIGH | superset/views/error_handling.py | 300 | except FileNotFoundError: | CODE |
| HIGH | superset/sql/parse.py | 1228 | except sqlglot.errors.ParseError: | CODE |
| HIGH | superset/sql/parse.py | 1801 | except AttributeError: | CODE |
| HIGH | superset-extensions-cli/tests/test_utils.py | 239 | except (OSError, PermissionError): | CODE |
| HIGH | superset-extensions-cli/tests/test_utils.py | 263 | except (OSError, PermissionError): | CODE |
| HIGH | superset-extensions-cli/tests/test_utils.py | 246 | except (OSError, PermissionError): | CODE |
| HIGH | superset-extensions-cli/tests/test_utils.py | 270 | except (OSError, PermissionError): | CODE |
| HIGH | superset-extensions-cli/tests/test_cli_dev.py | 69 | except KeyboardInterrupt: | CODE |
| HIGH | superset-extensions-cli/tests/test_cli_dev.py | 127 | except KeyboardInterrupt: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 172 | data = {"name": "John Doe", "email": "john@example.com", "age": 30} | CODE |
| LOW | tests/unit_tests/test_marshmallow_compatibility.py | 174 | assert result["name"] == "John Doe" | CODE |
| LOW | tests/unit_tests/tasks/test_export_dashboard_excel.py | 136 | user.email = "user@example.com" | CODE |
| LOW | …_tests/security/test_superset_user_api_subject_sync.py | 63 | email=f"{username}@example.org", | CODE |
| LOW | …_tests/security/test_superset_user_api_subject_sync.py | 77 | email=f"{username}@example.org", | CODE |
| LOW | tests/unit_tests/security/test_password_change.py | 180 | email="flagged@example.org", | CODE |
| LOW⚡ | tests/unit_tests/security/manager_test.py | 1469 | email="adoe@example.org", | CODE |
| LOW | tests/unit_tests/security/manager_test.py | 1359 | email="adoe@example.org", | CODE |
| LOW | tests/unit_tests/security/manager_test.py | 1419 | email="adoe@example.org", | CODE |
| LOW | …/security/test_password_change_session_invalidation.py | 66 | email="session_invalidation_target@example.org", | CODE |
| LOW | …/security/test_password_change_session_invalidation.py | 73 | email="session_invalidation_actor@example.org", | CODE |
| LOW | …/security/test_password_change_session_invalidation.py | 160 | email="admin_edit_password_target@example.org", | CODE |
| LOW | …/security/test_password_change_session_invalidation.py | 195 | email="admin_edit_no_password_target@example.org", | CODE |
| LOW | …/security/test_password_change_session_invalidation.py | 244 | email="terminate_sessions_target@example.org", | CODE |
| LOW | tests/unit_tests/datasets/schema_tests.py | 90 | label = "Jane Doe" | CODE |
| LOW | tests/unit_tests/datasets/schema_tests.py | 97 | assert dumped == {"id": 1, "label": "Jane Doe", "img": "avatar.png", "type": 1} | CODE |
| LOW | …it_tests/datasets/commands/importers/v1/import_test.py | 1735 | email="adoe@example.org", | CODE |
| LOW | …it_tests/datasets/commands/importers/v1/import_test.py | 1825 | email="adoe@example.org", | CODE |
| LOW | …it_tests/datasets/commands/importers/v1/import_test.py | 1874 | email="adoe@example.org", | CODE |
| LOW | …it_tests/datasets/commands/importers/v1/import_test.py | 1919 | email="bob@example.org", | CODE |
| LOW | …it_tests/datasets/commands/importers/v1/import_test.py | 2118 | email="adoe@example.org", | CODE |
| LOW | …unit_tests/charts/commands/importers/v1/import_test.py | 225 | email="adoe@example.org", | CODE |
| LOW | …unit_tests/charts/commands/importers/v1/import_test.py | 266 | email="adoe@example.org", | CODE |
| LOW | …unit_tests/charts/commands/importers/v1/import_test.py | 301 | email="adoe@example.org", | CODE |
| LOW | …unit_tests/charts/commands/importers/v1/import_test.py | 356 | email="adoe@example.org", | CODE |
| LOW | …unit_tests/charts/commands/importers/v1/import_test.py | 412 | email="adoe@example.org", | CODE |
| LOW | …unit_tests/charts/commands/importers/v1/import_test.py | 445 | email="bob@example.org", | CODE |
| LOW | tests/unit_tests/models/core_test.py | 585 | user.email = "alice.doe@example.org" | CODE |
| LOW | tests/unit_tests/models/core_test.py | 766 | user.email = "alice.doe@example.org" | CODE |
| LOW | tests/unit_tests/models/core_test.py | 830 | user.email = "alice.doe@example.org" | CODE |
| LOW | tests/unit_tests/models/core_test.py | 870 | user.email = "alice.doe@example.org" | CODE |
| LOW | tests/unit_tests/models/core_test.py | 884 | assert database.get_impersonation_email() == "alice.doe@example.org" | CODE |
| LOW | tests/unit_tests/models/core_test.py | 1627 | email="adoe@example.org", | CODE |
| LOW | tests/unit_tests/models/core_test.py | 1713 | email="adoe2@example.org", | CODE |
| LOW | tests/unit_tests/models/core_test.py | 1731 | email=f"drift{i}@example.org", | CODE |
| LOW | tests/unit_tests/models/core_test.py | 1812 | email="adoe3@example.org", | CODE |
| LOW | tests/unit_tests/models/helpers_test.py | 2989 | "val": ["John Doe", "Jane Doe"], | CODE |
| LOW | tests/unit_tests/models/helpers_test.py | 2989 | "val": ["John Doe", "Jane Doe"], | CODE |
| LOW | tests/unit_tests/mcp_service/test_guest_token_auth.py | 65 | fake_token = "fake-token" # noqa: S105 — test fixture, not a real credential | CODE |
| LOW | tests/unit_tests/mcp_service/test_guest_token_auth.py | 66 | return AccessToken(token=fake_token, client_id=client_id, scopes=[], claims=claims) | CODE |
| LOW | tests/unit_tests/mcp_service/user/test_schemas.py | 88 | user.email = "admin@example.com" | CODE |
| LOW | tests/unit_tests/mcp_service/user/test_schemas.py | 100 | assert info.email == "admin@example.com" | CODE |
| LOW | tests/unit_tests/mcp_service/user/test_schemas.py | 114 | user.email = "admin@example.com" | CODE |
| LOW | tests/unit_tests/mcp_service/user/test_schemas.py | 137 | user.email = "admin@example.com" | CODE |
| LOW | tests/unit_tests/mcp_service/user/test_schemas.py | 149 | assert info.email == "admin@example.com" | CODE |
| LOW⚡ | …ts/unit_tests/mcp_service/user/tool/test_user_tools.py | 235 | user = create_mock_user(email="admin@example.com", roles=["Admin"]) | CODE |
| LOW⚡ | …ts/unit_tests/mcp_service/user/tool/test_user_tools.py | 245 | assert data["users"][0]["email"] == "admin@example.com" | CODE |
| LOW⚡ | …ts/unit_tests/mcp_service/user/tool/test_user_tools.py | 253 | user = create_mock_user(email="admin@example.com") | CODE |
| LOW | …ts/unit_tests/mcp_service/user/tool/test_user_tools.py | 45 | email: str = "admin@example.com", | CODE |
| LOW⚡ | …sts/unit_tests/mcp_service/dashboard/test_permalink.py | 92 | (None, "admin@example.com", {"email": "admin@example.com"}), | CODE |
| LOW | …cp_service/dashboard/tool/test_dashboard_generation.py | 159 | mock_user.email = "admin@example.com" | CODE |
| LOW | …cp_service/dashboard/tool/test_dashboard_generation.py | 479 | email="admin@example.com", | CODE |
| LOW | …cp_service/dashboard/tool/test_dashboard_generation.py | 526 | email="admin@example.com", | CODE |
| LOW | …cp_service/dashboard/tool/test_dashboard_generation.py | 585 | email="admin@example.com", | CODE |
| LOW⚡ | …tests/mcp_service/system/test_serialize_user_object.py | 40 | user.email = "admin@example.com" | CODE |
| LOW | …tests/mcp_service/system/test_serialize_user_object.py | 51 | assert result.email == "admin@example.com" | CODE |
| LOW | …tests/mcp_service/system/test_serialize_user_object.py | 68 | user.email = "admin@example.com" | CODE |
| LOW | tests/unit_tests/db_engine_specs/test_snowflake.py | 725 | return_value="jdoe@example.org", | CODE |
| LOW⚡ | tests/unit_tests/db_engine_specs/test_gsheets.py | 1563 | service_account = {"type": "service_account", "client_email": "sa@example.org"} | CODE |
| LOW⚡ | tests/unit_tests/db_engine_specs/test_gsheets.py | 1580 | service_account = {"type": "service_account", "client_email": "sa@example.org"} | CODE |
| 159 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/frontend-mem-nag.sh | 26 | # Check if running in Codespaces first | COMMENT |
| LOW | docker/docker-pytest-entrypoint.sh | 89 | # Check if test database exists | COMMENT |
| LOW | tests/unit_tests/tasks/test_handlers.py | 580 | # Set task to SUCCESS (not aborting) so only cleanup handlers run | COMMENT |
| LOW | tests/unit_tests/tasks/test_handlers.py | 632 | # Set task to ABORTING so both abort and cleanup handlers run | COMMENT |
| LOW⚡ | tests/unit_tests/security/manager_test.py | 1456 | # Check if Alpha role already exists | COMMENT |
| LOW⚡ | tests/unit_tests/security/manager_test.py | 1463 | # Check if user already exists | COMMENT |
| LOW | tests/unit_tests/dao/base_dao_test.py | 205 | # Set model_cls to None but allow method to proceed past guard clause | COMMENT |
| LOW | tests/unit_tests/utils/test_screenshot_cache_fix.py | 267 | # Set TTL to 300 seconds | COMMENT |
| LOW | tests/unit_tests/utils/test_screenshot_cache_fix.py | 282 | # Set TTL to 300 seconds | COMMENT |
| LOW | …it_tests/models/test_time_filter_double_application.py | 135 | # Check if there's a WHERE clause after the subquery closes | STRING |
| LOW | …it_tests/models/test_time_filter_double_application.py | 358 | # Check if there's a WHERE clause after the subquery | STRING |
| LOW | …s/unit_tests/mcp_service/test_mcp_tool_registration.py | 522 | # Check if it has any .py files in it or its subdirectories | COMMENT |
| LOW | …t_tests/mcp_service/sql_lab/test_execute_sql_helper.py | 36 | # Check if it's a Pydantic model with model_dump | COMMENT |
| LOW | tests/unit_tests/db_engine_specs/test_trino.py | 652 | # Set stats to FINISHED so the progress loop exits immediately | COMMENT |
| LOW⚡ | tests/unit_tests/commands/databases/csv_reader_test.py | 262 | # Check if both values are NaN | COMMENT |
| LOW⚡ | …sts/unit_tests/commands/databases/excel_reader_test.py | 185 | # Check if both values are NaN | COMMENT |
| LOW | …/unit_tests/commands/databases/columnar_reader_test.py | 129 | # Check if both values are NaN | COMMENT |
| LOW | tests/unit_tests/sql/execution/test_celery_task.py | 93 | # Set end_time to trigger the branch skip | COMMENT |
| LOW | tests/integration_tests/tasks/test_event_handlers.py | 251 | # Set status to ABORTING (simulating CancelTaskCommand) | COMMENT |
| LOW⚡ | …integration_tests/dashboards/test_theme_integration.py | 89 | # Assign theme to dashboard | COMMENT |
| LOW⚡ | …integration_tests/dashboards/test_theme_integration.py | 100 | # Assign theme to dashboard | COMMENT |
| LOW⚡ | …integration_tests/dashboards/test_theme_integration.py | 338 | # Set theme to None so tearDown doesn't try to delete it | COMMENT |
| LOW | …integration_tests/dashboards/test_theme_integration.py | 157 | # Assign theme to dashboard | COMMENT |
| LOW | …integration_tests/dashboards/test_theme_integration.py | 182 | # Assign theme to dashboard | COMMENT |
| LOW | …integration_tests/dashboards/test_theme_integration.py | 213 | # Assign theme to dashboard | COMMENT |
| LOW | …integration_tests/dashboards/test_theme_integration.py | 233 | # Set theme to None so tearDown doesn't try to delete it | COMMENT |
| LOW | …integration_tests/dashboards/test_theme_integration.py | 255 | # Assign theme to both dashboards | COMMENT |
| LOW | …integration_tests/dashboards/test_theme_integration.py | 380 | # Assign theme to dashboard | COMMENT |
| LOW | docs/scripts/fix-openapi-spec.py | 466 | # Check if endpoint has a request body | COMMENT |
| LOW | docs/scripts/fix-openapi-spec.py | 503 | # Check if already configured | COMMENT |
| LOW | docs/scripts/fix-openapi-spec.py | 779 | # Check if this suffix is already in the summary | COMMENT |
| LOW | .devcontainer/start-superset.sh | 7 | # Check if MCP is enabled | COMMENT |
| LOW | .devcontainer/start-superset.sh | 21 | # Check if docker is running | COMMENT |
| LOW | scripts/docker-compose-up.sh | 129 | # Check if containers are running and get actual ports, otherwise use available ports | COMMENT |
| LOW | scripts/change_detector.py | 285 | # Output results | COMMENT |
| LOW | .github/workflows/bashlib.sh | 268 | # Check if there are any test files in the specified paths | COMMENT |
| LOW⚡ | superset/config.py | 3556 | # Set CACHE_TYPE to 'RedisCache' for standard Redis or 'RedisSentinelCache' for | COMMENT |
| LOW | superset/sql_lab.py | 585 | # Check if stopped | COMMENT |
| LOW | superset/app.py | 187 | # Check if database is up-to-date with migrations | COMMENT |
| LOW | superset/result_set.py | 252 | # Check if original data has nested types (lists/dicts) | COMMENT |
| LOW | superset/connectors/sqla/models.py | 313 | # Check if all requested columns are drillable | COMMENT |
| LOW | superset/databases/schemas.py | 1163 | # Check if any sensitive field is still masked | COMMENT |
| LOW | superset/tasks/context.py | 472 | # Check if task execution has already completed (late abort race). | COMMENT |
| LOW⚡ | superset/tasks/context.py | 534 | # Check if all abort handlers completed successfully | COMMENT |
| LOW | superset/tasks/context.py | 822 | # Set status to ABORTING (same as user abort). The executor | COMMENT |
| LOW | superset/security/manager.py | 2678 | # Check if this is actually a multi-layer deck.gl chart | COMMENT |
| LOW | superset/security/manager.py | 3740 | # Check if database name has changed | COMMENT |
| LOW | superset/security/manager.py | 4065 | # Check if watched fields have changed | COMMENT |
| LOW | superset/semantic_layers/mapper.py | 957 | # Check if we need separate filters for the group limit subquery | COMMENT |
| LOW | superset/semantic_layers/mapper.py | 984 | # Check if inner time bounds are explicitly set and differ from outer bounds | COMMENT |
| LOW | superset/charts/client_processing.py | 1389 | # Check if the DataFrame has a default RangeIndex, which should not be shown | COMMENT |
| LOW | superset/charts/data/api.py | 483 | # Check if we should use streaming for large datasets | COMMENT |
| LOW | superset/charts/data/api.py | 811 | # Check if we have rowcount in the second query result (like frontend does) | COMMENT |
| LOW | superset/utils/cache.py | 245 | # Check if the user can access the resource | COMMENT |
| LOW | superset/utils/cache.py | 276 | # Check if the cache is stale. Default the content_changed_time to now | COMMENT |
| LOW | superset/utils/core.py | 1311 | # Check if the filter already exists | COMMENT |
| LOW | superset/models/tasks.py | 285 | # Set is_abortable to False when task starts executing | COMMENT |
| LOW | superset/models/helpers.py | 951 | # Check if object already exists in DB, break if more than one is found | COMMENT |
| LOW | superset/models/helpers.py | 5089 | # Check if time filter should be skipped because it was handled in template. | COMMENT |
| LOW | superset/models/helpers.py | 5239 | # Check if it's a regular column first | COMMENT |
| 67 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …commands/importers/v1/test_find_existing_for_import.py | 201 | # Step 1: find (pure). Caller now has the row to make decisions on. | COMMENT |
| LOW⚡ | …commands/importers/v1/test_find_existing_for_import.py | 206 | # Step 2: caller decides to clear (in real code, after overwrite + | COMMENT |
| LOW⚡ | …commands/importers/v1/test_find_existing_for_import.py | 210 | # Step 3: caller can now re-insert with the same UUID without | COMMENT |
| LOW⚡ | tests/unit_tests/reports/notifications/slack_tests.py | 2524 | # Step 1: v1 send raises SlackV1NotificationError because v2 is available. | COMMENT |
| LOW⚡ | tests/unit_tests/reports/notifications/slack_tests.py | 2529 | # Step 2: command-level upgrade rewrites the row to SlackV2 with channel IDs. | COMMENT |
| LOW⚡ | tests/unit_tests/reports/notifications/slack_tests.py | 2535 | # Step 3: a fresh SlackV2Notification on the rewritten row sends to the | COMMENT |
| LOW | …ntegration_tests/tasks/test_subscription_visibility.py | 47 | # Step 1: Gamma submits a shared task | COMMENT |
| LOW | …ntegration_tests/tasks/test_subscription_visibility.py | 66 | # Step 2: Admin joins the same task | COMMENT |
| LOW | …ntegration_tests/tasks/test_subscription_visibility.py | 84 | # Step 3: Gamma cancels (unsubscribes) | COMMENT |
| LOW⚡ | …ntegration_tests/tasks/test_subscription_visibility.py | 96 | # Step 4: Verify gamma can no longer see the task | COMMENT |
| LOW⚡ | …ntegration_tests/tasks/test_subscription_visibility.py | 103 | # Step 5: Verify admin still sees the task | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 193 | # Step 1: Encrypt with KEY_A | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 198 | # Step 2: Verify decryption with KEY_A works | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 202 | # Step 3: Rotate key to KEY_B | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 205 | # Step 4: Re-encrypt with KEY_B (simulating SecretsMigrator logic) | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 223 | # Step 5: Verify decryption with KEY_B works | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 227 | # Step 6: Verify KEY_A can no longer decrypt the new ciphertext | COMMENT |
| LOW⚡ | tests/integration_tests/dashboards/commands_tests.py | 939 | # Step 1: Add an embedded dashboard | COMMENT |
| LOW⚡ | tests/integration_tests/dashboards/commands_tests.py | 946 | # Step 2: Assert that the embedded dashboard was added | COMMENT |
| LOW⚡ | tests/integration_tests/dashboards/commands_tests.py | 951 | # Step 3: Delete the embedded dashboard | COMMENT |
| LOW⚡ | tests/integration_tests/dashboards/commands_tests.py | 956 | # Step 4: Assert that the embedded dashboard was deleted | COMMENT |
| LOW⚡ | …ts/integration_tests/versioning/activity_view_tests.py | 509 | # Step 1: generate a chart-edit change record for "Girls". | COMMENT |
| LOW⚡ | …ts/integration_tests/versioning/activity_view_tests.py | 513 | # Step 2: hard-delete the chart. The fixture's _cleanup will | COMMENT |
| LOW | .claude/projects/js-to-ts/AGENT.md | 20 | ## Step 0: Dependency Check (MANDATORY) | COMMENT |
| LOW | .claude/projects/js-to-ts/AGENT.md | 33 | ## Step 1: Identify Related Files (REQUIRED) | COMMENT |
| LOW⚡ | .claude/projects/js-to-ts/AGENT.md | 201 | ### Step 2: File Conversion | COMMENT |
| LOW⚡ | .claude/projects/js-to-ts/AGENT.md | 208 | ### Step 3: Import & Type Setup | COMMENT |
| LOW⚡ | .claude/projects/js-to-ts/AGENT.md | 217 | ### Step 4: Function & Component Typing | COMMENT |
| LOW | .claude/projects/js-to-ts/AGENT.md | 238 | ### Step 5: State & Redux Typing | COMMENT |
| LOW | …gin-chart-echarts/src/utils/safeEChartOptionsParser.ts | 410 | // Step 1: Parse into AST | COMMENT |
| LOW⚡ | …gin-chart-echarts/src/utils/safeEChartOptionsParser.ts | 444 | // Step 2: Validate AST for security (no functions, eval, etc.) | COMMENT |
| LOW⚡ | …gin-chart-echarts/src/utils/safeEChartOptionsParser.ts | 452 | // Step 3: Convert AST to JavaScript object | COMMENT |
| LOW⚡ | …gin-chart-echarts/src/utils/safeEChartOptionsParser.ts | 455 | // Step 4: Validate against Zod schema with partial/lenient mode | COMMENT |
| LOW | …ents/TimeGrain/TimeGrainPreFilter.integration.test.tsx | 46 | // Step 1: Simulate saved dashboard config | COMMENT |
| LOW⚡ | …ents/TimeGrain/TimeGrainPreFilter.integration.test.tsx | 83 | // Step 2: Render the dashboard filter | COMMENT |
| LOW⚡ | …ents/TimeGrain/TimeGrainPreFilter.integration.test.tsx | 91 | // Step 3: Verify only pre-filtered options appear | COMMENT |
| LOW | …ents/TimeGrain/TimeGrainPreFilter.integration.test.tsx | 107 | // Step 4: Selecting one allowed option should update runtime payload | COMMENT |
| LOW⚡ | …-frontend/src/dashboard/reducers/nativeFilters.test.ts | 510 | // Step 1: filter(Boolean) — as hydrate.ts does | COMMENT |
| LOW⚡ | …-frontend/src/dashboard/reducers/nativeFilters.test.ts | 512 | // Step 2: migrate — as hydrate.ts does | COMMENT |
| LOW⚡ | …-frontend/src/dashboard/reducers/nativeFilters.test.ts | 514 | // Step 3: combine with native filters and pass to getInitialState | COMMENT |
| LOW | …versioned_docs/version-6.1.0/extensions/quick-start.md | 38 | ## Step 1: Install the Extensions CLI | COMMENT |
| LOW | …versioned_docs/version-6.1.0/extensions/quick-start.md | 46 | ## Step 2: Create a New Extension | COMMENT |
| LOW | …versioned_docs/version-6.1.0/extensions/quick-start.md | 94 | ## Step 3: Configure Extension Metadata | COMMENT |
| LOW | …versioned_docs/version-6.1.0/extensions/quick-start.md | 116 | ## Step 4: Create Backend API | COMMENT |
| LOW | …versioned_docs/version-6.1.0/extensions/quick-start.md | 189 | ## Step 5: Create Frontend Component | COMMENT |
| LOW | …versioned_docs/version-6.1.0/extensions/quick-start.md | 422 | ## Step 6: Install Dependencies | COMMENT |
| LOW | …versioned_docs/version-6.1.0/extensions/quick-start.md | 432 | ## Step 7: Package the Extension | COMMENT |
| LOW | …versioned_docs/version-6.1.0/extensions/quick-start.md | 450 | ## Step 8: Deploy to Superset | COMMENT |
| LOW | …versioned_docs/version-6.1.0/extensions/quick-start.md | 487 | ## Step 9: Test Your Extension | COMMENT |
| LOW | docs/developer_docs/extensions/quick-start.md | 38 | ## Step 1: Install the Extensions CLI | COMMENT |
| LOW | docs/developer_docs/extensions/quick-start.md | 46 | ## Step 2: Create a New Extension | COMMENT |
| LOW | docs/developer_docs/extensions/quick-start.md | 94 | ## Step 3: Configure Extension Metadata | COMMENT |
| LOW | docs/developer_docs/extensions/quick-start.md | 116 | ## Step 4: Create Backend API | COMMENT |
| LOW | docs/developer_docs/extensions/quick-start.md | 189 | ## Step 5: Create Frontend Component | COMMENT |
| LOW | docs/developer_docs/extensions/quick-start.md | 421 | ## Step 6: Install Dependencies | COMMENT |
| LOW | docs/developer_docs/extensions/quick-start.md | 431 | ## Step 7: Package the Extension | COMMENT |
| LOW | docs/developer_docs/extensions/quick-start.md | 449 | ## Step 8: Deploy to Superset | COMMENT |
| LOW | docs/developer_docs/extensions/quick-start.md | 486 | ## Step 9: Test Your Extension | COMMENT |
| LOW⚡ | superset/config.py | 461 | # NOTE: This variable is used to populate THEME_DEFAULT. If you override this in | COMMENT |
| LOW | superset/config.py | 478 | # NOTE: This variable is deprecated and not used in the new theme system. | COMMENT |
| 45 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …commands/importers/v1/test_find_existing_for_import.py | 201 | # Step 1: find (pure). Caller now has the row to make decisions on. | COMMENT |
| LOW⚡ | …commands/importers/v1/test_find_existing_for_import.py | 206 | # Step 2: caller decides to clear (in real code, after overwrite + | COMMENT |
| LOW⚡ | …commands/importers/v1/test_find_existing_for_import.py | 210 | # Step 3: caller can now re-insert with the same UUID without | COMMENT |
| LOW⚡ | tests/unit_tests/reports/notifications/slack_tests.py | 2524 | # Step 1: v1 send raises SlackV1NotificationError because v2 is available. | COMMENT |
| LOW⚡ | tests/unit_tests/reports/notifications/slack_tests.py | 2529 | # Step 2: command-level upgrade rewrites the row to SlackV2 with channel IDs. | COMMENT |
| LOW⚡ | tests/unit_tests/reports/notifications/slack_tests.py | 2535 | # Step 3: a fresh SlackV2Notification on the rewritten row sends to the | COMMENT |
| LOW | …ntegration_tests/tasks/test_subscription_visibility.py | 47 | # Step 1: Gamma submits a shared task | COMMENT |
| LOW | …ntegration_tests/tasks/test_subscription_visibility.py | 66 | # Step 2: Admin joins the same task | COMMENT |
| LOW | …ntegration_tests/tasks/test_subscription_visibility.py | 84 | # Step 3: Gamma cancels (unsubscribes) | COMMENT |
| LOW⚡ | …ntegration_tests/tasks/test_subscription_visibility.py | 96 | # Step 4: Verify gamma can no longer see the task | COMMENT |
| LOW⚡ | …ntegration_tests/tasks/test_subscription_visibility.py | 103 | # Step 5: Verify admin still sees the task | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 193 | # Step 1: Encrypt with KEY_A | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 198 | # Step 2: Verify decryption with KEY_A works | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 202 | # Step 3: Rotate key to KEY_B | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 205 | # Step 4: Re-encrypt with KEY_B (simulating SecretsMigrator logic) | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 223 | # Step 5: Verify decryption with KEY_B works | COMMENT |
| LOW⚡ | tests/integration_tests/utils/encrypt_tests.py | 227 | # Step 6: Verify KEY_A can no longer decrypt the new ciphertext | COMMENT |
| LOW⚡ | tests/integration_tests/dashboards/commands_tests.py | 939 | # Step 1: Add an embedded dashboard | COMMENT |
| LOW⚡ | tests/integration_tests/dashboards/commands_tests.py | 946 | # Step 2: Assert that the embedded dashboard was added | COMMENT |
| LOW⚡ | tests/integration_tests/dashboards/commands_tests.py | 951 | # Step 3: Delete the embedded dashboard | COMMENT |
| LOW⚡ | tests/integration_tests/dashboards/commands_tests.py | 956 | # Step 4: Assert that the embedded dashboard was deleted | COMMENT |
| LOW⚡ | …ts/integration_tests/versioning/activity_view_tests.py | 509 | # Step 1: generate a chart-edit change record for "Girls". | COMMENT |
| LOW⚡ | …ts/integration_tests/versioning/activity_view_tests.py | 513 | # Step 2: hard-delete the chart. The fixture's _cleanup will | COMMENT |
| LOW | …gin-chart-echarts/src/utils/safeEChartOptionsParser.ts | 410 | // Step 1: Parse into AST | COMMENT |
| LOW⚡ | …gin-chart-echarts/src/utils/safeEChartOptionsParser.ts | 444 | // Step 2: Validate AST for security (no functions, eval, etc.) | COMMENT |
| LOW⚡ | …gin-chart-echarts/src/utils/safeEChartOptionsParser.ts | 452 | // Step 3: Convert AST to JavaScript object | COMMENT |
| LOW⚡ | …gin-chart-echarts/src/utils/safeEChartOptionsParser.ts | 455 | // Step 4: Validate against Zod schema with partial/lenient mode | COMMENT |
| LOW | …ents/TimeGrain/TimeGrainPreFilter.integration.test.tsx | 46 | // Step 1: Simulate saved dashboard config | COMMENT |
| LOW⚡ | …ents/TimeGrain/TimeGrainPreFilter.integration.test.tsx | 83 | // Step 2: Render the dashboard filter | COMMENT |
| LOW⚡ | …ents/TimeGrain/TimeGrainPreFilter.integration.test.tsx | 91 | // Step 3: Verify only pre-filtered options appear | COMMENT |
| LOW | …ents/TimeGrain/TimeGrainPreFilter.integration.test.tsx | 107 | // Step 4: Selecting one allowed option should update runtime payload | COMMENT |
| LOW⚡ | …-frontend/src/dashboard/reducers/nativeFilters.test.ts | 510 | // Step 1: filter(Boolean) — as hydrate.ts does | COMMENT |
| LOW⚡ | …-frontend/src/dashboard/reducers/nativeFilters.test.ts | 512 | // Step 2: migrate — as hydrate.ts does | COMMENT |
| LOW⚡ | …-frontend/src/dashboard/reducers/nativeFilters.test.ts | 514 | // Step 3: combine with native filters and pass to getInitialState | COMMENT |
| LOW⚡ | superset/semantic_layers/mapper.py | 149 | # Step 1: Convert QueryObject to list of SemanticQuery objects | COMMENT |
| LOW⚡ | superset/semantic_layers/mapper.py | 153 | # Step 2: Execute the main query (first in the list) | COMMENT |
| LOW | superset/semantic_layers/mapper.py | 227 | # Step 5: Perform left join on dimension columns | COMMENT |
| LOW | superset/mcp_service/jwt_verifier.py | 492 | # Step 1: Decode header and check algorithm | COMMENT |
| LOW | superset/mcp_service/jwt_verifier.py | 535 | # Step 2: Get verification key (static or JWKS). | COMMENT |
| LOW | superset/mcp_service/jwt_verifier.py | 577 | # Step 3: Decode and verify signature | COMMENT |
| LOW | superset/mcp_service/jwt_verifier.py | 600 | # Step 4: Check expiration. An ``exp`` claim is required — tokens | COMMENT |
| LOW | superset/mcp_service/jwt_verifier.py | 652 | # Step 5: Validate issuer | COMMENT |
| LOW | superset/mcp_service/jwt_verifier.py | 670 | # Step 6: Validate audience | COMMENT |
| LOW | superset/mcp_service/jwt_verifier.py | 697 | # Step 7: Check required scopes | COMMENT |
| LOW⚡ | superset/mcp_service/dataset/tool/query_dataset.py | 127 | # Step 1: Check data-model metadata access BEFORE the dataset lookup. | COMMENT |
| LOW⚡ | superset/mcp_service/dataset/tool/query_dataset.py | 143 | # Step 2: Resolve dataset | COMMENT |
| LOW⚡ | superset/mcp_service/dataset/tool/query_dataset.py | 178 | # Step 2: Validate requested columns and metrics | COMMENT |
| LOW⚡ | superset/mcp_service/dataset/tool/query_dataset.py | 236 | # Step 3: Build filters and time range | COMMENT |
| LOW⚡ | superset/mcp_service/dataset/tool/query_dataset.py | 298 | # Step 4: Build query dict | COMMENT |
| LOW⚡ | superset/mcp_service/dataset/tool/query_dataset.py | 316 | # Step 5: Create QueryContext and execute | COMMENT |
| LOW⚡ | superset/mcp_service/dataset/tool/query_dataset.py | 341 | # Step 6: Format response | COMMENT |
| LOW⚡ | …erset/mcp_service/chart/prompts/create_chart_guided.py | 88 | ### Step 1: Find a Dataset | COMMENT |
| LOW⚡ | …erset/mcp_service/chart/prompts/create_chart_guided.py | 91 | ### Step 2: Examine Columns | COMMENT |
| LOW⚡ | …erset/mcp_service/chart/prompts/create_chart_guided.py | 94 | ### Step 3: Choose Chart Configuration | COMMENT |
| LOW⚡ | …erset/mcp_service/chart/prompts/create_chart_guided.py | 101 | ### Step 4: Create the Chart | COMMENT |
| LOW | …erset/mcp_service/chart/prompts/create_chart_guided.py | 133 | ### Step 5: Validate Results | COMMENT |
| LOW⚡ | superset/common/query_context_processor.py | 755 | # Step 1: Request-level custom timeout (e.g., Force refresh bypass) | COMMENT |
| LOW⚡ | superset/common/query_context_processor.py | 759 | # Step 2: Native filter option query override. | COMMENT |
| LOW⚡ | superset/common/query_context_processor.py | 768 | # Step 3: Slice, Dataset, or Database timeouts | COMMENT |
| LOW⚡ | superset/common/query_context_processor.py | 772 | # Step 4: DATA_CACHE_CONFIG fallback. | COMMENT |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …t-core/src/superset_core/semantic_layers/decorators.py | 55 | Decorator to register a semantic layer implementation. Automatically detects extension context and applies app | STRING |
| HIGH | superset-core/src/superset_core/mcp/decorators.py | 62 | Decorator to register an MCP tool with optional authentication. This decorator combines FastMCP tool registrat | STRING |
| HIGH | superset-core/src/superset_core/mcp/decorators.py | 139 | Decorator to register an MCP prompt with optional authentication. This decorator combines FastMCP prompt regis | STRING |
| HIGH | superset-core/src/superset_core/rest_api/decorators.py | 48 | Unified API decorator for both host and extension APIs. Automatically detects context: - Host context: /ap | STRING |
| HIGH | superset/jinja_context.py | 407 | Get a specific user attribute from guest user. This function retrieves attributes from the guest user | STRING |
| HIGH | superset/tasks/decorators.py | 701 | Schedule this task for asynchronous execution. The signature mirrors the original task function, with | STRING |
| HIGH | superset/utils/screenshot_utils.py | 871 | Take a tiled screenshot of a large dashboard by scrolling and capturing sections. Args: page: Playwrig | STRING |
| HIGH | superset/utils/cache_manager.py | 59 | Create a hash object using the configured algorithm. Args: data: Optional initial data to | STRING |
| HIGH | superset/utils/date_parser.py | 259 | Generates a datetime expression for the start of a given unit (e.g., start of month, start of year). This | STRING |
| HIGH | superset/utils/date_parser.py | 289 | Generates a datetime expression for the end of a given unit (e.g., end of month, end of year). This funct | STRING |
| HIGH | superset/utils/date_parser.py | 324 | Handles "first" time expressions like "first of the month" or "first week of this year". This handler retu | STRING |
| HIGH | superset/utils/date_parser.py | 381 | Generates a datetime expression based on a modifier, scope, delta, unit, and relative base. This function h | STRING |
| HIGH | superset/utils/date_parser.py | 426 | Generates a datetime expression based on the scope, delta, unit, and relative base. This function handles queri | STRING |
| HIGH | superset/utils/hashing.py | 49 | Generate a hash from a string using the configured or specified algorithm. Args: val: String to hash | STRING |
| HIGH | superset/mcp_service/storage.py | 40 | Create a store instance with the specified prefix. Uses shared MCP_STORE_CONFIG for Redis URL and wrapper type | STRING |
| HIGH | superset/mcp_service/storage.py | 196 | Import a wrapper class from a dotted path. Args: class_path: Dotted path like 'key_value.a | STRING |
| HIGH | superset/mcp_service/utils/schema_utils.py | 78 | Parse a value that can be either a JSON string or a native Python object. This function handles the common pat | STRING |
| HIGH | superset/mcp_service/utils/schema_utils.py | 139 | Parse a value into a list, accepting JSON string, list, or comma-separated string. This function provides maxi | STRING |
| HIGH | superset/mcp_service/utils/schema_utils.py | 211 | Parse a value into a Pydantic model, accepting JSON string or dict. Args: value: Input value to parse | STRING |
| HIGH | superset/mcp_service/utils/schema_utils.py | 255 | Parse a value into a list of Pydantic models, accepting JSON string or list. Args: value: Input value | STRING |
| HIGH | superset/mcp_service/utils/response_size_utils.py | 56 | Get the size of a response in bytes. Never raises: a response that cannot be serialized measures as ``UNME | STRING |
| HIGH | superset/mcp_service/utils/sanitization.py | 198 | Centralized sanitization for user-provided text inputs. Uses nh3 to strip HTML tags and performs additional se | STRING |
| HIGH | superset/mcp_service/utils/sanitization.py | 282 | Sanitize filter values which can be strings or other types. For non-string values, returns as-is (no sanitizat | STRING |
| HIGH | superset/examples/helpers.py | 94 | Normalize example data URLs for consistency. This function ensures that example data URLs are properly formatted. | STRING |
| HIGH | superset/examples/helpers.py | 148 | Load data from local Parquet files. Examples are organized as: superset/examples/{example_name}/data.parque | STRING |
| HIGH | superset-extensions-cli/tests/utils.py | 106 | Load and parse a JSON file. Args: path: Path to the JSON file Returns: Parsed JSON conten | STRING |
| HIGH | …et-extensions-cli/src/superset_extensions_cli/utils.py | 258 | Validate and normalize display name format. Args: display_name: Human-readable extension name Ret | STRING |
| HIGH | …et-extensions-cli/src/superset_extensions_cli/utils.py | 337 | Generate all extension name variants from input. Args: display_name: Human-readable name (e.g., "Dashb | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/unit_tests/utils/gcs_tests.py | 59 | mock_get_client.return_value.bucket.return_value.blob.assert_called_once_with( | CODE |
| CRITICAL⚡ | …s/unit_tests/extensions/storage/test_persistent_dao.py | 492 | mock_db.session.query.return_value.filter.return_value.scalar.assert_not_called() | CODE |
| CRITICAL⚡ | …s/unit_tests/extensions/storage/test_persistent_dao.py | 509 | mock_db.session.query.return_value.filter.return_value.scalar.assert_not_called() | CODE |
| CRITICAL | …s/unit_tests/extensions/storage/test_persistent_dao.py | 435 | mock_db.session.query.return_value.filter.return_value.first.assert_not_called() | CODE |
| CRITICAL | tests/unit_tests/db_engine_specs/test_presto.py | 1311 | mock_db.session.query.return_value.filter_by.assert_called_once_with( | STRING |
| CRITICAL | tests/unit_tests/commands/report/execute_test.py | 522 | session.query.return_value.filter.return_value.with_for_update.assert_not_called() | CODE |
| CRITICAL | …art-point-cluster-map/test/ScatterPlotOverlay.test.tsx | 418 | expect(redrawParams.ctx.fillText.mock.calls.map(call => call[0])).toEqual([ | CODE |
| CRITICAL | …art-point-cluster-map/test/ScatterPlotOverlay.test.tsx | 933 | redrawParams.ctx.arc.mock.calls.forEach(call => { | CODE |
| CRITICAL | .github/workflows/check-db-migration-confict.yml | 43 | const opts = github.rest.pulls.list.endpoint.merge({ | CODE |
| CRITICAL | .github/workflows/check-db-migration-confict.yml | 57 | const listFilesOpts = await github.rest.pulls.listFiles.endpoint.merge({ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …sts/unit_tests/security/test_guest_token_revocation.py | 156 | # Should simply return without raising when the UUID does not resolve. | COMMENT |
| MEDIUM⚡ | tests/unit_tests/utils/webdriver_test.py | 94 | """Test comprehensive Playwright availability checking.""" | STRING |
| MEDIUM⚡ | …tegration_tests/tasks/commands/test_internal_update.py | 263 | """Test atomic conditional status transitions with comprehensive scenarios. | STRING |
| MEDIUM | tests/integration_tests/dao/base_dao_test.py | 52 | # Create a test model for comprehensive testing | COMMENT |
| LOW | tests/integration_tests/charts/commands_tests.py | 878 | # can just pass in chart as well | COMMENT |
| MEDIUM | …ion_tests/dashboards/soft_delete_fixture_leak_tests.py | 41 | # End any transaction the harness opened earlier: an already-open SQLite | COMMENT |
| MEDIUM | …frontend/plugins/plugin-chart-table/src/TableChart.tsx | 1744 | // Use a ref to store previous clientViewRows and exportColumns for robust change detection | COMMENT |
| MEDIUM | superset-frontend/src/middleware/realtime.test.ts | 367 | // reconcile the outage rather than treating it as a seamless keepalive. | COMMENT |
| MEDIUM | superset-frontend/src/middleware/realtime.ts | 99 | // token refresh — seamless, so an expensive reconcile isn't warranted). | COMMENT |
| MEDIUM | superset-frontend/src/middleware/realtime.ts | 298 | // seamless handover), so open-listeners can skip an expensive reconcile. | COMMENT |
| MEDIUM | superset-frontend/src/middleware/realtime.ts | 305 | // seamless keepalive handoff of a closed socket would cancel that real | COMMENT |
| MEDIUM | superset-frontend/src/views/CRUD/hooks.test.tsx | 741 | // A seamless keepalive token refresh must not trigger a full displayed-row | COMMENT |
| MEDIUM | superset-frontend/src/views/CRUD/hooks.ts | 367 | // connect (rows were just fetched) or a seamless `keepalive` token refresh — | COMMENT |
| MEDIUM | …nd/src/pages/DatasetList/DatasetList.listview.test.tsx | 1797 | // Select row by dataset name (row-scoped query is more robust than array index) | COMMENT |
| MEDIUM | …nd/src/pages/DatasetList/DatasetList.listview.test.tsx | 1869 | // Select row by dataset name (row-scoped query is more robust than array index) | COMMENT |
| MEDIUM | …nd/src/pages/DatasetList/DatasetList.listview.test.tsx | 1945 | // Select first virtual dataset by name (row-scoped query is more robust than array index) | COMMENT |
| MEDIUM | …nd/src/pages/DatasetList/DatasetList.listview.test.tsx | 1991 | // Select first physical dataset by name (row-scoped query is more robust than array index) | COMMENT |
| MEDIUM | …nd/src/pages/DatasetList/DatasetList.listview.test.tsx | 2041 | // Select first dataset by name (row-scoped query is more robust than array index) | COMMENT |
| MEDIUM | superset/config.py | 2180 | # This is move involved example where depending on the database you can leverage data | COMMENT |
| LOW | superset/tasks/context.py | 614 | # No original error, just use handler failures | COMMENT |
| MEDIUM⚡ | superset/mcp_service/mcp_core.py | 827 | """Tool interface for generating comprehensive instance information.""" | STRING |
| MEDIUM⚡ | superset/mcp_service/mcp_core.py | 836 | """Generate comprehensive instance information.""" | STRING |
| MEDIUM | superset/mcp_service/mcp_core.py | 981 | """Execute schema discovery and return comprehensive schema info.""" | STRING |
| LOW | …vice/chart/validation/runtime/cardinality_validator.py | 90 | # but that requires DB access - for now just return OK | COMMENT |
| MEDIUM | superset/mcp_service/chart/tool/generate_chart.py | 203 | # Run comprehensive validation pipeline | COMMENT |
| MEDIUM | superset/mcp_service/chart/tool/get_chart_data.py | 1036 | # Generate comprehensive summary with cache info | COMMENT |
| LOW | superset/db_engine_specs/lint_metadata.py | 364 | # f-strings - just return placeholder | COMMENT |
| MEDIUM | superset/commands/dataset/importers/v1/utils.py | 394 | # a hidden contract; the explicit flush makes it robust. The lookup | COMMENT |
| MEDIUM | superset/commands/chart/importers/v1/utils.py | 130 | # contract; the explicit flush makes it robust. The lookup then | COMMENT |
| MEDIUM | superset/commands/dashboard/importers/v1/utils.py | 391 | # hidden contract; the explicit flush makes it robust. The lookup | COMMENT |
| MEDIUM | superset/views/redirect.py | 65 | # Block dangerous schemes using urlparse for robust detection | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | superset-core/src/superset_core/mcp/decorators.py | 51 | CODE | |
| LOW | …sts/unit_tests/charts/test_dashboard_filter_context.py | 69 | CODE | |
| LOW | …tests/mcp_service/database/tool/test_database_tools.py | 65 | CODE | |
| LOW | …mcp_service/saved_query/tool/test_saved_query_tools.py | 78 | CODE | |
| LOW | …ts/unit_tests/mcp_service/task/tool/test_task_tools.py | 35 | CODE | |
| LOW | …nit_tests/mcp_service/report/tool/test_report_tools.py | 34 | CODE | |
| LOW | …/unit_tests/mcp_service/query/tool/test_query_tools.py | 72 | CODE | |
| LOW | tests/unit_tests/daos/test_tasks.py | 39 | CODE | |
| LOW | tests/integration_tests/base_tests.py | 479 | CODE | |
| LOW | tests/integration_tests/base_tests.py | 654 | CODE | |
| LOW | tests/integration_tests/base_tests.py | 726 | CODE | |
| LOW | tests/integration_tests/insert_chart_mixin.py | 31 | CODE | |
| LOW | tests/integration_tests/datasets/api_tests.py | 115 | CODE | |
| LOW | tests/integration_tests/queries/api_tests.py | 43 | CODE | |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 49 | CODE | |
| LOW | …/integration_tests/dashboards/superset_factory_util.py | 75 | CODE | |
| LOW | tests/integration_tests/reports/utils.py | 67 | CODE | |
| LOW | tests/integration_tests/reports/utils.py | 140 | CODE | |
| LOW | superset/core/mcp/core_mcp_injection.py | 145 | CODE | |
| LOW | superset/coordination/cache_backend.py | 188 | CODE | |
| LOW | superset/coordination/cache_backend.py | 267 | CODE | |
| LOW | superset/security/manager.py | 4959 | CODE | |
| LOW | superset/charts/client_processing.py | 482 | CODE | |
| LOW | superset/charts/data/api.py | 641 | CODE | |
| LOW | superset/utils/cache_manager.py | 94 | CODE | |
| LOW | superset/utils/cache_manager.py | 118 | CODE | |
| LOW | superset/utils/core.py | 938 | CODE | |
| LOW | superset/utils/dashboard_import_export.py | 33 | CODE | |
| LOW | superset/utils/json.py | 188 | CODE | |
| LOW | superset/utils/pandas_postprocessing/pivot.py | 235 | CODE | |
| LOW | superset/models/helpers.py | 1598 | CODE | |
| LOW | superset/models/helpers.py | 4739 | CODE | |
| LOW | superset/mcp_service/mcp_core.py | 364 | CODE | |
| LOW | superset/mcp_service/app.py | 675 | CODE | |
| LOW | superset/mcp_service/app.py | 1049 | CODE | |
| LOW | superset/mcp_service/chart/tool/get_chart_data.py | 1432 | CODE | |
| LOW | superset/mcp_service/chart/tool/get_chart_data.py | 1694 | CODE | |
| LOW | superset/mcp_service/chart/tool/get_chart_data.py | 1728 | CODE | |
| LOW | superset/common/query_object_factory.py | 52 | CODE | |
| LOW | superset/common/tabular_query.py | 326 | CODE | |
| LOW | superset/common/query_object.py | 125 | CODE | |
| LOW | superset/common/query_context_factory.py | 48 | CODE | |
| LOW | superset/common/utils/query_cache_manager.py | 55 | CODE | |
| LOW | superset/db_engine_specs/presto.py | 428 | CODE | |
| LOW | superset/daos/base.py | 875 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | superset-core/src/superset_core/mcp/decorators.py | 61 | ) -> Any: # Use Any to avoid mypy issues with dependency injection | CODE |
| MEDIUM | superset-core/src/superset_core/mcp/decorators.py | 138 | ) -> Any: # Use Any to avoid mypy issues with dependency injection | CODE |
| MEDIUM | CHANGELOG/6.1.0.md | 191 | - [#35163](https://github.com/apache/superset/pull/35163) feat(mcp): PR1 - Add MCP service scaffold for Apache Superset | CODE |
| MEDIUM | CHANGELOG/6.1.0.md | 191 | - [#35163](https://github.com/apache/superset/pull/35163) feat(mcp): PR1 - Add MCP service scaffold for Apache Superset | CODE |
| MEDIUM | CHANGELOG/6.1.0.md | 439 | - [#38391](https://github.com/apache/superset/pull/38391) fix(mcp): add guardrails to prevent LLM artifact generation (@ | CODE |
| MEDIUM | CHANGELOG/6.1.0.md | 439 | - [#38391](https://github.com/apache/superset/pull/38391) fix(mcp): add guardrails to prevent LLM artifact generation (@ | CODE |
| MEDIUM | CHANGELOG/6.1.0.md | 732 | - [#38472](https://github.com/apache/superset/pull/38472) docs(extensions): fix extension developer documentation and CL | CODE |
| MEDIUM | tests/unit_tests/tasks/test_manager.py | 19 | Since PR #43316, the pub/sub-wake-else-poll orchestration lives in | STRING |
| MEDIUM | superset/tasks/schemas.py | 150 | # The internal ``private`` bucket (framework orchestration + error debug + | COMMENT |
| MEDIUM | superset/mcp_service/app.py | 772 | # Initialize MCP dependency injection BEFORE importing tools/prompts. | COMMENT |
| MEDIUM | superset/commands/tasks/reap.py | 95 | # the existing private subtree so the framework orchestration handles and | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | docker-compose-image-tag.yml | 20 | # If you choose to use this type of deployment make sure to | COMMENT |
| LOW⚡ | docker-compose-non-dev.yml | 20 | # If you choose to use this type of deployment make sure to | COMMENT |
| LOW⚡ | docker-compose.yml | 20 | # If you choose to use this type of deployment make sure to | COMMENT |
| LOW | tests/integration_tests/reports/utils.py | 255 | # make sure to clean up in case of yield exceptions | COMMENT |
| MEDIUM | superset/config.py | 92 | # Note that you can use `StdOutEventLogger` for debugging | COMMENT |
| MEDIUM | superset/config.py | 293 | # Note that you can use this to set the isolation level of your database, as in | COMMENT |
| MEDIUM | superset/config.py | 616 | # for adding your own map tiles, you can use the following format: | COMMENT |
| LOW | superset/config.py | 219 | # You should also make sure to configure your WSGI server | COMMENT |
| LOW | superset/constants.py | 18 | # ATTENTION: If you change any constants, make sure to also change utils/common.js | COMMENT |
| LOW | superset/utils/pandas_postprocessing/utils.py | 256 | # make sure to return a new DataFrame instead of changing the `base_df`. | COMMENT |
| LOW | helm/superset/values.yaml | 1140 | # Make sure you are giving a strong password for the admin user creation( else make sure you are changing after setup) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/integration_tests/dashboards/api_tests.py | 5709 | CODE | |
| MEDIUM | tests/integration_tests/dashboards/api_tests.py | 5836 | CODE | |
| MEDIUM | tests/integration_tests/dashboards/api_tests.py | 5886 | CODE | |
| MEDIUM | tests/integration_tests/dashboards/api_tests.py | 6070 | CODE | |
| MEDIUM | tests/integration_tests/dashboards/api_tests.py | 6116 | CODE | |
| MEDIUM | tests/integration_tests/dashboards/api_tests.py | 6169 | CODE | |
| MEDIUM | tests/integration_tests/dashboards/api_tests.py | 6211 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | superset/mcp_service/jwt_verifier.py | 192 | ' "Authorization": "Bearer <your-api-key>"\n' | CODE |
| HIGH | superset/mcp_service/jwt_verifier.py | 228 | "and <code><your-api-key></code> with a valid API key or JWT token." | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/developer_docs/contributing/howtos.md | 413 | translations](#applying-translations) above), so an AI-generated string is shown | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/docker-compose-up.sh | 27 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | superset/tasks/scheduler.py | 396 | def execute_task( | CODE |