Repository Analysis

getredash/redash

Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.

8.9 Low AI signal View on GitHub
8.9
Adjusted Score
8.9
Raw Score
100%
Time Factor
2026-05-06
Last Push
28,613
Stars
Python
Language
125,900
Lines of Code
1047
Files
963
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 10MEDIUM 29LOW 924

Pattern Findings

963 matches across 12 categories. Click a row to expand file-level details.

Hyper-Verbose Identifiers687 hits · 758 pts
SeverityFileLineSnippet
LOWbin/release_manager.py130def update_release_commit_sha(release, commit_sha):
LOWviz-lib/README.md139function wrapComponentWithSettings(WrappedComponent) {
LOWviz-lib/src/visualizations/visualizationsSettings.tsx53export function updateVisualizationsSettings(options: any) {
LOWviz-lib/src/visualizations/registeredVisualizations.ts56function validateVisualizationConfig(config: any) {
LOWviz-lib/src/visualizations/chart/plotly/updateData.ts23function defaultFormatSeriesTextForPie(item: any) {
LOW…ib/src/visualizations/chart/plotly/customChartUtils.ts22export function createCustomChartRenderer(code: any, logErrorsToConsole = false) {
LOW…ib/src/visualizations/chart/Editor/GeneralSettings.tsx11function getAvailableColumnMappingTypes(options: any) {
LOW…ib/src/visualizations/chart/Editor/GeneralSettings.tsx65function mappedColumnsToColumnMappings(mappedColumns: any) {
LOW…ib/src/visualizations/chart/Editor/GeneralSettings.tsx89 function handleGlobalSeriesTypeChange(globalSeriesType: any) {
LOW…ib/src/visualizations/chart/Editor/GeneralSettings.tsx101 function handleColumnMappingChange(column: any, type: any) {
LOW…ib/src/visualizations/chart/Editor/GeneralSettings.tsx109 function handleLegendPlacementChange(value: any) {
LOWviz-lib/src/visualizations/shared/columnUtils.ts28export function getColumnContentAlignment(type: any) {
LOWviz-lib/src/visualizations/map/Editor/StyleSettings.tsx64function getCustomIconOptionFields(iconShape: any) {
LOWviz-lib/src/visualizations/sunburst/initSunburst.ts29function buildNodesFromHierarchyData(data: any) {
LOWviz-lib/src/lib/referenceCountingCache.ts3export default function createReferenceCountingCache({ cleanupDelay = 2000 } = {}) {
LOWviz-lib/src/lib/chooseTextColorForBackground.ts4export default function chooseTextColorForBackground(backgroundColor: any, textColors = ["#ffffff", "#333333"]) {
LOWtests/test_monitor.py7def test_rq_job_ids_uses_rq_redis_connection():
LOWtests/test_utils.py43 def test_uses_current_request_port(self):
LOWtests/test_utils.py49 def test_uses_current_request_schema(self):
LOWtests/test_utils.py55 def test_skips_port_for_default_ports(self):
LOWtests/test_utils.py75 def test_ignores_non_prefixed_values(self):
LOWtests/test_utils.py78 def test_takes_prefixed_values(self):
LOWtests/test_utils.py141def test_get_column_types_from_dataframe(mock_dataframe):
LOWtests/test_handlers.py15 def test_returns_content_when_authenticated(self):
LOWtests/test_handlers.py22 def test_responds_with_success_for_signed_in_user(self):
LOWtests/test_handlers.py30 def test_redirects_for_nonsigned_in_user(self):
LOWtests/test_handlers.py34 def test_redirects_for_invalid_session_identifier(self):
LOWtests/test_handlers.py60 def test_redirect_to_login_when_not_authenticated(self):
LOWtests/test_handlers.py65 def test_returns_content_when_authenticated(self):
LOWtests/test_handlers.py72 def test_returns_data_for_super_admin(self):
LOWtests/test_handlers.py82 def test_redirects_non_authenticated_user(self):
LOWtests/test_handlers.py203 def test_submit_empty_password(self):
LOWtests/test_handlers.py211 def test_user_already_loggedin(self):
LOWtests/test_handlers.py217 def test_correct_user_and_password_when_password_login_disabled(self):
LOWtests/test_handlers.py102 def test_get_login_form_remote_auth(self):
LOWtests/test_handlers.py118 def test_submit_non_existing_user(self):
LOWtests/test_handlers.py124 def test_submit_correct_user_and_password(self):
LOWtests/test_handlers.py136 def test_submit_case_insensitive_user_and_password(self):
LOWtests/test_handlers.py151 def test_submit_correct_user_and_password_and_remember_me(self):
LOWtests/test_handlers.py166 def test_submit_correct_user_and_password_with_next(self):
LOWtests/test_handlers.py182 def test_submit_incorrect_user(self):
LOWtests/test_handlers.py188 def test_submit_incorrect_password(self):
LOWtests/test_handlers.py233 def test_logout_when_not_loggedin(self):
LOWtests/test_handlers.py239 def test_logout_when_loggedin(self):
LOWtests/test_configuration.py27 def test_raises_exception_when_no_schema_set(self):
LOWtests/test_configuration.py31 def test_returns_dict_with_masked_secrets(self):
LOWtests/test_configuration.py45 def test_rejects_invalid_new_config(self):
LOWtests/test_configuration.py48 def test_fails_if_no_schema_set(self):
LOWtests/test_configuration.py52 def test_ignores_secret_placehodler(self):
LOWtests/test_configuration.py61 def test_doesnt_leave_leftovers(self):
LOWtests/test_configuration.py71 def test_works_for_schema_without_secret(self):
LOWtests/test_migrations.py7def test_only_single_head_revision_in_migrations():
LOWtests/factories.py248 def create_alert_subscription(self, **kwargs):
LOWtests/factories.py307 def create_visualization_with_params(self, **kwargs):
LOWtests/test_authentication.py208 def test_no_domain_allowed_for_org(self):
LOWtests/test_authentication.py212 def test_domain_not_in_org_domains_list(self):
LOWtests/test_authentication.py217 def test_domain_in_org_domains_list(self):
LOWtests/test_authentication.py228 def test_org_in_public_mode_accepts_any_domain(self):
LOWtests/test_authentication.py234 def test_user_not_in_domain_but_account_exists(self):
LOWtests/test_authentication.py242 def test_when_multi_org_enabled_and_org_exists(self):
627 more matches not shown…
Excessive Try-Catch Wrapping102 hits · 123 pts
SeverityFileLineSnippet
LOWbin/release_manager.py120 except Exception:
LOWbin/release_manager.py162 except Exception as ex:
MEDIUMbin/release_manager.py143def update_release(version, build_filepath, commit_sha):
LOWbin/get_changes.py31 except Exception:
LOWtests/query_runner/test_google_spreadsheets.py189 except Exception:
MEDIUMtests/query_runner/test_google_spreadsheets.py183def test_connect_succuess(self, mock_client, _mock_auth_default):
LOWtests/handlers/test_query_results.py44 except Exception as e:
LOWredash/metrics/database.py41 except Exception:
LOWredash/tasks/alerts.py16 except Exception:
LOWredash/tasks/databricks.py17 except Exception:
LOWredash/tasks/databricks.py34 except Exception:
LOWredash/tasks/databricks.py44 except Exception:
LOWredash/tasks/databricks.py53 except Exception:
MEDIUMredash/tasks/databricks.py10def get_databricks_databases(data_source_id, redis_key):
MEDIUMredash/tasks/databricks.py22def get_database_tables_with_columns(data_source_id, database_name, redis_key):
MEDIUMredash/tasks/databricks.py39def get_databricks_tables(data_source_id, database_name):
MEDIUMredash/tasks/databricks.py49def get_databricks_table_columns(data_source_id, database_name, table_name):
LOWredash/tasks/general.py29 except Exception:
LOWredash/tasks/general.py60 except Exception:
LOWredash/tasks/general.py69 except Exception as e:
LOWredash/tasks/general.py87 except Exception as e:
MEDIUMredash/tasks/general.py55def send_mail(to, subject, html, text):
MEDIUMredash/tasks/general.py65def test_connection(data_source_id):
MEDIUMredash/tasks/general.py76def get_schema(data_source_id, refresh):
LOWredash/tasks/queries/execution.py209 except Exception as e:
LOWredash/tasks/queries/maintenance.py103 except Exception as e:
LOWredash/tasks/queries/maintenance.py183 except Exception:
LOWredash/destinations/microsoft_teams_webhook.py110 except Exception:
LOWredash/destinations/hangoutschat.py92 except Exception:
MEDIUMredash/destinations/hangoutschat.py40def notify(self, alert, query, user, new_state, app, host, metadata, options):
LOWredash/destinations/asana.py60 except Exception as e:
LOWredash/destinations/webhook.py52 except Exception:
MEDIUMredash/destinations/webhook.py29def notify(self, alert, query, user, new_state, app, host, metadata, options):
LOWredash/destinations/discord.py66 except Exception as e:
LOWredash/destinations/mattermost.py52 except Exception:
LOWredash/destinations/chatwork.py60 except Exception:
MEDIUMredash/destinations/chatwork.py32def notify(self, alert, query, user, new_state, app, host, metadata, options):
LOWredash/destinations/email.py53 except Exception:
LOWredash/destinations/webex.py226 except Exception as e:
MEDIUMredash/destinations/webex.py215def post_message(self, payload, headers):
LOWredash/destinations/pagerduty.py78 except Exception:
LOWredash/destinations/slack.py57 except Exception:
LOWredash/destinations/datadog.py89 except Exception as e:
LOWredash/models/__init__.py221 except Exception:
LOWredash/models/__init__.py635 except Exception as e:
LOWredash/models/parameterized_query.py181 except Exception:
LOWredash/cli/users.py115 except Exception as e:
LOWredash/cli/users.py187 except Exception as e:
LOWredash/cli/organization.py43 except Exception as e:
LOWredash/cli/groups.py41 except Exception as e:
LOWredash/cli/groups.py74 except Exception as e:
LOWredash/cli/data_sources.py78 except Exception as e:
MEDIUMredash/cli/data_sources.py159 print("Error: invalid configuration.")
LOWredash/query_runner/d1.py116 except Exception as e:
LOWredash/query_runner/d1.py140 except Exception as e:
MEDIUMredash/query_runner/d1.py91def run_query(self, query, user):
LOWredash/query_runner/corporate_memory.py163 except Exception as error:
LOWredash/query_runner/corporate_memory.py174 except Exception:
LOWredash/query_runner/influx_db_v2.py139 except Exception:
LOWredash/query_runner/influx_db_v2.py206 except Exception as ex:
42 more matches not shown…
Unused Imports72 hits · 72 pts
SeverityFileLineSnippet
LOWredash/__init__.py13
LOWredash/settings/__init__.py3
LOWredash/settings/__init__.py8
LOWredash/settings/__init__.py17
LOWredash/settings/__init__.py17
LOWredash/tasks/__init__.py4
LOWredash/tasks/__init__.py5
LOWredash/tasks/__init__.py6
LOWredash/tasks/__init__.py6
LOWredash/tasks/__init__.py6
LOWredash/tasks/__init__.py6
LOWredash/tasks/__init__.py12
LOWredash/tasks/__init__.py12
LOWredash/tasks/__init__.py12
LOWredash/tasks/__init__.py12
LOWredash/tasks/__init__.py12
LOWredash/tasks/__init__.py12
LOWredash/tasks/__init__.py12
LOWredash/tasks/__init__.py21
LOWredash/tasks/__init__.py21
LOWredash/tasks/__init__.py21
LOWredash/tasks/__init__.py26
LOWredash/tasks/__init__.py26
LOWredash/tasks/__init__.py26
LOWredash/tasks/queries/__init__.py1
LOWredash/tasks/queries/__init__.py1
LOWredash/tasks/queries/__init__.py2
LOWredash/tasks/queries/__init__.py2
LOWredash/tasks/queries/__init__.py2
LOWredash/tasks/queries/__init__.py2
LOWredash/tasks/queries/__init__.py2
LOWredash/utils/__init__.py13
LOWredash/utils/__init__.py18
LOWredash/utils/__init__.py25
LOWredash/utils/requests_session.py11
LOWredash/models/__init__.py13
LOWredash/models/__init__.py20
LOWredash/models/__init__.py31
LOWredash/models/__init__.py41
LOWredash/models/__init__.py49
LOWredash/models/__init__.py57
LOWredash/models/__init__.py57
LOWredash/models/__init__.py57
LOWredash/models/__init__.py64
LOWredash/models/__init__.py64
LOWredash/models/__init__.py64
LOWredash/models/__init__.py73
LOWredash/cli/__init__.py86
LOWredash/query_runner/corporate_memory.py17
LOWredash/query_runner/corporate_memory.py17
LOWredash/query_runner/yandex_disk.py13
LOWredash/query_runner/sparql_endpoint.py17
LOWredash/query_runner/__init__.py8
LOWredash/query_runner/excel.py15
LOWredash/query_runner/excel.py17
LOWredash/query_runner/db2.py68
LOWredash/query_runner/cloudwatch_insights.py11
LOWredash/query_runner/couchbase.py16
LOWredash/query_runner/arango.py57
LOWredash/serializers/__init__.py10
12 more matches not shown…
Cross-Language Confusion10 hits · 56 pts
SeverityFileLineSnippet
HIGHtests/test_utils.py162 assert mock_dataframe.equals(pd.DataFrame(result["rows"]))
HIGHtests/__init__.py53 self.app_ctx.push()
HIGHtests/query_runner/test_yandex_disk.py227 assert test_df.equals(EXTENSIONS_READERS["xlsx"](output))
HIGHtests/query_runner/test_yandex_disk.py236 assert test_df.equals(EXTENSIONS_READERS["csv"](output))
HIGHtests/query_runner/test_yandex_disk.py245 assert test_df.equals(EXTENSIONS_READERS["tsv"](output))
HIGHredash/authentication/remote_user_auth.py30 # Some Apache auth configurations will, stupidly, set (null) instead of a
HIGHredash/authentication/remote_user_auth.py32 # '(null)' should never really be a value that anyone wants to legitimately
HIGHredash/authentication/remote_user_auth.py34 if email == "(null)":
HIGHredash/handlers/queries.py218 :>json string retrieved_at: Time when query results were last retrieved, in ISO format (may be null)
HIGHredash/handlers/queries.py219 :>json number runtime: Runtime of last query execution, in seconds (may be null)
Deep Nesting50 hits · 50 pts
SeverityFileLineSnippet
LOWtests/query_runner/test_json_ds.py11
LOWredash/tasks/worker.py116
LOWredash/tasks/queries/execution.py32
LOWredash/tasks/queries/execution.py150
LOWredash/tasks/queries/maintenance.py33
LOWredash/tasks/queries/maintenance.py193
LOWredash/utils/query_order.py172
LOWredash/utils/query_order.py199
LOWredash/utils/pandas.py21
LOWredash/utils/__init__.py83
LOWredash/models/__init__.py593
LOWredash/models/__init__.py649
LOWredash/models/__init__.py1015
LOWredash/query_runner/elasticsearch2.py75
LOWredash/query_runner/elasticsearch2.py113
LOWredash/query_runner/elasticsearch2.py78
LOWredash/query_runner/elasticsearch2.py143
LOWredash/query_runner/elasticsearch.py123
LOWredash/query_runner/elasticsearch.py180
LOWredash/query_runner/elasticsearch.py356
LOWredash/query_runner/elasticsearch.py206
LOWredash/query_runner/pg.py58
LOWredash/query_runner/clickhouse.py149
LOWredash/query_runner/databend.py54
LOWredash/query_runner/big_query.py46
LOWredash/query_runner/treasuredata.py75
LOWredash/query_runner/mongodb.py85
LOWredash/query_runner/mongodb.py293
LOWredash/query_runner/excel.py45
LOWredash/query_runner/query_results.py168
LOWredash/query_runner/google_search_console.py38
LOWredash/query_runner/google_search_console.py78
LOWredash/query_runner/csv.py48
LOWredash/query_runner/google_spreadsheets.py60
LOWredash/query_runner/google_analytics4.py41
LOWredash/query_runner/json_ds.py101
LOWredash/query_runner/exasol.py14
LOWredash/query_runner/duckdb.py83
LOWredash/query_runner/athena.py190
LOWredash/query_runner/jql.py35
LOWredash/query_runner/google_analytics.py39
LOWredash/query_runner/google_analytics.py128
LOWredash/query_runner/rockset.py13
LOWredash/query_runner/influx_db.py33
LOWredash/query_runner/couchbase.py40
LOWredash/serializers/__init__.py209
LOWredash/serializers/__init__.py77
LOWredash/serializers/__init__.py268
LOWredash/authentication/__init__.py108
LOWredash/handlers/authentication.py31
Fake / Example Data20 hits · 22 pts
SeverityFileLineSnippet
LOWviz-lib/src/visualizations/details/Renderer.test.tsx24 name: "John Doe",
LOWviz-lib/src/visualizations/details/Renderer.test.tsx46 expect(el.text()).toContain("John Doe"); // name value
LOWviz-lib/src/visualizations/details/Renderer.test.tsx166 expect(el.text()).toContain("John Doe");
LOWtests/factories.py46 name="John Doe",
LOWtests/models/test_parameterized_query.py274 "rows": [{"id": 5, "Name": "John", "Value": "John Doe"}],
LOWtests/models/test_parameterized_query.py279 self.assertEqual(values, [{"name": "John", "value": "John Doe"}])
LOWtests/handlers/test_users.py43 test_user = {"name": "User", "email": "user@example.com", "password": "test"}
LOWtests/handlers/test_users.py54 test_user = {"name": "User", "email": "user@example.com"}
LOWtests/handlers/test_users.py64 test_user = {"name": "User", "email": "user@example.com"}
LOWtests/handlers/test_users.py78 self.assertEqual(rv.json["email"], "user@example.com")
LOWtests/handlers/test_users.py91 test_user1 = {"name": "User", "email": "user@example.com", "password": "test"}
LOWtests/handlers/test_users.py95 self.assertEqual(rv.json["email"], "user@example.com")
LOWclient/cypress/integration/dashboard/widget_spec.js187 query: "select 'lorem ipsum' FROM generate_series(1,50)",
LOW…/cypress/integration/visualizations/word_cloud_spec.js6 SELECT 'Lorem ipsum dolor' AS a, 'ipsum' AS b, 2 AS c UNION ALL
LOW…egration/visualizations/table/.mocks/all-cell-types.js10 '[{"a": 3.14, "b": "test", "c": [], "d": {}}, false, [null, 123], "Lorem ipsum dolor sit amet, consectetur adipiscin
LOW…egration/visualizations/table/.mocks/all-cell-types.js10 '[{"a": 3.14, "b": "test", "c": [], "d": {}}, false, [null, 123], "Lorem ipsum dolor sit amet, consectetur adipiscin
LOW…tegration/visualizations/table/.mocks/large-dataset.js2 "Lorem ipsum dolor sit amet consectetur adipiscing elit" +
LOW…tegration/visualizations/table/.mocks/large-dataset.js2 "Lorem ipsum dolor sit amet consectetur adipiscing elit" +
LOW…egration/visualizations/table/.mocks/search-in-data.js4 SELECT 'lorem ipsum' AS a, 'but TEST is here' AS b, 'none' AS c UNION ALL
LOW…app/pages/users/components/ReadOnlyUserProfile.test.js13 name: "John Doe",
Self-Referential Comments4 hits · 12 pts
SeverityFileLineSnippet
MEDIUMtests/destinations/test_webhook.py9 # Create a mock alert with all the properties needed by serialize_alert
MEDIUMredash/destinations/webex.py60 # Create a table for the Adaptive Card
MEDIUMredash/destinations/webex.py73 # Create the body of the card with the table
MEDIUMredash/handlers/query_results.py305 # This method handles two cases: retrieving result by id & retrieving result by query id.
Over-Commented Block7 hits · 7 pts
SeverityFileLineSnippet
LOW.restyled.yaml21#
LOWredash/settings/__init__.py161# Enables the use of an externally-provided and trusted remote user via an HTTP
LOWredash/settings/__init__.py181# If you also set the organization setting auth_password_login_enabled to false,
LOWredash/utils/query_order.py1# Copyright (c) 2012, Konsta Vesterinen
LOWredash/query_runner/memsql_ds.py101 cursor = None
LOWclient/app/assets/less/inc/font.less1///* --------------------------------------------------------
LOWclient/app/assets/less/inc/font.less21//-----------------------------------------------------------*/
AI Slop Vocabulary4 hits · 6 pts
SeverityFileLineSnippet
LOWtests/query_runner/test_yandex_metrica.py85 # before/after we get to the Nth call, just return success
MEDIUMredash/settings/__init__.py182# then your authentication will be seamless. Otherwise a link will be presented
LOWredash/settings/dynamic_settings.py64# To do so, simply add the name of the extension you'd like to load to this list.
LOWredash/query_runner/ignite.py101 # if it's a datetime, just return the milliseconds
Decorative Section Separators2 hits · 6 pts
SeverityFileLineSnippet
MEDIUMredash/query_runner/memsql_ds.py121 # ====================================================================================================
MEDIUMredash/query_runner/memsql_ds.py123 # ====================================================================================================
Redundant / Tautological Comments4 hits · 6 pts
SeverityFileLineSnippet
LOWredash/destinations/webex.py58 # Check if it's a 2D array
LOWredash/destinations/webex.py208 if not destination_id: # Check if the destination_id is empty or blank
LOWredash/models/mixins.py13 # Check if we really want to update the updated_at value
LOW.github/workflows/periodic-snapshot.yml51 # Check if both bump and specific version are provided
Slop Phrases1 hit · 1 pts
SeverityFileLineSnippet
LOWclient/app/components/DialogWrapper.jsx83 If you want to override behavior of `onOk`/`onCancel` - don't forget to close dialog: