datasette/tests
Alex Garcia 2a05263ab8 Extend the kit with metric-side conformance: kind, unit and enum checks
The five surveyed plugin plans all kept a hand-rolled metrics-vs-registry
diff because the kit's conformance helpers covered spans only. This adds
the metric side:

- metric_for() in the registry (the span_for analogue - no prefix/dynamic
  machinery, metric names are static), and the attribute helpers are
  documented as accepting MetricName entries.
- MetricsCollector.collect() now retains the instrumentation scope per
  collected metric, so a plugin is judged against its own meter only.
- assert_metrics_conform(): every collected metric in scope is registered,
  was created as the instrument kind and unit its registry entry declares
  (drift between the registry entry and the meter.create_*() call was
  previously caught by nothing, in core or any plugin), sets only
  registered attributes, and respects values= enums - the check that makes
  a metric dimension provably bounded.
- assert_metrics_covered(): every registered metric collected at least
  once with every non-optional attribute seen. Both *_covered helpers now
  exempt optional=True attributes, so a workload is not forced to
  manufacture every error path; pin those with targeted tests instead.
- datasette.operation declares values={"read", "write"} - core dogfoods
  the enum enforcement on the dimension where it matters most.
- Core's generic metric conformance tests are now calls to the kit
  helpers with scope_name="datasette"; the stricter literal-pinning and
  optional-attribute-coverage tests stay hand-written on purpose.
- The metric reference docs render attributes through the same helper as
  spans, so *(optional)* markers and enum values now appear there too.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012U7coQfVu8nK2R4q2mCULA
2026-09-02 14:21:14 -07:00
..
plugins Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_templates Fix handling of nested custom page wildcard paths, closes #996 2020-10-07 15:51:11 -07:00
__init__.py Broke up test_app into test_api and test_html 2017-12-15 04:08:24 -08:00
build_small_spatialite_db.py New run_sanity_checks mechanism, for SpatiLite 2019-05-11 15:55:30 -07:00
conftest.py Add a plugin telemetry kit: public registry API, linked_root_span_kwargs, test helpers, docs 2026-09-02 14:21:14 -07:00
ext.c Add new entrypoint option to --load-extensions. (#1789) 2022-08-23 11:34:30 -07:00
fixtures.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
spatialite.db New run_sanity_checks mechanism, for SpatiLite 2019-05-11 15:55:30 -07:00
test-datasette-load-plugins.sh fix (typo): Corrected spelling of 'environments' (#2268) 2024-02-19 14:41:32 -08:00
test_actions_sql.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_actor_restriction_bug.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_allowed_many.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_allowed_resources.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_api.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_api_write.py disable_fts() before dropping table 2026-08-10 15:03:29 -07:00
test_auth.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_autocomplete.py Add "ok": true to every JSON object success response 2026-07-04 13:40:05 +00:00
test_base_view.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_cli.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_cli_serve_get.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_cli_serve_server.py Run datasette serve startup and uvicorn on a single event loop (#2886) 2026-09-01 09:32:37 -07:00
test_column_types.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_config_dir.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_config_permission_rules.py Run black formatter 2025-10-25 15:38:07 -07:00
test_crossdb.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_csrf_middleware.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_csv.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_custom_pages.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_datasette_https_server.sh More robust test_datasette_https_server.sh test 2026-06-22 10:11:56 -07:00
test_debug_autocomplete.py Autocomplete widget and /-/debug/autocomplete test page 2026-06-13 22:59:37 -07:00
test_default_deny.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_docs.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_docs_plugins.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_error_shape.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_extras.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_facets.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_fd_leak.py FD-leak regression test for Datasette.close() 2026-04-16 20:18:05 -07:00
test_filters.py Fix for SQL injection issue in table filters, refs #2868 2026-08-06 11:19:50 -07:00
test_fixtures.py datasette.fixtures module, closes #2733 2026-05-21 23:05:37 -07:00
test_html.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_http_span.py Add a plugin telemetry kit: public registry API, linked_root_span_kwargs, test helpers, docs 2026-09-02 14:21:14 -07:00
test_internal_db.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_internals_database.py Propagate otel context across the thread boundaries 2026-09-01 16:24:35 -07:00
test_internals_datasette.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_internals_datasette_client.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_internals_request.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_internals_response.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_internals_urls.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_jump.py Autocomplete widget and /-/debug/autocomplete test page 2026-06-13 22:59:37 -07:00
test_label_column_for_table.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_lifespan.py Run startup via ASGI lifespan instead of waiting for the first request (#2887) 2026-09-01 09:39:25 -07:00
test_load_extensions.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_messages.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_multipart.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_package.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_permission_endpoints.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_permissions.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_playwright.py Make binary playwright test more robust 2026-07-05 22:46:00 -07:00
test_plugins.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_publish_cloudrun.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_publish_heroku.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_pytest_autoclose_plugin.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_queries.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_restriction_sql.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_routes.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_schema_endpoints.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_search_tables.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_spatialite.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_stored_queries.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_success_envelope.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_table_api.py Fix for SQL injection issue in table filters, refs #2868 2026-08-06 11:19:50 -07:00
test_table_html.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_telemetry.py Trace callback-style calls: execute_fn, execute_write_fn, execute_isolated_fn 2026-09-02 11:48:56 -07:00
test_telemetry_metrics.py Count callback-style calls in db.client.operation.duration 2026-09-02 14:21:05 -07:00
test_telemetry_registry.py Extend the kit with metric-side conformance: kind, unit and enum checks 2026-09-02 14:21:14 -07:00
test_telemetry_testing_kit.py Extend the kit with metric-side conformance: kind, unit and enum checks 2026-09-02 14:21:14 -07:00
test_template_context.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_token_handler.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_tracer.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_utils.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_utils_check_callable.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_utils_permissions.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_utils_sql_analysis.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
test_write_sql_operation_decisions.py Refactored write decision tests 2026-05-28 12:09:20 -07:00
test_write_wrapper.py Upgrade to ruff>=0.16.0 (#2857) 2026-07-25 15:47:08 -07:00
utils.py From 409 warnings down to 52 warnings. 2026-04-14 18:46:47 -07:00