Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.
This report summarizes scanner evidence for getredash/redash, a Python project with 28,831 GitHub stars. SynthScan examined 128,659 lines of code across 1064 source files, recording 1147 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 10.4 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 873 finding(s).
Are imports declared and package/API names verified? 104 finding(s).
Are wrappers, guards, and repeated structures necessary? 966 finding(s).
Which changes need focused human review? 1147 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 1147 distinct pattern matches across 15 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 | viz-lib/README.md | 139 | function wrapComponentWithSettings(WrappedComponent) { | CODE |
| LOW | viz-lib/src/visualizations/visualizationsSettings.tsx | 60 | export function updateVisualizationsSettings(options: any) { | CODE |
| LOW | viz-lib/src/visualizations/registeredVisualizations.ts | 56 | function validateVisualizationConfig(config: any) { | CODE |
| LOW | viz-lib/src/visualizations/chart/plotly/updateData.ts | 23 | function defaultFormatSeriesTextForPie(item: any) { | CODE |
| LOW | …ib/src/visualizations/chart/plotly/customChartUtils.ts | 22 | export function createCustomChartRenderer(code: any, logErrorsToConsole = false) { | CODE |
| LOW | …ib/src/visualizations/chart/Editor/GeneralSettings.tsx | 11 | function getAvailableColumnMappingTypes(options: any) { | CODE |
| LOW | …ib/src/visualizations/chart/Editor/GeneralSettings.tsx | 65 | function mappedColumnsToColumnMappings(mappedColumns: any) { | CODE |
| LOW | …ib/src/visualizations/chart/Editor/GeneralSettings.tsx | 89 | function handleGlobalSeriesTypeChange(globalSeriesType: any) { | CODE |
| LOW | …ib/src/visualizations/chart/Editor/GeneralSettings.tsx | 101 | function handleColumnMappingChange(column: any, type: any) { | CODE |
| LOW | …ib/src/visualizations/chart/Editor/GeneralSettings.tsx | 109 | function handleLegendPlacementChange(value: any) { | CODE |
| LOW | viz-lib/src/visualizations/shared/columnUtils.ts | 28 | export function getColumnContentAlignment(type: any) { | CODE |
| LOW | viz-lib/src/visualizations/map/Editor/StyleSettings.tsx | 64 | function getCustomIconOptionFields(iconShape: any) { | CODE |
| LOW | viz-lib/src/visualizations/sunburst/initSunburst.ts | 29 | function buildNodesFromHierarchyData(data: any) { | CODE |
| LOW | viz-lib/src/lib/referenceCountingCache.ts | 3 | export default function createReferenceCountingCache({ cleanupDelay = 2000 } = {}) { | CODE |
| LOW | viz-lib/src/lib/chooseTextColorForBackground.ts | 4 | export default function chooseTextColorForBackground(backgroundColor: any, textColors = ["#ffffff", "#333333"]) { | CODE |
| LOW | tests/test_monitor.py | 7 | def test_rq_job_ids_uses_rq_redis_connection(): | CODE |
| LOW⚡ | tests/test_utils.py | 43 | def test_uses_current_request_port(self): | CODE |
| LOW⚡ | tests/test_utils.py | 49 | def test_uses_current_request_schema(self): | CODE |
| LOW⚡ | tests/test_utils.py | 55 | def test_skips_port_for_default_ports(self): | CODE |
| LOW | tests/test_utils.py | 75 | def test_ignores_non_prefixed_values(self): | CODE |
| LOW | tests/test_utils.py | 78 | def test_takes_prefixed_values(self): | CODE |
| LOW | tests/test_utils.py | 141 | def test_get_column_types_from_dataframe(mock_dataframe): | CODE |
| LOW⚡ | tests/test_handlers.py | 15 | def test_returns_content_when_authenticated(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 22 | def test_responds_with_success_for_signed_in_user(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 30 | def test_redirects_for_nonsigned_in_user(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 34 | def test_redirects_for_invalid_session_identifier(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 60 | def test_redirect_to_login_when_not_authenticated(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 65 | def test_returns_content_when_authenticated(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 72 | def test_returns_data_for_super_admin(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 82 | def test_redirects_non_authenticated_user(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 203 | def test_submit_empty_password(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 211 | def test_user_already_loggedin(self): | CODE |
| LOW⚡ | tests/test_handlers.py | 217 | def test_correct_user_and_password_when_password_login_disabled(self): | CODE |
| LOW | tests/test_handlers.py | 102 | def test_get_login_form_remote_auth(self): | CODE |
| LOW | tests/test_handlers.py | 118 | def test_submit_non_existing_user(self): | CODE |
| LOW | tests/test_handlers.py | 124 | def test_submit_correct_user_and_password(self): | CODE |
| LOW | tests/test_handlers.py | 136 | def test_submit_case_insensitive_user_and_password(self): | CODE |
| LOW | tests/test_handlers.py | 151 | def test_submit_correct_user_and_password_and_remember_me(self): | CODE |
| LOW | tests/test_handlers.py | 166 | def test_submit_correct_user_and_password_with_next(self): | CODE |
| LOW | tests/test_handlers.py | 182 | def test_submit_incorrect_user(self): | CODE |
| LOW | tests/test_handlers.py | 188 | def test_submit_incorrect_password(self): | CODE |
| LOW | tests/test_handlers.py | 233 | def test_logout_when_not_loggedin(self): | CODE |
| LOW | tests/test_handlers.py | 239 | def test_logout_when_loggedin(self): | CODE |
| LOW | tests/test_configuration.py | 27 | def test_raises_exception_when_no_schema_set(self): | CODE |
| LOW | tests/test_configuration.py | 31 | def test_returns_dict_with_masked_secrets(self): | CODE |
| LOW⚡ | tests/test_configuration.py | 45 | def test_rejects_invalid_new_config(self): | CODE |
| LOW⚡ | tests/test_configuration.py | 48 | def test_fails_if_no_schema_set(self): | CODE |
| LOW⚡ | tests/test_configuration.py | 52 | def test_ignores_secret_placehodler(self): | CODE |
| LOW⚡ | tests/test_configuration.py | 61 | def test_doesnt_leave_leftovers(self): | CODE |
| LOW⚡ | tests/test_configuration.py | 71 | def test_works_for_schema_without_secret(self): | CODE |
| LOW | tests/test_migrations.py | 7 | def test_only_single_head_revision_in_migrations(): | CODE |
| LOW | tests/factories.py | 248 | def create_alert_subscription(self, **kwargs): | CODE |
| LOW | tests/factories.py | 307 | def create_visualization_with_params(self, **kwargs): | CODE |
| LOW⚡ | tests/test_authentication.py | 208 | def test_no_domain_allowed_for_org(self): | CODE |
| LOW⚡ | tests/test_authentication.py | 212 | def test_domain_not_in_org_domains_list(self): | CODE |
| LOW⚡ | tests/test_authentication.py | 217 | def test_domain_in_org_domains_list(self): | CODE |
| LOW⚡ | tests/test_authentication.py | 228 | def test_org_in_public_mode_accepts_any_domain(self): | CODE |
| LOW⚡ | tests/test_authentication.py | 234 | def test_user_not_in_domain_but_account_exists(self): | CODE |
| LOW⚡ | tests/test_authentication.py | 242 | def test_when_multi_org_enabled_and_org_exists(self): | CODE |
| LOW⚡ | tests/test_authentication.py | 246 | def test_when_multi_org_enabled_and_org_doesnt_exist(self): | CODE |
| 729 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/query_runner/test_google_spreadsheets.py | 189 | except Exception: | CODE |
| MEDIUM | tests/query_runner/test_google_spreadsheets.py | 183 | def test_connect_succuess(self, mock_client, _mock_auth_default): | CODE |
| LOW | tests/handlers/test_query_results.py | 48 | except Exception as e: | CODE |
| LOW | redash/metrics/database.py | 41 | except Exception: | CODE |
| LOW | redash/tasks/alerts.py | 16 | except Exception: | CODE |
| LOW | redash/tasks/databricks.py | 17 | except Exception: | CODE |
| LOW⚡ | redash/tasks/databricks.py | 34 | except Exception: | CODE |
| LOW⚡ | redash/tasks/databricks.py | 44 | except Exception: | CODE |
| LOW⚡ | redash/tasks/databricks.py | 53 | except Exception: | CODE |
| MEDIUM | redash/tasks/databricks.py | 10 | def get_databricks_databases(data_source_id, redis_key): | CODE |
| MEDIUM | redash/tasks/databricks.py | 22 | def get_database_tables_with_columns(data_source_id, database_name, redis_key): | CODE |
| MEDIUM | redash/tasks/databricks.py | 39 | def get_databricks_tables(data_source_id, database_name): | CODE |
| MEDIUM | redash/tasks/databricks.py | 49 | def get_databricks_table_columns(data_source_id, database_name, table_name): | CODE |
| LOW | redash/tasks/general.py | 29 | except Exception: | CODE |
| LOW | redash/tasks/general.py | 60 | except Exception: | CODE |
| LOW | redash/tasks/general.py | 69 | except Exception as e: | CODE |
| LOW | redash/tasks/general.py | 87 | except Exception as e: | CODE |
| MEDIUM | redash/tasks/general.py | 55 | def send_mail(to, subject, html, text): | CODE |
| MEDIUM | redash/tasks/general.py | 65 | def test_connection(data_source_id): | CODE |
| MEDIUM | redash/tasks/general.py | 76 | def get_schema(data_source_id, refresh): | CODE |
| LOW | redash/tasks/queries/execution.py | 209 | except Exception as e: | CODE |
| LOW | redash/tasks/queries/maintenance.py | 103 | except Exception as e: | CODE |
| LOW | redash/tasks/queries/maintenance.py | 183 | except Exception: | CODE |
| LOW | redash/destinations/microsoft_teams_webhook.py | 110 | except Exception: | CODE |
| LOW | redash/destinations/hangoutschat.py | 92 | except Exception: | CODE |
| MEDIUM | redash/destinations/hangoutschat.py | 40 | def notify(self, alert, query, user, new_state, app, host, metadata, options): | CODE |
| LOW | redash/destinations/asana.py | 60 | except Exception as e: | STRING |
| LOW | redash/destinations/webhook.py | 52 | except Exception: | CODE |
| MEDIUM | redash/destinations/webhook.py | 29 | def notify(self, alert, query, user, new_state, app, host, metadata, options): | CODE |
| LOW | redash/destinations/discord.py | 66 | except Exception as e: | CODE |
| LOW | redash/destinations/mattermost.py | 52 | except Exception: | CODE |
| LOW | redash/destinations/chatwork.py | 60 | except Exception: | CODE |
| MEDIUM | redash/destinations/chatwork.py | 32 | def notify(self, alert, query, user, new_state, app, host, metadata, options): | CODE |
| LOW | redash/destinations/email.py | 53 | except Exception: | CODE |
| LOW | redash/destinations/webex.py | 226 | except Exception as e: | CODE |
| MEDIUM | redash/destinations/webex.py | 215 | def post_message(self, payload, headers): | CODE |
| LOW | redash/destinations/pagerduty.py | 78 | except Exception: | CODE |
| LOW | redash/destinations/slack.py | 57 | except Exception: | CODE |
| LOW | redash/destinations/datadog.py | 89 | except Exception as e: | CODE |
| LOW | redash/models/__init__.py | 221 | except Exception: | CODE |
| LOW | redash/models/__init__.py | 635 | except Exception as e: | CODE |
| LOW | redash/models/parameterized_query.py | 184 | except Exception: | CODE |
| LOW | redash/cli/users.py | 115 | except Exception as e: | CODE |
| LOW | redash/cli/users.py | 187 | except Exception as e: | CODE |
| LOW | redash/cli/organization.py | 43 | except Exception as e: | CODE |
| LOW | redash/cli/groups.py | 41 | except Exception as e: | CODE |
| LOW | redash/cli/groups.py | 74 | except Exception as e: | CODE |
| LOW | redash/cli/data_sources.py | 78 | except Exception as e: | CODE |
| MEDIUM | redash/cli/data_sources.py | 159 | print("Error: invalid configuration.") | CODE |
| LOW | redash/query_runner/d1.py | 116 | except Exception as e: | CODE |
| LOW | redash/query_runner/d1.py | 140 | except Exception as e: | CODE |
| MEDIUM | redash/query_runner/d1.py | 91 | def run_query(self, query, user): | CODE |
| LOW | redash/query_runner/corporate_memory.py | 163 | except Exception as error: | CODE |
| LOW | redash/query_runner/corporate_memory.py | 174 | except Exception: | CODE |
| LOW | redash/query_runner/influx_db_v2.py | 139 | except Exception: | CODE |
| LOW | redash/query_runner/influx_db_v2.py | 206 | except Exception as ex: | CODE |
| LOW | redash/query_runner/tinybird.py | 79 | except Exception: | CODE |
| LOW | redash/query_runner/clickhouse.py | 227 | except Exception as e: | STRING |
| LOW | redash/query_runner/yandex_disk.py | 146 | except Exception as e: | CODE |
| LOW | redash/query_runner/treasuredata.py | 89 | except Exception: | CODE |
| 38 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | redash/__init__.py | 13 | CODE | |
| LOW | redash/settings/__init__.py | 3 | CODE | |
| LOW | redash/settings/__init__.py | 8 | CODE | |
| LOW | redash/settings/__init__.py | 17 | CODE | |
| LOW | redash/settings/__init__.py | 17 | CODE | |
| LOW | redash/tasks/__init__.py | 4 | CODE | |
| LOW | redash/tasks/__init__.py | 5 | CODE | |
| LOW | redash/tasks/__init__.py | 6 | CODE | |
| LOW | redash/tasks/__init__.py | 6 | CODE | |
| LOW | redash/tasks/__init__.py | 6 | CODE | |
| LOW | redash/tasks/__init__.py | 6 | CODE | |
| LOW | redash/tasks/__init__.py | 12 | CODE | |
| LOW | redash/tasks/__init__.py | 12 | CODE | |
| LOW | redash/tasks/__init__.py | 12 | CODE | |
| LOW | redash/tasks/__init__.py | 12 | CODE | |
| LOW | redash/tasks/__init__.py | 12 | CODE | |
| LOW | redash/tasks/__init__.py | 12 | CODE | |
| LOW | redash/tasks/__init__.py | 12 | CODE | |
| LOW | redash/tasks/__init__.py | 21 | CODE | |
| LOW | redash/tasks/__init__.py | 21 | CODE | |
| LOW | redash/tasks/__init__.py | 21 | CODE | |
| LOW | redash/tasks/__init__.py | 26 | CODE | |
| LOW | redash/tasks/__init__.py | 26 | CODE | |
| LOW | redash/tasks/__init__.py | 26 | CODE | |
| LOW | redash/tasks/queries/__init__.py | 1 | CODE | |
| LOW | redash/tasks/queries/__init__.py | 1 | CODE | |
| LOW | redash/tasks/queries/__init__.py | 2 | CODE | |
| LOW | redash/tasks/queries/__init__.py | 2 | CODE | |
| LOW | redash/tasks/queries/__init__.py | 2 | CODE | |
| LOW | redash/tasks/queries/__init__.py | 2 | CODE | |
| LOW | redash/tasks/queries/__init__.py | 2 | CODE | |
| LOW | redash/utils/__init__.py | 13 | CODE | |
| LOW | redash/utils/__init__.py | 18 | CODE | |
| LOW | redash/utils/__init__.py | 25 | CODE | |
| LOW | redash/utils/requests_session.py | 11 | CODE | |
| LOW | redash/models/__init__.py | 13 | CODE | |
| LOW | redash/models/__init__.py | 20 | CODE | |
| LOW | redash/models/__init__.py | 31 | CODE | |
| LOW | redash/models/__init__.py | 41 | CODE | |
| LOW | redash/models/__init__.py | 49 | CODE | |
| LOW | redash/models/__init__.py | 57 | CODE | |
| LOW | redash/models/__init__.py | 57 | CODE | |
| LOW | redash/models/__init__.py | 57 | CODE | |
| LOW | redash/models/__init__.py | 64 | CODE | |
| LOW | redash/models/__init__.py | 64 | CODE | |
| LOW | redash/models/__init__.py | 64 | CODE | |
| LOW | redash/models/__init__.py | 73 | CODE | |
| LOW | redash/cli/__init__.py | 86 | CODE | |
| LOW | redash/query_runner/corporate_memory.py | 17 | CODE | |
| LOW | redash/query_runner/corporate_memory.py | 17 | CODE | |
| LOW | redash/query_runner/yandex_disk.py | 13 | CODE | |
| LOW | redash/query_runner/sparql_endpoint.py | 17 | CODE | |
| LOW | redash/query_runner/__init__.py | 9 | CODE | |
| LOW | redash/query_runner/excel.py | 15 | CODE | |
| LOW | redash/query_runner/excel.py | 17 | CODE | |
| LOW | redash/query_runner/db2.py | 68 | CODE | |
| LOW | redash/query_runner/cloudwatch_insights.py | 11 | CODE | |
| LOW | redash/query_runner/couchbase.py | 16 | CODE | |
| LOW | redash/query_runner/arango.py | 57 | CODE | |
| LOW | redash/serializers/__init__.py | 10 | CODE | |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | redash/tasks/schedule.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/destinations/__init__.py | 3 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/destinations/__init__.py | 5 | __all__ = ["BaseDestination", "register", "get_destination", "import_destinations"] | CODE |
| LOW | redash/utils/pandas.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/models/users.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/models/__init__.py | 85 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/elasticsearch2.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/elasticsearch.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/corporate_memory.py | 27 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/influx_db_v2.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/tinybird.py | 8 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/pg.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/clickhouse.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/trino.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/yandex_disk.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/mssql.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/big_query.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/axibase_tsd.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/impala_ds.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/treasuredata.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/salesforce.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/sparql_endpoint.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/graphite.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/mongodb.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/memsql_ds.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/__init__.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/__init__.py | 32 | __all__ = [ | CODE |
| LOW | redash/query_runner/excel.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/sqlite.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/mssql_odbc.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/query_results.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/db2.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/google_search_console.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/csv.py | 12 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/python.py | 43 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/google_spreadsheets.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/drill.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/google_analytics4.py | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/presto.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/pinot.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/databricks.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/yandex_metrica.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/oracle.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/vertica.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/nz.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/phoenix.py | 13 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/duckdb.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/athena.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/hive_ds.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/kylin.py | 19 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/ignite.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/cass.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/google_analytics.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/influx_db.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/couchbase.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/arango.py | 11 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/uptycs.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/mysql.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/e6data.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/authentication/account.py | 10 | logger = logging.getLogger(__name__) | CODE |
| 1 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_utils.py | 162 | assert mock_dataframe.equals(pd.DataFrame(result["rows"])) | CODE |
| HIGH | tests/__init__.py | 53 | self.app_ctx.push() | CODE |
| HIGH⚡ | tests/query_runner/test_yandex_disk.py | 227 | assert test_df.equals(EXTENSIONS_READERS["xlsx"](output)) | STRING |
| HIGH⚡ | tests/query_runner/test_yandex_disk.py | 236 | assert test_df.equals(EXTENSIONS_READERS["csv"](output)) | STRING |
| HIGH⚡ | tests/query_runner/test_yandex_disk.py | 245 | assert test_df.equals(EXTENSIONS_READERS["tsv"](output)) | STRING |
| HIGH⚡ | redash/authentication/remote_user_auth.py | 30 | # Some Apache auth configurations will, stupidly, set (null) instead of a | COMMENT |
| HIGH⚡ | redash/authentication/remote_user_auth.py | 32 | # '(null)' should never really be a value that anyone wants to legitimately | COMMENT |
| HIGH⚡ | redash/authentication/remote_user_auth.py | 34 | if email == "(null)": | CODE |
| HIGH | redash/handlers/queries.py | 224 | :>json string retrieved_at: Time when query results were last retrieved, in ISO format (may be null) | STRING |
| HIGH | redash/handlers/queries.py | 225 | :>json number runtime: Runtime of last query execution, in seconds (may be null) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/query_runner/test_json_ds.py | 11 | CODE | |
| LOW | tests/handlers/test_query_results.py | 330 | CODE | |
| LOW | tests/handlers/test_query_results.py | 347 | CODE | |
| LOW | redash/tasks/worker.py | 116 | CODE | |
| LOW | redash/tasks/queries/execution.py | 32 | CODE | |
| LOW | redash/tasks/queries/execution.py | 150 | CODE | |
| LOW | redash/tasks/queries/maintenance.py | 33 | CODE | |
| LOW | redash/tasks/queries/maintenance.py | 193 | CODE | |
| LOW | redash/utils/query_order.py | 172 | CODE | |
| LOW | redash/utils/query_order.py | 199 | CODE | |
| LOW | redash/utils/pandas.py | 21 | CODE | |
| LOW | redash/utils/__init__.py | 83 | CODE | |
| LOW | redash/models/__init__.py | 593 | CODE | |
| LOW | redash/models/__init__.py | 649 | CODE | |
| LOW | redash/models/__init__.py | 1015 | CODE | |
| LOW | redash/models/parameterized_query.py | 54 | CODE | |
| LOW | redash/query_runner/elasticsearch2.py | 75 | CODE | |
| LOW | redash/query_runner/elasticsearch2.py | 113 | CODE | |
| LOW | redash/query_runner/elasticsearch2.py | 78 | CODE | |
| LOW | redash/query_runner/elasticsearch2.py | 143 | CODE | |
| LOW | redash/query_runner/elasticsearch.py | 123 | CODE | |
| LOW | redash/query_runner/elasticsearch.py | 180 | CODE | |
| LOW | redash/query_runner/elasticsearch.py | 356 | CODE | |
| LOW | redash/query_runner/elasticsearch.py | 206 | CODE | |
| LOW | redash/query_runner/pg.py | 58 | CODE | |
| LOW | redash/query_runner/clickhouse.py | 149 | CODE | |
| LOW | redash/query_runner/databend.py | 54 | CODE | |
| LOW | redash/query_runner/big_query.py | 46 | CODE | |
| LOW | redash/query_runner/treasuredata.py | 75 | CODE | |
| LOW | redash/query_runner/mongodb.py | 85 | CODE | |
| LOW | redash/query_runner/mongodb.py | 293 | CODE | |
| LOW | redash/query_runner/excel.py | 45 | CODE | |
| LOW | redash/query_runner/query_results.py | 60 | CODE | |
| LOW | redash/query_runner/query_results.py | 173 | CODE | |
| LOW | redash/query_runner/google_search_console.py | 38 | CODE | |
| LOW | redash/query_runner/google_search_console.py | 78 | CODE | |
| LOW | redash/query_runner/csv.py | 48 | CODE | |
| LOW | redash/query_runner/google_spreadsheets.py | 60 | CODE | |
| LOW | redash/query_runner/google_analytics4.py | 41 | CODE | |
| LOW | redash/query_runner/json_ds.py | 101 | CODE | |
| LOW | redash/query_runner/exasol.py | 14 | CODE | |
| LOW | redash/query_runner/duckdb.py | 88 | CODE | |
| LOW | redash/query_runner/athena.py | 190 | CODE | |
| LOW | redash/query_runner/jql.py | 35 | CODE | |
| LOW | redash/query_runner/google_analytics.py | 39 | CODE | |
| LOW | redash/query_runner/google_analytics.py | 128 | CODE | |
| LOW | redash/query_runner/rockset.py | 13 | CODE | |
| LOW | redash/query_runner/influx_db.py | 33 | CODE | |
| LOW | redash/query_runner/couchbase.py | 40 | CODE | |
| LOW | redash/serializers/__init__.py | 209 | CODE | |
| LOW | redash/serializers/__init__.py | 77 | CODE | |
| LOW | redash/serializers/__init__.py | 268 | CODE | |
| LOW | redash/authentication/__init__.py | 109 | CODE | |
| LOW | redash/handlers/query_results.py | 297 | CODE | |
| LOW | redash/handlers/authentication.py | 31 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | redash/utils/query_order.py | 195 | except AttributeError: | CODE |
| HIGH | redash/query_runner/corporate_memory.py | 174 | except Exception: | CODE |
| HIGH | redash/query_runner/sparql_endpoint.py | 149 | except Exception: | CODE |
| HIGH | redash/query_runner/__init__.py | 497 | except (ValueError, OverflowError): | CODE |
| HIGH | redash/query_runner/__init__.py | 503 | except (ValueError, OverflowError): | CODE |
| HIGH | redash/query_runner/__init__.py | 512 | except (ValueError, OverflowError): | CODE |
| HIGH | redash/query_runner/excel.py | 56 | except Exception: | CODE |
| HIGH | redash/query_runner/prometheus.py | 65 | except ValueError: | CODE |
| HIGH | redash/query_runner/csv.py | 58 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | viz-lib/src/visualizations/details/Renderer.test.tsx | 24 | name: "John Doe", | CODE |
| LOW | viz-lib/src/visualizations/details/Renderer.test.tsx | 46 | expect(el.text()).toContain("John Doe"); // name value | CODE |
| LOW | viz-lib/src/visualizations/details/Renderer.test.tsx | 166 | expect(el.text()).toContain("John Doe"); | CODE |
| LOW | tests/factories.py | 46 | name="John Doe", | CODE |
| LOW⚡ | tests/models/test_parameterized_query.py | 341 | "rows": [{"id": 5, "Name": "John", "Value": "John Doe"}], | CODE |
| LOW⚡ | tests/models/test_parameterized_query.py | 346 | self.assertEqual(values, [{"name": "John", "value": "John Doe"}]) | CODE |
| LOW⚡ | tests/query_runner/test_basequeryrunner.py | 17 | "Username": "*/ SELECT 999; --@example.org", | CODE |
| LOW⚡ | tests/handlers/test_query_results.py | 207 | email = "*/ SELECT 999; --@example.org" | CODE |
| LOW⚡ | tests/handlers/test_users.py | 43 | test_user = {"name": "User", "email": "user@example.com", "password": "test"} | CODE |
| LOW⚡ | tests/handlers/test_users.py | 54 | test_user = {"name": "User", "email": "user@example.com"} | CODE |
| LOW⚡ | tests/handlers/test_users.py | 64 | test_user = {"name": "User", "email": "user@example.com"} | CODE |
| LOW⚡ | tests/handlers/test_users.py | 78 | self.assertEqual(rv.json["email"], "user@example.com") | CODE |
| LOW | tests/handlers/test_users.py | 91 | test_user1 = {"name": "User", "email": "user@example.com", "password": "test"} | CODE |
| LOW | tests/handlers/test_users.py | 95 | self.assertEqual(rv.json["email"], "user@example.com") | CODE |
| LOW | client/cypress/integration/dashboard/widget_spec.js | 162 | query: "select 'lorem ipsum' FROM generate_series(1,50)", | CODE |
| LOW | …/cypress/integration/visualizations/word_cloud_spec.js | 4 | SELECT 'Lorem ipsum dolor' AS a, 'ipsum' AS b, 2 AS c UNION ALL | CODE |
| LOW | …egration/visualizations/table/.mocks/all-cell-types.js | 10 | '[{"a": 3.14, "b": "test", "c": [], "d": {}}, false, [null, 123], "Lorem ipsum dolor sit amet, consectetur adipiscin | CODE |
| LOW | …egration/visualizations/table/.mocks/all-cell-types.js | 10 | '[{"a": 3.14, "b": "test", "c": [], "d": {}}, false, [null, 123], "Lorem ipsum dolor sit amet, consectetur adipiscin | CODE |
| LOW | …tegration/visualizations/table/.mocks/large-dataset.js | 2 | "Lorem ipsum dolor sit amet consectetur adipiscing elit" + | CODE |
| LOW | …tegration/visualizations/table/.mocks/large-dataset.js | 2 | "Lorem ipsum dolor sit amet consectetur adipiscing elit" + | CODE |
| LOW | …egration/visualizations/table/.mocks/search-in-data.js | 4 | SELECT 'lorem ipsum' AS a, 'but TEST is here' AS b, 'none' AS c UNION ALL | CODE |
| LOW | …app/pages/users/components/ReadOnlyUserProfile.test.js | 13 | name: "John Doe", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/destinations/test_webhook.py | 9 | # Create a mock alert with all the properties needed by serialize_alert | COMMENT |
| MEDIUM⚡ | tests/handlers/test_query_results.py | 257 | # Create a sensitive data source the default user does NOT have access to | COMMENT |
| MEDIUM | redash/destinations/webex.py | 60 | # Create a table for the Adaptive Card | COMMENT |
| MEDIUM | redash/destinations/webex.py | 73 | # Create the body of the card with the table | COMMENT |
| MEDIUM | redash/handlers/query_results.py | 314 | # This method handles two cases: retrieving result by id & retrieving result by query id. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .restyled.yaml | 21 | # | COMMENT |
| LOW | redash/settings/__init__.py | 161 | # Enables the use of an externally-provided and trusted remote user via an HTTP | COMMENT |
| LOW | redash/settings/__init__.py | 181 | # If you also set the organization setting auth_password_login_enabled to false, | COMMENT |
| LOW | redash/settings/__init__.py | 461 | # to bound the CPU it will spend on a single statement. The defaults match | COMMENT |
| LOW | redash/utils/query_order.py | 1 | # Copyright (c) 2012, Konsta Vesterinen | COMMENT |
| LOW | redash/query_runner/memsql_ds.py | 101 | cursor = None | COMMENT |
| LOW | client/app/assets/less/inc/font.less | 1 | ///* -------------------------------------------------------- | COMMENT |
| LOW | client/app/assets/less/inc/font.less | 21 | //-----------------------------------------------------------*/ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/__init__.py | 106 | CODE | |
| LOW | tests/handlers/test_widgets.py | 16 | CODE | |
| LOW | redash/query_runner/big_query.py | 267 | CODE | |
| LOW | redash/query_runner/snowflake.py | 145 | CODE | |
| LOW | redash/query_runner/google_spreadsheets.py | 132 | CODE | |
| LOW | redash/query_runner/google_analytics4.py | 71 | CODE | |
| LOW | redash/handlers/queries.py | 435 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/query_runner/test_yandex_metrica.py | 85 | # before/after we get to the Nth call, just return success | COMMENT |
| MEDIUM | redash/settings/__init__.py | 182 | # then your authentication will be seamless. Otherwise a link will be presented | COMMENT |
| LOW | redash/settings/dynamic_settings.py | 64 | # To do so, simply add the name of the extension you'd like to load to this list. | COMMENT |
| LOW | redash/query_runner/ignite.py | 101 | # if it's a datetime, just return the milliseconds | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | redash/query_runner/memsql_ds.py | 121 | # ==================================================================================================== | COMMENT |
| MEDIUM | redash/query_runner/memsql_ds.py | 123 | # ==================================================================================================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | redash/destinations/webex.py | 58 | # Check if it's a 2D array | COMMENT |
| LOW | redash/destinations/webex.py | 208 | if not destination_id: # Check if the destination_id is empty or blank | CODE |
| LOW | redash/models/mixins.py | 13 | # Check if we really want to update the updated_at value | COMMENT |
| LOW | .github/workflows/periodic-snapshot.yml | 51 | # Check if both bump and specific version are provided | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | client/app/components/DialogWrapper.jsx | 83 | If you want to override behavior of `onOk`/`onCancel` - don't forget to close dialog: | CODE |