Skip to content

docs: Superset 6.1 documentation catch-up — batch 4#39446

Merged
michael-s-molina merged 3 commits intomasterfrom
docs/superset-6.1-catchup-4
Apr 29, 2026
Merged

docs: Superset 6.1 documentation catch-up — batch 4#39446
michael-s-molina merged 3 commits intomasterfrom
docs/superset-6.1-catchup-4

Conversation

@rusackas
Copy link
Copy Markdown
Member

SUMMARY

Fourth batch of documentation updates for features merged after 6.0. Continues from #39440, #39441, and #39445.

Documentation updates (5 files):

Database capability fix (1 file):

  • StarRocks catalog support (databases.json) — corrects supports_catalog and supports_dynamic_catalog to true for StarRocks. The engine spec (PR feat(starrocks): add catalog support for StarRocks database connections #37026) already fully implemented catalog support (get_catalog_names(), get_default_catalog(), SHOW CATALOGS) but the committed databases.json was not regenerated and still showed false. This ensures the generated database documentation page correctly shows catalog support as a StarRocks capability.

BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

N/A — documentation-only changes.

TESTING INSTRUCTIONS

  • Review each section for accuracy
  • Optionally: cd docs && npm start to verify MDX renders correctly
  • For databases.json: confirm that the StarRocks database page now shows the catalog support badge

ADDITIONAL INFORMATION

  • Has associated issue:
  • Required feature flags:
  • Changes UI
  • Includes DB Migration
  • Introduces new feature or API
  • Removes existing feature or API

Fifth PR in the 6.1 docs series.

- theming.mdx: document ECharts array property overrides (PR #37965) —
  array values like color palettes are fully supported and replaced entirely
  (not merged); adds Array Property Overrides section with color palette example
- configuring-superset.mdx: document PKCE support for database OAuth2
  (PR #37067) — add PKCE section under Custom OAuth2 with code_challenge_method
  config and when to use it
- cache.mdx: document ETag support for thumbnail/screenshot endpoints
  (PR #37663) — conditional GET with If-None-Match to avoid downloading
  unchanged images
- exploring-data.mdx: document SQL Lab UX improvements (PRs #37298, #37694,
  #37756) — treeview table browser, Ctrl+F find widget, resizable panels;
  also adds time range natural language expressions section (PR #37098)
- creating-your-first-dashboard.mdx: document Table chart features — boolean
  and categorical conditional formatting (PRs #36338, #37756), gradient toggle
  (PR #36280), HTML cell rendering with security note (PR #37685), column
  header tooltips from dataset descriptions (PR #37179), Display Controls
  modal in dashboard view (PR #36062)
- databases.json: update StarRocks supports_catalog and supports_dynamic_catalog
  to true — the engine spec (PR #37026) already implemented full catalog support
  with get_catalog_names(), get_default_catalog(), and SHOW CATALOGS; the
  committed JSON was stale and did not reflect this

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions github-actions Bot added the doc Namespace | Anything related to documentation label Apr 17, 2026
@netlify
Copy link
Copy Markdown

netlify Bot commented Apr 17, 2026

Deploy Preview for superset-docs-preview ready!

Name Link
🔨 Latest commit 5bcdb23
🔍 Latest deploy log https://app.netlify.com/projects/superset-docs-preview/deploys/69f249f4bc6a380008f4e86b
😎 Deploy Preview https://deploy-preview-39446--superset-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@rusackas rusackas marked this pull request as ready for review April 17, 2026 17:20
The StarRocks catalog flag fix (supports_catalog, supports_dynamic_catalog)
is now handled by the separate generator fix PR (#39449), which regenerates
databases.json from Python engine spec class attributes. Removing the manual
edit here avoids a merge conflict and keeps the source of truth in the generator.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@pull-request-size pull-request-size Bot added size/M and removed size/L labels Apr 17, 2026

## ETag Support for Thumbnails

Thumbnail and screenshot endpoints return `ETag` response headers based on the cached content digest. Clients can use conditional requests to avoid downloading unchanged images:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: This statement over-promises behavior that is not implemented in the current thumbnail/screenshot handlers (they don't set ETag headers or perform If-None-Match conditional handling). Reword to avoid documenting unsupported caching semantics. [possible bug]

Severity Level: Major ⚠️
- ⚠️ Thumbnail docs promise ETag behavior backend doesn't implement.
- ⚠️ Clients relying on 304s may over-fetch thumbnails.
Suggested change
Thumbnail and screenshot endpoints return `ETag` response headers based on the cached content digest. Clients can use conditional requests to avoid downloading unchanged images:
Thumbnail endpoints are keyed by a content digest in the URL, so clients can cache images by digest and only request a new URL when the digest changes:
Steps of Reproduction ✅
1. Open `docs/admin_docs/configuration/cache.mdx` and locate the paragraph at line 164
(per Grep) stating that "Thumbnail and screenshot endpoints return `ETag` response headers
based on the cached content digest" and that clients can use `If-None-Match` conditional
requests to avoid downloading unchanged images.

2. Examine the chart thumbnail implementation in
`superset/superset/charts/api.py:729–744,779–43` and the dashboard thumbnail
implementation in `superset/superset/dashboards/api.py:1559–1567,1624–71`: both views
construct a `flask.Response(FileWrapper(image), mimetype="image/png",
direct_passthrough=True)` and do not call `response.add_etag()`, `make_conditional()`, or
use the `etag_cache` decorator from `superset/superset/utils/cache.py:170–272`.

3. Search the backend for conditional request handling and observe that
`superset/superset/utils/cache.py:181–188,245–272` implements ETag and `If-None-Match`
handling via `etag_cache`, and `superset/superset/views/core.py:86,290` applies this
decorator to `explore_json`, but `etag_cache` is never applied to the thumbnail/screenshot
endpoints; additionally, Grep for `"If-None-Match"` under `superset/**/*.py` returns no
matches, confirming the handlers do not inspect that header.

4. Run Superset and request a cached thumbnail URL (e.g., the `thumbnail_url` from
`tests/integration_tests/thumbnails_tests.py:220–223` for dashboards or 237–240 for
charts); inspect the HTTP response and observe that no `ETag` header is present, and that
repeating the request with an `If-None-Match: "abc123..."` header still returns `200 OK`
with the image body instead of `304 Not Modified`, demonstrating that the documented
conditional ETag behavior is not implemented for these endpoints.

Fix in Cursor | Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** docs/admin_docs/configuration/cache.mdx
**Line:** 164:164
**Comment:**
	*Possible Bug: This statement over-promises behavior that is not implemented in the current thumbnail/screenshot handlers (they don't set `ETag` headers or perform `If-None-Match` conditional handling). Reword to avoid documenting unsupported caching semantics.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Thumbnail and screenshot endpoints return `ETag` response headers based on the cached content digest. Clients can use conditional requests to avoid downloading unchanged images:

```
GET /api/v1/chart/42/thumbnail/
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: The example request path is incorrect because the chart thumbnail API requires a digest path segment (/<pk>/thumbnail/<digest>/). Using the documented URL without digest will not hit the intended endpoint, so readers won't be able to reproduce conditional requests correctly. [logic error]

Severity Level: Major ⚠️
- ❌ Thumbnail API docs show URL that always 404s.
- ⚠️ Integrators copying example cannot fetch chart thumbnails.
Suggested change
GET /api/v1/chart/42/thumbnail/
GET /api/v1/chart/42/thumbnail/<digest>/
Steps of Reproduction ✅
1. Open `docs/admin_docs/configuration/cache.mdx` and locate the thumbnail example at
lines 162–171 (from Grep: lines 162–172), which documents `GET
/api/v1/chart/42/thumbnail/` as the chart thumbnail endpoint used for ETag-based
conditional requests.

2. Inspect the actual chart thumbnail route in `superset/superset/charts/api.py:729–733`,
where the endpoint is defined as `@expose("/<pk>/thumbnail/<digest>/", methods=("GET",))`
and the view `thumbnail(self, pk: int, digest: str, **kwargs)` requires a `digest` path
parameter.

3. Inspect how thumbnail URLs are generated in `superset/superset/models/slice.py:247`,
which returns `f"/api/v1/chart/{self.id}/thumbnail/{digest}/"`, and see this same URL
shape exercised in `tests/integration_tests/thumbnails_tests.py:237–240` where
`thumbnail_url` (including the digest) is fetched and expected to return `200`.

4. Run Superset with thumbnails enabled and issue `GET /api/v1/chart/42/thumbnail/`
(missing digest): because no route is defined for `/api/v1/chart/<pk>/thumbnail/` (only
`/api/v1/chart/<pk>/thumbnail/<digest>/` exists), Flask will return `404 Not Found`, so a
reader following the documented example cannot reproduce the described conditional request
behavior until they add the missing `<digest>` segment.

Fix in Cursor | Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** docs/admin_docs/configuration/cache.mdx
**Line:** 167:167
**Comment:**
	*Logic Error: The example request path is incorrect because the chart thumbnail API requires a `digest` path segment (`/<pk>/thumbnail/<digest>/`). Using the documented URL without `digest` will not hit the intended endpoint, so readers won't be able to reproduce conditional requests correctly.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.
👍 | 👎

Comment on lines +164 to +172
Thumbnail and screenshot endpoints return `ETag` response headers based on the cached content digest. Clients can use conditional requests to avoid downloading unchanged images:

```
GET /api/v1/chart/42/thumbnail/
If-None-Match: "abc123..."

→ 304 Not Modified (if unchanged)
→ 200 OK (with new image if changed)
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟠 Architect Review — HIGH

The ETag example for thumbnails uses a non-existent endpoint (GET /api/v1/chart/42/thumbnail/), while the actual API requires a digest segment (/api/v1/chart/{id}/thumbnail/{digest}/) and is typically accessed via the image_url returned from the screenshot/thumbnail caching APIs. This incorrect path and implied flow will lead clients following the docs to 404s.

Suggestion: Update the example to use the correct digest-based endpoint shape (e.g. GET /api/v1/chart/42/thumbnail/{digest}/) and clarify that clients should first obtain the image_url (including the digest) from the screenshot/thumbnail caching APIs, then issue conditional GETs with If-None-Match against that URL.

Fix in Cursor | Fix in VSCode Claude

(Use Cmd/Ctrl + Click for best experience)

Prompt for AI Agent 🤖
This is a comment left during a code review.

**Path:** docs/admin_docs/configuration/cache.mdx
**Line:** 164:172
**Comment:**
	*HIGH: The ETag example for thumbnails uses a non-existent endpoint (`GET /api/v1/chart/42/thumbnail/`), while the actual API requires a digest segment (`/api/v1/chart/{id}/thumbnail/{digest}/`) and is typically accessed via the `image_url` returned from the screenshot/thumbnail caching APIs. This incorrect path and implied flow will lead clients following the docs to 404s.

Validate the correctness of the flagged issue. If correct, How can I resolve this? If you propose a fix, implement it and please make it concise.

Copy link
Copy Markdown
Contributor

@bito-code-review bito-code-review Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review Agent Run #d696cc

Actionable Suggestions - 1
  • docs/admin_docs/configuration/cache.mdx - 1
Review Details
  • Files reviewed - 5 · Commit Range: 7642d85..9d9f27d
    • docs/admin_docs/configuration/cache.mdx
    • docs/admin_docs/configuration/configuring-superset.mdx
    • docs/admin_docs/configuration/theming.mdx
    • docs/docs/using-superset/creating-your-first-dashboard.mdx
    • docs/docs/using-superset/exploring-data.mdx
  • Files skipped - 0
  • Tools
    • Whispers (Secret Scanner) - ✔︎ Successful
    • Detect-secrets (Secret Scanner) - ✔︎ Successful

Bito Usage Guide

Commands

Type the following command in the pull request comment and save the comment.

  • /review - Manually triggers a full AI review.

  • /pause - Pauses automatic reviews on this pull request.

  • /resume - Resumes automatic reviews.

  • /resolve - Marks all Bito-posted review comments as resolved.

  • /abort - Cancels all in-progress reviews.

Refer to the documentation for additional commands.

Configuration

This repository uses Superset You can customize the agent settings here or contact your Bito workspace admin at evan@preset.io.

Documentation & Help

AI Code Review powered by Bito Logo

Comment on lines +162 to +174
## ETag Support for Thumbnails

Thumbnail and screenshot endpoints return `ETag` response headers based on the cached content digest. Clients can use conditional requests to avoid downloading unchanged images:

```
GET /api/v1/chart/42/thumbnail/
If-None-Match: "abc123..."

→ 304 Not Modified (if unchanged)
→ 200 OK (with new image if changed)
```

This is particularly useful for embedded dashboards and external integrations that periodically poll for updated screenshots — unchanged thumbnails return immediately with no payload.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Incorrect API documentation

The documentation claims that thumbnail and screenshot endpoints return ETag headers for conditional requests, but the actual endpoints in charts/api.py and dashboards/api.py do not use the etag_cache decorator or add ETag headers. Additionally, the example URL /api/v1/chart/42/thumbnail/ is missing the required parameter; the actual endpoint is /api/v1/chart/42/thumbnail//. This could mislead users expecting ETag functionality that isn't implemented.

Code Review Run #d696cc


Should Bito avoid suggestions like this for future reviews? (Manage Rules)

  • Yes, avoid them

@rusackas rusackas marked this pull request as draft April 19, 2026 19:30
@michael-s-molina michael-s-molina marked this pull request as ready for review April 29, 2026 14:22
@michael-s-molina michael-s-molina merged commit 979f60a into master Apr 29, 2026
65 checks passed
@michael-s-molina michael-s-molina deleted the docs/superset-6.1-catchup-4 branch April 29, 2026 18:26
michael-s-molina added a commit that referenced this pull request Apr 29, 2026
Co-authored-by: Superset Dev <dev@superset.apache.org>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
(cherry picked from commit 979f60a)
@bito-code-review
Copy link
Copy Markdown
Contributor

Bito Automatic Review Skipped – PR Already Merged

Bito scheduled an automatic review for this pull request, but the review was skipped because this PR was merged before the review could be run.
No action is needed if you didn't intend to review it. To get a review, you can type /review in a comment and save it

bestlong pushed a commit to bestlong/superset that referenced this pull request May 7, 2026
Co-authored-by: Superset Dev <dev@superset.apache.org>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

doc Namespace | Anything related to documentation size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants