You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by "Vitor-Avila (via GitHub)" <gi...@apache.org> on 2026/04/30 17:20:26 UTC

[PR] fix(GSheets OAuth2): Re-add UnauthenticatedError [superset]

Vitor-Avila opened a new pull request, #39785:
URL: https://github.com/apache/superset/pull/39785

   ### SUMMARY
   I mistakenly removed this with https://github.com/apache/superset/pull/39499. This is still needed to properly start the OAuth2 dance when this error is raised from Shillelagh.
   
   ### BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF
   No UI changes. Charts powered by GSheets OAuth2 properly prompt users to start the OAuth2 dance when needed.
   
   ### TESTING INSTRUCTIONS
   1. Set up a GSheets OAuth connection.
   2. Get an OAuth token.
   3. Create a chart.
   4. Access this chart using another account that doesn't have an OAuth2 token yet.
   5. Validate the user is prompted to get a token. 
   
   ### ADDITIONAL INFORMATION
   <!--- Check any relevant boxes with "x" -->
   <!--- HINT: Include "Fixes #nnn" if you are fixing an existing issue -->
   - [ ] Has associated issue:
   - [ ] Required feature flags:
   - [ ] Changes UI
   - [ ] Includes DB Migration (follow approval process in [SIP-59](https://github.com/apache/superset/issues/13351))
     - [ ] Migration is atomic, supports rollback & is backwards-compatible
     - [ ] Confirm DB migration upgrade and downgrade tested
     - [ ] Runtime estimates and downtime expectations provided
   - [ ] Introduces new feature or API
   - [ ] Removes existing feature or API
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [PR] fix(GSheets OAuth2): Re-add UnauthenticatedError [superset]

Posted by "bito-code-review[bot] (via GitHub)" <gi...@apache.org>.
bito-code-review[bot] commented on PR #39785:
URL: https://github.com/apache/superset/pull/39785#issuecomment-4357952463

   **Bito Automatic Review Skipped – PR Already Merged**<br/><br/>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.<br/>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


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [PR] fix(GSheets OAuth2): Re-add UnauthenticatedError [superset]

Posted by "codeant-ai-for-open-source[bot] (via GitHub)" <gi...@apache.org>.
codeant-ai-for-open-source[bot] commented on code in PR #39785:
URL: https://github.com/apache/superset/pull/39785#discussion_r3169699926


##########
superset/db_engine_specs/gsheets.py:
##########
@@ -151,6 +152,7 @@ class GSheetsEngineSpec(ShillelaghEngineSpec):
         "https://accounts.google.com/o/oauth2/v2/auth"
     )
     oauth2_token_request_uri = "https://oauth2.googleapis.com/token"  # noqa: S105
+    oauth2_exception = UnauthenticatedError

Review Comment:
   **Suggestion:** Setting `oauth2_exception` to only `UnauthenticatedError` breaks the existing OAuth2 refresh flow contract: `get_oauth2_fresh_token` raises `OAuth2TokenRefreshError`, but `refresh_oauth2_token` and `needs_oauth2` now won't treat that as an OAuth2-triggering exception for GSheets. This can prevent token cleanup and prevent starting the OAuth2 dance after refresh-token failures. Keep `UnauthenticatedError` support without dropping the existing OAuth2 exception type(s), e.g. by matching both exception families. [logic error]
   
   <details>
   <summary><b>Severity Level:</b> Critical 🚨</summary>
   
   ```mdx
   - ❌ GSheets OAuth2 refresh failures never trigger re-auth flow.
   - ❌ Invalid refresh tokens persist, causing repeated query failures.
   - ⚠️ Dashboards using GSheets data break until token reset.
   ```
   </details>
   <details>
   <summary><b>Steps of Reproduction ✅ </b></summary>
   
   ```mdx
   1. Configure a Google Sheets database using `GSheetsEngineSpec` (engine `"gsheets"` in
   `superset/db_engine_specs/gsheets.py:100-105`), with OAuth2 enabled so that
   `supports_oauth2 = True` and `oauth2_token_request_uri` are used (`gsheets.py:29-35`).
   
   2. Authenticate as a user so that a `DatabaseUserOAuth2Tokens` row is created with
   `access_token` and `refresh_token` (queried in `get_oauth2_access_token` at
   `superset/utils/oauth2.py:88-119`). Let the access token expire and revoke or invalidate
   the refresh token on the Google side so the next refresh attempt returns HTTP 400/401/403.
   
   3. As that user, load any chart using this GSheets database (query execution uses
   `Database._get_sqla_engine` at `superset/models/core.py:50-52`, which is wrapped in
   `check_for_oauth2(self)` from `superset/utils/oauth2.py:13-22` and calls
   `get_oauth2_access_token` at `models/core.py:513-520`).
   
   4. In `get_oauth2_access_token`, because the access token is expired and
   `token.refresh_token` is set, it calls `refresh_oauth2_token(config, database_id, user_id,
   db_engine_spec, token)` (`superset/utils/oauth2.py:118-119`, `127-133`) with
   `db_engine_spec` being `GSheetsEngineSpec`.
   
   5. `refresh_oauth2_token` calls `db_engine_spec.get_oauth2_fresh_token`
   (`utils/oauth2.py:142-145`), which is `BaseEngineSpec.get_oauth2_fresh_token`
   (`superset/db_engine_specs/base.py:814-838`). When Google returns 400/401/403, this raises
   `OAuth2TokenRefreshError` (`base.py:835-836`, class defined as subclass of
   `OAuth2RedirectError` in `superset/exceptions.py:371-377`).
   
   6. Because `GSheetsEngineSpec` sets `oauth2_exception = UnauthenticatedError`
   (`superset/db_engine_specs/gsheets.py:155`), the `except db_engine_spec.oauth2_exception
   as ex:` block in `refresh_oauth2_token` (`superset/utils/oauth2.py:146-153`) does NOT
   match `OAuth2TokenRefreshError`. Execution instead falls through to the generic `except
   Exception:` block (`utils/oauth2.py:158-56`), which logs but does NOT delete the invalid
   token from the database, and re-raises the exception.
   
   7. The `OAuth2TokenRefreshError` propagates back up to the `check_for_oauth2` context
   manager (`superset/utils/oauth2.py:13-22`), which calls
   `database.db_engine_spec.needs_oauth2(ex)`. In `GSheetsEngineSpec.needs_oauth2`
   (`superset/db_engine_specs/gsheets.py:196-213`), the check `isinstance(ex,
   cls.oauth2_exception)` fails because `cls.oauth2_exception` is `UnauthenticatedError`, and
   the error message `"OAuth2 token refresh failed, re-authentication required."` from
   `OAuth2TokenRefreshError.__init__` (`superset/exceptions.py:21-29`) does not match the
   string conditions checked in lines `gsheets.py:34-36`. `needs_oauth2` returns `False`, so
   `check_for_oauth2` does not call `start_oauth2_dance` and simply re-raises the exception.
   
   8. The user sees a query failure instead of an OAuth2 prompt, the invalid refresh token
   remains in `DatabaseUserOAuth2Tokens`, and every subsequent attempt to use the
   GSheets-backed chart repeats the same failure loop without cleaning up the token or
   restarting the OAuth2 flow.
   ```
   </details>
   
   [Fix in Cursor](https://app.codeant.ai/fix-in-ide?tool=cursor&prompt=This%20is%20a%20comment%20left%20during%20a%20code%20review.%0A%0A%2A%2APath%3A%2A%2A%20superset%2Fdb_engine_specs%2Fgsheets.py%0A%2A%2ALine%3A%2A%2A%20155%3A155%0A%2A%2AComment%3A%2A%2A%0A%09%2ALogic%20Error%3A%20Setting%20%60oauth2_exception%60%20to%20only%20%60UnauthenticatedError%60%20breaks%20the%20existing%20OAuth2%20refresh%20flow%20contract%3A%20%60get_oauth2_fresh_token%60%20raises%20%60OAuth2TokenRefreshError%60%2C%20but%20%60refresh_oauth2_token%60%20and%20%60needs_oauth2%60%20now%20won%27t%20treat%20that%20as%20an%20OAuth2-triggering%20exception%20for%20GSheets.%20This%20can%20prevent%20token%20cleanup%20and%20prevent%20starting%20the%20OAuth2%20dance%20after%20refresh-token%20failures.%20Keep%20%60UnauthenticatedError%60%20support%20without%20dropping%20the%20existing%20OAuth2%20exception%20type%28s%29%2C%20e.g.%20by%20matching%20both%20exception%20families.%0A%0AValidate%20the%20correctness%20of%20t
 he%20flagged%20issue.%20If%20correct%2C%20How%20can%20I%20resolve%20this%3F%20If%20you%20propose%20a%20fix%2C%20implement%20it%20and%20please%20make%20it%20concise.%0AOnce%20fix%20is%20implemented%2C%20also%20check%20other%20comments%20on%20the%20same%20PR%2C%20and%20ask%20user%20if%20the%20user%20wants%20to%20fix%20the%20rest%20of%20the%20comments%20as%20well.%20if%20said%20yes%2C%20then%20fetch%20all%20the%20comments%20validate%20the%20correctness%20and%20implement%20a%20minimal%20fix%0A) | [Fix in VSCode Claude](https://app.codeant.ai/fix-in-ide?tool=vscode-claude&prompt=This%20is%20a%20comment%20left%20during%20a%20code%20review.%0A%0A%2A%2APath%3A%2A%2A%20superset%2Fdb_engine_specs%2Fgsheets.py%0A%2A%2ALine%3A%2A%2A%20155%3A155%0A%2A%2AComment%3A%2A%2A%0A%09%2ALogic%20Error%3A%20Setting%20%60oauth2_exception%60%20to%20only%20%60UnauthenticatedError%60%20breaks%20the%20existing%20OAuth2%20refresh%20flow%20contract%3A%20%60get_oauth2_fresh_token%60%20raises%20%60OAuth2TokenRefres
 hError%60%2C%20but%20%60refresh_oauth2_token%60%20and%20%60needs_oauth2%60%20now%20won%27t%20treat%20that%20as%20an%20OAuth2-triggering%20exception%20for%20GSheets.%20This%20can%20prevent%20token%20cleanup%20and%20prevent%20starting%20the%20OAuth2%20dance%20after%20refresh-token%20failures.%20Keep%20%60UnauthenticatedError%60%20support%20without%20dropping%20the%20existing%20OAuth2%20exception%20type%28s%29%2C%20e.g.%20by%20matching%20both%20exception%20families.%0A%0AValidate%20the%20correctness%20of%20the%20flagged%20issue.%20If%20correct%2C%20How%20can%20I%20resolve%20this%3F%20If%20you%20propose%20a%20fix%2C%20implement%20it%20and%20please%20make%20it%20concise.%0AOnce%20fix%20is%20implemented%2C%20also%20check%20other%20comments%20on%20the%20same%20PR%2C%20and%20ask%20user%20if%20the%20user%20wants%20to%20fix%20the%20rest%20of%20the%20comments%20as%20well.%20if%20said%20yes%2C%20then%20fetch%20all%20the%20comments%20validate%20the%20correctness%20and%20implement%20a%20minimal%2
 0fix%0A)
   
   *(Use Cmd/Ctrl + Click for best experience)*
   <details>
   <summary><b>Prompt for AI Agent 🤖 </b></summary>
   
   ```mdx
   This is a comment left during a code review.
   
   **Path:** superset/db_engine_specs/gsheets.py
   **Line:** 155:155
   **Comment:**
   	*Logic Error: Setting `oauth2_exception` to only `UnauthenticatedError` breaks the existing OAuth2 refresh flow contract: `get_oauth2_fresh_token` raises `OAuth2TokenRefreshError`, but `refresh_oauth2_token` and `needs_oauth2` now won't treat that as an OAuth2-triggering exception for GSheets. This can prevent token cleanup and prevent starting the OAuth2 dance after refresh-token failures. Keep `UnauthenticatedError` support without dropping the existing OAuth2 exception type(s), e.g. by matching both exception families.
   
   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.
   Once fix is implemented, also check other comments on the same PR, and ask user if the user wants to fix the rest of the comments as well. if said yes, then fetch all the comments validate the correctness and implement a minimal fix
   ```
   </details>
   <a href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39785&comment_hash=06325fe8bdcbd2aa32a2e158473d9eedad7b0e4dd06da77ab5bcfc3bb4018d77&reaction=like'>👍</a> | <a href='https://app.codeant.ai/feedback?pr_url=https%3A%2F%2Fgithub.com%2Fapache%2Fsuperset%2Fpull%2F39785&comment_hash=06325fe8bdcbd2aa32a2e158473d9eedad7b0e4dd06da77ab5bcfc3bb4018d77&reaction=dislike'>👎</a>



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [PR] fix(GSheets OAuth2): Re-add UnauthenticatedError [superset]

Posted by "codecov[bot] (via GitHub)" <gi...@apache.org>.
codecov[bot] commented on PR #39785:
URL: https://github.com/apache/superset/pull/39785#issuecomment-4354640717

   ## [Codecov](https://app.codecov.io/gh/apache/superset/pull/39785?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
   :white_check_mark: All modified and coverable lines are covered by tests.
   :white_check_mark: Project coverage is 55.37%. Comparing base ([`7c4f876`](https://app.codecov.io/gh/apache/superset/commit/7c4f87615b76cea88ef4116157dd06be099f45f3?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`b1be68f`](https://app.codecov.io/gh/apache/superset/commit/b1be68fffba094ae45762060fa5c210cdc0a36b9?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   :warning: Report is 103 commits behind head on master.
   > :exclamation:  There is a different number of reports uploaded between BASE (7c4f876) and HEAD (b1be68f). Click for more details.
   > 
   > <details><summary>HEAD has 191 uploads less than BASE</summary>
   >
   >| Flag | BASE (7c4f876) | HEAD (b1be68f) |
   >|------|------|------|
   >|python|161|2|
   >|presto|17|1|
   >|hive|17|1|
   ></details>
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   ```diff
   @@            Coverage Diff             @@
   ##           master   #39785      +/-   ##
   ==========================================
   - Coverage   64.54%   55.37%   -9.17%     
   ==========================================
     Files        2565     2567       +2     
     Lines      133665   134358     +693     
     Branches    31056    31176     +120     
   ==========================================
   - Hits        86269    74397   -11872     
   - Misses      45904    59305   +13401     
   + Partials     1492      656     -836     
   ```
   
   | [Flag](https://app.codecov.io/gh/apache/superset/pull/39785/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
   |---|---|---|
   | [hive](https://app.codecov.io/gh/apache/superset/pull/39785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `39.70% <100.00%> (-0.13%)` | :arrow_down: |
   | [mysql](https://app.codecov.io/gh/apache/superset/pull/39785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [postgres](https://app.codecov.io/gh/apache/superset/pull/39785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [presto](https://app.codecov.io/gh/apache/superset/pull/39785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `41.46% <100.00%> (-0.15%)` | :arrow_down: |
   | [python](https://app.codecov.io/gh/apache/superset/pull/39785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `41.53% <100.00%> (-20.48%)` | :arrow_down: |
   | [sqlite](https://app.codecov.io/gh/apache/superset/pull/39785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   | [unit](https://app.codecov.io/gh/apache/superset/pull/39785/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `?` | |
   
   Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#carryforward-flags-in-the-pull-request-comment) to find out more.
   </details>
   
   [:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/apache/superset/pull/39785?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).   
   :loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
   - :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [PR] fix(GSheets OAuth2): Re-add UnauthenticatedError [superset]

Posted by "bito-code-review[bot] (via GitHub)" <gi...@apache.org>.
bito-code-review[bot] commented on PR #39785:
URL: https://github.com/apache/superset/pull/39785#issuecomment-4354615068

   AI Code Review is in progress (usually takes 3 to 15 minutes unless it's a very large PR).


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [PR] fix(GSheets OAuth2): Re-add UnauthenticatedError [superset]

Posted by "Vitor-Avila (via GitHub)" <gi...@apache.org>.
Vitor-Avila merged PR #39785:
URL: https://github.com/apache/superset/pull/39785


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [PR] fix(GSheets OAuth2): Re-add UnauthenticatedError [superset]

Posted by "bito-code-review[bot] (via GitHub)" <gi...@apache.org>.
bito-code-review[bot] commented on PR #39785:
URL: https://github.com/apache/superset/pull/39785#issuecomment-4354658380

   <!-- Bito Reply -->
   The flagged issue is correct: setting `oauth2_exception` to only `UnauthenticatedError` breaks the OAuth2 refresh flow, as `get_oauth2_fresh_token` raises `OAuth2TokenRefreshError`, which won't be caught by `refresh_oauth2_token` or recognized by `needs_oauth2`. To resolve, import `OAuth2TokenRefreshError` and set `oauth2_exception` to a tuple of both exceptions.
   
   **superset/db_engine_specs/gsheets.py**
   ```
   from shillelagh.exceptions import UnauthenticatedError
   from superset.exceptions import OAuth2TokenRefreshError
   
   class GSheetsEngineSpec(ShillelaghEngineSpec):
       # ... existing code ...
       oauth2_exception = (UnauthenticatedError, OAuth2TokenRefreshError)
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [PR] fix(GSheets OAuth2): Re-add UnauthenticatedError [superset]

Posted by "Vitor-Avila (via GitHub)" <gi...@apache.org>.
Vitor-Avila commented on code in PR #39785:
URL: https://github.com/apache/superset/pull/39785#discussion_r3170198915


##########
superset/db_engine_specs/gsheets.py:
##########
@@ -151,6 +152,7 @@ class GSheetsEngineSpec(ShillelaghEngineSpec):
         "https://accounts.google.com/o/oauth2/v2/auth"
     )
     oauth2_token_request_uri = "https://oauth2.googleapis.com/token"  # noqa: S105
+    oauth2_exception = UnauthenticatedError

Review Comment:
   Great catch! Working on a fix



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org


Re: [PR] fix(GSheets OAuth2): Re-add UnauthenticatedError [superset]

Posted by "netlify[bot] (via GitHub)" <gi...@apache.org>.
netlify[bot] commented on PR #39785:
URL: https://github.com/apache/superset/pull/39785#issuecomment-4354643146

   ### <span aria-hidden="true">✅</span> Deploy Preview for *superset-docs-preview* ready!
   
   
   |  Name | Link |
   |:-:|------------------------|
   |<span aria-hidden="true">🔨</span> Latest commit | b1be68fffba094ae45762060fa5c210cdc0a36b9 |
   |<span aria-hidden="true">🔍</span> Latest deploy log | https://app.netlify.com/projects/superset-docs-preview/deploys/69f38f5acb24280008b718bb |
   |<span aria-hidden="true">😎</span> Deploy Preview | [https://deploy-preview-39785--superset-docs-preview.netlify.app](https://deploy-preview-39785--superset-docs-preview.netlify.app) |
   |<span aria-hidden="true">📱</span> Preview on mobile | <details><summary> Toggle QR Code... </summary><br /><br />![QR Code](https://app.netlify.com/qr-code/eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1cmwiOiJodHRwczovL2RlcGxveS1wcmV2aWV3LTM5Nzg1LS1zdXBlcnNldC1kb2NzLXByZXZpZXcubmV0bGlmeS5hcHAifQ.EpowYs5BAn2EFPr3nuA0UN2nDnX7hcVEVaMXMJkm9k4)<br /><br />_Use your smartphone camera to open QR code link._</details> |
   |<span aria-hidden="true">🤖</span> Make changes | [Run an agent on this branch](https://app.netlify.com/projects/superset-docs-preview/agent-runs#q1YqKMrPLShRslJS0lFKKkrMS84AsvMTS0syjHTTMitSi4HiKakFOfmVnilAGTPLNGOLNNPE5CQjEyMLAwMDiyRzQ4ukJKVaAA) |
   ---
   <!-- [superset-docs-preview Preview](https://deploy-preview-39785--superset-docs-preview.netlify.app) -->
   _To edit notification comments on pull requests, go to your [Netlify project configuration](https://app.netlify.com/projects/superset-docs-preview/configuration/notifications#deploy-notifications)._


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org