You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by jl...@apache.org on 2026/06/02 21:21:19 UTC
(superset) branch claude/subdirectory-helpers-tdd updated (1d69cd9f0bd -> 3dae9d857ac)
This is an automated email from the ASF dual-hosted git repository.
sadpandajoe pushed a change to branch claude/subdirectory-helpers-tdd
in repository https://gitbox.apache.org/repos/asf/superset.git
from 1d69cd9f0bd Merge remote-tracking branch 'origin/master' into claude/subdirectory-helpers-tdd
add 616c2432780 fix(deps): revert joserfc JWT error migration — fastmcp still uses authlib (#40688)
add 49f3dbba733 fix(dashboard): address post-approval review feedback on #40528 (#40685)
add 8508af3201c chore(key_value): prune expired entries from the key-value store (#40663)
add a9df2c7e5ea fix(mcp): address post-approval review feedback on auth logging PR #40646 (#40684)
add 3e589436fa6 fix(reports): sanitize error text in email notification template (#40641)
add 6eaee211aad fix(sqllab): require dataset match for raw query access (#40409)
add 17d1a45bc94 feat(ydb): switch to native YDB sqlglot dialect (#40170)
new 3dae9d857ac Merge remote-tracking branch 'origin/master' into claude/subdirectory-helpers-tdd
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
SECURITY.md | 2 +-
UPDATING.md | 4 +
pyproject.toml | 3 +-
requirements/development.txt | 3 -
.../dashboard/components/PropertiesModal/index.tsx | 4 +-
.../components/PropertiesModal/utils.test.ts | 22 +-
.../dashboard/components/PropertiesModal/utils.ts | 4 +-
superset/config.py | 7 +
superset/daos/key_value.py | 32 +++
superset/db_engine_specs/ydb.py | 2 +-
superset/extensions/metadb.py | 11 +-
.../key_value/commands}/__init__.py | 0
superset/key_value/commands/prune.py | 143 ++++++++++++
superset/mcp_service/chart/validation/pipeline.py | 6 +-
superset/mcp_service/jwt_verifier.py | 10 +-
superset/models/sql_lab.py | 10 +-
superset/reports/notifications/email.py | 8 +-
superset/security/manager.py | 128 +++++++++--
superset/sql/parse.py | 26 ++-
superset/sqllab/validators.py | 6 +-
superset/tasks/scheduler.py | 16 ++
tests/integration_tests/security_tests.py | 250 +++++++++++++++++++++
tests/integration_tests/sqllab_tests.py | 34 +--
tests/unit_tests/key_value/prune_test.py | 168 ++++++++++++++
tests/unit_tests/mcp_service/test_jwt_verifier.py | 6 +-
.../reports/notifications/email_tests.py | 35 +++
tests/unit_tests/sql/parse_tests.py | 24 ++
27 files changed, 896 insertions(+), 68 deletions(-)
copy {superset-core/src/superset_core/common => superset/key_value/commands}/__init__.py (100%)
create mode 100644 superset/key_value/commands/prune.py
create mode 100644 tests/unit_tests/key_value/prune_test.py
(superset) 01/01: Merge remote-tracking branch 'origin/master' into claude/subdirectory-helpers-tdd
Posted by jl...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
sadpandajoe pushed a commit to branch claude/subdirectory-helpers-tdd
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 3dae9d857ac5acb449664ec73d48c2daf80866d6
Merge: 1d69cd9f0bd 17d1a45bc94
Author: Joe Li <jo...@preset.io>
AuthorDate: Tue Jun 2 14:21:07 2026 -0700
Merge remote-tracking branch 'origin/master' into claude/subdirectory-helpers-tdd
Single conflict on UPDATING.md "## Next" section — both branches added
new entries at the top. Kept both: HEAD's five subdirectory/route-base
bullets, followed by master's YDB sqlglot dialect heading.
Co-Authored-By: Claude Opus 4.7 (1M context) <no...@anthropic.com>
SECURITY.md | 2 +-
UPDATING.md | 4 +
pyproject.toml | 3 +-
requirements/development.txt | 3 -
.../dashboard/components/PropertiesModal/index.tsx | 4 +-
.../components/PropertiesModal/utils.test.ts | 22 +-
.../dashboard/components/PropertiesModal/utils.ts | 4 +-
superset/config.py | 7 +
superset/daos/key_value.py | 32 +++
superset/db_engine_specs/ydb.py | 2 +-
superset/extensions/metadb.py | 11 +-
.../commands/__init__.py} | 17 --
superset/key_value/commands/prune.py | 143 ++++++++++++
superset/mcp_service/chart/validation/pipeline.py | 6 +-
superset/mcp_service/jwt_verifier.py | 10 +-
superset/models/sql_lab.py | 10 +-
superset/reports/notifications/email.py | 8 +-
superset/security/manager.py | 128 +++++++++--
superset/sql/parse.py | 26 ++-
superset/sqllab/validators.py | 6 +-
superset/tasks/scheduler.py | 16 ++
tests/integration_tests/security_tests.py | 250 +++++++++++++++++++++
tests/integration_tests/sqllab_tests.py | 34 +--
tests/unit_tests/key_value/prune_test.py | 168 ++++++++++++++
tests/unit_tests/mcp_service/test_jwt_verifier.py | 6 +-
.../reports/notifications/email_tests.py | 35 +++
tests/unit_tests/sql/parse_tests.py | 24 ++
27 files changed, 896 insertions(+), 85 deletions(-)
diff --cc UPDATING.md
index e14bc6f02df,f5ee4f80c34..1db88630034
--- a/UPDATING.md
+++ b/UPDATING.md
@@@ -24,18 -24,10 +24,22 @@@ assists people when migrating to a new
## Next
+- [39925](https://github.com/apache/superset/pull/39925): URL prefixing for `SUPERSET_APP_ROOT` subdirectory deployments is now handled automatically by helpers in `src/utils/navigationUtils` (`openInNewTab`, `redirect`, `getShareableUrl`, `<AppLink>`). Direct imports of `ensureAppRoot` / `makeUrl` from `src/utils/pathUtils` are forbidden outside `navigationUtils.ts` (enforced by a static-invariant test); contributors writing new code should use the focused helpers instead. No runtime b [...]
+
+- **Breaking — `Superset` view class route prefix removed.** The `Superset` view in `superset/views/core.py` now declares `route_base = ""`, overriding Flask-AppBuilder's auto-derived `/superset` prefix. Routes that previously lived at `/superset/welcome/`, `/superset/dashboard/<id>/`, `/superset/dashboard/p/<key>/`, `/superset/explore/`, etc. now respond at `/welcome/`, `/dashboard/<id>/`, `/dashboard/p/<key>/`, `/explore/`, etc. Under subdirectory deployment (`SUPERSET_APP_ROOT=/super [...]
+
+- **Breaking — Three sibling view classes route prefix removed.** Following the same rationale as the `Superset` class above, `ExplorePermalinkView` (`superset/views/explore.py`), `TagModelView`, and `TaggedObjectsModelView` (`superset/views/tags.py`, `superset/views/all_entities.py`) now mount at the application root rather than a hard-coded `/superset/...`. The user-visible URLs `/superset/explore/p/<key>/`, `/superset/tags/`, and `/superset/all_entities/` are unchanged under subdirec [...]
+
+- **Legacy `/superset/*` path support.** A new outermost WSGI middleware `LegacyPrefixRedirectMiddleware` (`superset/middleware/legacy_prefix_redirect.py`) 308-redirects every enumerated legacy `/superset/<canonical>` path to its post-`route_base=""` canonical location (e.g. `/superset/welcome/` → `/welcome/` under root; → `/superset/welcome/` under `SUPERSET_APP_ROOT=/superset`, because the canonical resolves through `AppRootMiddleware`). Bookmarks, email links, and external integratio [...]
+
+- **Hard re-bookmark break — `/superset/sql/<database_id>/`.** SQL Lab moved to its own blueprint at `/sqllab/`. The legacy `/superset/sql/<id>/` shape changed to a query-string form (`/sqllab/?dbid=<id>`); no 1:1 path mapping exists, so `LegacyPrefixRedirectMiddleware` does **not** redirect this route — it passes through and surfaces a 404. Users with bookmarks to `/superset/sql/<id>/` must update them to `/sqllab/?dbid=<id>`.
+
+- **`SqlaTable.sql_url` query-string format.** `SqlaTable.sql_url` now URL-encodes `table_name` and joins it as a query parameter rather than concatenating a second `?`. Previously, with `Database.sql_url` returning `/sqllab/?dbid=<id>`, the concatenation produced `/sqllab/?dbid=<id>?table_name=<raw>` — a malformed second `?` that broke the query parser. External code that parsed the legacy `<base>?table_name=<raw>` shape now sees properly percent-encoded values (e.g. `/` → `%2F`, ` ` → [...]
+
+ ### YDB now uses a native sqlglot dialect
+
+ YDB SQL parsing now relies on the dedicated [`ydb-sqlglot-plugin`](https://pypi.org/project/ydb-sqlglot-plugin/) dialect, which registers itself with sqlglot automatically. YDB users must install this plugin (e.g., via `pip install "apache-superset[ydb]"`) to avoid a `ValueError` when Superset parses YDB queries.
+
### Dataset import validates catalog against the target connection
Importing a dataset now validates the `catalog` field against the target database connection. When the connection has multi-catalog disabled (`allow_multi_catalog` off) and the dataset's catalog is not the connection's default catalog, the import fails instead of silently persisting the non-default catalog. This matches the validation already enforced on the dataset update path and prevents imported datasets from querying an unintended database.