Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.
This report presents the forensic synthetic code analysis of getredash/redash, a Python project with 28,695 GitHub stars. SynthScan v2.0 examined 126,324 lines of code across 1048 source files, recording 1057 pattern matches distributed across 14 syntactic categories. The overall adjusted score of 9.6 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1057 distinct pattern matches across 14 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/release_manager.py | 130 | def update_release_commit_sha(release, commit_sha): | CODE |
| LOW | viz-lib/README.md | 139 | function wrapComponentWithSettings(WrappedComponent) { | CODE |
| LOW | viz-lib/src/visualizations/visualizationsSettings.tsx | 59 | 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 |
| 652 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/release_manager.py | 120 | except Exception: | CODE |
| LOW | bin/release_manager.py | 162 | except Exception as ex: | CODE |
| MEDIUM | bin/release_manager.py | 143 | def update_release(version, build_filepath, commit_sha): | CODE |
| LOW | bin/get_changes.py | 31 | except Exception: | CODE |
| 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 | 44 | 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 | 181 | 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 |
| 42 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 | 8 | 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 | 18 | logger = logging.getLogger(__name__) | CODE |
| LOW | redash/query_runner/__init__.py | 20 | __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 | 20 | 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 | 218 | :>json string retrieved_at: Time when query results were last retrieved, in ISO format (may be null) | STRING |
| HIGH | redash/handlers/queries.py | 219 | :>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 | 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/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 | 168 | 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 | 83 | 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/authentication.py | 31 | 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 | 274 | "rows": [{"id": 5, "Name": "John", "Value": "John Doe"}], | CODE |
| LOW⚡ | tests/models/test_parameterized_query.py | 279 | self.assertEqual(values, [{"name": "John", "value": "John Doe"}]) | 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 | 187 | query: "select 'lorem ipsum' FROM generate_series(1,50)", | CODE |
| LOW | …/cypress/integration/visualizations/word_cloud_spec.js | 6 | 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 | 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 | 305 | # This method handles two cases: retrieving result by id & retrieving result by query id. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/release_manager.py | 26 | CODE | |
| 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 | 425 | CODE |
| 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/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/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 |