AI Slop Code RIsk Monitor

simonw/datasette

An open source multi-tool for exploring and publishing data

17.8 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for simonw/datasette, a Python project with 11,511 GitHub stars. SynthScan examined 104,211 lines of code across 304 source files, recording 1880 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 17.8 (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.

17.8
Adjusted Signal
17.8
Raw Pattern Score
100%
Time Factor
2026-10-08
Last Push
11.5K
Stars
Python
Language
104.2K
Lines of Code
304
Files
1.9K
Pattern Hits
2026-10-12
Scan Date
0.26
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 48.1/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 1673 finding(s).

Hallucinated Dependency & Supply Chain Risk 9.4/100 · LOW

Are imports declared and package/API names verified? 110 finding(s).

Agent Over-Engineering Ratio 51.1/100 · HIGH

Are wrappers, guards, and repeated structures necessary? 1637 finding(s).

PR Review Velocity Impact 67.4/100 · HIGH

Which changes need focused human review? 1880 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 1HIGH 77MEDIUM 30LOW 1772

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 1880 distinct pattern matches across 17 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.

Hyper-Verbose Identifiers1521 hits · 1195 pts
SeverityFileLineSnippetContext
LOWtests/test_column_types.py131async def test_column_types_table_created(ds_ct):CODE
LOWtests/test_column_types.py141async def test_config_loaded_into_internal_db(ds_ct):CODE
LOWtests/test_column_types.py153async def test_config_with_type_and_config(tmp_path_factory):CODE
LOWtests/test_column_types.py215async def test_get_column_type_missing(ds_ct):CODE
LOWtests/test_column_types.py222async def test_set_and_remove_column_type(ds_ct):CODE
LOWtests/test_column_types.py235async def test_set_column_type_with_config(ds_ct):CODE
LOWtests/test_column_types.py266async def test_set_column_type_api_with_config(ds_ct):CODE
LOWtests/test_column_types.py288async def test_clear_column_type_api(ds_ct):CODE
LOWtests/test_column_types.py401async def test_set_column_type_api_errors(CODE
LOWtests/test_column_types.py425async def test_set_column_type_api_works_for_immutable_database(tmp_path_factory):CODE
LOWtests/test_column_types.py454async def test_set_column_type_rejects_incompatible_sqlite_type(ds_ct):CODE
LOWtests/test_column_types.py461async def test_set_column_type_allows_varchar_for_text_only_type(tmp_path_factory):CODE
LOWtests/test_column_types.py483async def test_builtin_column_types_registered(ds_ct):CODE
LOWtests/test_column_types.py494async def test_column_type_class_attributes(ds_ct):CODE
LOWtests/test_column_types.py512def test_sqlite_type_from_declared_type():CODE
LOWtests/test_column_types.py547async def test_display_columns_include_column_type(ds_ct):CODE
LOWtests/test_column_types.py598async def test_email_validation_on_insert(ds_ct):CODE
LOWtests/test_column_types.py611async def test_email_validation_passes_valid(ds_ct):CODE
LOWtests/test_column_types.py623async def test_url_validation_on_insert(ds_ct):CODE
LOWtests/test_column_types.py636async def test_json_validation_on_insert(ds_ct):CODE
LOWtests/test_column_types.py649async def test_validation_on_update(ds_ct):CODE
LOWtests/test_column_types.py662async def test_validation_allows_null(ds_ct):CODE
LOWtests/test_column_types.py674async def test_validation_allows_empty_string(ds_ct):CODE
LOWtests/test_column_types.py689async def test_column_type_base_defaults():CODE
LOWtests/test_column_types.py705async def test_render_cell_extra_with_column_types(ds_ct):CODE
LOWtests/test_column_types.py719async def test_duplicate_column_type_name_raises_error():CODE
LOWtests/test_column_types.py746async def test_row_endpoint_render_cell_with_column_types(ds_ct):CODE
LOWtests/test_column_types.py760async def test_transform_value_in_json_output(tmp_path_factory):CODE
LOWtests/test_column_types.py812async def test_column_type_render_cell_has_priority_over_plugins(tmp_path_factory):CODE
LOWtests/test_column_types.py891async def test_row_detail_page_html_rendering(ds_ct):CODE
LOWtests/test_column_types.py907async def test_html_table_page_rendering(ds_ct):CODE
LOWtests/test_column_types.py918async def test_set_column_type_ui_data_hidden_without_permission(ds_ct):CODE
LOWtests/test_column_types.py926async def test_set_column_type_ui_data_includes_applicable_types(CODE
LOWtests/test_column_types.py965async def test_validation_on_upsert(ds_ct):CODE
LOWtests/test_column_types.py980async def test_validation_on_upsert_passes_valid(ds_ct):CODE
LOWtests/test_column_types.py997async def test_unknown_type_warning_logged(tmp_path_factory, caplog):CODE
LOWtests/test_column_types.py1023async def test_incompatible_sqlite_type_warning_logged(tmp_path_factory, caplog):CODE
LOWtests/test_column_types.py1050async def test_config_overwrites_on_restart(tmp_path_factory):CODE
LOWtests/test_column_types.py1088async def test_no_column_types_in_config(tmp_path_factory):CODE
LOW⚡tests/test_table_api.py125async def test_html_only_extras_are_not_available_via_json(ds_client, extra):CODE
LOW⚡tests/test_table_api.py134async def test_html_only_extras_are_not_advertised(ds_client):CODE
LOW⚡tests/test_table_api.py141def test_query_extra_private_for_arbitrary_sql():CODE
LOW⚡tests/test_table_api.py268async def test_table_shape_object_compound_primary_key(ds_client):CODE
LOW⚡tests/test_table_api.py278async def test_table_with_slashes_in_name(ds_client):CODE
LOW⚡tests/test_table_api.py288async def test_table_with_reserved_word_name(ds_client):CODE
LOWtests/test_table_api.py33async def test_table_not_exists_json(ds_client):CODE
LOWtests/test_table_api.py55async def test_table_shape_arrayfirst(ds_client):CODE
LOWtests/test_table_api.py75async def test_query_extras_for_arbitrary_sql(ds_client):CODE
LOWtests/test_table_api.py99async def test_query_extras_for_stored_query(ds_client):CODE
LOWtests/test_table_api.py155def test_query_extra_query_reports_bound_params():CODE
LOWtests/test_table_api.py186def test_query_extra_query_does_not_echo_querystring():CODE
LOWtests/test_table_api.py195def test_query_extra_private_false_when_sql_is_public():CODE
LOWtests/test_table_api.py229async def test_table_shape_array_nl(ds_client):CODE
LOWtests/test_table_api.py323async def test_paginate_tables_and_views(CODE
LOWtests/test_table_api.py370async def test_paginate_compound_keys(ds_client):CODE
LOWtests/test_table_api.py391async def test_paginate_compound_keys_with_extra_filters(ds_client):CODE
LOWtests/test_table_api.py467async def test_sortable_and_filtered(ds_client):CODE
LOWtests/test_table_api.py486async def test_sortable_argument_errors(ds_client):CODE
LOWtests/test_table_api.py500async def test_sortable_columns_metadata(ds_client):CODE
LOWtests/test_table_api.py636async def test_searchable_invalid_column(ds_client):CODE
1461 more matches not shown…
Empty Error Handlers42 hits · 210 pts
SeverityFileLineSnippetContext
HIGHtests/conftest.py316except FileNotFoundError:CODE
HIGHtests/conftest.py356except FileNotFoundError:CODE
HIGHtests/test_internals_database.py145except ValueError:CODE
HIGHtests/test_api_write.py1588except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/plugins.py111except (TypeError, ModuleNotFoundError):CODE
HIGHdatasette/background_tasks.py147except ValueError:CODE
HIGHdatasette/csrf.py164except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/_pytest_plugin.py123except ValueError:CODE
HIGHdatasette/renderer.py26except (TypeError, ValueError):CODE
HIGHdatasette/database.py1184except RuntimeError:CODE
HIGHdatasette/database.py255except AttributeError:CODE
HIGHdatasette/database.py242except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/database.py249except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/database.py261except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/database.py267except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/database.py1127except StopIteration:CODE
HIGHdatasette/database.py278except OSError:CODE
HIGHdatasette/database.py399except ValueError:CODE
HIGHdatasette/database.py1119except StopIteration:CODE
HIGHdatasette/database.py589except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/database.py634except ValueError:CODE
HIGHdatasette/cli.py65except ImportError:CODE
HIGHdatasette/cli.py909except SpatialiteNotFound:CODE
HIGHdatasette/app.py2343except QueryInterrupted:CODE
HIGHdatasette/app.py3263except BadSignature:CODE
HIGHdatasette/app.py1995except (ValueError, KeyError):CODE
HIGHdatasette/app.py2396except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/app.py610except ValueError:CODE
HIGHdatasette/app.py2452except importlib.metadata.PackageNotFoundError:CODE
HIGHdatasette/utils/multipart.py82except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/utils/multipart.py160except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/utils/multipart.py169except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/utils/multipart.py235except Exception: # noqa: BLE001, S110CODE
HIGHdatasette/utils/asgi.py192except ValueError:CODE
HIGHdatasette/utils/__init__.py1594except json.JSONDecodeError:CODE
HIGHdatasette/utils/sqlite.py119except sqlite3.DatabaseError:CODE
HIGHdatasette/views/database.py534except KeyError:CODE
HIGHdatasette/views/database.py1034except InvalidSql:CODE
HIGHdatasette/views/table_extras.py154except KeyError:CODE
HIGHdatasette/views/table_extras.py128except KeyError:CODE
HIGHdatasette/views/table_extras.py138except QueryInterrupted:CODE
HIGHdatasette/views/table.py1391except json.JSONDecodeError:CODE
Cross-Language Confusion33 hits · 126 pts
SeverityFileLineSnippetContext
HIGHtests/test_table_api.py1358 '{"rowid": 3, "data": null}'STRING
HIGHtests/test_queries.py1786 assert "window.location.href = url.toString();" not in response.textSTRING
HIGHtests/test_table_html.py1282 name text not null,CODE
HIGHtests/test_table_html.py1437 name text not null,CODE
HIGHtests/test_write_wrapper.py432 await db.execute_write("insert into groups (id, current) values (1, null)")CODE
HIGHtests/test_api_write.py1486 "(1, 'one', 1.5, 1), (2, 'two', 999.5, 2), (3, null, null, null)"STRING
HIGHtests/test_playwright.py118 title text not null,CODE
HIGHtests/test_playwright.py130 name text not null,CODE
HIGHtests/test_playwright.py135 title text not null,CODE
HIGHtests/test_playwright.py285 if (!context.columnType || context.columnType.type !== "asset") {CODE
HIGHtests/test_playwright.py1019 window.__discardConfirmMessages.push(message);CODE
HIGHtests/test_playwright.py1131 window.appliedColumns = null;CODE
HIGHtests/test_playwright.py1437 "node => node.hidden && node.disabled"CODE
HIGHtests/test_playwright.py1858 window.confirm = message => { confirmations.push(message); return false; };CODE
HIGHtests/test_playwright.py1766 closeSources.push(source);STRING
HIGHtests/test_playwright.py2135 return r.left >= 11 && r.top >= 11 &&STRING
HIGHtests/test_playwright.py2136 r.right <= innerWidth - 11 && r.bottom <= innerHeight - 11;STRING
HIGH⚡datasette/fixtures.py235 ("2019-01-14 08:00:00", 1, 1, 'CA', 1, 'SOMA', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py236 ("2019-01-14 08:00:00", 1, 1, 'CA', 1, 'Tenderloin', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py237 ("2019-01-15 08:00:00", 1, 1, 'CA', 1, 'Bernal Heights', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py238 ("2019-01-15 08:00:00", 1, 1, 'CA', 1, 'Hayes Valley', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py239 ("2019-01-15 08:00:00", 1, 1, 'CA', 2, 'Hollywood', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py240 ("2019-01-15 08:00:00", 1, 1, 'CA', 2, 'Downtown', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py241 ("2019-01-16 08:00:00", 1, 1, 'CA', 2, 'Los Feliz', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py242 ("2019-01-16 08:00:00", 1, 1, 'CA', 2, 'Koreatown', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py243 ("2019-01-16 08:00:00", 1, 1, 'MI', 3, 'Downtown', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py244 ("2019-01-17 08:00:00", 1, 1, 'MI', 3, 'Greektown', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py245 ("2019-01-17 08:00:00", 1, 1, 'MI', 3, 'Corktown', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py246 ("2019-01-17 08:00:00", 1, 1, 'MI', 3, 'Mexicantown', '[]', '[]', null, null),STRING
HIGH⚡datasette/fixtures.py247 ("2019-01-17 08:00:00", 2, 0, 'MC', 4, 'Arcadia Planitia', '[]', '[]', null, null)STRING
HIGHdatasette/fixtures.py273 3, "Burlingame Museum of PEZ Memorabilia", "214 California Drive, Burlingame, CA 94010", null,STRING
HIGHdatasette/fixtures.py322INSERT INTO foreign_key_references VALUES (2, null, null, null, null, null);STRING
HIGHdatasette/fixtures.py363 ("insert into binary_data (data) values (null);", []),STRING
Deep Nesting96 hits · 86 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py308CODE
LOWtests/test_auth.py308CODE
LOWtests/test_docs.py182CODE
LOWtests/test_html.py997CODE
LOWtests/test_internals_database.py1328CODE
LOWtests/test_queries.py3317CODE
LOWtests/test_multipart.py1128CODE
LOWtests/test_multipart.py1188CODE
LOWtests/test_telemetry.py196CODE
LOWtests/test_permissions.py963CODE
LOWtests/fixtures.py108CODE
LOWtests/plugins/my_plugin.py552CODE
LOWdocs/json_api_doc.py8CODE
LOWdocs/json_api_doc.py85CODE
LOWdatasette/plugins.py92CODE
LOWdatasette/stored_queries.py242CODE
LOWdatasette/telemetry_testing.py208CODE
LOWdatasette/telemetry_testing.py276CODE
LOWdatasette/telemetry_testing.py355CODE
LOWdatasette/renderer.py15CODE
LOWdatasette/renderer.py33CODE
LOWdatasette/database.py570CODE
LOWdatasette/database.py716CODE
LOWdatasette/database.py840CODE
LOWdatasette/database.py1212CODE
LOWdatasette/database.py735CODE
LOWdatasette/telemetry.py225CODE
LOWdatasette/cli.py73CODE
LOWdatasette/app.py410CODE
LOWdatasette/app.py657CODE
LOWdatasette/app.py792CODE
LOWdatasette/app.py1353CODE
LOWdatasette/app.py1552CODE
LOWdatasette/app.py3203CODE
LOWdatasette/app.py3342CODE
LOWdatasette/app.py3218CODE
LOWdatasette/facets.py15CODE
LOWdatasette/facets.py215CODE
LOWdatasette/facets.py311CODE
LOWdatasette/facets.py381CODE
LOWdatasette/facets.py510CODE
LOWdatasette/tracer.py90CODE
LOWdatasette/tracer.py101CODE
LOWdatasette/filters.py47CODE
LOWdatasette/filters.py49CODE
LOWdatasette/filters.py453CODE
LOWdatasette/default_permissions/config.py112CODE
LOWdatasette/default_permissions/config.py212CODE
LOWdatasette/default_permissions/restrictions.py142CODE
LOWdatasette/utils/multipart.py186CODE
LOWdatasette/utils/multipart.py645CODE
LOWdatasette/utils/multipart.py368CODE
LOWdatasette/utils/multipart.py735CODE
LOWdatasette/utils/asgi.py312CODE
LOWdatasette/utils/actions_sql.py517CODE
LOWdatasette/utils/__init__.py1321CODE
LOWdatasette/utils/__init__.py1660CODE
LOWdatasette/utils/__init__.py1708CODE
LOWdatasette/utils/__init__.py1382CODE
LOWdatasette/utils/__init__.py1669CODE
36 more matches not shown…
Unused Imports71 hits · 65 pts
SeverityFileLineSnippetContext
LOWtests/conftest.py61CODE
LOWtests/conftest.py61CODE
LOWtests/conftest.py61CODE
LOWtests/conftest.py61CODE
LOWtests/conftest.py61CODE
LOWtests/conftest.py61CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/conftest.py420CODE
LOWtests/test_docs.py10CODE
LOWdatasette/stored_queries.py1CODE
LOWdatasette/background_tasks.py27CODE
LOWdatasette/csrf.py10CODE
LOWdatasette/_pytest_plugin.py15CODE
LOWdatasette/jump.py1CODE
LOWdatasette/__init__.py1CODE
LOWdatasette/__init__.py2CODE
LOWdatasette/__init__.py2CODE
LOWdatasette/__init__.py3CODE
LOWdatasette/__init__.py4CODE
LOWdatasette/__init__.py4CODE
LOWdatasette/__init__.py5CODE
LOWdatasette/__init__.py5CODE
LOWdatasette/__init__.py5CODE
LOWdatasette/__init__.py6CODE
LOWdatasette/__init__.py6CODE
LOWdatasette/__init__.py6CODE
LOWdatasette/__init__.py6CODE
LOWdatasette/__init__.py6CODE
LOWdatasette/__init__.py13CODE
LOWdatasette/__init__.py14CODE
LOWdatasette/__init__.py15CODE
LOWdatasette/__init__.py16CODE
LOWdatasette/tokens.py9CODE
LOWdatasette/app.py1CODE
LOWdatasette/write_sql.py1CODE
LOWdatasette/default_permissions/config.py7CODE
LOWdatasette/default_permissions/__init__.py18CODE
LOWdatasette/default_permissions/__init__.py20CODE
LOWdatasette/default_permissions/__init__.py21CODE
LOWdatasette/default_permissions/__init__.py24CODE
LOWdatasette/default_permissions/__init__.py27CODE
LOWdatasette/default_permissions/__init__.py31CODE
LOWdatasette/default_permissions/__init__.py34CODE
LOWdatasette/default_permissions/__init__.py39CODE
LOWdatasette/default_permissions/__init__.py42CODE
11 more matches not shown…
Excessive Try-Catch Wrapping42 hits · 38 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_write_wrapper.py115def wrapper(conn):CODE
LOWtests/test_write_wrapper.py118 except Exception as e: # noqa: BLE001CODE
LOWtests/test_api_write.py1588 except Exception: # noqa: BLE001, S110STRING
LOWdatasette/csrf.py164 except Exception: # noqa: BLE001, S110CODE
LOWdatasette/_pytest_plugin.py92 except Exception as e: # noqa: BLE001CODE
MEDIUMdatasette/database.py489def _dispatch_events_after_write():CODE
LOWdatasette/database.py242 except Exception: # noqa: BLE001, S110CODE
LOWdatasette/database.py249 except Exception: # noqa: BLE001, S110CODE
LOWdatasette/database.py261 except Exception: # noqa: BLE001, S110CODE
LOWdatasette/database.py267 except Exception: # noqa: BLE001, S110CODE
LOWdatasette/database.py492 except Exception: # noqa: BLE001CODE
LOWdatasette/database.py580 except Exception as e: # noqa: BLE001CODE
LOWdatasette/database.py589 except Exception: # noqa: BLE001, S110CODE
LOWdatasette/database.py637 except Exception as e: # noqa: BLE001CODE
LOWdatasette/database.py658 except Exception as e: # noqa: BLE001CODE
LOWdatasette/database.py772 except Exception as e:CODE
LOWdatasette/database.py812 except Exception as e:CODE
LOWdatasette/database.py1115 except Exception as e:CODE
LOWdatasette/app.py990 except Exception as e: # noqa: BLE001CODE
LOWdatasette/app.py997 except Exception as e: # noqa: BLE001CODE
LOWdatasette/app.py3151 except Exception:CODE
LOWdatasette/app.py3329 except Exception as exception: # noqa: BLE001CODE
LOWdatasette/app.py2396 except Exception: # noqa: BLE001, S110STRING
LOWdatasette/tracer.py54 except Exception as ex:CODE
LOWdatasette/utils/multipart.py82 except Exception: # noqa: BLE001, S110CODE
LOWdatasette/utils/multipart.py160 except Exception: # noqa: BLE001, S110CODE
LOWdatasette/utils/multipart.py169 except Exception: # noqa: BLE001, S110CODE
LOWdatasette/utils/multipart.py235 except Exception: # noqa: BLE001, S110CODE
MEDIUMdatasette/utils/multipart.py79def __del__(self):CODE
LOWdatasette/utils/asgi.py320 except Exception as e: # noqa: BLE001CODE
LOWdatasette/utils/asgi.py330 except Exception as e: # noqa: BLE001CODE
LOWdatasette/views/database.py672 except Exception as ex: # noqa: BLE001CODE
LOWdatasette/views/database.py688 except Exception as ex: # noqa: BLE001CODE
LOWdatasette/views/table.py1159 except Exception as e: # noqa: BLE001CODE
MEDIUMdatasette/views/table.py1023def post(self, request, upsert=False):CODE
MEDIUMdatasette/views/table_create_alter.py1068def get(self, request):CODE
LOWdatasette/views/table_create_alter.py963 except Exception as e: # noqa: BLE001STRING
LOWdatasette/views/table_create_alter.py1379 except Exception as e: # noqa: BLE001STRING
LOWdatasette/views/row.py806 except Exception as e: # noqa: BLE001STRING
LOWdatasette/views/row.py891 except Exception as e: # noqa: BLE001STRING
LOWdatasette/views/special.py428 except Exception: # noqa: BLE001CODE
LOWdatasette/views/base.py319 except Exception as ex: # noqa: BLE001CODE
Self-Referential Comments13 hits · 30 pts
SeverityFileLineSnippetContext
MEDIUMtest-in-pyodide-with-shot-scraper.sh13# Create a blank index pageCOMMENT
MEDIUMtests/test_schema_endpoints.py30 # Create a database with restricted access (requires root permission)COMMENT
MEDIUMtests/test_schema_endpoints.py36 # Create an empty databaseCOMMENT
MEDIUM⚡tests/test_plugins.py1748 # Create a token using the hardcoded handler (first registered from plugins dir)STRING
MEDIUM⚡tests/test_plugins.py1757 # Create a token by explicitly requesting the hardcoded handler by nameSTRING
MEDIUM⚡tests/test_plugins.py1763 # Create a token by explicitly requesting the signed handler by nameSTRING
MEDIUMtests/test_plugins.py1860 # Define a test plugin that registers these actionsSTRING
MEDIUMtests/test_multipart.py524 # Create a body larger than the in-memory threshold (1MB)COMMENT
MEDIUMtests/test_allowed_resources.py346 # Create a database with 105 tablesCOMMENT
MEDIUMtests/test_internal_db.py204 # Create a data database fileSTRING
MEDIUMdocs/conf.py5# This file is execfile()d with the current directory set to itsCOMMENT
MEDIUMdatasette/publish/heroku.py142 # Create a new appCOMMENT
MEDIUMdemos/plugins/example_js_manager_plugins.py7# Create a set with view names that qualify for this JS, since plugins won't do anything on other pagesCOMMENT
Decorative Section Separators10 hits · 30 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_allowed_many.py73# ----------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_allowed_many.py75# ----------------------------------------------------------------------COMMENT
MEDIUMtests/test_allowed_many.py206# ----------------------------------------------------------------------COMMENT
MEDIUMtests/test_allowed_many.py208# ----------------------------------------------------------------------COMMENT
MEDIUMtests/test_allowed_many.py583# ----------------------------------------------------------------------COMMENT
MEDIUMtests/test_allowed_many.py585# ----------------------------------------------------------------------COMMENT
MEDIUMdatasette/utils/permissions.py87# -----------------------------COMMENT
MEDIUMdatasette/utils/permissions.py89# -----------------------------COMMENT
MEDIUM⚡datasette/utils/permissions.py134# -----------------------------------------------STRING
MEDIUM⚡datasette/utils/permissions.py136# -----------------------------------------------STRING
Redundant / Tautological Comments14 hits · 19 pts
SeverityFileLineSnippetContext
LOWtests/test_auth.py397 # Set root_enabled to simulate --root flagCOMMENT
LOWtests/test_docs.py197 # Check if next line is entirely made of a single underline characterCOMMENT
LOWtests/test_docs.py209 # Check if this is an overline+underline style headingCOMMENT
LOWtests/plugins/my_plugin.py521 # Check if this is a global action (no resource_class specified)STRING
LOW.github/workflows/stable-docs.yml64 # Check if the list of files is non-emptyCOMMENT
LOWdatasette/app.py1720 # Check if actor can see itCOMMENT
LOWdatasette/app.py1724 # Check if anonymous user can see it (for "private" flag)COMMENT
LOWdatasette/app.py2008 # Check if truncated (got more than limit rows)STRING
LOWdatasette/permissions.py127 # Check if our parent has a parent - that would create 3 levelsCOMMENT
LOWdatasette/utils/permissions.py29 # Check if we should skip permission checks BEFORE calling hooksCOMMENT
LOWdatasette/views/index.py82 # Check if table is in allowed setCOMMENT
LOWdatasette/views/special.py321 # Check if user has permissions-debug (to show sensitive fields)COMMENT
LOWdatasette/views/special.py326 # Check if this is a request for JSON (has .json extension)COMMENT
LOWdatasette/views/special.py495 # Check if this is a request for JSON (has .json extension)COMMENT
AI Structural Patterns19 hits · 16 pts
SeverityFileLineSnippetContext
LOWtests/fixtures.py108CODE
LOWdatasette/stored_queries.py164CODE
LOWdatasette/stored_queries.py242CODE
LOWdatasette/stored_queries.py358CODE
LOWdatasette/stored_queries.py428CODE
LOWdatasette/app.py410CODE
LOWdatasette/app.py1135CODE
LOWdatasette/app.py1183CODE
LOWdatasette/app.py1239CODE
LOWdatasette/app.py1263CODE
LOWdatasette/app.py1663CODE
LOWdatasette/utils/multipart.py645CODE
LOWdatasette/utils/multipart.py297CODE
LOWdatasette/utils/asgi.py217CODE
LOWdatasette/utils/asgi.py549CODE
LOWdatasette/utils/testing.py84CODE
LOWdatasette/utils/testing.py115CODE
LOWdatasette/utils/testing.py139CODE
LOWdatasette/views/execute_write.py223CODE
Docstring Block Structure2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHdatasette/app.py1673 Create a Resource instance for the given action with parent/child values. Looks up the action's resourSTRING
HIGHdatasette/utils/asgi.py231 Parse form data from the request body. Supports both application/x-www-form-urlencoded and multipart/fSTRING
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICALdatasette/static/cm-editor-6.0.1.bundle.js1var cm=function(t){"use strict";class e{constructor(){}lineAt(t){if(t<0||t>this.length)throw new RangeError(`Invalid posCODE
Modern AI Meta-Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_internals_database.py864 # via dependency injection.COMMENT
MEDIUMdatasette/database.py509 # switching to keyword dependency injection when the callbackCOMMENT
Over-Commented Block5 hits · 5 pts
SeverityFileLineSnippetContext
LOWdocs/conf.py1#COMMENT
LOWdocs/conf.py81#COMMENT
LOWdocs/conf.py141latex_elements = {COMMENT
LOWdatasette/permissions.py241 # This is deliberately undocumented: it's considered an internalCOMMENT
LOWdatasette/static/datasette-manager.js221 // Future API ideasCOMMENT
Fake / Example Data5 hits · 4 pts
SeverityFileLineSnippetContext
LOWtests/test_playwright.py796 dialog.locator(".table-alter-column-name").first.get_attribute("placeholder")CODE
LOWtests/test_playwright.py947 assert table_name.get_attribute("placeholder") == "table name"CODE
LOWtests/test_playwright.py434 dialog.locator(".table-create-column-name").nth(0).get_attribute("placeholder")STRING
LOWdatasette/static/sql-formatter-2.3.3.min.js4!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amCODE
LOWdatasette/templates/create_token.html95 expireDuration.setAttribute("placeholder", expireType.value.replace("Expires after X ", ""));CODE
Modern Structural Boilerplate3 hits · 3 pts
SeverityFileLineSnippetContext
LOWdatasette/app.py175logger = logging.getLogger(__name__)CODE
LOWdatasette/fixtures.py8__all__ = [CODE
LOWdatasette/views/special.py24logger = logging.getLogger(__name__)CODE
AI Slop Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
LOWdatasette/utils/permissions.py112 # No namespacing - just use plugin params as-isCOMMENT